From 3ff89431665d6460b6889e96db78099be4525a85 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Wed, 10 Mar 2021 01:25:03 -0500 Subject: [PATCH 01/93] Lexing and parsing, falta correr sendos tests --- 1st.txt | 1 + LICENSE | 42 +- Readme.md | 344 +++--- doc/Readme.md | 66 +- doc/team.yml | 17 +- requirements.txt | 4 +- src/Readme.md | 156 +-- src/__init__.py | 0 src/c_parser/parser.py | 267 ++++ src/c_parser/parsetab.py | 83 ++ src/cool_ast/cool_ast.py | 136 +++ src/coolc.sh | 22 +- src/lexer/lexer.py | 196 +++ src/main.py | 13 + src/makefile | 24 +- src/parsetab.py | 83 ++ src/utils/errors.py | 1 + tests/codegen/arith.cl | 860 ++++++------- tests/codegen/arith_input.txt | 26 +- tests/codegen/arith_output.txt | 316 ++--- tests/codegen/atoi_output.txt | 2 +- tests/codegen/book_list.cl | 264 ++-- tests/codegen/book_list_output.txt | 14 +- tests/codegen/cells.cl | 194 +-- tests/codegen/cells_output.txt | 42 +- tests/codegen/complex.cl | 104 +- tests/codegen/complex_output.txt | 2 +- tests/codegen/fib.cl | 58 +- tests/codegen/fib_input.txt | 2 +- tests/codegen/fib_output.txt | 4 +- tests/codegen/graph.cl | 762 ++++++------ tests/codegen/graph_input.txt | 10 +- tests/codegen/graph_output.txt | 14 +- tests/codegen/hairyscary.cl | 134 +- tests/codegen/hello_world.cl | 10 +- tests/codegen/hello_world_output.txt | 2 +- tests/codegen/io.cl | 206 ++-- tests/codegen/io_output.txt | 10 +- tests/codegen/life.cl | 872 ++++++------- tests/codegen/life_input.txt | 130 +- tests/codegen/life_output.txt | 1554 ++++++++++++------------ tests/codegen/list_output.txt | 10 +- tests/codegen/new_complex.cl | 158 +-- tests/codegen/new_complex_output.txt | 4 +- tests/codegen/palindrome.cl | 50 +- tests/codegen/palindrome_input.txt | 2 +- tests/codegen/palindrome_output.txt | 4 +- tests/codegen/primes_output.txt | 192 +-- tests/codegen/print-cool_output.txt | 2 +- tests/codegen/sort-list_input.txt | 2 +- tests/codegen/sort-list_output.txt | 20 +- tests/codegen_test.py | 32 +- tests/conftest.py | 10 +- tests/lexer/comment1.cl | 108 +- tests/lexer/comment1_error.txt | 2 +- tests/lexer/iis1.cl | 220 ++-- tests/lexer/iis1_error.txt | 2 +- tests/lexer/iis2.cl | 238 ++-- tests/lexer/iis2_error.txt | 2 +- tests/lexer/iis3.cl | 240 ++-- tests/lexer/iis3_error.txt | 2 +- tests/lexer/iis4.cl | 238 ++-- tests/lexer/iis4_error.txt | 2 +- tests/lexer/iis5.cl | 242 ++-- tests/lexer/iis5_error.txt | 4 +- tests/lexer/iis6.cl | 248 ++-- tests/lexer/iis6_error.txt | 2 +- tests/lexer/mixed1.cl | 26 +- tests/lexer/mixed1_error.txt | 2 +- tests/lexer/mixed2.cl | 38 +- tests/lexer/mixed2_error.txt | 6 +- tests/lexer/string1.cl | 10 +- tests/lexer/string1_error.txt | 2 +- tests/lexer/string2.cl | 36 +- tests/lexer/string4.cl | 74 +- tests/lexer/string4_error.txt | 4 +- tests/lexer_test.py | 24 +- tests/parser/assignment1.cl | 72 +- tests/parser/assignment2.cl | 72 +- tests/parser/assignment3.cl | 72 +- tests/parser/attribute1.cl | 66 +- tests/parser/attribute2.cl | 66 +- tests/parser/attribute3.cl | 66 +- tests/parser/block1.cl | 172 +-- tests/parser/block2.cl | 172 +-- tests/parser/block3.cl | 172 +-- tests/parser/block4.cl | 174 +-- tests/parser/case1.cl | 180 +-- tests/parser/case2.cl | 184 +-- tests/parser/case3.cl | 184 +-- tests/parser/case4.cl | 184 +-- tests/parser/case5.cl | 184 +-- tests/parser/case6.cl | 184 +-- tests/parser/class1.cl | 40 +- tests/parser/class2.cl | 40 +- tests/parser/class3.cl | 68 +- tests/parser/class4.cl | 72 +- tests/parser/class5.cl | 68 +- tests/parser/class6.cl | 68 +- tests/parser/conditional1.cl | 136 +-- tests/parser/conditional2.cl | 136 +-- tests/parser/conditional3.cl | 136 +-- tests/parser/conditional4.cl | 144 +-- tests/parser/conditional5.cl | 144 +-- tests/parser/conditional6.cl | 144 +-- tests/parser/dispatch1.cl | 88 +- tests/parser/dispatch2.cl | 88 +- tests/parser/dispatch3.cl | 88 +- tests/parser/dispatch4.cl | 104 +- tests/parser/dispatch5.cl | 104 +- tests/parser/dispatch6.cl | 112 +- tests/parser/dispatch7.cl | 112 +- tests/parser/dispatch8.cl | 112 +- tests/parser/dispatch9.cl | 120 +- tests/parser/let1.cl | 168 +-- tests/parser/let2.cl | 168 +-- tests/parser/let3.cl | 168 +-- tests/parser/let4.cl | 168 +-- tests/parser/let5.cl | 168 +-- tests/parser/let6.cl | 146 +-- tests/parser/let7.cl | 168 +-- tests/parser/loop1.cl | 154 +-- tests/parser/loop2.cl | 154 +-- tests/parser/loop3.cl | 154 +-- tests/parser/loop4.cl | 154 +-- tests/parser/method1.cl | 66 +- tests/parser/method2.cl | 66 +- tests/parser/method3.cl | 66 +- tests/parser/method4.cl | 66 +- tests/parser/method5.cl | 66 +- tests/parser/method6.cl | 64 +- tests/parser/mixed1.cl | 198 +-- tests/parser/mixed2.cl | 28 +- tests/parser/mixed3.cl | 80 +- tests/parser/mixed4.cl | 42 +- tests/parser/mixed5.cl | 40 +- tests/parser/mixed6.cl | 10 +- tests/parser/operation1.cl | 200 +-- tests/parser/operation2.cl | 200 +-- tests/parser/operation3.cl | 200 +-- tests/parser/operation4.cl | 200 +-- tests/parser/program2.cl | 40 +- tests/parser/program3.cl | 48 +- tests/parser_test.py | 24 +- tests/semantic/arithmetic1.cl | 20 +- tests/semantic/arithmetic10.cl | 28 +- tests/semantic/arithmetic11.cl | 26 +- tests/semantic/arithmetic12.cl | 26 +- tests/semantic/arithmetic1_error.txt | 2 +- tests/semantic/arithmetic2.cl | 20 +- tests/semantic/arithmetic2_error.txt | 2 +- tests/semantic/arithmetic3.cl | 20 +- tests/semantic/arithmetic3_error.txt | 2 +- tests/semantic/arithmetic4.cl | 20 +- tests/semantic/arithmetic5.cl | 20 +- tests/semantic/arithmetic5_error.txt | 2 +- tests/semantic/arithmetic6.cl | 22 +- tests/semantic/arithmetic6_error.txt | 2 +- tests/semantic/arithmetic7.cl | 24 +- tests/semantic/arithmetic7_error.txt | 2 +- tests/semantic/arithmetic8.cl | 26 +- tests/semantic/arithmetic8_error.txt | 2 +- tests/semantic/arithmetic9.cl | 28 +- tests/semantic/assignment1.cl | 14 +- tests/semantic/assignment1_error.txt | 2 +- tests/semantic/assignment2.cl | 26 +- tests/semantic/assignment2_error.txt | 2 +- tests/semantic/assignment3.cl | 28 +- tests/semantic/attributes1.cl | 24 +- tests/semantic/attributes1_error.txt | 2 +- tests/semantic/attributes2.cl | 24 +- tests/semantic/attributes2_error.txt | 2 +- tests/semantic/attributes3.cl | 48 +- tests/semantic/attributes3_error.txt | 2 +- tests/semantic/attributes4.cl | 76 +- tests/semantic/basics1.cl | 18 +- tests/semantic/basics1_error.txt | 2 +- tests/semantic/basics2.cl | 18 +- tests/semantic/basics2_error.txt | 2 +- tests/semantic/basics3.cl | 16 +- tests/semantic/basics3_error.txt | 2 +- tests/semantic/basics4.cl | 16 +- tests/semantic/basics4_error.txt | 2 +- tests/semantic/basics5.cl | 16 +- tests/semantic/basics5_error.txt | 2 +- tests/semantic/basics6.cl | 16 +- tests/semantic/basics6_error.txt | 2 +- tests/semantic/basics7.cl | 16 +- tests/semantic/basics7_error.txt | 2 +- tests/semantic/basics8.cl | 16 +- tests/semantic/basics8_error.txt | 2 +- tests/semantic/blocks1.cl | 60 +- tests/semantic/blocks1_error.txt | 2 +- tests/semantic/case1.cl | 46 +- tests/semantic/case1_error.txt | 2 +- tests/semantic/case2.cl | 44 +- tests/semantic/case3.cl | 44 +- tests/semantic/class1.cl | 16 +- tests/semantic/class1_error.txt | 4 +- tests/semantic/conditionals1.cl | 26 +- tests/semantic/conditionals1_error.txt | 2 +- tests/semantic/conditionals2.cl | 48 +- tests/semantic/conditionals2_error.txt | 4 +- tests/semantic/dispatch1.cl | 64 +- tests/semantic/dispatch1_error.txt | 2 +- tests/semantic/dispatch2.cl | 66 +- tests/semantic/dispatch2_error.txt | 2 +- tests/semantic/dispatch3.cl | 70 +- tests/semantic/dispatch3_error.txt | 2 +- tests/semantic/dispatch4.cl | 70 +- tests/semantic/dispatch5.cl | 60 +- tests/semantic/dispatch5_error.txt | 2 +- tests/semantic/dispatch6.cl | 64 +- tests/semantic/dispatch6_error.txt | 2 +- tests/semantic/eq1.cl | 32 +- tests/semantic/eq1_error.txt | 2 +- tests/semantic/eq2.cl | 34 +- tests/semantic/eq2_error.txt | 2 +- tests/semantic/eq3.cl | 34 +- tests/semantic/eq3_error.txt | 2 +- tests/semantic/eq4.cl | 34 +- tests/semantic/eq4_error.txt | 2 +- tests/semantic/features1.cl | 0 tests/semantic/features1_error.txt | 0 tests/semantic/features2.cl | 0 tests/semantic/features2_error.txt | 0 tests/semantic/features3.cl | 0 tests/semantic/features3_error.txt | 0 tests/semantic/inheritance1.cl | 0 tests/semantic/inheritance1_error.txt | 0 tests/semantic/inheritance2.cl | 0 tests/semantic/inheritance2_error.txt | 0 tests/semantic/inheritance3.cl | 0 tests/semantic/inheritance4.cl | 0 tests/semantic/inheritance5.cl | 0 tests/semantic/isvoid1.cl | 50 +- tests/semantic/isvoid1_error.txt | 2 +- tests/semantic/let1.cl | 28 +- tests/semantic/let1_error.txt | 2 +- tests/semantic/let2.cl | 28 +- tests/semantic/let2_error.txt | 2 +- tests/semantic/let3.cl | 28 +- tests/semantic/loops1.cl | 14 +- tests/semantic/loops2.cl | 18 +- tests/semantic/loops2_error.txt | 2 +- tests/semantic/methods1.cl | 22 +- tests/semantic/methods1_error.txt | 2 +- tests/semantic/methods2.cl | 22 +- tests/semantic/methods2_error.txt | 2 +- tests/semantic/methods3.cl | 26 +- tests/semantic/methods3_error.txt | 2 +- tests/semantic/methods4.cl | 36 +- tests/semantic/methods4_error.txt | 2 +- tests/semantic/methods5.cl | 40 +- tests/semantic/methods5_error.txt | 2 +- tests/semantic/methods6.cl | 52 +- tests/semantic/methods6_error.txt | 2 +- tests/semantic/methods7.cl | 22 +- tests/semantic/methods8.cl | 22 +- tests/semantic/new1.cl | 60 +- tests/semantic/self1.cl | 22 +- tests/semantic/self1_error.txt | 2 +- tests/semantic/self2.cl | 20 +- tests/semantic/self2_error.txt | 2 +- tests/semantic/self3.cl | 20 +- tests/semantic/self3_error.txt | 2 +- tests/semantic/self4.cl | 18 +- tests/semantic/self4_error.txt | 2 +- tests/semantic_test.py | 26 +- tests/utils/utils.py | 182 +-- 270 files changed, 10102 insertions(+), 9325 deletions(-) create mode 100644 1st.txt create mode 100644 src/__init__.py create mode 100644 src/c_parser/parser.py create mode 100644 src/c_parser/parsetab.py create mode 100644 src/cool_ast/cool_ast.py mode change 100755 => 100644 src/coolc.sh create mode 100755 src/lexer/lexer.py create mode 100644 src/main.py create mode 100644 src/parsetab.py create mode 100644 src/utils/errors.py mode change 100755 => 100644 tests/codegen/arith.cl mode change 100755 => 100644 tests/codegen/book_list.cl mode change 100755 => 100644 tests/codegen/cells.cl mode change 100755 => 100644 tests/codegen/complex.cl mode change 100755 => 100644 tests/codegen/graph.cl mode change 100755 => 100644 tests/codegen/hairyscary.cl mode change 100755 => 100644 tests/codegen/hello_world.cl mode change 100755 => 100644 tests/codegen/io.cl mode change 100755 => 100644 tests/codegen/life.cl mode change 100755 => 100644 tests/codegen/new_complex.cl mode change 100755 => 100644 tests/codegen/palindrome.cl mode change 100755 => 100644 tests/semantic/features1.cl mode change 100755 => 100644 tests/semantic/features1_error.txt mode change 100755 => 100644 tests/semantic/features2.cl mode change 100755 => 100644 tests/semantic/features2_error.txt mode change 100755 => 100644 tests/semantic/features3.cl mode change 100755 => 100644 tests/semantic/features3_error.txt mode change 100755 => 100644 tests/semantic/inheritance1.cl mode change 100755 => 100644 tests/semantic/inheritance1_error.txt mode change 100755 => 100644 tests/semantic/inheritance2.cl mode change 100755 => 100644 tests/semantic/inheritance2_error.txt mode change 100755 => 100644 tests/semantic/inheritance3.cl mode change 100755 => 100644 tests/semantic/inheritance4.cl mode change 100755 => 100644 tests/semantic/inheritance5.cl diff --git a/1st.txt b/1st.txt new file mode 100644 index 000000000..a8a0aa5ce --- /dev/null +++ b/1st.txt @@ -0,0 +1 @@ +First commit test \ No newline at end of file diff --git a/LICENSE b/LICENSE index 718bd210a..7f19c2d8c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2021 School of Math and Computer Science, University of Havana - -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. +MIT License + +Copyright (c) 2021 School of Math and Computer Science, University of Havana + +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. diff --git a/Readme.md b/Readme.md index a47d48b9e..0e33ddb08 100644 --- a/Readme.md +++ b/Readme.md @@ -1,172 +1,172 @@ -# COOL: Proyecto de Compilación - -> Proyecto base para el compilador de 4to año en Ciencia de la Computación. - -## Generalidades - -La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la -Universidad de La Habana, consiste este curso en la implementación de un compilador completamente -funcional para el lenguaje _COOL_. - -_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. - -## Cómo comenzar (o terminar) - -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. A continuación le damos las instrucciones mínimas necesarias para ello: - -### 1. Si no lo han hecho ya, regístrense en [Github](https://github.com) todos los miembros del equipo (es gratis). - -![](img/img1.png) - -### 2. Haga click en el botón **Fork** para hacer una copia del proyecto en el perfil de Github de uno de los miembros. - -Opcionalmente pueden [crear una organización](https://github.com/organizations/new) y copiar el proyecto en el perfil de la misma. - -![](img/img2.png) - -### 3. Una vez hecho esto, tendrá un nuevo repositorio en `github/`. - -Revise que el repositorio de su equipo está en su perfil. -En este ejemplo se ha copiado a la cuenta de `github.com/apiad`. - -Debe indicar bajo el nombre del repositorio: `"forked from matcom/cool-compiler-2021"`. - -![](img/img3.png) - -### 4. Clone este proyecto en un repositorio local. - -Busque la URL de su proyecto en la interfaz web de Github. - -Asegúrese de clonar **su copia** y no el proyecto original en `matcom/cool-compiler-2021`. - -![](img/img4.png) - -```bash -$ git clone git@github.com:/cool-compiler-2021.git -``` - -> Donde `` es posiblemente el nombre de su equipo o del miembro donde se hizo el _fork_. - -A partir de este punto debe tener un proyecto `cool-compiler-2021` local. -El siguiente paso depende de si usted ya tiene su código versionado con `git` o no. - -### 5.A. Si tiene su proyecto en git (y no quiere perder la historia): - -#### 5.1. Mezcle hacia el nuevo respositorio su repositorio anterior: - -```bash -$ cd cool-compiler-2021 -$ git pull --allow-unrelated-histories master -``` - -#### 5.2. Organice su proyecto, código fuente y documentación, de acuerdo a las instrucciones de este documento, y vuelva a hacer `commit`. - -```bash -$ mv src/ -$ git add . -$ git commit -a -m "Mezclado con el proyecto base" -``` - -#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. - -```bash -$ git push origin master -``` - -### 5.B Si aún no tiene su proyecto en git (o no le importa la historia): - -#### 5.1. Simplemente copie el código de su proyecto en la carpeta correspondiente `src` y haga su primer commit. - -```bash -$ mv src/ -$ git commit -a -m "Hello Git!" -``` - -#### 5.2. A partir de este punto asegúrese de hacer `commit` de forma regular para mantener su repositorio actualizado. - -Si necesita saber más sobre `git`, todo lo imprescindible está en [esta guía](doc/github-git-cheat-sheet.pdf). - -#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. - -```bash -$ git push origin master -``` - -## Entregas - -En este proyecto se realizarán entregas parciales a lo largo del curso. Para realizar una entrega, siga los siguientes pasos. - -### 1. Cree un pull request al proyecto original desde su copia. - -![](img/img5.png) - -### 2. Asegúrese de tener la siguiente configuración antes de hacer click en **Create pull request**. - -- **base repository**: `matcom/cool-compiler-2021` (repositorio original) - - **branch**: `master` -- **head repository**: `/cool-compiler-2021` (repositorio propio) - - **branch**: `master` (o la que corresponda) - -> Asegúrese que se indica **Able to merge**. De lo contrario, existen cambios en el repositorio original que usted no tiene, y debe actualizarlos. - -> **NOTA**: Asegúrese que el _pull request_ se hace a la rama `master`. - -![](img/img6.png) - -### 3. Introduzca un título y descripción adecuados, y haga click en **Create pull request**. - -![](img/img7.png) - -### 4. Espere mientras se ejecutan las pruebas. - -Verá la indicación **Some checks haven't completed yet**. - -![](img/img8.png) - -Es posible que tenga que actualizar los cambios que se hayan hecho en el repositorio original, por ejemplo, si se han agregado nuevos tests. En este caso obtendrá el siguiente mensaje: - -> **This branch is out-of-date with base branch** - -Haga click en **Update branch** y siga las instrucciones. -### 5. Verifique que no hubo errores en las pruebas. - -Si ve el mensaje **(All | Some) checks have failed**, significa que su código no pasó las pruebas. - -![](img/img9.png) - -Para ver los resultados de las pruebas haga click en el link **Details**. - -![](img/img10.png) - - -### 6. Arregle los errores y repita el paso 5 hasta que todas las pruebas pasen. - -Para cualquier modificación que haga a su proyecto, haga _commit_ y _push_ para **su repositorio personal** y automáticamente se actualizará el estado del _pull request_ y se volverán a ejecutar las pruebas. **No es necesario** abrir un _pull request_ nuevo por cada entrega, sino actualizar el anterior. - -> **Por favor asegúrese de mantener un solo _pull request_ activo por equipo**. En caso de abrir uno nuevo, cerrar el anterior. - -## Sobre la implementación - -Ponga todo su código e instrucciones necesarias en la carpeta `src`. Más información en [`src/Readme.md`](src/Readme.md). - -## Sobre la documentación - -Usted debe presentar un reporte escrito documentando el proceso de construcción de su compilador y los detalles más importantes de su funcionamiento. Más información en [`doc/Readme.md`](doc/Readme.md). - -## Sobre los equipos de desarrollo - -Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. - -## Sobre los casos de prueba - -La carpeta `tests` contiene todos los casos de prueba que son obligatorios de pasar para que su proyecto tenga derecho a ser evaluado. - -Estos tests se ejecutan automáticamente cada vez que hace un _pull request_ al repositorio `matcom/cool-compiler-2021`. Solo aquellos proyectos que pasen todas las pruebas con éxito serán evaluados. - -Para ejecutar las pruebas localmente, debe tener instalado `Python 3.7`, `pip` y `make` (normalmente viene con Linux). Ejecute: - -```bash -$ pip install -r requirements.txt -$ cd src -$ make test -``` +# COOL: Proyecto de Compilación + +> Proyecto base para el compilador de 4to año en Ciencia de la Computación. + +## Generalidades + +La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la +Universidad de La Habana, consiste este curso en la implementación de un compilador completamente +funcional para el lenguaje _COOL_. + +_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. + +## Cómo comenzar (o terminar) + +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. A continuación le damos las instrucciones mínimas necesarias para ello: + +### 1. Si no lo han hecho ya, regístrense en [Github](https://github.com) todos los miembros del equipo (es gratis). + +![](img/img1.png) + +### 2. Haga click en el botón **Fork** para hacer una copia del proyecto en el perfil de Github de uno de los miembros. + +Opcionalmente pueden [crear una organización](https://github.com/organizations/new) y copiar el proyecto en el perfil de la misma. + +![](img/img2.png) + +### 3. Una vez hecho esto, tendrá un nuevo repositorio en `github/`. + +Revise que el repositorio de su equipo está en su perfil. +En este ejemplo se ha copiado a la cuenta de `github.com/apiad`. + +Debe indicar bajo el nombre del repositorio: `"forked from matcom/cool-compiler-2021"`. + +![](img/img3.png) + +### 4. Clone este proyecto en un repositorio local. + +Busque la URL de su proyecto en la interfaz web de Github. + +Asegúrese de clonar **su copia** y no el proyecto original en `matcom/cool-compiler-2021`. + +![](img/img4.png) + +```bash +$ git clone git@github.com:/cool-compiler-2021.git +``` + +> Donde `` es posiblemente el nombre de su equipo o del miembro donde se hizo el _fork_. + +A partir de este punto debe tener un proyecto `cool-compiler-2021` local. +El siguiente paso depende de si usted ya tiene su código versionado con `git` o no. + +### 5.A. Si tiene su proyecto en git (y no quiere perder la historia): + +#### 5.1. Mezcle hacia el nuevo respositorio su repositorio anterior: + +```bash +$ cd cool-compiler-2021 +$ git pull --allow-unrelated-histories master +``` + +#### 5.2. Organice su proyecto, código fuente y documentación, de acuerdo a las instrucciones de este documento, y vuelva a hacer `commit`. + +```bash +$ mv src/ +$ git add . +$ git commit -a -m "Mezclado con el proyecto base" +``` + +#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. + +```bash +$ git push origin master +``` + +### 5.B Si aún no tiene su proyecto en git (o no le importa la historia): + +#### 5.1. Simplemente copie el código de su proyecto en la carpeta correspondiente `src` y haga su primer commit. + +```bash +$ mv src/ +$ git commit -a -m "Hello Git!" +``` + +#### 5.2. A partir de este punto asegúrese de hacer `commit` de forma regular para mantener su repositorio actualizado. + +Si necesita saber más sobre `git`, todo lo imprescindible está en [esta guía](doc/github-git-cheat-sheet.pdf). + +#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. + +```bash +$ git push origin master +``` + +## Entregas + +En este proyecto se realizarán entregas parciales a lo largo del curso. Para realizar una entrega, siga los siguientes pasos. + +### 1. Cree un pull request al proyecto original desde su copia. + +![](img/img5.png) + +### 2. Asegúrese de tener la siguiente configuración antes de hacer click en **Create pull request**. + +- **base repository**: `matcom/cool-compiler-2021` (repositorio original) + - **branch**: `master` +- **head repository**: `/cool-compiler-2021` (repositorio propio) + - **branch**: `master` (o la que corresponda) + +> Asegúrese que se indica **Able to merge**. De lo contrario, existen cambios en el repositorio original que usted no tiene, y debe actualizarlos. + +> **NOTA**: Asegúrese que el _pull request_ se hace a la rama `master`. + +![](img/img6.png) + +### 3. Introduzca un título y descripción adecuados, y haga click en **Create pull request**. + +![](img/img7.png) + +### 4. Espere mientras se ejecutan las pruebas. + +Verá la indicación **Some checks haven't completed yet**. + +![](img/img8.png) + +Es posible que tenga que actualizar los cambios que se hayan hecho en el repositorio original, por ejemplo, si se han agregado nuevos tests. En este caso obtendrá el siguiente mensaje: + +> **This branch is out-of-date with base branch** + +Haga click en **Update branch** y siga las instrucciones. +### 5. Verifique que no hubo errores en las pruebas. + +Si ve el mensaje **(All | Some) checks have failed**, significa que su código no pasó las pruebas. + +![](img/img9.png) + +Para ver los resultados de las pruebas haga click en el link **Details**. + +![](img/img10.png) + + +### 6. Arregle los errores y repita el paso 5 hasta que todas las pruebas pasen. + +Para cualquier modificación que haga a su proyecto, haga _commit_ y _push_ para **su repositorio personal** y automáticamente se actualizará el estado del _pull request_ y se volverán a ejecutar las pruebas. **No es necesario** abrir un _pull request_ nuevo por cada entrega, sino actualizar el anterior. + +> **Por favor asegúrese de mantener un solo _pull request_ activo por equipo**. En caso de abrir uno nuevo, cerrar el anterior. + +## Sobre la implementación + +Ponga todo su código e instrucciones necesarias en la carpeta `src`. Más información en [`src/Readme.md`](src/Readme.md). + +## Sobre la documentación + +Usted debe presentar un reporte escrito documentando el proceso de construcción de su compilador y los detalles más importantes de su funcionamiento. Más información en [`doc/Readme.md`](doc/Readme.md). + +## Sobre los equipos de desarrollo + +Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. + +## Sobre los casos de prueba + +La carpeta `tests` contiene todos los casos de prueba que son obligatorios de pasar para que su proyecto tenga derecho a ser evaluado. + +Estos tests se ejecutan automáticamente cada vez que hace un _pull request_ al repositorio `matcom/cool-compiler-2021`. Solo aquellos proyectos que pasen todas las pruebas con éxito serán evaluados. + +Para ejecutar las pruebas localmente, debe tener instalado `Python 3.7`, `pip` y `make` (normalmente viene con Linux). Ejecute: + +```bash +$ pip install -r requirements.txt +$ cd src +$ make test +``` diff --git a/doc/Readme.md b/doc/Readme.md index 3b2569f5c..a7ed0e32d 100644 --- a/doc/Readme.md +++ b/doc/Readme.md @@ -1,33 +1,33 @@ -# Documentación - -## Readme - -Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: - -- Cómo ejecutar (y compilar si es necesario) su compilador. -- Requisitos adicionales, dependencias, configuración, etc. -- Opciones adicionales que tenga su compilador. - -## Sobre los Equipos de Desarrollo - -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. - -**⚠️ NOTA**: Debe completar el archivo `team.yml` con los datos correctos de cada miembro de su equipo. - -## Sobre los Materiales a Entregar - -Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) en esta carpeta, que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. -El documento no tiene límite de extensión. -En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. - -## Estructura del reporte - -Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: - -- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. -- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. -- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. - -## Sobre la Fecha de Entrega - -Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram se anunciará la fecha y requisitos de cada entrega. +# Documentación + +## Readme + +Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: + +- Cómo ejecutar (y compilar si es necesario) su compilador. +- Requisitos adicionales, dependencias, configuración, etc. +- Opciones adicionales que tenga su compilador. + +## Sobre los Equipos de Desarrollo + +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. + +**⚠️ NOTA**: Debe completar el archivo `team.yml` con los datos correctos de cada miembro de su equipo. + +## Sobre los Materiales a Entregar + +Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) en esta carpeta, que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. +El documento no tiene límite de extensión. +En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. + +## Estructura del reporte + +Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: + +- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. +- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. +- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. + +## Sobre la Fecha de Entrega + +Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram se anunciará la fecha y requisitos de cada entrega. diff --git a/doc/team.yml b/doc/team.yml index c16162532..382d84efa 100644 --- a/doc/team.yml +++ b/doc/team.yml @@ -1,10 +1,7 @@ -members: - - name: Nombre Apellido1 Apellido2 - github: github_id - group: CXXX - - name: Nombre Apellido1 Apellido2 - github: github_id - group: CXXX - - name: Nombre Apellido1 Apellido2 - github: github_id - group: CXXX +members: + - name: Andy Alejandro Castañeda Guerra + github: Yumenio + group: C412 + - name: Richard García De la Osa + github: Regnod + group: C412 diff --git a/requirements.txt b/requirements.txt index 9eb0cad1a..c250faba6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -pytest -pytest-ordering +pytest +pytest-ordering diff --git a/src/Readme.md b/src/Readme.md index 1200371b5..cdca282ec 100644 --- a/src/Readme.md +++ b/src/Readme.md @@ -1,78 +1,78 @@ -# COOL: Proyecto de Compilación - -La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la -Universidad de La Habana, consiste este curso en la implementación de un compilador completamente -funcional para el lenguaje _COOL_. - -_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. - -### Sobre el Lenguaje COOL - -Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento _"COOL Language Reference Manual"_, que se distribuye junto con el presente texto. - -## Código Fuente - -### Compilando su proyecto - -Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en un archivo [`/src/makefile`](/src/makefile). -Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: - -```bash -$ cd source -$ make clean -$ make -``` - -### Ejecutando su proyecto - -Incluya en un archivo [`/src/coolc.sh`](/src/coolc.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. - -Para lanzar el compilador, se ejecutará la siguiente instrucción: - -```bash -$ cd source -$ ./coolc.sh -``` - -### Sobre el Compilador de COOL - -El compilador de COOL se ejecutará como se ha definido anteriormente. -En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: - - - - -En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código -de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... - - - - _1 - ... - _n - -... donde `_i` tiene el siguiente formato: - - (,) - : - -Los campos `` y `` indican la ubicación del error en el fichero **.cl** procesado. En caso -de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de -código fuente, el valor de dichos campos debe ser 0. - -El campo `` será alguno entre: - -- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. -- `LexicographicError`: errores detectados por el lexer. -- `SyntacticError`: errores detectados por el parser. -- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. -- `TypeError`: se reporta al detectar un problema de tipos. Incluye: - - incompatibilidad de tipos entre `rvalue` y `lvalue`, - - operación no definida entre objetos de ciertos tipos, y - - tipo referenciado pero no definido. -- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. -- `SemanticError`: cualquier otro error semántico. - -### Sobre la Implementación del Compilador de COOL - -El compilador debe estar implementado en `python`. Usted debe utilizar una herramienta generadora de analizadores -lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. +# COOL: Proyecto de Compilación + +La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la +Universidad de La Habana, consiste este curso en la implementación de un compilador completamente +funcional para el lenguaje _COOL_. + +_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. + +### Sobre el Lenguaje COOL + +Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento _"COOL Language Reference Manual"_, que se distribuye junto con el presente texto. + +## Código Fuente + +### Compilando su proyecto + +Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en un archivo [`/src/makefile`](/src/makefile). +Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: + +```bash +$ cd source +$ make clean +$ make +``` + +### Ejecutando su proyecto + +Incluya en un archivo [`/src/coolc.sh`](/src/coolc.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. + +Para lanzar el compilador, se ejecutará la siguiente instrucción: + +```bash +$ cd source +$ ./coolc.sh +``` + +### Sobre el Compilador de COOL + +El compilador de COOL se ejecutará como se ha definido anteriormente. +En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: + + + + +En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código +de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... + + + + _1 + ... + _n + +... donde `_i` tiene el siguiente formato: + + (,) - : + +Los campos `` y `` indican la ubicación del error en el fichero **.cl** procesado. En caso +de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de +código fuente, el valor de dichos campos debe ser 0. + +El campo `` será alguno entre: + +- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. +- `LexicographicError`: errores detectados por el lexer. +- `SyntacticError`: errores detectados por el parser. +- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. +- `TypeError`: se reporta al detectar un problema de tipos. Incluye: + - incompatibilidad de tipos entre `rvalue` y `lvalue`, + - operación no definida entre objetos de ciertos tipos, y + - tipo referenciado pero no definido. +- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. +- `SemanticError`: cualquier otro error semántico. + +### Sobre la Implementación del Compilador de COOL + +El compilador debe estar implementado en `python`. Usted debe utilizar una herramienta generadora de analizadores +lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/c_parser/parser.py b/src/c_parser/parser.py new file mode 100644 index 000000000..bae83f66f --- /dev/null +++ b/src/c_parser/parser.py @@ -0,0 +1,267 @@ +import lexer.lexer as lexer +from lexer.lexer import _tokens +from cool_ast.cool_ast import * +import ply.yacc as yacc +coolLexer = lexer.CoolLexer() +tokens = _tokens + +precedence = ( + ( 'nonassoc', 'dot' ), + ( 'nonassoc', 'arroba'), + ( 'nonassoc', 'complement'), + ( 'nonassoc', 'isvoid'), + ( 'left', 'star', 'div'), + ( 'left', 'plus', 'minus'), + ( 'nonnasoc', 'leq', 'lneq', 'equal'), + ( 'left', 'not'), + ( 'nonassoc', 'assignArrow') +) + +class CoolParser: + # def __init__(self): + + + def parse(self, lexer, program): + self.tokens = _tokens + self.lexer = lexer + self.lexer.build() + return self.parser.parse(program) + + def p_program(p): + 'program : class_list' + p[0] = ProgramNode(p[1]) + + def p_class_list(p): + '''class_list : def_class + | def_class class_list + ''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[2] + + def p_def_class(p): + ''' def_class : class type ocur feature_list ccur semi + | class type inherits type ocur feature_list ccur semi + ''' + if len(p) == 7: + p[0] = ClassDeclarationNode(p[2], p[4]) + else: + p[0] = ClassDeclarationNode(p[2], p[6], p[4]) + + def p_feature_list_attr(p): + ''' feature_list : def_attr feature_list + | def_func feature_list + | + ''' + if len(p) == 1: + p[0] = [] + elif isinstance(p[1], AttrDeclarationNode): + if len(p) == 3: + p[0] = [p[1]] + p[2] + else: + p[0] = [p[1]] + elif isinstance(p[1], FuncDeclarationNode): + if len(p) == 3: + p[0] = [p[1]] + p[2] + else: + p[0] = [p[1]] + + # def p_feature_list_func(p): + # 'feature_list : def_func feature_list' + # p[0] = [p[1]] + p[2] + + # def p_feature_list_empty(p): + # 'feature_list : empty' + # p[0] = [] + + def p_def_attr(p): + '''def_attr : id colon type semi + | id colon type assignArrow expr semi + ''' + if len(p) == 5: + p[0] = AttrDeclarationNode(p[1], p[3]) + else: + p[0] = AttrDeclarationNode(p[1],p[3],p[5]) + + def p_def_func(p): + 'def_func : id opar arg_list cpar colon type ocur expr ccur semi' + p[0] = FuncDeclarationNode(p[1],p[3],p[6],p[8]) + + def p_arg_list(p): + '''arg_list : arg + | arg comma arg_list + | + ''' + if len(p) == 4: + p[0] = [p[1]] + p[3] + elif len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [] + + def p_arg(p): + 'arg : id colon type' + p[0] = (p[1], p[3]) + + def p_param_list(p): + '''param_list : expr_list + | + ''' + if len(p) == 2: + p[0] = p[1] + else: + p[0] = [] + + def p_expr_list(p): + '''expr_list : expr + | expr comma expr_list + ''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + + def p_chunk(p): + '''chunk : expr semi + | expr semi chunk + ''' + if len(p) == 3: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + + def p_expr_assign(p): + 'expr : id assignArrow expr' + p[0] = AssignNode(p[1],p[3]) + + def p_expr_call(p): + '''expr : expr dot id opar param_list cpar + | expr arroba type dot id opar param_list cpar + | id opar param_list cpar + ''' + if len(p) == 7: + p[0] = CallNode(p[3], p[5], p[1]) + elif len(p) == 9: + p[0] = CallNode(p[5], p[7], p[1], p[3]) + else: + p[0] = CallNode(p[1], p[3]) + + def p_expr_if(p): + 'expr : if expr then expr else expr fi' + p[0] = ConditionalNode(p[2],p[4],p[6]) + + def p_expr_while(p): + 'expr : while expr loop expr pool' + p[0] = WhileNode(p[2], p[4]) + + def p_expr_chunk(p): + 'expr : ocur chunk ccur' + p[0] = ChunkNode(p[2]) + + def p_expr_let(p): + 'expr : let decl_list in expr' + p[0] = LetInNode(p[2],p[4]) + + def p_expr_case(p): + 'expr : case expr of case_list esac' + p[0] = SwitchCaseNode(p[2],p[4]) + + def p_expr_instantiate(p): + 'expr : new type' + p[0] = InstantiateNode(p[2]) + + def p_expr_isvoid(p): + 'expr : isvoid expr' + p[0] = IsVoidNode(p[2]) + + def p_expr_bin1(p): + '''expr : expr plus expr + | expr minus expr + ''' + if p[2] == '+': + p[0] = PlusNode(p[1], p[3]) + else: + p[0] = MinusNode(p[1], p[3]) + + def p_expr_bin2(p): + '''expr : expr star expr + | expr div expr + ''' + if p[2] == '*': + p[0] = StarNode(p[1], p[3]) + else: + p[0] = DivNode(p[1], p[3]) + + def p_expr_bin3(p): + '''expr : expr equal expr + | expr lneq expr + | expr leq expr + ''' + if p[2] == '=': + p[0] = EqualNode(p[1],p[3]) + elif p[3] == '=': + p[0] = LeqNode(p[1], p[3]) + else: + p[0] = LessNode(p[1], p[3]) + + def p_expr_unary(p): + '''expr : complement expr + | not expr + ''' + if p[1] == '~': + p[0] = ComplementNode(p[2]) + else: + p[0] = NotNode(p[2]) + + def p_expr_par(p): + 'expr : opar expr cpar' + p[0] = p[2] + + def p_expr_id(p): + 'expr : id' + p[0] = VariableNode(p[1]) + + def p_expr_int(p): + 'expr : number' + p[0] = ConstantNumNode(p[1]) + + def p_expr_string(p): + 'expr : string' + p[0] = StringNode(p[1]) + + def p_expr_boolean(p): + '''expr : true + | false''' + if p[1] == 'true': + p[0] = TrueNode(p[1]) + else: + p[0] = FalseNode(p[1]) + + def p_decl_list(p): + '''decl_list : decl + | decl comma decl_list''' + if len(p) == 2: + p[0] = [p[1]] + else: + p[0] = [p[1]] + p[3] + + def p_decl(p): + '''decl : id colon type + | id colon type assignArrow expr + ''' + if len(p) == 4: + p[0] = VarDeclarationNode(p[1], p[3]) + else: + p[0] = VarDeclarationNode(p[1], p[3], p[5]) + + def p_case_list(p): + '''case_list : id colon type rArrow expr semi + | id colon type rArrow expr semi case_list + ''' + if len(p) == 7: + p[0] = [(p[1], p[3], p[5])] + else: + p[0] = [(p[1], p[3], p[5], p[7])] + + parser = yacc.yacc(debug = True) diff --git a/src/c_parser/parsetab.py b/src/c_parser/parsetab.py new file mode 100644 index 000000000..d630d0320 --- /dev/null +++ b/src/c_parser/parsetab.py @@ -0,0 +1,83 @@ + +# parsetab.py +# This file is automatically generated. Do not edit. +# pylint: disable=W,C,R +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'nonassocdotnonassocarrobanonassoccomplementnonassocisvoidleftstardivleftplusminusnonnasocleqlneqequalleftnotnonassocassignArrowarroba assignArrow case ccur chunkComment class colon comma complement cpar div dot else equal esac false fi id if in inherits isvoid leq let lineComment lneq loop minus new newline not number ocur of opar plus pool rArrow semi space star string tab then true type whileprogram : class_listclass_list : def_class\n | def_class class_list\n def_class : class type ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur semi\n feature_list : def_attr feature_list\n | def_func feature_list\n | \n def_attr : id colon type semi\n | id colon type assignArrow expr semi\n def_func : id opar arg_list cpar colon type ocur expr ccur semiarg_list : arg\n | arg comma arg_list\n | \n arg : id colon typeparam_list : expr_list\n | \n expr_list : expr\n | expr comma expr_list\n chunk : expr semi\n | expr semi chunk\n expr : id assignArrow exprexpr : expr dot id opar param_list cpar\n | expr arroba type dot id opar param_list cpar\n | id opar param_list cpar\n expr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : ocur chunk ccurexpr : let decl_list in exprexpr : case expr of case_list esacexpr : new typeexpr : isvoid exprexpr : expr plus expr\n | expr minus expr\n expr : expr star expr\n | expr div expr\n expr : expr equal expr\n | expr lneq expr\n | expr leq expr\n expr : complement expr\n | not expr\n expr : opar expr cparexpr : idexpr : numberexpr : stringexpr : true \n | falsedecl_list : decl \n | decl comma decl_listdecl : id colon type\n | id colon type assignArrow expr\n case_list : id colon type rArrow expr semi\n | id colon type rArrow expr semi case_list\n ' + +_lr_action_items = {'class':([0,3,20,51,],[4,4,-4,-5,]),'$end':([1,2,3,5,20,51,],[0,-1,-2,-3,-4,-5,]),'type':([4,8,17,28,40,49,56,98,121,],[6,13,21,48,73,77,83,110,127,]),'ocur':([6,13,27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,77,92,93,95,96,100,102,103,117,119,124,131,],[7,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,100,37,37,37,37,37,37,37,37,37,37,37,]),'inherits':([6,],[8,]),'ccur':([7,9,10,11,15,16,19,25,26,32,44,45,46,47,54,67,73,74,75,76,78,84,85,86,87,88,89,90,91,94,95,101,107,108,113,118,120,123,128,130,132,],[-8,14,-8,-8,-6,-7,-8,31,-9,-43,-44,-45,-46,-47,-10,94,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-20,-25,-21,-29,122,-27,-30,-23,-11,-26,-24,]),'id':([7,10,11,18,19,26,27,30,34,35,36,37,38,39,41,42,43,52,53,54,55,57,58,59,60,61,62,63,92,93,95,96,97,99,100,102,103,104,117,119,124,128,131,134,],[12,12,12,22,12,-9,32,22,32,32,32,32,71,32,32,32,32,32,32,-10,82,32,32,32,32,32,32,32,32,32,32,32,71,112,32,32,32,116,32,32,32,-11,32,112,]),'colon':([12,22,29,71,112,],[17,28,49,98,121,]),'opar':([12,27,32,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,82,92,93,95,96,100,102,103,116,117,119,124,131,],[18,34,53,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,103,34,34,34,34,34,34,34,124,34,34,34,34,]),'semi':([14,21,31,32,33,44,45,46,47,68,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,122,123,130,132,133,],[20,26,51,-43,54,-44,-45,-46,-47,95,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,128,-23,-26,-24,134,]),'cpar':([18,23,24,30,32,44,45,46,47,48,50,53,64,73,74,75,76,78,79,80,81,84,85,86,87,88,89,90,91,94,101,103,108,114,115,118,120,123,124,129,130,132,],[-14,29,-12,-14,-43,-44,-45,-46,-47,-15,-13,-17,91,-31,-32,-40,-41,-22,101,-16,-18,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-17,-29,-19,123,-27,-30,-23,-17,132,-26,-24,]),'assignArrow':([21,32,110,],[27,52,119,]),'comma':([24,32,44,45,46,47,48,70,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,108,110,118,120,123,126,130,132,],[30,-43,-44,-45,-46,-47,-15,97,-31,-32,-40,-41,-22,102,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-50,-27,-30,-23,-51,-26,-24,]),'if':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,]),'while':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,]),'let':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'case':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'new':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'isvoid':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'complement':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'not':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'number':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'string':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'true':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'false':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'dot':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,83,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,55,-44,-45,-46,-47,55,55,55,55,55,-31,-32,-40,-41,-22,55,104,-33,-34,-35,-36,55,55,55,-42,-28,-25,55,55,55,55,-27,-30,-23,55,55,-26,-24,55,]),'arroba':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,56,-44,-45,-46,-47,56,56,56,56,56,-31,-32,-40,-41,-22,56,-33,-34,-35,-36,56,56,56,-42,-28,-25,56,56,56,56,-27,-30,-23,56,56,-26,-24,56,]),'plus':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,57,-44,-45,-46,-47,57,57,57,57,57,-31,57,57,-41,-22,57,-33,-34,57,57,57,57,57,-42,-28,-25,57,57,57,57,-27,-30,-23,57,57,-26,-24,57,]),'minus':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,58,-44,-45,-46,-47,58,58,58,58,58,-31,58,58,-41,-22,58,-33,-34,58,58,58,58,58,-42,-28,-25,58,58,58,58,-27,-30,-23,58,58,-26,-24,58,]),'star':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,59,-44,-45,-46,-47,59,59,59,59,59,-31,59,59,-41,-22,59,-33,-34,-35,-36,59,59,59,-42,-28,-25,59,59,59,59,-27,-30,-23,59,59,-26,-24,59,]),'div':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,60,-44,-45,-46,-47,60,60,60,60,60,-31,60,60,-41,-22,60,-33,-34,-35,-36,60,60,60,-42,-28,-25,60,60,60,60,-27,-30,-23,60,60,-26,-24,60,]),'equal':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,61,-44,-45,-46,-47,61,61,61,61,61,-31,-32,-40,-41,-22,61,-33,-34,-35,-36,61,61,61,-42,-28,-25,61,61,61,61,-27,-30,-23,61,61,-26,-24,61,]),'lneq':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,62,-44,-45,-46,-47,62,62,62,62,62,-31,-32,-40,-41,-22,62,-33,-34,-35,-36,62,62,62,-42,-28,-25,62,62,62,62,-27,-30,-23,62,62,-26,-24,62,]),'leq':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,63,-44,-45,-46,-47,63,63,63,63,63,-31,-32,-40,-41,-22,63,-33,-34,-35,-36,63,63,63,-42,-28,-25,63,63,63,63,-27,-30,-23,63,63,-26,-24,63,]),'then':([32,44,45,46,47,65,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,92,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,-23,-26,-24,]),'loop':([32,44,45,46,47,66,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,93,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,-23,-26,-24,]),'of':([32,44,45,46,47,72,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,99,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,-23,-26,-24,]),'else':([32,44,45,46,47,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,105,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,117,-29,-27,-30,-23,-26,-24,]),'pool':([32,44,45,46,47,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,106,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,118,-29,-27,-30,-23,-26,-24,]),'fi':([32,44,45,46,47,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,123,125,130,132,],[-43,-44,-45,-46,-47,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,-23,130,-26,-24,]),'in':([32,44,45,46,47,69,70,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,109,110,118,120,123,126,130,132,],[-43,-44,-45,-46,-47,96,-48,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-49,-50,-27,-30,-23,-51,-26,-24,]),'esac':([111,134,135,],[120,-52,-53,]),'rArrow':([127,],[131,]),} + +_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,10,11,19,],[9,15,16,25,]),'def_attr':([7,10,11,19,],[10,10,10,10,]),'def_func':([7,10,11,19,],[11,11,11,11,]),'arg_list':([18,30,],[23,50,]),'arg':([18,30,],[24,24,]),'expr':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[33,64,65,66,68,72,74,75,76,78,81,84,85,86,87,88,89,90,105,106,68,108,113,81,81,125,126,81,133,]),'chunk':([37,95,],[67,107,]),'decl_list':([38,97,],[69,109,]),'decl':([38,97,],[70,70,]),'param_list':([53,103,124,],[79,115,129,]),'expr_list':([53,102,103,124,],[80,114,80,80,]),'case_list':([99,134,],[111,135,]),} + +_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','parser.py',31), + ('class_list -> def_class','class_list',1,'p_class_list','parser.py',35), + ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',36), + ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',44), + ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',45), + ('feature_list -> def_attr feature_list','feature_list',2,'p_feature_list_attr','parser.py',53), + ('feature_list -> def_func feature_list','feature_list',2,'p_feature_list_attr','parser.py',54), + ('feature_list -> ','feature_list',0,'p_feature_list_attr','parser.py',55), + ('def_attr -> id colon type semi','def_attr',4,'p_def_attr','parser.py',79), + ('def_attr -> id colon type assignArrow expr semi','def_attr',6,'p_def_attr','parser.py',80), + ('def_func -> id opar arg_list cpar colon type ocur expr ccur semi','def_func',10,'p_def_func','parser.py',88), + ('arg_list -> arg','arg_list',1,'p_arg_list','parser.py',92), + ('arg_list -> arg comma arg_list','arg_list',3,'p_arg_list','parser.py',93), + ('arg_list -> ','arg_list',0,'p_arg_list','parser.py',94), + ('arg -> id colon type','arg',3,'p_arg','parser.py',104), + ('param_list -> expr_list','param_list',1,'p_param_list','parser.py',108), + ('param_list -> ','param_list',0,'p_param_list','parser.py',109), + ('expr_list -> expr','expr_list',1,'p_expr_list','parser.py',117), + ('expr_list -> expr comma expr_list','expr_list',3,'p_expr_list','parser.py',118), + ('chunk -> expr semi','chunk',2,'p_chunk','parser.py',126), + ('chunk -> expr semi chunk','chunk',3,'p_chunk','parser.py',127), + ('expr -> id assignArrow expr','expr',3,'p_expr_assign','parser.py',135), + ('expr -> expr dot id opar param_list cpar','expr',6,'p_expr_call','parser.py',139), + ('expr -> expr arroba type dot id opar param_list cpar','expr',8,'p_expr_call','parser.py',140), + ('expr -> id opar param_list cpar','expr',4,'p_expr_call','parser.py',141), + ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','parser.py',151), + ('expr -> while expr loop expr pool','expr',5,'p_expr_while','parser.py',155), + ('expr -> ocur chunk ccur','expr',3,'p_expr_chunk','parser.py',159), + ('expr -> let decl_list in expr','expr',4,'p_expr_let','parser.py',163), + ('expr -> case expr of case_list esac','expr',5,'p_expr_case','parser.py',167), + ('expr -> new type','expr',2,'p_expr_instantiate','parser.py',171), + ('expr -> isvoid expr','expr',2,'p_expr_isvoid','parser.py',175), + ('expr -> expr plus expr','expr',3,'p_expr_bin1','parser.py',179), + ('expr -> expr minus expr','expr',3,'p_expr_bin1','parser.py',180), + ('expr -> expr star expr','expr',3,'p_expr_bin2','parser.py',188), + ('expr -> expr div expr','expr',3,'p_expr_bin2','parser.py',189), + ('expr -> expr equal expr','expr',3,'p_expr_bin3','parser.py',197), + ('expr -> expr lneq expr','expr',3,'p_expr_bin3','parser.py',198), + ('expr -> expr leq expr','expr',3,'p_expr_bin3','parser.py',199), + ('expr -> complement expr','expr',2,'p_expr_unary','parser.py',209), + ('expr -> not expr','expr',2,'p_expr_unary','parser.py',210), + ('expr -> opar expr cpar','expr',3,'p_expr_par','parser.py',218), + ('expr -> id','expr',1,'p_expr_id','parser.py',222), + ('expr -> number','expr',1,'p_expr_int','parser.py',226), + ('expr -> string','expr',1,'p_expr_string','parser.py',230), + ('expr -> true','expr',1,'p_expr_boolean','parser.py',234), + ('expr -> false','expr',1,'p_expr_boolean','parser.py',235), + ('decl_list -> decl','decl_list',1,'p_decl_list','parser.py',242), + ('decl_list -> decl comma decl_list','decl_list',3,'p_decl_list','parser.py',243), + ('decl -> id colon type','decl',3,'p_decl','parser.py',250), + ('decl -> id colon type assignArrow expr','decl',5,'p_decl','parser.py',251), + ('case_list -> id colon type rArrow expr semi','case_list',6,'p_case_list','parser.py',259), + ('case_list -> id colon type rArrow expr semi case_list','case_list',7,'p_case_list','parser.py',260), +] diff --git a/src/cool_ast/cool_ast.py b/src/cool_ast/cool_ast.py new file mode 100644 index 000000000..d64871368 --- /dev/null +++ b/src/cool_ast/cool_ast.py @@ -0,0 +1,136 @@ +class Node: + pass + +class ProgramNode(Node): + def __init__(self, declarations): + self.declarations = declarations + +class DeclarationNode(Node): + pass +class ExpressionNode(Node): + pass + +class ClassDeclarationNode(DeclarationNode): + def __init__(self, idx, features, parent=None): + self.id = idx + self.parent = parent + self.features = features + +class FuncDeclarationNode(DeclarationNode): + def __init__(self, idx, params, return_type, body): + self.id = idx + self.params = params + self.type = return_type + self.body = body + +class AttrDeclarationNode(DeclarationNode): + def __init__(self, idx, typex, value = None): + self.id = idx + self.type = typex + self.value = value + +class VarDeclarationNode(ExpressionNode): + def __init__(self, idx, typex, expr = None): + self.id = idx + self.type = typex + self.expr = expr + +class AssignNode(ExpressionNode): + def __init__(self, idx, expr): + self.id = idx + self.expr = expr + +class CallNode(ExpressionNode): + def __init__(self, method, args, obj = None, parent = None): + self.method = method + self.args = args + self.obj = obj + self.parent = parent #propiedad necesaria para la instruccion id@parentType.prop(args) + +class AtomicNode(ExpressionNode): + def __init__(self, lex): + self.lex = lex + +class BinaryNode(ExpressionNode): + def __init__(self, left, right): + self.left = left + self.right = right + + +#mios +class ChunkNode(ExpressionNode): + def __init__(self, chunk): + self.chunk = chunk + +# class VarNode(ExpressionNode): +# def __init__(self, idx, type, expr = None): +# self.id = idx +# self.type = type +# self.value = expr + +class ConditionalNode(ExpressionNode): + def __init__(self, ifChunk, thenChunk, elseChunk): + self.ifChunk = ifChunk + self.thenChunk = thenChunk + self.elseChunk = elseChunk + +class WhileNode(ExpressionNode): + def __init__(self, condition, loopChunk): + self.condition = condition + self.loopChunk = loopChunk + +class LetInNode(ExpressionNode): + def __init__(self, decl_list, expression): + self.decl_list = decl_list + self.expression = expression + +class NotNode(ExpressionNode): + def __init__(self, expression): + self.expression = expression + +class IsVoidNode(ExpressionNode): + def __init__(self, method): + self.method = method + +class ComplementNode(ExpressionNode): + def __init__(self, expr): + self.expr = expr + +class SwitchCaseNode(ExpressionNode): + def __init__(self, expr, case_list): + self.expr = expr + self.case_list = case_list + +class ConstantNumNode(AtomicNode): + pass +class VariableNode(AtomicNode): + pass +class InstantiateNode(AtomicNode): + pass + +#mios +class TrueNode(AtomicNode): + pass +class FalseNode(AtomicNode): + pass +class StringNode(AtomicNode): + pass +class AutoTypeNode(AtomicNode): + pass + +class PlusNode(BinaryNode): + pass +class MinusNode(BinaryNode): + pass +class StarNode(BinaryNode): + pass +class DivNode(BinaryNode): + pass + +#mios +class LessNode(BinaryNode): + pass +class LeqNode(BinaryNode): + pass +class EqualNode(BinaryNode): + pass \ No newline at end of file diff --git a/src/coolc.sh b/src/coolc.sh old mode 100755 new mode 100644 index 3088de4f9..c685089bd --- a/src/coolc.sh +++ b/src/coolc.sh @@ -1,11 +1,11 @@ -# Incluya aquí las instrucciones necesarias para ejecutar su compilador - -INPUT_FILE=$1 -OUTPUT_FILE=${INPUT_FILE:0: -2}mips - -# Si su compilador no lo hace ya, aquí puede imprimir la información de contacto -echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas -echo "Copyright (c) 2019: Nombre1, Nombre2, Nombre3" # TODO: líneas a los valores correctos - -# Llamar al compilador -echo "Compiling $INPUT_FILE into $OUTPUT_FILE" +# Incluya aquí las instrucciones necesarias para ejecutar su compilador + +INPUT_FILE=$1 +OUTPUT_FILE=${INPUT_FILE:0: -2}mips + +# Si su compilador no lo hace ya, aquí puede imprimir la información de contacto +echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas +echo "Copyright (c) 2019: Nombre1, Nombre2, Nombre3" # TODO: líneas a los valores correctos + +# Llamar al compilador +echo "Compiling $INPUT_FILE into $OUTPUT_FILE" diff --git a/src/lexer/lexer.py b/src/lexer/lexer.py new file mode 100755 index 000000000..74e59bd36 --- /dev/null +++ b/src/lexer/lexer.py @@ -0,0 +1,196 @@ +import ply.lex as lex +from utils.errors import LexicographicError +reserved = { + 'class' : 'class', + 'new' : 'new', + 'while' : 'while', + 'if' : 'if', + 'then' : 'then', + 'else' : 'else', + 'fi' : 'fi', + 'not' : 'not', + 'loop' : 'loop', + 'pool' : 'pool', + 'let' : 'let', + 'in' : 'in', + 'case' : 'case', + 'of' : 'of', + 'esac' : 'esac', + 'inherits' : 'inherits', + 'isvoid' : 'isvoid', + 'true' : 'true', + 'false' : 'false' +} +_tokens = [ + 'space', + 'lineComment', + 'chunkComment', + 'number', + 'semi', + 'colon', + 'comma', + 'dot', + 'opar', + 'cpar', + 'ocur', + 'ccur', + 'plus', + 'minus', + 'star', + 'div', + 'equal', + 'lneq', + 'leq', + 'complement', + 'assignArrow', + 'rArrow', + 'string', + 'arroba', + 'tab', + 'newline', + 'type', + 'id' + #ress +] +_tokens += list(reserved.values()) + +class CoolLexer: + tokens = _tokens + states = ( + ('chunkComment', 'exclusive'), + ) + + # Define a rule so we can track line numbers + def t_newline(self, t): + r'\n+' + t.lexer.lineno += len(t.value) + + # Compute column. + # input is the input text string + # token is a token instance + def find_column(self, input, token): + line_start = input.rfind('\n', 0, token.lexpos) + 1 + return (token.lexpos - line_start) + 1 #parentesis? + + t_ignore_space = r'[ ]+' + + t_ignore_lineComment = r'--.*' + + # t_ignore_chunkComment = r'\(\*[^$]*\*\)' + + def t_chunkComment(self, t): + r'\(\*' + t.lexer.code_start = t.lexer.lexpos - 2 + t.lexer.level = 1 + t.lexer.begin('chunkComment') + pass + + def t_chunkComment_initComment(self, t): + r'\(\*' + t.lexer.level += 1 + pass + + def t_chunkComment_endComment(self, t): + r'\*\)' + t.lexer.level += -1 + if t.lexer.level == 0: + t.value = t.lexer.lexdata[t.lexer.code_start : t.lexer.lexpos] + t.type = 'chunkComment' + # t.lexer.lineno += t.value.count('\n') + t.lexer.begin('INITIAL') + if t.lexer.level < 0: + print(f'( {t.lexer.lineno}') + pass + + def t_chunkComment_comment(self, t): + r'.|\n' + if t.value == '\n': + t.lexer.lineno+=len(t.value) + pass + + def t_chunkComment_eof(self, t): + if t.lexer.level > 0: + print(LexicographicError % (t.lexer.lineno, self.find_column(t.lexer.lexdata,t), 'EOF in comment')) + return None + + def t_number(self, t): + r'\d+' + t.value = int(t.value) + return t + + t_semi = r';' + + t_colon = r':' + + t_comma = r',' + + t_dot = r'\.' + + t_opar = r'\(' + t_cpar = r'\)' + + t_ocur = r'\{' + t_ccur = r'\}' + + t_plus = r'\+' + t_minus = r'\-' + t_star = r'\*' + t_div = r'/' + + t_equal = r'=' + t_lneq = r'<' + t_leq = r'<=' + + t_complement = r'\~' + + t_assignArrow = r'<\-' + + t_rArrow = r'=>' + + t_string = r'\"[^\"]*\"' + + t_arroba = r'@' + + t_ignore_tab = r'\t+' + + # t_newline = r'\n+' + + def t_type(self, t): + r'[A-Z][a-zA-Z0-9_]*' + lex = t.value.lower() + if lex in reserved: + # if lex in ('true', 'false'): + # t.type = 'type' + # else: + t.type = reserved[lex] + return t + + def t_id(self, t): + r'[a-z_][a-zA-Z0-9_]*' + if t.value.lower() in reserved: + t.type = reserved[t.value.lower()] + return t + + # Error handling rule + def t_error(self,t): + print("Illegal character '%s'" % t.value[0]) + t.lexer.skip(1) + + def t_chunkComment_error(self,t): + print("Illegal character '%s'" % t.value[0]) + t.lexer.skip(1) + + # Build the lexer + def build(self,**kwargs): + self.lexer = lex.lex(module=self, **kwargs) + + def input(self, data): + self.lexer.input(data) + self.tokens = [] + while True: + tok = self.lexer.token() + if not tok: + break + self.tokens.append(tok) + + return self.tokens \ No newline at end of file diff --git a/src/main.py b/src/main.py new file mode 100644 index 000000000..e95d34e95 --- /dev/null +++ b/src/main.py @@ -0,0 +1,13 @@ + +import lexer.lexer as lexer +import c_parser.parser as parser + +with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/lexer/comment1.cl') as f: + program = f.read() + +coolLexer = lexer.CoolLexer() +coolLexer.build() +tokens = coolLexer.input(program) +# coolParser = parser.CoolParser() +# ast = coolParser.parse(coolLexer, program) +a = 0 diff --git a/src/makefile b/src/makefile index 30df993f5..cd83fb352 100644 --- a/src/makefile +++ b/src/makefile @@ -1,12 +1,12 @@ -.PHONY: clean - -main: - # Compiling the compiler :) - -clean: - rm -rf build/* - rm -rf ../tests/*/*.mips - -test: - pytest ../tests -v --tb=short -m=${TAG} - +.PHONY: clean + +main: + # Compiling the compiler :) + +clean: + rm -rf build/* + rm -rf ../tests/*/*.mips + +test: + pytest ../tests -v --tb=short -m=${TAG} + diff --git a/src/parsetab.py b/src/parsetab.py new file mode 100644 index 000000000..33f11c6c2 --- /dev/null +++ b/src/parsetab.py @@ -0,0 +1,83 @@ + +# parsetab.py +# This file is automatically generated. Do not edit. +# pylint: disable=W,C,R +_tabversion = '3.10' + +_lr_method = 'LALR' + +_lr_signature = 'nonassocdotnonassocarrobanonassoccomplementnonassocisvoidleftstardivleftplusminusnonnasocleqlneqequalleftnotnonassocassignArrowarroba assignArrow case ccur chunkComment class colon comma complement cpar div dot else equal esac false fi id if in inherits isvoid leq let lineComment lneq loop minus new newline not number ocur of opar plus pool rArrow semi space star string tab then true type whileprogram : class_listclass_list : def_class\n | def_class class_list\n def_class : class type ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur semi\n feature_list : def_attr feature_list\n | def_func feature_list\n | \n def_attr : id colon type semi\n | id colon type assignArrow expr semi\n def_func : id opar arg_list cpar colon type ocur expr ccur semiarg_list : arg\n | arg comma arg_list\n | \n arg : id colon typeparam_list : expr_list\n | \n expr_list : expr\n | expr comma expr_list\n chunk : expr semi\n | expr semi chunk\n expr : id assignArrow exprexpr : expr dot id opar param_list cpar\n | expr arroba type dot id opar param_list cpar\n | id opar param_list cpar\n expr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : ocur chunk ccurexpr : let decl_list in exprexpr : case expr of case_list esacexpr : new typeexpr : isvoid exprexpr : expr plus expr\n | expr minus expr\n expr : expr star expr\n | expr div expr\n expr : expr equal expr\n | expr lneq expr\n | expr leq expr\n expr : complement expr\n | not expr\n expr : opar expr cparexpr : idexpr : numberexpr : stringexpr : true \n | falsedecl_list : decl \n | decl comma decl_listdecl : id colon type\n | id colon type assignArrow expr\n case_list : id colon type rArrow expr semi\n | id colon type rArrow expr semi case_list\n ' + +_lr_action_items = {'class':([0,3,20,51,],[4,4,-4,-5,]),'$end':([1,2,3,5,20,51,],[0,-1,-2,-3,-4,-5,]),'type':([4,8,17,28,40,49,56,98,121,],[6,13,21,48,73,77,83,110,127,]),'ocur':([6,13,27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,77,92,93,95,96,100,102,103,117,119,124,131,],[7,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,100,37,37,37,37,37,37,37,37,37,37,37,]),'inherits':([6,],[8,]),'ccur':([7,9,10,11,15,16,19,25,26,32,44,45,46,47,54,67,73,74,75,76,78,84,85,86,87,88,89,90,91,94,95,101,107,108,113,118,120,123,128,130,132,],[-8,14,-8,-8,-6,-7,-8,31,-9,-43,-44,-45,-46,-47,-10,94,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-20,-25,-21,-29,122,-27,-30,-23,-11,-26,-24,]),'id':([7,10,11,18,19,26,27,30,34,35,36,37,38,39,41,42,43,52,53,54,55,57,58,59,60,61,62,63,92,93,95,96,97,99,100,102,103,104,117,119,124,128,131,134,],[12,12,12,22,12,-9,32,22,32,32,32,32,71,32,32,32,32,32,32,-10,82,32,32,32,32,32,32,32,32,32,32,32,71,112,32,32,32,116,32,32,32,-11,32,112,]),'colon':([12,22,29,71,112,],[17,28,49,98,121,]),'opar':([12,27,32,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,82,92,93,95,96,100,102,103,116,117,119,124,131,],[18,34,53,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,103,34,34,34,34,34,34,34,124,34,34,34,34,]),'semi':([14,21,31,32,33,44,45,46,47,68,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,122,123,130,132,133,],[20,26,51,-43,54,-44,-45,-46,-47,95,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,128,-23,-26,-24,134,]),'cpar':([18,23,24,30,32,44,45,46,47,48,50,53,64,73,74,75,76,78,79,80,81,84,85,86,87,88,89,90,91,94,101,103,108,114,115,118,120,123,124,129,130,132,],[-14,29,-12,-14,-43,-44,-45,-46,-47,-15,-13,-17,91,-31,-32,-40,-41,-22,101,-16,-18,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-17,-29,-19,123,-27,-30,-23,-17,132,-26,-24,]),'assignArrow':([21,32,110,],[27,52,119,]),'comma':([24,32,44,45,46,47,48,70,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,108,110,118,120,123,126,130,132,],[30,-43,-44,-45,-46,-47,-15,97,-31,-32,-40,-41,-22,102,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-50,-27,-30,-23,-51,-26,-24,]),'if':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,]),'while':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,]),'let':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'case':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'new':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'isvoid':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'complement':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'not':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'number':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'string':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'true':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'false':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'dot':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,83,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,55,-44,-45,-46,-47,55,55,55,55,55,-31,-32,-40,-41,-22,55,104,-33,-34,-35,-36,55,55,55,-42,-28,-25,55,55,55,55,-27,-30,-23,55,55,-26,-24,55,]),'arroba':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,56,-44,-45,-46,-47,56,56,56,56,56,-31,-32,-40,-41,-22,56,-33,-34,-35,-36,56,56,56,-42,-28,-25,56,56,56,56,-27,-30,-23,56,56,-26,-24,56,]),'plus':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,57,-44,-45,-46,-47,57,57,57,57,57,-31,57,57,-41,-22,57,-33,-34,57,57,57,57,57,-42,-28,-25,57,57,57,57,-27,-30,-23,57,57,-26,-24,57,]),'minus':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,58,-44,-45,-46,-47,58,58,58,58,58,-31,58,58,-41,-22,58,-33,-34,58,58,58,58,58,-42,-28,-25,58,58,58,58,-27,-30,-23,58,58,-26,-24,58,]),'star':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,59,-44,-45,-46,-47,59,59,59,59,59,-31,59,59,-41,-22,59,-33,-34,-35,-36,59,59,59,-42,-28,-25,59,59,59,59,-27,-30,-23,59,59,-26,-24,59,]),'div':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,60,-44,-45,-46,-47,60,60,60,60,60,-31,60,60,-41,-22,60,-33,-34,-35,-36,60,60,60,-42,-28,-25,60,60,60,60,-27,-30,-23,60,60,-26,-24,60,]),'equal':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,61,-44,-45,-46,-47,61,61,61,61,61,-31,-32,-40,-41,-22,61,-33,-34,-35,-36,61,61,61,-42,-28,-25,61,61,61,61,-27,-30,-23,61,61,-26,-24,61,]),'lneq':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,62,-44,-45,-46,-47,62,62,62,62,62,-31,-32,-40,-41,-22,62,-33,-34,-35,-36,62,62,62,-42,-28,-25,62,62,62,62,-27,-30,-23,62,62,-26,-24,62,]),'leq':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,63,-44,-45,-46,-47,63,63,63,63,63,-31,-32,-40,-41,-22,63,-33,-34,-35,-36,63,63,63,-42,-28,-25,63,63,63,63,-27,-30,-23,63,63,-26,-24,63,]),'then':([32,44,45,46,47,65,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,92,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,-23,-26,-24,]),'loop':([32,44,45,46,47,66,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,93,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,-23,-26,-24,]),'of':([32,44,45,46,47,72,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,99,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,-23,-26,-24,]),'else':([32,44,45,46,47,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,105,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,117,-29,-27,-30,-23,-26,-24,]),'pool':([32,44,45,46,47,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,106,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,118,-29,-27,-30,-23,-26,-24,]),'fi':([32,44,45,46,47,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,123,125,130,132,],[-43,-44,-45,-46,-47,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,-23,130,-26,-24,]),'in':([32,44,45,46,47,69,70,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,109,110,118,120,123,126,130,132,],[-43,-44,-45,-46,-47,96,-48,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-49,-50,-27,-30,-23,-51,-26,-24,]),'esac':([111,134,135,],[120,-52,-53,]),'rArrow':([127,],[131,]),} + +_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,10,11,19,],[9,15,16,25,]),'def_attr':([7,10,11,19,],[10,10,10,10,]),'def_func':([7,10,11,19,],[11,11,11,11,]),'arg_list':([18,30,],[23,50,]),'arg':([18,30,],[24,24,]),'expr':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[33,64,65,66,68,72,74,75,76,78,81,84,85,86,87,88,89,90,105,106,68,108,113,81,81,125,126,81,133,]),'chunk':([37,95,],[67,107,]),'decl_list':([38,97,],[69,109,]),'decl':([38,97,],[70,70,]),'param_list':([53,103,124,],[79,115,129,]),'expr_list':([53,102,103,124,],[80,114,80,80,]),'case_list':([99,134,],[111,135,]),} + +_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','parser.py',32), + ('class_list -> def_class','class_list',1,'p_class_list','parser.py',36), + ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',37), + ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',45), + ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',46), + ('feature_list -> def_attr feature_list','feature_list',2,'p_feature_list_attr','parser.py',54), + ('feature_list -> def_func feature_list','feature_list',2,'p_feature_list_attr','parser.py',55), + ('feature_list -> ','feature_list',0,'p_feature_list_attr','parser.py',56), + ('def_attr -> id colon type semi','def_attr',4,'p_def_attr','parser.py',80), + ('def_attr -> id colon type assignArrow expr semi','def_attr',6,'p_def_attr','parser.py',81), + ('def_func -> id opar arg_list cpar colon type ocur expr ccur semi','def_func',10,'p_def_func','parser.py',89), + ('arg_list -> arg','arg_list',1,'p_arg_list','parser.py',93), + ('arg_list -> arg comma arg_list','arg_list',3,'p_arg_list','parser.py',94), + ('arg_list -> ','arg_list',0,'p_arg_list','parser.py',95), + ('arg -> id colon type','arg',3,'p_arg','parser.py',105), + ('param_list -> expr_list','param_list',1,'p_param_list','parser.py',109), + ('param_list -> ','param_list',0,'p_param_list','parser.py',110), + ('expr_list -> expr','expr_list',1,'p_expr_list','parser.py',118), + ('expr_list -> expr comma expr_list','expr_list',3,'p_expr_list','parser.py',119), + ('chunk -> expr semi','chunk',2,'p_chunk','parser.py',127), + ('chunk -> expr semi chunk','chunk',3,'p_chunk','parser.py',128), + ('expr -> id assignArrow expr','expr',3,'p_expr_assign','parser.py',136), + ('expr -> expr dot id opar param_list cpar','expr',6,'p_expr_call','parser.py',140), + ('expr -> expr arroba type dot id opar param_list cpar','expr',8,'p_expr_call','parser.py',141), + ('expr -> id opar param_list cpar','expr',4,'p_expr_call','parser.py',142), + ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','parser.py',152), + ('expr -> while expr loop expr pool','expr',5,'p_expr_while','parser.py',156), + ('expr -> ocur chunk ccur','expr',3,'p_expr_chunk','parser.py',160), + ('expr -> let decl_list in expr','expr',4,'p_expr_let','parser.py',164), + ('expr -> case expr of case_list esac','expr',5,'p_expr_case','parser.py',168), + ('expr -> new type','expr',2,'p_expr_instantiate','parser.py',172), + ('expr -> isvoid expr','expr',2,'p_expr_isvoid','parser.py',176), + ('expr -> expr plus expr','expr',3,'p_expr_bin1','parser.py',180), + ('expr -> expr minus expr','expr',3,'p_expr_bin1','parser.py',181), + ('expr -> expr star expr','expr',3,'p_expr_bin2','parser.py',189), + ('expr -> expr div expr','expr',3,'p_expr_bin2','parser.py',190), + ('expr -> expr equal expr','expr',3,'p_expr_bin3','parser.py',198), + ('expr -> expr lneq expr','expr',3,'p_expr_bin3','parser.py',199), + ('expr -> expr leq expr','expr',3,'p_expr_bin3','parser.py',200), + ('expr -> complement expr','expr',2,'p_expr_unary','parser.py',210), + ('expr -> not expr','expr',2,'p_expr_unary','parser.py',211), + ('expr -> opar expr cpar','expr',3,'p_expr_par','parser.py',219), + ('expr -> id','expr',1,'p_expr_id','parser.py',223), + ('expr -> number','expr',1,'p_expr_int','parser.py',227), + ('expr -> string','expr',1,'p_expr_string','parser.py',231), + ('expr -> true','expr',1,'p_expr_boolean','parser.py',235), + ('expr -> false','expr',1,'p_expr_boolean','parser.py',236), + ('decl_list -> decl','decl_list',1,'p_decl_list','parser.py',243), + ('decl_list -> decl comma decl_list','decl_list',3,'p_decl_list','parser.py',244), + ('decl -> id colon type','decl',3,'p_decl','parser.py',251), + ('decl -> id colon type assignArrow expr','decl',5,'p_decl','parser.py',252), + ('case_list -> id colon type rArrow expr semi','case_list',6,'p_case_list','parser.py',260), + ('case_list -> id colon type rArrow expr semi case_list','case_list',7,'p_case_list','parser.py',261), +] diff --git a/src/utils/errors.py b/src/utils/errors.py new file mode 100644 index 000000000..f9020ec12 --- /dev/null +++ b/src/utils/errors.py @@ -0,0 +1 @@ +LexicographicError = "(%d, %d) - LexicographicError: %s" \ No newline at end of file diff --git a/tests/codegen/arith.cl b/tests/codegen/arith.cl old mode 100755 new mode 100644 index af5951cf7..0d9f5dd33 --- a/tests/codegen/arith.cl +++ b/tests/codegen/arith.cl @@ -1,430 +1,430 @@ -(* - * A contribution from Anne Sheets (sheets@cory) - * - * Tests the arithmetic operations and various other things - *) - -class A { - - var : Int <- 0; - - value() : Int { var }; - - set_var(num : Int) : A{ - { - var <- num; - self; - } - }; - - method1(num : Int) : A { -- same - self - }; - - method2(num1 : Int, num2 : Int) : A { -- plus - (let x : Int in - { - x <- num1 + num2; - (new B).set_var(x); - } - ) - }; - - method3(num : Int) : A { -- negate - (let x : Int in - { - x <- ~num; - (new C).set_var(x); - } - ) - }; - - method4(num1 : Int, num2 : Int) : A { -- diff - if num2 < num1 then - (let x : Int in - { - x <- num1 - num2; - (new D).set_var(x); - } - ) - else - (let x : Int in - { - x <- num2 - num1; - (new D).set_var(x); - } - ) - fi - }; - - method5(num : Int) : A { -- factorial - (let x : Int <- 1 in - { - (let y : Int <- 1 in - while y <= num loop - { - x <- x * y; - y <- y + 1; - } - pool - ); - (new E).set_var(x); - } - ) - }; - -}; - -class B inherits A { -- B is a number squared - - method5(num : Int) : A { -- square - (let x : Int in - { - x <- num * num; - (new E).set_var(x); - } - ) - }; - -}; - -class C inherits B { - - method6(num : Int) : A { -- negate - (let x : Int in - { - x <- ~num; - (new A).set_var(x); - } - ) - }; - - method5(num : Int) : A { -- cube - (let x : Int in - { - x <- num * num * num; - (new E).set_var(x); - } - ) - }; - -}; - -class D inherits B { - - method7(num : Int) : Bool { -- divisible by 3 - (let x : Int <- num in - if x < 0 then method7(~x) else - if 0 = x then true else - if 1 = x then false else - if 2 = x then false else - method7(x - 3) - fi fi fi fi - ) - }; - -}; - -class E inherits D { - - method6(num : Int) : A { -- division - (let x : Int in - { - x <- num / 8; - (new A).set_var(x); - } - ) - }; - -}; - -(* The following code is from atoi.cl in ~cs164/examples *) - -(* - The class A2I provides integer-to-string and string-to-integer -conversion routines. To use these routines, either inherit them -in the class where needed, have a dummy variable bound to -something of type A2I, or simpl write (new A2I).method(argument). -*) - - -(* - c2i Converts a 1-character string to an integer. Aborts - if the string is not "0" through "9" -*) -class A2I { - - c2i(char : String) : Int { - if char = "0" then 0 else - if char = "1" then 1 else - if char = "2" then 2 else - if char = "3" then 3 else - if char = "4" then 4 else - if char = "5" then 5 else - if char = "6" then 6 else - if char = "7" then 7 else - if char = "8" then 8 else - if char = "9" then 9 else - { abort(); 0; } (* the 0 is needed to satisfy the - typchecker *) - fi fi fi fi fi fi fi fi fi fi - }; - -(* - i2c is the inverse of c2i. -*) - i2c(i : Int) : String { - if i = 0 then "0" else - if i = 1 then "1" else - if i = 2 then "2" else - if i = 3 then "3" else - if i = 4 then "4" else - if i = 5 then "5" else - if i = 6 then "6" else - if i = 7 then "7" else - if i = 8 then "8" else - if i = 9 then "9" else - { abort(); ""; } -- the "" is needed to satisfy the typchecker - fi fi fi fi fi fi fi fi fi fi - }; - -(* - a2i converts an ASCII string into an integer. The empty string -is converted to 0. Signed and unsigned strings are handled. The -method aborts if the string does not represent an integer. Very -long strings of digits produce strange answers because of arithmetic -overflow. - -*) - a2i(s : String) : Int { - if s.length() = 0 then 0 else - if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else - if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else - a2i_aux(s) - fi fi fi - }; - -(* a2i_aux converts the usigned portion of the string. As a - programming example, this method is written iteratively. *) - - - a2i_aux(s : String) : Int { - (let int : Int <- 0 in - { - (let j : Int <- s.length() in - (let i : Int <- 0 in - while i < j loop - { - int <- int * 10 + c2i(s.substr(i,1)); - i <- i + 1; - } - pool - ) - ); - int; - } - ) - }; - -(* i2a converts an integer to a string. Positive and negative - numbers are handled correctly. *) - - i2a(i : Int) : String { - if i = 0 then "0" else - if 0 < i then i2a_aux(i) else - "-".concat(i2a_aux(i * ~1)) - fi fi - }; - -(* i2a_aux is an example using recursion. *) - - i2a_aux(i : Int) : String { - if i = 0 then "" else - (let next : Int <- i / 10 in - i2a_aux(next).concat(i2c(i - next * 10)) - ) - fi - }; - -}; - -class Main inherits IO { - - char : String; - avar : A; - a_var : A; - flag : Bool <- true; - - - menu() : String { - { - out_string("\n\tTo add a number to "); - print(avar); - out_string("...enter a:\n"); - out_string("\tTo negate "); - print(avar); - out_string("...enter b:\n"); - out_string("\tTo find the difference between "); - print(avar); - out_string("and another number...enter c:\n"); - out_string("\tTo find the factorial of "); - print(avar); - out_string("...enter d:\n"); - out_string("\tTo square "); - print(avar); - out_string("...enter e:\n"); - out_string("\tTo cube "); - print(avar); - out_string("...enter f:\n"); - out_string("\tTo find out if "); - print(avar); - out_string("is a multiple of 3...enter g:\n"); - out_string("\tTo divide "); - print(avar); - out_string("by 8...enter h:\n"); - out_string("\tTo get a new number...enter j:\n"); - out_string("\tTo quit...enter q:\n\n"); - in_string(); - } - }; - - prompt() : String { - { - out_string("\n"); - out_string("Please enter a number... "); - in_string(); - } - }; - - get_int() : Int { - { - (let z : A2I <- new A2I in - (let s : String <- prompt() in - z.a2i(s) - ) - ); - } - }; - - is_even(num : Int) : Bool { - (let x : Int <- num in - if x < 0 then is_even(~x) else - if 0 = x then true else - if 1 = x then false else - is_even(x - 2) - fi fi fi - ) - }; - - class_type(var : A) : IO { - case var of - a : A => out_string("Class type is now A\n"); - b : B => out_string("Class type is now B\n"); - c : C => out_string("Class type is now C\n"); - d : D => out_string("Class type is now D\n"); - e : E => out_string("Class type is now E\n"); - o : Object => out_string("Oooops\n"); - esac - }; - - print(var : A) : IO { - (let z : A2I <- new A2I in - { - out_string(z.i2a(var.value())); - out_string(" "); - } - ) - }; - - main() : Object { - { - avar <- (new A); - while flag loop - { - -- avar <- (new A).set_var(get_int()); - out_string("number "); - print(avar); - if is_even(avar.value()) then - out_string("is even!\n") - else - out_string("is odd!\n") - fi; - -- print(avar); -- prints out answer - class_type(avar); - char <- menu(); - if char = "a" then -- add - { - a_var <- (new A).set_var(get_int()); - avar <- (new B).method2(avar.value(), a_var.value()); - } else - if char = "b" then -- negate - case avar of - c : C => avar <- c.method6(c.value()); - a : A => avar <- a.method3(a.value()); - o : Object => { - out_string("Oooops\n"); - abort(); 0; - }; - esac else - if char = "c" then -- diff - { - a_var <- (new A).set_var(get_int()); - avar <- (new D).method4(avar.value(), a_var.value()); - } else - if char = "d" then avar <- (new C)@A.method5(avar.value()) else - -- factorial - if char = "e" then avar <- (new C)@B.method5(avar.value()) else - -- square - if char = "f" then avar <- (new C)@C.method5(avar.value()) else - -- cube - if char = "g" then -- multiple of 3? - if ((new D).method7(avar.value())) - then -- avar <- (new A).method1(avar.value()) - { - out_string("number "); - print(avar); - out_string("is divisible by 3.\n"); - } - else -- avar <- (new A).set_var(0) - { - out_string("number "); - print(avar); - out_string("is not divisible by 3.\n"); - } - fi else - if char = "h" then - (let x : A in - { - x <- (new E).method6(avar.value()); - (let r : Int <- (avar.value() - (x.value() * 8)) in - { - out_string("number "); - print(avar); - out_string("is equal to "); - print(x); - out_string("times 8 with a remainder of "); - (let a : A2I <- new A2I in - { - out_string(a.i2a(r)); - out_string("\n"); - } - ); -- end let a: - } - ); -- end let r: - avar <- x; - } - ) -- end let x: - else - if char = "j" then avar <- (new A) - else - if char = "q" then flag <- false - else - avar <- (new A).method1(avar.value()) -- divide/8 - fi fi fi fi fi fi fi fi fi fi; - } - pool; - } - }; - -}; - +(* + * A contribution from Anne Sheets (sheets@cory) + * + * Tests the arithmetic operations and various other things + *) + +class A { + + var : Int <- 0; + + value() : Int { var }; + + set_var(num : Int) : A{ + { + var <- num; + self; + } + }; + + method1(num : Int) : A { -- same + self + }; + + method2(num1 : Int, num2 : Int) : A { -- plus + (let x : Int in + { + x <- num1 + num2; + (new B).set_var(x); + } + ) + }; + + method3(num : Int) : A { -- negate + (let x : Int in + { + x <- ~num; + (new C).set_var(x); + } + ) + }; + + method4(num1 : Int, num2 : Int) : A { -- diff + if num2 < num1 then + (let x : Int in + { + x <- num1 - num2; + (new D).set_var(x); + } + ) + else + (let x : Int in + { + x <- num2 - num1; + (new D).set_var(x); + } + ) + fi + }; + + method5(num : Int) : A { -- factorial + (let x : Int <- 1 in + { + (let y : Int <- 1 in + while y <= num loop + { + x <- x * y; + y <- y + 1; + } + pool + ); + (new E).set_var(x); + } + ) + }; + +}; + +class B inherits A { -- B is a number squared + + method5(num : Int) : A { -- square + (let x : Int in + { + x <- num * num; + (new E).set_var(x); + } + ) + }; + +}; + +class C inherits B { + + method6(num : Int) : A { -- negate + (let x : Int in + { + x <- ~num; + (new A).set_var(x); + } + ) + }; + + method5(num : Int) : A { -- cube + (let x : Int in + { + x <- num * num * num; + (new E).set_var(x); + } + ) + }; + +}; + +class D inherits B { + + method7(num : Int) : Bool { -- divisible by 3 + (let x : Int <- num in + if x < 0 then method7(~x) else + if 0 = x then true else + if 1 = x then false else + if 2 = x then false else + method7(x - 3) + fi fi fi fi + ) + }; + +}; + +class E inherits D { + + method6(num : Int) : A { -- division + (let x : Int in + { + x <- num / 8; + (new A).set_var(x); + } + ) + }; + +}; + +(* The following code is from atoi.cl in ~cs164/examples *) + +(* + The class A2I provides integer-to-string and string-to-integer +conversion routines. To use these routines, either inherit them +in the class where needed, have a dummy variable bound to +something of type A2I, or simpl write (new A2I).method(argument). +*) + + +(* + c2i Converts a 1-character string to an integer. Aborts + if the string is not "0" through "9" +*) +class A2I { + + c2i(char : String) : Int { + if char = "0" then 0 else + if char = "1" then 1 else + if char = "2" then 2 else + if char = "3" then 3 else + if char = "4" then 4 else + if char = "5" then 5 else + if char = "6" then 6 else + if char = "7" then 7 else + if char = "8" then 8 else + if char = "9" then 9 else + { abort(); 0; } (* the 0 is needed to satisfy the + typchecker *) + fi fi fi fi fi fi fi fi fi fi + }; + +(* + i2c is the inverse of c2i. +*) + i2c(i : Int) : String { + if i = 0 then "0" else + if i = 1 then "1" else + if i = 2 then "2" else + if i = 3 then "3" else + if i = 4 then "4" else + if i = 5 then "5" else + if i = 6 then "6" else + if i = 7 then "7" else + if i = 8 then "8" else + if i = 9 then "9" else + { abort(); ""; } -- the "" is needed to satisfy the typchecker + fi fi fi fi fi fi fi fi fi fi + }; + +(* + a2i converts an ASCII string into an integer. The empty string +is converted to 0. Signed and unsigned strings are handled. The +method aborts if the string does not represent an integer. Very +long strings of digits produce strange answers because of arithmetic +overflow. + +*) + a2i(s : String) : Int { + if s.length() = 0 then 0 else + if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else + if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else + a2i_aux(s) + fi fi fi + }; + +(* a2i_aux converts the usigned portion of the string. As a + programming example, this method is written iteratively. *) + + + a2i_aux(s : String) : Int { + (let int : Int <- 0 in + { + (let j : Int <- s.length() in + (let i : Int <- 0 in + while i < j loop + { + int <- int * 10 + c2i(s.substr(i,1)); + i <- i + 1; + } + pool + ) + ); + int; + } + ) + }; + +(* i2a converts an integer to a string. Positive and negative + numbers are handled correctly. *) + + i2a(i : Int) : String { + if i = 0 then "0" else + if 0 < i then i2a_aux(i) else + "-".concat(i2a_aux(i * ~1)) + fi fi + }; + +(* i2a_aux is an example using recursion. *) + + i2a_aux(i : Int) : String { + if i = 0 then "" else + (let next : Int <- i / 10 in + i2a_aux(next).concat(i2c(i - next * 10)) + ) + fi + }; + +}; + +class Main inherits IO { + + char : String; + avar : A; + a_var : A; + flag : Bool <- true; + + + menu() : String { + { + out_string("\n\tTo add a number to "); + print(avar); + out_string("...enter a:\n"); + out_string("\tTo negate "); + print(avar); + out_string("...enter b:\n"); + out_string("\tTo find the difference between "); + print(avar); + out_string("and another number...enter c:\n"); + out_string("\tTo find the factorial of "); + print(avar); + out_string("...enter d:\n"); + out_string("\tTo square "); + print(avar); + out_string("...enter e:\n"); + out_string("\tTo cube "); + print(avar); + out_string("...enter f:\n"); + out_string("\tTo find out if "); + print(avar); + out_string("is a multiple of 3...enter g:\n"); + out_string("\tTo divide "); + print(avar); + out_string("by 8...enter h:\n"); + out_string("\tTo get a new number...enter j:\n"); + out_string("\tTo quit...enter q:\n\n"); + in_string(); + } + }; + + prompt() : String { + { + out_string("\n"); + out_string("Please enter a number... "); + in_string(); + } + }; + + get_int() : Int { + { + (let z : A2I <- new A2I in + (let s : String <- prompt() in + z.a2i(s) + ) + ); + } + }; + + is_even(num : Int) : Bool { + (let x : Int <- num in + if x < 0 then is_even(~x) else + if 0 = x then true else + if 1 = x then false else + is_even(x - 2) + fi fi fi + ) + }; + + class_type(var : A) : IO { + case var of + a : A => out_string("Class type is now A\n"); + b : B => out_string("Class type is now B\n"); + c : C => out_string("Class type is now C\n"); + d : D => out_string("Class type is now D\n"); + e : E => out_string("Class type is now E\n"); + o : Object => out_string("Oooops\n"); + esac + }; + + print(var : A) : IO { + (let z : A2I <- new A2I in + { + out_string(z.i2a(var.value())); + out_string(" "); + } + ) + }; + + main() : Object { + { + avar <- (new A); + while flag loop + { + -- avar <- (new A).set_var(get_int()); + out_string("number "); + print(avar); + if is_even(avar.value()) then + out_string("is even!\n") + else + out_string("is odd!\n") + fi; + -- print(avar); -- prints out answer + class_type(avar); + char <- menu(); + if char = "a" then -- add + { + a_var <- (new A).set_var(get_int()); + avar <- (new B).method2(avar.value(), a_var.value()); + } else + if char = "b" then -- negate + case avar of + c : C => avar <- c.method6(c.value()); + a : A => avar <- a.method3(a.value()); + o : Object => { + out_string("Oooops\n"); + abort(); 0; + }; + esac else + if char = "c" then -- diff + { + a_var <- (new A).set_var(get_int()); + avar <- (new D).method4(avar.value(), a_var.value()); + } else + if char = "d" then avar <- (new C)@A.method5(avar.value()) else + -- factorial + if char = "e" then avar <- (new C)@B.method5(avar.value()) else + -- square + if char = "f" then avar <- (new C)@C.method5(avar.value()) else + -- cube + if char = "g" then -- multiple of 3? + if ((new D).method7(avar.value())) + then -- avar <- (new A).method1(avar.value()) + { + out_string("number "); + print(avar); + out_string("is divisible by 3.\n"); + } + else -- avar <- (new A).set_var(0) + { + out_string("number "); + print(avar); + out_string("is not divisible by 3.\n"); + } + fi else + if char = "h" then + (let x : A in + { + x <- (new E).method6(avar.value()); + (let r : Int <- (avar.value() - (x.value() * 8)) in + { + out_string("number "); + print(avar); + out_string("is equal to "); + print(x); + out_string("times 8 with a remainder of "); + (let a : A2I <- new A2I in + { + out_string(a.i2a(r)); + out_string("\n"); + } + ); -- end let a: + } + ); -- end let r: + avar <- x; + } + ) -- end let x: + else + if char = "j" then avar <- (new A) + else + if char = "q" then flag <- false + else + avar <- (new A).method1(avar.value()) -- divide/8 + fi fi fi fi fi fi fi fi fi fi; + } + pool; + } + }; + +}; + diff --git a/tests/codegen/arith_input.txt b/tests/codegen/arith_input.txt index 83e05b1ea..c431a225b 100644 --- a/tests/codegen/arith_input.txt +++ b/tests/codegen/arith_input.txt @@ -1,13 +1,13 @@ -a -1 -b -c -0 -d -e -f -g -h -j -5 -q +a +1 +b +c +0 +d +e +f +g +h +j +5 +q diff --git a/tests/codegen/arith_output.txt b/tests/codegen/arith_output.txt index 44b4ce73e..476cb3bad 100644 --- a/tests/codegen/arith_output.txt +++ b/tests/codegen/arith_output.txt @@ -1,158 +1,158 @@ -number 0 is even! -Class type is now A - - To add a number to 0 ...enter a: - To negate 0 ...enter b: - To find the difference between 0 and another number...enter c: - To find the factorial of 0 ...enter d: - To square 0 ...enter e: - To cube 0 ...enter f: - To find out if 0 is a multiple of 3...enter g: - To divide 0 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - - -Please enter a number... number 1 is odd! -Class type is now B - - To add a number to 1 ...enter a: - To negate 1 ...enter b: - To find the difference between 1 and another number...enter c: - To find the factorial of 1 ...enter d: - To square 1 ...enter e: - To cube 1 ...enter f: - To find out if 1 is a multiple of 3...enter g: - To divide 1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number -1 is odd! -Class type is now C - - To add a number to -1 ...enter a: - To negate -1 ...enter b: - To find the difference between -1 and another number...enter c: - To find the factorial of -1 ...enter d: - To square -1 ...enter e: - To cube -1 ...enter f: - To find out if -1 is a multiple of 3...enter g: - To divide -1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - - -Please enter a number... number 1 is odd! -Class type is now D - - To add a number to 1 ...enter a: - To negate 1 ...enter b: - To find the difference between 1 and another number...enter c: - To find the factorial of 1 ...enter d: - To square 1 ...enter e: - To cube 1 ...enter f: - To find out if 1 is a multiple of 3...enter g: - To divide 1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 1 is odd! -Class type is now E - - To add a number to 1 ...enter a: - To negate 1 ...enter b: - To find the difference between 1 and another number...enter c: - To find the factorial of 1 ...enter d: - To square 1 ...enter e: - To cube 1 ...enter f: - To find out if 1 is a multiple of 3...enter g: - To divide 1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 1 is odd! -Class type is now E - - To add a number to 1 ...enter a: - To negate 1 ...enter b: - To find the difference between 1 and another number...enter c: - To find the factorial of 1 ...enter d: - To square 1 ...enter e: - To cube 1 ...enter f: - To find out if 1 is a multiple of 3...enter g: - To divide 1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 1 is odd! -Class type is now E - - To add a number to 1 ...enter a: - To negate 1 ...enter b: - To find the difference between 1 and another number...enter c: - To find the factorial of 1 ...enter d: - To square 1 ...enter e: - To cube 1 ...enter f: - To find out if 1 is a multiple of 3...enter g: - To divide 1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 1 is not divisible by 3. -number 1 is odd! -Class type is now E - - To add a number to 1 ...enter a: - To negate 1 ...enter b: - To find the difference between 1 and another number...enter c: - To find the factorial of 1 ...enter d: - To square 1 ...enter e: - To cube 1 ...enter f: - To find out if 1 is a multiple of 3...enter g: - To divide 1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 1 is equal to 0 times 8 with a remainder of 1 -number 0 is even! -Class type is now A - - To add a number to 0 ...enter a: - To negate 0 ...enter b: - To find the difference between 0 and another number...enter c: - To find the factorial of 0 ...enter d: - To square 0 ...enter e: - To cube 0 ...enter f: - To find out if 0 is a multiple of 3...enter g: - To divide 0 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 0 is even! -Class type is now A - - To add a number to 0 ...enter a: - To negate 0 ...enter b: - To find the difference between 0 and another number...enter c: - To find the factorial of 0 ...enter d: - To square 0 ...enter e: - To cube 0 ...enter f: - To find out if 0 is a multiple of 3...enter g: - To divide 0 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 0 is even! -Class type is now A - - To add a number to 0 ...enter a: - To negate 0 ...enter b: - To find the difference between 0 and another number...enter c: - To find the factorial of 0 ...enter d: - To square 0 ...enter e: - To cube 0 ...enter f: - To find out if 0 is a multiple of 3...enter g: - To divide 0 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - +number 0 is even! +Class type is now A + + To add a number to 0 ...enter a: + To negate 0 ...enter b: + To find the difference between 0 and another number...enter c: + To find the factorial of 0 ...enter d: + To square 0 ...enter e: + To cube 0 ...enter f: + To find out if 0 is a multiple of 3...enter g: + To divide 0 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + + +Please enter a number... number 1 is odd! +Class type is now B + + To add a number to 1 ...enter a: + To negate 1 ...enter b: + To find the difference between 1 and another number...enter c: + To find the factorial of 1 ...enter d: + To square 1 ...enter e: + To cube 1 ...enter f: + To find out if 1 is a multiple of 3...enter g: + To divide 1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number -1 is odd! +Class type is now C + + To add a number to -1 ...enter a: + To negate -1 ...enter b: + To find the difference between -1 and another number...enter c: + To find the factorial of -1 ...enter d: + To square -1 ...enter e: + To cube -1 ...enter f: + To find out if -1 is a multiple of 3...enter g: + To divide -1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + + +Please enter a number... number 1 is odd! +Class type is now D + + To add a number to 1 ...enter a: + To negate 1 ...enter b: + To find the difference between 1 and another number...enter c: + To find the factorial of 1 ...enter d: + To square 1 ...enter e: + To cube 1 ...enter f: + To find out if 1 is a multiple of 3...enter g: + To divide 1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 1 is odd! +Class type is now E + + To add a number to 1 ...enter a: + To negate 1 ...enter b: + To find the difference between 1 and another number...enter c: + To find the factorial of 1 ...enter d: + To square 1 ...enter e: + To cube 1 ...enter f: + To find out if 1 is a multiple of 3...enter g: + To divide 1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 1 is odd! +Class type is now E + + To add a number to 1 ...enter a: + To negate 1 ...enter b: + To find the difference between 1 and another number...enter c: + To find the factorial of 1 ...enter d: + To square 1 ...enter e: + To cube 1 ...enter f: + To find out if 1 is a multiple of 3...enter g: + To divide 1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 1 is odd! +Class type is now E + + To add a number to 1 ...enter a: + To negate 1 ...enter b: + To find the difference between 1 and another number...enter c: + To find the factorial of 1 ...enter d: + To square 1 ...enter e: + To cube 1 ...enter f: + To find out if 1 is a multiple of 3...enter g: + To divide 1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 1 is not divisible by 3. +number 1 is odd! +Class type is now E + + To add a number to 1 ...enter a: + To negate 1 ...enter b: + To find the difference between 1 and another number...enter c: + To find the factorial of 1 ...enter d: + To square 1 ...enter e: + To cube 1 ...enter f: + To find out if 1 is a multiple of 3...enter g: + To divide 1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 1 is equal to 0 times 8 with a remainder of 1 +number 0 is even! +Class type is now A + + To add a number to 0 ...enter a: + To negate 0 ...enter b: + To find the difference between 0 and another number...enter c: + To find the factorial of 0 ...enter d: + To square 0 ...enter e: + To cube 0 ...enter f: + To find out if 0 is a multiple of 3...enter g: + To divide 0 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 0 is even! +Class type is now A + + To add a number to 0 ...enter a: + To negate 0 ...enter b: + To find the difference between 0 and another number...enter c: + To find the factorial of 0 ...enter d: + To square 0 ...enter e: + To cube 0 ...enter f: + To find out if 0 is a multiple of 3...enter g: + To divide 0 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 0 is even! +Class type is now A + + To add a number to 0 ...enter a: + To negate 0 ...enter b: + To find the difference between 0 and another number...enter c: + To find the factorial of 0 ...enter d: + To square 0 ...enter e: + To cube 0 ...enter f: + To find out if 0 is a multiple of 3...enter g: + To divide 0 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + diff --git a/tests/codegen/atoi_output.txt b/tests/codegen/atoi_output.txt index 51b815a48..c51d7bad6 100644 --- a/tests/codegen/atoi_output.txt +++ b/tests/codegen/atoi_output.txt @@ -1 +1 @@ -678987 == 678987 +678987 == 678987 diff --git a/tests/codegen/book_list.cl b/tests/codegen/book_list.cl old mode 100755 new mode 100644 index 025ea1695..d39f86bbe --- a/tests/codegen/book_list.cl +++ b/tests/codegen/book_list.cl @@ -1,132 +1,132 @@ --- example of static and dynamic type differing for a dispatch - -Class Book inherits IO { - title : String; - author : String; - - initBook(title_p : String, author_p : String) : Book { - { - title <- title_p; - author <- author_p; - self; - } - }; - - print() : Book { - { - out_string("title: ").out_string(title).out_string("\n"); - out_string("author: ").out_string(author).out_string("\n"); - self; - } - }; -}; - -Class Article inherits Book { - per_title : String; - - initArticle(title_p : String, author_p : String, - per_title_p : String) : Article { - { - initBook(title_p, author_p); - per_title <- per_title_p; - self; - } - }; - - print() : Book { - { - self@Book.print(); - out_string("periodical: ").out_string(per_title).out_string("\n"); - self; - } - }; -}; - -Class BookList inherits IO { - (* Since abort "returns" type Object, we have to add - an expression of type Bool here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - isNil() : Bool { { abort(); true; } }; - - cons(hd : Book) : Cons { - (let new_cell : Cons <- new Cons in - new_cell.init(hd,self) - ) - }; - - (* Since abort "returns" type Object, we have to add - an expression of type Book here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - car() : Book { { abort(); new Book; } }; - - (* Since abort "returns" type Object, we have to add - an expression of type BookList here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - cdr() : BookList { { abort(); new BookList; } }; - - print_list() : Object { abort() }; -}; - -Class Cons inherits BookList { - xcar : Book; -- We keep the car and cdr in attributes. - xcdr : BookList; -- Because methods and features must have different names, - -- we use xcar and xcdr for the attributes and reserve - -- car and cdr for the features. - - isNil() : Bool { false }; - - init(hd : Book, tl : BookList) : Cons { - { - xcar <- hd; - xcdr <- tl; - self; - } - }; - - car() : Book { xcar }; - - cdr() : BookList { xcdr }; - - print_list() : Object { - { - case xcar.print() of - dummy : Book => out_string("- dynamic type was Book -\n"); - dummy : Article => out_string("- dynamic type was Article -\n"); - esac; - xcdr.print_list(); - } - }; -}; - -Class Nil inherits BookList { - isNil() : Bool { true }; - - print_list() : Object { true }; -}; - - -Class Main { - - books : BookList; - - main() : Object { - (let a_book : Book <- - (new Book).initBook("Compilers, Principles, Techniques, and Tools", - "Aho, Sethi, and Ullman") - in - (let an_article : Article <- - (new Article).initArticle("The Top 100 CD_ROMs", - "Ulanoff", - "PC Magazine") - in - { - books <- (new Nil).cons(a_book).cons(an_article); - books.print_list(); - } - ) -- end let an_article - ) -- end let a_book - }; -}; +-- example of static and dynamic type differing for a dispatch + +Class Book inherits IO { + title : String; + author : String; + + initBook(title_p : String, author_p : String) : Book { + { + title <- title_p; + author <- author_p; + self; + } + }; + + print() : Book { + { + out_string("title: ").out_string(title).out_string("\n"); + out_string("author: ").out_string(author).out_string("\n"); + self; + } + }; +}; + +Class Article inherits Book { + per_title : String; + + initArticle(title_p : String, author_p : String, + per_title_p : String) : Article { + { + initBook(title_p, author_p); + per_title <- per_title_p; + self; + } + }; + + print() : Book { + { + self@Book.print(); + out_string("periodical: ").out_string(per_title).out_string("\n"); + self; + } + }; +}; + +Class BookList inherits IO { + (* Since abort "returns" type Object, we have to add + an expression of type Bool here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + isNil() : Bool { { abort(); true; } }; + + cons(hd : Book) : Cons { + (let new_cell : Cons <- new Cons in + new_cell.init(hd,self) + ) + }; + + (* Since abort "returns" type Object, we have to add + an expression of type Book here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + car() : Book { { abort(); new Book; } }; + + (* Since abort "returns" type Object, we have to add + an expression of type BookList here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + cdr() : BookList { { abort(); new BookList; } }; + + print_list() : Object { abort() }; +}; + +Class Cons inherits BookList { + xcar : Book; -- We keep the car and cdr in attributes. + xcdr : BookList; -- Because methods and features must have different names, + -- we use xcar and xcdr for the attributes and reserve + -- car and cdr for the features. + + isNil() : Bool { false }; + + init(hd : Book, tl : BookList) : Cons { + { + xcar <- hd; + xcdr <- tl; + self; + } + }; + + car() : Book { xcar }; + + cdr() : BookList { xcdr }; + + print_list() : Object { + { + case xcar.print() of + dummy : Book => out_string("- dynamic type was Book -\n"); + dummy : Article => out_string("- dynamic type was Article -\n"); + esac; + xcdr.print_list(); + } + }; +}; + +Class Nil inherits BookList { + isNil() : Bool { true }; + + print_list() : Object { true }; +}; + + +Class Main { + + books : BookList; + + main() : Object { + (let a_book : Book <- + (new Book).initBook("Compilers, Principles, Techniques, and Tools", + "Aho, Sethi, and Ullman") + in + (let an_article : Article <- + (new Article).initArticle("The Top 100 CD_ROMs", + "Ulanoff", + "PC Magazine") + in + { + books <- (new Nil).cons(a_book).cons(an_article); + books.print_list(); + } + ) -- end let an_article + ) -- end let a_book + }; +}; diff --git a/tests/codegen/book_list_output.txt b/tests/codegen/book_list_output.txt index 3408320b2..ced587a4f 100644 --- a/tests/codegen/book_list_output.txt +++ b/tests/codegen/book_list_output.txt @@ -1,7 +1,7 @@ -title: The Top 100 CD_ROMs -author: Ulanoff -periodical: PC Magazine -- dynamic type was Article - -title: Compilers, Principles, Techniques, and Tools -author: Aho, Sethi, and Ullman -- dynamic type was Book - +title: The Top 100 CD_ROMs +author: Ulanoff +periodical: PC Magazine +- dynamic type was Article - +title: Compilers, Principles, Techniques, and Tools +author: Aho, Sethi, and Ullman +- dynamic type was Book - diff --git a/tests/codegen/cells.cl b/tests/codegen/cells.cl old mode 100755 new mode 100644 index 9fd6741bb..bcd891498 --- a/tests/codegen/cells.cl +++ b/tests/codegen/cells.cl @@ -1,97 +1,97 @@ -(* models one-dimensional cellular automaton on a circle of finite radius - arrays are faked as Strings, - X's respresent live cells, dots represent dead cells, - no error checking is done *) -class CellularAutomaton inherits IO { - population_map : String; - - init(map : String) : CellularAutomaton { - { - population_map <- map; - self; - } - }; - - print() : CellularAutomaton { - { - out_string(population_map.concat("\n")); - self; - } - }; - - num_cells() : Int { - population_map.length() - }; - - cell(position : Int) : String { - population_map.substr(position, 1) - }; - - cell_left_neighbor(position : Int) : String { - if position = 0 then - cell(num_cells() - 1) - else - cell(position - 1) - fi - }; - - cell_right_neighbor(position : Int) : String { - if position = num_cells() - 1 then - cell(0) - else - cell(position + 1) - fi - }; - - (* a cell will live if exactly 1 of itself and it's immediate - neighbors are alive *) - cell_at_next_evolution(position : Int) : String { - if (if cell(position) = "X" then 1 else 0 fi - + if cell_left_neighbor(position) = "X" then 1 else 0 fi - + if cell_right_neighbor(position) = "X" then 1 else 0 fi - = 1) - then - "X" - else - "." - fi - }; - - evolve() : CellularAutomaton { - (let position : Int in - (let num : Int <- num_cells() in - (let temp : String in - { - while position < num loop - { - temp <- temp.concat(cell_at_next_evolution(position)); - position <- position + 1; - } - pool; - population_map <- temp; - self; - } - ) ) ) - }; -}; - -class Main { - cells : CellularAutomaton; - - main() : Main { - { - cells <- (new CellularAutomaton).init(" X "); - cells.print(); - (let countdown : Int <- 20 in - while 0 < countdown loop - { - cells.evolve(); - cells.print(); - countdown <- countdown - 1; - } - pool - ); - self; - } - }; -}; +(* models one-dimensional cellular automaton on a circle of finite radius + arrays are faked as Strings, + X's respresent live cells, dots represent dead cells, + no error checking is done *) +class CellularAutomaton inherits IO { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + self; + } + }; + + print() : CellularAutomaton { + { + out_string(population_map.concat("\n")); + self; + } + }; + + num_cells() : Int { + population_map.length() + }; + + cell(position : Int) : String { + population_map.substr(position, 1) + }; + + cell_left_neighbor(position : Int) : String { + if position = 0 then + cell(num_cells() - 1) + else + cell(position - 1) + fi + }; + + cell_right_neighbor(position : Int) : String { + if position = num_cells() - 1 then + cell(0) + else + cell(position + 1) + fi + }; + + (* a cell will live if exactly 1 of itself and it's immediate + neighbors are alive *) + cell_at_next_evolution(position : Int) : String { + if (if cell(position) = "X" then 1 else 0 fi + + if cell_left_neighbor(position) = "X" then 1 else 0 fi + + if cell_right_neighbor(position) = "X" then 1 else 0 fi + = 1) + then + "X" + else + "." + fi + }; + + evolve() : CellularAutomaton { + (let position : Int in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) + }; +}; + +class Main { + cells : CellularAutomaton; + + main() : Main { + { + cells <- (new CellularAutomaton).init(" X "); + cells.print(); + (let countdown : Int <- 20 in + while 0 < countdown loop + { + cells.evolve(); + cells.print(); + countdown <- countdown - 1; + } + pool + ); + self; + } + }; +}; diff --git a/tests/codegen/cells_output.txt b/tests/codegen/cells_output.txt index 6304902cc..9d06c27bc 100644 --- a/tests/codegen/cells_output.txt +++ b/tests/codegen/cells_output.txt @@ -1,21 +1,21 @@ - X -........XXX........ -.......X...X....... -......XXX.XXX...... -.....X.......X..... -....XXX.....XXX.... -...X...X...X...X... -..XXX.XXX.XXX.XXX.. -.X...............X. -XXX.............XXX -...X...........X... -..XXX.........XXX.. -.X...X.......X...X. -XXX.XXX.....XXX.XXX -.......X...X....... -......XXX.XXX...... -.....X.......X..... -....XXX.....XXX.... -...X...X...X...X... -..XXX.XXX.XXX.XXX.. -.X...............X. + X +........XXX........ +.......X...X....... +......XXX.XXX...... +.....X.......X..... +....XXX.....XXX.... +...X...X...X...X... +..XXX.XXX.XXX.XXX.. +.X...............X. +XXX.............XXX +...X...........X... +..XXX.........XXX.. +.X...X.......X...X. +XXX.XXX.....XXX.XXX +.......X...X....... +......XXX.XXX...... +.....X.......X..... +....XXX.....XXX.... +...X...X...X...X... +..XXX.XXX.XXX.XXX.. +.X...............X. diff --git a/tests/codegen/complex.cl b/tests/codegen/complex.cl old mode 100755 new mode 100644 index 0b7aa44e9..9edb6151d --- a/tests/codegen/complex.cl +++ b/tests/codegen/complex.cl @@ -1,52 +1,52 @@ -class Main inherits IO { - main() : IO { - (let c : Complex <- (new Complex).init(1, 1) in - if c.reflect_X().reflect_Y() = c.reflect_0() - then out_string("=)\n") - else out_string("=(\n") - fi - ) - }; -}; - -class Complex inherits IO { - x : Int; - y : Int; - - init(a : Int, b : Int) : Complex { - { - x = a; - y = b; - self; - } - }; - - print() : Object { - if y = 0 - then out_int(x) - else out_int(x).out_string("+").out_int(y).out_string("I") - fi - }; - - reflect_0() : Complex { - { - x = ~x; - y = ~y; - self; - } - }; - - reflect_X() : Complex { - { - y = ~y; - self; - } - }; - - reflect_Y() : Complex { - { - x = ~x; - self; - } - }; -}; +class Main inherits IO { + main() : IO { + (let c : Complex <- (new Complex).init(1, 1) in + if c.reflect_X().reflect_Y() = c.reflect_0() + then out_string("=)\n") + else out_string("=(\n") + fi + ) + }; +}; + +class Complex inherits IO { + x : Int; + y : Int; + + init(a : Int, b : Int) : Complex { + { + x = a; + y = b; + self; + } + }; + + print() : Object { + if y = 0 + then out_int(x) + else out_int(x).out_string("+").out_int(y).out_string("I") + fi + }; + + reflect_0() : Complex { + { + x = ~x; + y = ~y; + self; + } + }; + + reflect_X() : Complex { + { + y = ~y; + self; + } + }; + + reflect_Y() : Complex { + { + x = ~x; + self; + } + }; +}; diff --git a/tests/codegen/complex_output.txt b/tests/codegen/complex_output.txt index 18b77c1fc..7d6173685 100644 --- a/tests/codegen/complex_output.txt +++ b/tests/codegen/complex_output.txt @@ -1 +1 @@ -=) +=) diff --git a/tests/codegen/fib.cl b/tests/codegen/fib.cl index 08ceaede8..ced8cee48 100644 --- a/tests/codegen/fib.cl +++ b/tests/codegen/fib.cl @@ -1,29 +1,29 @@ -class Main inherits IO { - -- the class has features. Only methods in this case. - main(): Object { - { - out_string("Enter n to find nth fibonacci number!\n"); - out_int(fib(in_int())); - out_string("\n"); - } - }; - - fib(i : Int) : Int { -- list of formals. And the return type of the method. - let a : Int <- 1, - b : Int <- 0, - c : Int <- 0 - in - { - while (not (i = 0)) loop -- expressions are nested. - { - c <- a + b; - i <- i - 1; - b <- a; - a <- c; - } - pool; - c; - } - }; - -}; +class Main inherits IO { + -- the class has features. Only methods in this case. + main(): Object { + { + out_string("Enter n to find nth fibonacci number!\n"); + out_int(fib(in_int())); + out_string("\n"); + } + }; + + fib(i : Int) : Int { -- list of formals. And the return type of the method. + let a : Int <- 1, + b : Int <- 0, + c : Int <- 0 + in + { + while (not (i = 0)) loop -- expressions are nested. + { + c <- a + b; + i <- i - 1; + b <- a; + a <- c; + } + pool; + c; + } + }; + +}; diff --git a/tests/codegen/fib_input.txt b/tests/codegen/fib_input.txt index f599e28b8..d43401489 100644 --- a/tests/codegen/fib_input.txt +++ b/tests/codegen/fib_input.txt @@ -1 +1 @@ -10 +10 diff --git a/tests/codegen/fib_output.txt b/tests/codegen/fib_output.txt index d402da6af..2552f4479 100644 --- a/tests/codegen/fib_output.txt +++ b/tests/codegen/fib_output.txt @@ -1,2 +1,2 @@ -Enter n to find nth fibonacci number! -89 +Enter n to find nth fibonacci number! +89 diff --git a/tests/codegen/graph.cl b/tests/codegen/graph.cl old mode 100755 new mode 100644 index 8e511358c..59e29bbf4 --- a/tests/codegen/graph.cl +++ b/tests/codegen/graph.cl @@ -1,381 +1,381 @@ -(* - * Cool program reading descriptions of weighted directed graphs - * from stdin. It builds up a graph objects with a list of vertices - * and a list of edges. Every vertice has a list of outgoing edges. - * - * INPUT FORMAT - * Every line has the form vertice successor* - * Where vertice is an int, and successor is vertice,weight - * - * An empty line or EOF terminates the input. - * - * The list of vertices and the edge list is printed out by the Main - * class. - * - * TEST - * Once compiled, the file g1.graph can be fed to the program. - * The output should look like this: - -nautilus.CS.Berkeley.EDU 53# spim -file graph.s (new Bar); - n : Foo => (new Razz); - n : Bar => n; - esac; - - b : Int <- a.doh() + g.doh() + doh() + printh(); - - doh() : Int { (let i : Int <- h in { h <- h + 2; i; } ) }; - -}; - -class Bar inherits Razz { - - c : Int <- doh(); - - d : Object <- printh(); -}; - - -class Razz inherits Foo { - - e : Bar <- case self of - n : Razz => (new Bar); - n : Bar => n; - esac; - - f : Int <- a@Bazz.doh() + g.doh() + e.doh() + doh() + printh(); - -}; - -class Bazz inherits IO { - - h : Int <- 1; - - g : Foo <- case self of - n : Bazz => (new Foo); - n : Razz => (new Bar); - n : Foo => (new Razz); - n : Bar => n; - esac; - - i : Object <- printh(); - - printh() : Int { { out_int(h); 0; } }; - - doh() : Int { (let i: Int <- h in { h <- h + 1; i; } ) }; -}; - -(* scary . . . *) -class Main { - a : Bazz <- new Bazz; - b : Foo <- new Foo; - c : Razz <- new Razz; - d : Bar <- new Bar; - - main(): String { "do nothing" }; - -}; - - - - - +(* hairy . . .*) + +class Foo inherits Bazz { + a : Razz <- case self of + n : Razz => (new Bar); + n : Foo => (new Razz); + n : Bar => n; + esac; + + b : Int <- a.doh() + g.doh() + doh() + printh(); + + doh() : Int { (let i : Int <- h in { h <- h + 2; i; } ) }; + +}; + +class Bar inherits Razz { + + c : Int <- doh(); + + d : Object <- printh(); +}; + + +class Razz inherits Foo { + + e : Bar <- case self of + n : Razz => (new Bar); + n : Bar => n; + esac; + + f : Int <- a@Bazz.doh() + g.doh() + e.doh() + doh() + printh(); + +}; + +class Bazz inherits IO { + + h : Int <- 1; + + g : Foo <- case self of + n : Bazz => (new Foo); + n : Razz => (new Bar); + n : Foo => (new Razz); + n : Bar => n; + esac; + + i : Object <- printh(); + + printh() : Int { { out_int(h); 0; } }; + + doh() : Int { (let i: Int <- h in { h <- h + 1; i; } ) }; +}; + +(* scary . . . *) +class Main { + a : Bazz <- new Bazz; + b : Foo <- new Foo; + c : Razz <- new Razz; + d : Bar <- new Bar; + + main(): String { "do nothing" }; + +}; + + + + + diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl old mode 100755 new mode 100644 index 0c818f908..b0a180a2e --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,5 +1,5 @@ -class Main inherits IO { - main(): IO { - out_string("Hello, World.\n") - }; -}; +class Main inherits IO { + main(): IO { + out_string("Hello, World.\n") + }; +}; diff --git a/tests/codegen/hello_world_output.txt b/tests/codegen/hello_world_output.txt index 349db2bfe..9c1c7a002 100644 --- a/tests/codegen/hello_world_output.txt +++ b/tests/codegen/hello_world_output.txt @@ -1 +1 @@ -Hello, World. +Hello, World. diff --git a/tests/codegen/io.cl b/tests/codegen/io.cl old mode 100755 new mode 100644 index 7f0de869e..42ee6854e --- a/tests/codegen/io.cl +++ b/tests/codegen/io.cl @@ -1,103 +1,103 @@ -(* - * The IO class is predefined and has 4 methods: - * - * out_string(s : String) : SELF_TYPE - * out_int(i : Int) : SELF_TYPE - * in_string() : String - * in_int() : Int - * - * The out operations print their argument to the terminal. The - * in_string method reads an entire line from the terminal and returns a - * string not containing the new line. The in_int method also reads - * an entire line from the terminal and returns the integer - * corresponding to the first non blank word on the line. If that - * word is not an integer, it returns 0. - * - * - * Because our language is object oriented, we need an object of type - * IO in order to call any of these methods. - * - * There are basically two ways of getting access to IO in a class C. - * - * 1) Define C to Inherit from IO. This way the IO methods become - * methods of C, and they can be called using the abbreviated - * dispatch, i.e. - * - * class C inherits IO is - * ... - * out_string("Hello world\n") - * ... - * end; - * - * 2) If your class C does not directly or indirectly inherit from - * IO, the best way to access IO is through an initialized - * attribute of type IO. - * - * class C inherits Foo is - * io : IO <- new IO; - * ... - * io.out_string("Hello world\n"); - * ... - * end; - * - * Approach 1) is most often used, in particular when you need IO - * functions in the Main class. - * - *) - - -class A { - - -- Let's assume that we don't want A to not inherit from IO. - - io : IO <- new IO; - - out_a() : Object { io.out_string("A: Hello world\n") }; - -}; - - -class B inherits A { - - -- B does not have to an extra attribute, since it inherits io from A. - - out_b() : Object { io.out_string("B: Hello world\n") }; - -}; - - -class C inherits IO { - - -- Now the IO methods are part of C. - - out_c() : Object { out_string("C: Hello world\n") }; - - -- Note that out_string(...) is just a shorthand for self.out_string(...) - -}; - - -class D inherits C { - - -- Inherits IO methods from C. - - out_d() : Object { out_string("D: Hello world\n") }; - -}; - - -class Main inherits IO { - - -- Same case as class C. - - main() : Object { - { - (new A).out_a(); - (new B).out_b(); - (new C).out_c(); - (new D).out_d(); - out_string("Done.\n"); - } - }; - -}; +(* + * The IO class is predefined and has 4 methods: + * + * out_string(s : String) : SELF_TYPE + * out_int(i : Int) : SELF_TYPE + * in_string() : String + * in_int() : Int + * + * The out operations print their argument to the terminal. The + * in_string method reads an entire line from the terminal and returns a + * string not containing the new line. The in_int method also reads + * an entire line from the terminal and returns the integer + * corresponding to the first non blank word on the line. If that + * word is not an integer, it returns 0. + * + * + * Because our language is object oriented, we need an object of type + * IO in order to call any of these methods. + * + * There are basically two ways of getting access to IO in a class C. + * + * 1) Define C to Inherit from IO. This way the IO methods become + * methods of C, and they can be called using the abbreviated + * dispatch, i.e. + * + * class C inherits IO is + * ... + * out_string("Hello world\n") + * ... + * end; + * + * 2) If your class C does not directly or indirectly inherit from + * IO, the best way to access IO is through an initialized + * attribute of type IO. + * + * class C inherits Foo is + * io : IO <- new IO; + * ... + * io.out_string("Hello world\n"); + * ... + * end; + * + * Approach 1) is most often used, in particular when you need IO + * functions in the Main class. + * + *) + + +class A { + + -- Let's assume that we don't want A to not inherit from IO. + + io : IO <- new IO; + + out_a() : Object { io.out_string("A: Hello world\n") }; + +}; + + +class B inherits A { + + -- B does not have to an extra attribute, since it inherits io from A. + + out_b() : Object { io.out_string("B: Hello world\n") }; + +}; + + +class C inherits IO { + + -- Now the IO methods are part of C. + + out_c() : Object { out_string("C: Hello world\n") }; + + -- Note that out_string(...) is just a shorthand for self.out_string(...) + +}; + + +class D inherits C { + + -- Inherits IO methods from C. + + out_d() : Object { out_string("D: Hello world\n") }; + +}; + + +class Main inherits IO { + + -- Same case as class C. + + main() : Object { + { + (new A).out_a(); + (new B).out_b(); + (new C).out_c(); + (new D).out_d(); + out_string("Done.\n"); + } + }; + +}; diff --git a/tests/codegen/io_output.txt b/tests/codegen/io_output.txt index f846f596d..870cffce6 100644 --- a/tests/codegen/io_output.txt +++ b/tests/codegen/io_output.txt @@ -1,5 +1,5 @@ -A: Hello world -B: Hello world -C: Hello world -D: Hello world -Done. +A: Hello world +B: Hello world +C: Hello world +D: Hello world +Done. diff --git a/tests/codegen/life.cl b/tests/codegen/life.cl old mode 100755 new mode 100644 index b83d97957..7d7a41fdb --- a/tests/codegen/life.cl +++ b/tests/codegen/life.cl @@ -1,436 +1,436 @@ -(* The Game of Life - Tendo Kayiira, Summer '95 - With code taken from /private/cool/class/examples/cells.cl - - This introduction was taken off the internet. It gives a brief - description of the Game Of Life. It also gives the rules by which - this particular game follows. - - Introduction - - John Conway's Game of Life is a mathematical amusement, but it - is also much more: an insight into how a system of simple - cellualar automata can create complex, odd, and often aesthetically - pleasing patterns. It is played on a cartesian grid of cells - which are either 'on' or 'off' The game gets it's name from the - similarity between the behaviour of these cells and the behaviour - of living organisms. - - The Rules - - The playfield is a cartesian grid of arbitrary size. Each cell in - this grid can be in an 'on' state or an 'off' state. On each 'turn' - (called a generation,) the state of each cell changes simultaneously - depending on it's state and the state of all cells adjacent to it. - - For 'on' cells, - If the cell has 0 or 1 neighbours which are 'on', the cell turns - 'off'. ('dies of loneliness') - If the cell has 2 or 3 neighbours which are 'on', the cell stays - 'on'. (nothing happens to that cell) - If the cell has 4, 5, 6, 7, 8, or 9 neighbours which are 'on', - the cell turns 'off'. ('dies of overcrowding') - - For 'off' cells, - If the cell has 0, 1, 2, 4, 5, 6, 7, 8, or 9 neighbours which - are 'on', the cell stays 'off'. (nothing happens to that cell) - If the cell has 3 neighbours which are 'on', the cell turns - 'on'. (3 neighbouring 'alive' cells 'give birth' to a fourth.) - - Repeat for as many generations as desired. - - *) - - -class Board inherits IO { - - rows : Int; - columns : Int; - board_size : Int; - - size_of_board(initial : String) : Int { - initial.length() - }; - - board_init(start : String) : Board { - (let size :Int <- size_of_board(start) in - { - if size = 15 then - { - rows <- 3; - columns <- 5; - board_size <- size; - } - else if size = 16 then - { - rows <- 4; - columns <- 4; - board_size <- size; - } - else if size = 20 then - { - rows <- 4; - columns <- 5; - board_size <- size; - } - else if size = 21 then - { - rows <- 3; - columns <- 7; - board_size <- size; - } - else if size = 25 then - { - rows <- 5; - columns <- 5; - board_size <- size; - } - else if size = 28 then - { - rows <- 7; - columns <- 4; - board_size <- size; - } - else -- If none of the above fit, then just give - { -- the configuration of the most common board - rows <- 5; - columns <- 5; - board_size <- size; - } - fi fi fi fi fi fi; - self; - } - ) - }; - -}; - - - -class CellularAutomaton inherits Board { - population_map : String; - - init(map : String) : CellularAutomaton { - { - population_map <- map; - board_init(map); - self; - } - }; - - - - - print() : CellularAutomaton { - - (let i : Int <- 0 in - (let num : Int <- board_size in - { - out_string("\n"); - while i < num loop - { - out_string(population_map.substr(i,columns)); - out_string("\n"); - i <- i + columns; - } - pool; - out_string("\n"); - self; - } - ) ) - }; - - num_cells() : Int { - population_map.length() - }; - - cell(position : Int) : String { - if board_size - 1 < position then - " " - else - population_map.substr(position, 1) - fi - }; - - north(position : Int): String { - if (position - columns) < 0 then - " " - else - cell(position - columns) - fi - }; - - south(position : Int): String { - if board_size < (position + columns) then - " " - else - cell(position + columns) - fi - }; - - east(position : Int): String { - if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - cell(position + 1) - fi - }; - - west(position : Int): String { - if position = 0 then - " " - else - if ((position / columns) * columns) = position then - " " - else - cell(position - 1) - fi fi - }; - - northwest(position : Int): String { - if (position - columns) < 0 then - " " - else if ((position / columns) * columns) = position then - " " - else - north(position - 1) - fi fi - }; - - northeast(position : Int): String { - if (position - columns) < 0 then - " " - else if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - north(position + 1) - fi fi - }; - - southeast(position : Int): String { - if board_size < (position + columns) then - " " - else if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - south(position + 1) - fi fi - }; - - southwest(position : Int): String { - if board_size < (position + columns) then - " " - else if ((position / columns) * columns) = position then - " " - else - south(position - 1) - fi fi - }; - - neighbors(position: Int): Int { - { - if north(position) = "X" then 1 else 0 fi - + if south(position) = "X" then 1 else 0 fi - + if east(position) = "X" then 1 else 0 fi - + if west(position) = "X" then 1 else 0 fi - + if northeast(position) = "X" then 1 else 0 fi - + if northwest(position) = "X" then 1 else 0 fi - + if southeast(position) = "X" then 1 else 0 fi - + if southwest(position) = "X" then 1 else 0 fi; - } - }; - - -(* A cell will live if 2 or 3 of it's neighbors are alive. It dies - otherwise. A cell is born if only 3 of it's neighbors are alive. *) - - cell_at_next_evolution(position : Int) : String { - - if neighbors(position) = 3 then - "X" - else - if neighbors(position) = 2 then - if cell(position) = "X" then - "X" - else - "-" - fi - else - "-" - fi fi - }; - - - evolve() : CellularAutomaton { - (let position : Int <- 0 in - (let num : Int <- num_cells() in - (let temp : String in - { - while position < num loop - { - temp <- temp.concat(cell_at_next_evolution(position)); - position <- position + 1; - } - pool; - population_map <- temp; - self; - } - ) ) ) - }; - -(* This is where the background pattern is detremined by the user. More - patterns can be added as long as whoever adds keeps the board either - 3x5, 4x5, 5x5, 3x7, 7x4, 4x4 with the row first then column. *) - option(): String { - { - (let num : Int in - { - out_string("\nPlease chose a number:\n"); - out_string("\t1: A cross\n"); - out_string("\t2: A slash from the upper left to lower right\n"); - out_string("\t3: A slash from the upper right to lower left\n"); - out_string("\t4: An X\n"); - out_string("\t5: A greater than sign \n"); - out_string("\t6: A less than sign\n"); - out_string("\t7: Two greater than signs\n"); - out_string("\t8: Two less than signs\n"); - out_string("\t9: A 'V'\n"); - out_string("\t10: An inverse 'V'\n"); - out_string("\t11: Numbers 9 and 10 combined\n"); - out_string("\t12: A full grid\n"); - out_string("\t13: A 'T'\n"); - out_string("\t14: A plus '+'\n"); - out_string("\t15: A 'W'\n"); - out_string("\t16: An 'M'\n"); - out_string("\t17: An 'E'\n"); - out_string("\t18: A '3'\n"); - out_string("\t19: An 'O'\n"); - out_string("\t20: An '8'\n"); - out_string("\t21: An 'S'\n"); - out_string("Your choice => "); - num <- in_int(); - out_string("\n"); - if num = 1 then - " XX XXXX XXXX XX " - else if num = 2 then - " X X X X X " - else if num = 3 then - "X X X X X" - else if num = 4 then - "X X X X X X X X X" - else if num = 5 then - "X X X X X " - else if num = 6 then - " X X X X X" - else if num = 7 then - "X X X XX X " - else if num = 8 then - " X XX X X X " - else if num = 9 then - "X X X X X " - else if num = 10 then - " X X X X X" - else if num = 11 then - "X X X X X X X X" - else if num = 12 then - "XXXXXXXXXXXXXXXXXXXXXXXXX" - else if num = 13 then - "XXXXX X X X X " - else if num = 14 then - " X X XXXXX X X " - else if num = 15 then - "X X X X X X X " - else if num = 16 then - " X X X X X X X" - else if num = 17 then - "XXXXX X XXXXX X XXXX" - else if num = 18 then - "XXX X X X X XXXX " - else if num = 19 then - " XX X XX X XX " - else if num = 20 then - " XX X XX X XX X XX X XX " - else if num = 21 then - " XXXX X XX X XXXX " - else - " " - fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi; - } - ); - } - }; - - - - - prompt() : Bool { - { - (let ans : String in - { - out_string("Would you like to continue with the next generation? \n"); - out_string("Please use lowercase y or n for your answer [y]: "); - ans <- in_string(); - out_string("\n"); - if ans = "n" then - false - else - true - fi; - } - ); - } - }; - - - prompt2() : Bool { - (let ans : String in - { - out_string("\n\n"); - out_string("Would you like to choose a background pattern? \n"); - out_string("Please use lowercase y or n for your answer [n]: "); - ans <- in_string(); - if ans = "y" then - true - else - false - fi; - } - ) - }; - - -}; - -class Main inherits CellularAutomaton { - cells : CellularAutomaton; - - main() : Main { - { - (let continue : Bool in - (let choice : String in - { - out_string("Welcome to the Game of Life.\n"); - out_string("There are many initial states to choose from. \n"); - while prompt2() loop - { - continue <- true; - choice <- option(); - cells <- (new CellularAutomaton).init(choice); - cells.print(); - while continue loop - if prompt() then - { - cells.evolve(); - cells.print(); - } - else - continue <- false - fi - pool; - } - pool; - self; - } ) ); } - }; -}; - +(* The Game of Life + Tendo Kayiira, Summer '95 + With code taken from /private/cool/class/examples/cells.cl + + This introduction was taken off the internet. It gives a brief + description of the Game Of Life. It also gives the rules by which + this particular game follows. + + Introduction + + John Conway's Game of Life is a mathematical amusement, but it + is also much more: an insight into how a system of simple + cellualar automata can create complex, odd, and often aesthetically + pleasing patterns. It is played on a cartesian grid of cells + which are either 'on' or 'off' The game gets it's name from the + similarity between the behaviour of these cells and the behaviour + of living organisms. + + The Rules + + The playfield is a cartesian grid of arbitrary size. Each cell in + this grid can be in an 'on' state or an 'off' state. On each 'turn' + (called a generation,) the state of each cell changes simultaneously + depending on it's state and the state of all cells adjacent to it. + + For 'on' cells, + If the cell has 0 or 1 neighbours which are 'on', the cell turns + 'off'. ('dies of loneliness') + If the cell has 2 or 3 neighbours which are 'on', the cell stays + 'on'. (nothing happens to that cell) + If the cell has 4, 5, 6, 7, 8, or 9 neighbours which are 'on', + the cell turns 'off'. ('dies of overcrowding') + + For 'off' cells, + If the cell has 0, 1, 2, 4, 5, 6, 7, 8, or 9 neighbours which + are 'on', the cell stays 'off'. (nothing happens to that cell) + If the cell has 3 neighbours which are 'on', the cell turns + 'on'. (3 neighbouring 'alive' cells 'give birth' to a fourth.) + + Repeat for as many generations as desired. + + *) + + +class Board inherits IO { + + rows : Int; + columns : Int; + board_size : Int; + + size_of_board(initial : String) : Int { + initial.length() + }; + + board_init(start : String) : Board { + (let size :Int <- size_of_board(start) in + { + if size = 15 then + { + rows <- 3; + columns <- 5; + board_size <- size; + } + else if size = 16 then + { + rows <- 4; + columns <- 4; + board_size <- size; + } + else if size = 20 then + { + rows <- 4; + columns <- 5; + board_size <- size; + } + else if size = 21 then + { + rows <- 3; + columns <- 7; + board_size <- size; + } + else if size = 25 then + { + rows <- 5; + columns <- 5; + board_size <- size; + } + else if size = 28 then + { + rows <- 7; + columns <- 4; + board_size <- size; + } + else -- If none of the above fit, then just give + { -- the configuration of the most common board + rows <- 5; + columns <- 5; + board_size <- size; + } + fi fi fi fi fi fi; + self; + } + ) + }; + +}; + + + +class CellularAutomaton inherits Board { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + board_init(map); + self; + } + }; + + + + + print() : CellularAutomaton { + + (let i : Int <- 0 in + (let num : Int <- board_size in + { + out_string("\n"); + while i < num loop + { + out_string(population_map.substr(i,columns)); + out_string("\n"); + i <- i + columns; + } + pool; + out_string("\n"); + self; + } + ) ) + }; + + num_cells() : Int { + population_map.length() + }; + + cell(position : Int) : String { + if board_size - 1 < position then + " " + else + population_map.substr(position, 1) + fi + }; + + north(position : Int): String { + if (position - columns) < 0 then + " " + else + cell(position - columns) + fi + }; + + south(position : Int): String { + if board_size < (position + columns) then + " " + else + cell(position + columns) + fi + }; + + east(position : Int): String { + if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + cell(position + 1) + fi + }; + + west(position : Int): String { + if position = 0 then + " " + else + if ((position / columns) * columns) = position then + " " + else + cell(position - 1) + fi fi + }; + + northwest(position : Int): String { + if (position - columns) < 0 then + " " + else if ((position / columns) * columns) = position then + " " + else + north(position - 1) + fi fi + }; + + northeast(position : Int): String { + if (position - columns) < 0 then + " " + else if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + north(position + 1) + fi fi + }; + + southeast(position : Int): String { + if board_size < (position + columns) then + " " + else if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + south(position + 1) + fi fi + }; + + southwest(position : Int): String { + if board_size < (position + columns) then + " " + else if ((position / columns) * columns) = position then + " " + else + south(position - 1) + fi fi + }; + + neighbors(position: Int): Int { + { + if north(position) = "X" then 1 else 0 fi + + if south(position) = "X" then 1 else 0 fi + + if east(position) = "X" then 1 else 0 fi + + if west(position) = "X" then 1 else 0 fi + + if northeast(position) = "X" then 1 else 0 fi + + if northwest(position) = "X" then 1 else 0 fi + + if southeast(position) = "X" then 1 else 0 fi + + if southwest(position) = "X" then 1 else 0 fi; + } + }; + + +(* A cell will live if 2 or 3 of it's neighbors are alive. It dies + otherwise. A cell is born if only 3 of it's neighbors are alive. *) + + cell_at_next_evolution(position : Int) : String { + + if neighbors(position) = 3 then + "X" + else + if neighbors(position) = 2 then + if cell(position) = "X" then + "X" + else + "-" + fi + else + "-" + fi fi + }; + + + evolve() : CellularAutomaton { + (let position : Int <- 0 in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) + }; + +(* This is where the background pattern is detremined by the user. More + patterns can be added as long as whoever adds keeps the board either + 3x5, 4x5, 5x5, 3x7, 7x4, 4x4 with the row first then column. *) + option(): String { + { + (let num : Int in + { + out_string("\nPlease chose a number:\n"); + out_string("\t1: A cross\n"); + out_string("\t2: A slash from the upper left to lower right\n"); + out_string("\t3: A slash from the upper right to lower left\n"); + out_string("\t4: An X\n"); + out_string("\t5: A greater than sign \n"); + out_string("\t6: A less than sign\n"); + out_string("\t7: Two greater than signs\n"); + out_string("\t8: Two less than signs\n"); + out_string("\t9: A 'V'\n"); + out_string("\t10: An inverse 'V'\n"); + out_string("\t11: Numbers 9 and 10 combined\n"); + out_string("\t12: A full grid\n"); + out_string("\t13: A 'T'\n"); + out_string("\t14: A plus '+'\n"); + out_string("\t15: A 'W'\n"); + out_string("\t16: An 'M'\n"); + out_string("\t17: An 'E'\n"); + out_string("\t18: A '3'\n"); + out_string("\t19: An 'O'\n"); + out_string("\t20: An '8'\n"); + out_string("\t21: An 'S'\n"); + out_string("Your choice => "); + num <- in_int(); + out_string("\n"); + if num = 1 then + " XX XXXX XXXX XX " + else if num = 2 then + " X X X X X " + else if num = 3 then + "X X X X X" + else if num = 4 then + "X X X X X X X X X" + else if num = 5 then + "X X X X X " + else if num = 6 then + " X X X X X" + else if num = 7 then + "X X X XX X " + else if num = 8 then + " X XX X X X " + else if num = 9 then + "X X X X X " + else if num = 10 then + " X X X X X" + else if num = 11 then + "X X X X X X X X" + else if num = 12 then + "XXXXXXXXXXXXXXXXXXXXXXXXX" + else if num = 13 then + "XXXXX X X X X " + else if num = 14 then + " X X XXXXX X X " + else if num = 15 then + "X X X X X X X " + else if num = 16 then + " X X X X X X X" + else if num = 17 then + "XXXXX X XXXXX X XXXX" + else if num = 18 then + "XXX X X X X XXXX " + else if num = 19 then + " XX X XX X XX " + else if num = 20 then + " XX X XX X XX X XX X XX " + else if num = 21 then + " XXXX X XX X XXXX " + else + " " + fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi; + } + ); + } + }; + + + + + prompt() : Bool { + { + (let ans : String in + { + out_string("Would you like to continue with the next generation? \n"); + out_string("Please use lowercase y or n for your answer [y]: "); + ans <- in_string(); + out_string("\n"); + if ans = "n" then + false + else + true + fi; + } + ); + } + }; + + + prompt2() : Bool { + (let ans : String in + { + out_string("\n\n"); + out_string("Would you like to choose a background pattern? \n"); + out_string("Please use lowercase y or n for your answer [n]: "); + ans <- in_string(); + if ans = "y" then + true + else + false + fi; + } + ) + }; + + +}; + +class Main inherits CellularAutomaton { + cells : CellularAutomaton; + + main() : Main { + { + (let continue : Bool in + (let choice : String in + { + out_string("Welcome to the Game of Life.\n"); + out_string("There are many initial states to choose from. \n"); + while prompt2() loop + { + continue <- true; + choice <- option(); + cells <- (new CellularAutomaton).init(choice); + cells.print(); + while continue loop + if prompt() then + { + cells.evolve(); + cells.print(); + } + else + continue <- false + fi + pool; + } + pool; + self; + } ) ); } + }; +}; + diff --git a/tests/codegen/life_input.txt b/tests/codegen/life_input.txt index 07e016726..1dfbde620 100644 --- a/tests/codegen/life_input.txt +++ b/tests/codegen/life_input.txt @@ -1,66 +1,66 @@ -y -1 -n -y -2 -n -y -3 -n -y -4 -n -y -5 -n -y -6 -n -y -7 -n -y -8 -n -y -9 -n -y -10 -n -y -11 -n -y -12 -n -y -13 -n -y -14 -n -y -15 -n -y -16 -n -y -17 -n -y -18 -n -y -19 -n -y -20 -n -y -21 -y -y -n +y +1 +n +y +2 +n +y +3 +n +y +4 +n +y +5 +n +y +6 +n +y +7 +n +y +8 +n +y +9 +n +y +10 +n +y +11 +n +y +12 +n +y +13 +n +y +14 +n +y +15 +n +y +16 +n +y +17 +n +y +18 +n +y +19 +n +y +20 +n +y +21 +y +y +n n \ No newline at end of file diff --git a/tests/codegen/life_output.txt b/tests/codegen/life_output.txt index 5a9b9f73d..e804b2382 100644 --- a/tests/codegen/life_output.txt +++ b/tests/codegen/life_output.txt @@ -1,778 +1,778 @@ -Welcome to the Game of Life. -There are many initial states to choose from. - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - XX -XXXX -XXXX - XX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - X - X - X - X -X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X - X - X - X - X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X X - X X - X - X X -X X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X - X - X - X -X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - X - X - X - X - X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X X - X X -X X - - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - X X -X X - X X - - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X X - X X - X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - X - X X -X X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X X X - X X -X X X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -XXXXX -XXXXX -XXXXX -XXXXX -XXXXX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -XXXXX - X - X - X - X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - X - X -XXXXX - X - X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X X - X X X - X X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - X X - X X X -X X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -XXXX -X -X -XXXX -X -X -XXXX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -XXX - X - X - X - X - X -XXX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - XX -X X -X X - XX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - XX -X X -X X - XX -X X -X X - XX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - XXX -X -X - XX - X - X -XXX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - --XX- -X-X- -X--- --XX- ----X --X-X --XX- - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - --XX- -X-X- -X-X- --XX- --X-X --X-X --XX- - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? +Welcome to the Game of Life. +There are many initial states to choose from. + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + XX +XXXX +XXXX + XX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + X + X + X + X +X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X + X + X + X + X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X X + X X + X + X X +X X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X + X + X + X +X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + X + X + X + X + X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X X + X X +X X + + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + X X +X X + X X + + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X X + X X + X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + X + X X +X X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X X X + X X +X X X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +XXXXX +XXXXX +XXXXX +XXXXX +XXXXX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +XXXXX + X + X + X + X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + X + X +XXXXX + X + X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X X + X X X + X X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + X X + X X X +X X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +XXXX +X +X +XXXX +X +X +XXXX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +XXX + X + X + X + X + X +XXX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + XX +X X +X X + XX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + XX +X X +X X + XX +X X +X X + XX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + XXX +X +X + XX + X + X +XXX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + +-XX- +X-X- +X--- +-XX- +---X +-X-X +-XX- + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + +-XX- +X-X- +X-X- +-XX- +-X-X +-X-X +-XX- + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? Please use lowercase y or n for your answer [n]: \ No newline at end of file diff --git a/tests/codegen/list_output.txt b/tests/codegen/list_output.txt index fca724903..00d68ed23 100644 --- a/tests/codegen/list_output.txt +++ b/tests/codegen/list_output.txt @@ -1,5 +1,5 @@ -5 4 3 2 1 -4 3 2 1 -3 2 1 -2 1 -1 +5 4 3 2 1 +4 3 2 1 +3 2 1 +2 1 +1 diff --git a/tests/codegen/new_complex.cl b/tests/codegen/new_complex.cl old mode 100755 new mode 100644 index a4fe714ce..ad7035b56 --- a/tests/codegen/new_complex.cl +++ b/tests/codegen/new_complex.cl @@ -1,79 +1,79 @@ -class Main inherits IO { - main() : IO { - (let c : Complex <- (new Complex).init(1, 1) in - { - -- trivially equal (see CoolAid) - if c.reflect_X() = c.reflect_0() - then out_string("=)\n") - else out_string("=(\n") - fi; - -- equal - if c.reflect_X().reflect_Y().equal(c.reflect_0()) - then out_string("=)\n") - else out_string("=(\n") - fi; - } - ) - }; -}; - -class Complex inherits IO { - x : Int; - y : Int; - - init(a : Int, b : Int) : Complex { - { - x = a; - y = b; - self; - } - }; - - print() : Object { - if y = 0 - then out_int(x) - else out_int(x).out_string("+").out_int(y).out_string("I") - fi - }; - - reflect_0() : Complex { - { - x = ~x; - y = ~y; - self; - } - }; - - reflect_X() : Complex { - { - y = ~y; - self; - } - }; - - reflect_Y() : Complex { - { - x = ~x; - self; - } - }; - - equal(d : Complex) : Bool { - if x = d.x_value() - then - if y = d.y_value() - then true - else false - fi - else false - fi - }; - - x_value() : Int { - x - }; - - y_value() : Int { - y - }; -}; +class Main inherits IO { + main() : IO { + (let c : Complex <- (new Complex).init(1, 1) in + { + -- trivially equal (see CoolAid) + if c.reflect_X() = c.reflect_0() + then out_string("=)\n") + else out_string("=(\n") + fi; + -- equal + if c.reflect_X().reflect_Y().equal(c.reflect_0()) + then out_string("=)\n") + else out_string("=(\n") + fi; + } + ) + }; +}; + +class Complex inherits IO { + x : Int; + y : Int; + + init(a : Int, b : Int) : Complex { + { + x = a; + y = b; + self; + } + }; + + print() : Object { + if y = 0 + then out_int(x) + else out_int(x).out_string("+").out_int(y).out_string("I") + fi + }; + + reflect_0() : Complex { + { + x = ~x; + y = ~y; + self; + } + }; + + reflect_X() : Complex { + { + y = ~y; + self; + } + }; + + reflect_Y() : Complex { + { + x = ~x; + self; + } + }; + + equal(d : Complex) : Bool { + if x = d.x_value() + then + if y = d.y_value() + then true + else false + fi + else false + fi + }; + + x_value() : Int { + x + }; + + y_value() : Int { + y + }; +}; diff --git a/tests/codegen/new_complex_output.txt b/tests/codegen/new_complex_output.txt index 0e8da112c..831c23af4 100644 --- a/tests/codegen/new_complex_output.txt +++ b/tests/codegen/new_complex_output.txt @@ -1,2 +1,2 @@ -=) -=) +=) +=) diff --git a/tests/codegen/palindrome.cl b/tests/codegen/palindrome.cl old mode 100755 new mode 100644 index 7f24789f9..6acbeb731 --- a/tests/codegen/palindrome.cl +++ b/tests/codegen/palindrome.cl @@ -1,25 +1,25 @@ -class Main inherits IO { - pal(s : String) : Bool { - if s.length() = 0 - then true - else if s.length() = 1 - then true - else if s.substr(0, 1) = s.substr(s.length() - 1, 1) - then pal(s.substr(1, s.length() -2)) - else false - fi fi fi - }; - - i : Int; - - main() : IO { - { - i <- ~1; - out_string("enter a string\n"); - if pal(in_string()) - then out_string("that was a palindrome\n") - else out_string("that was not a palindrome\n") - fi; - } - }; -}; +class Main inherits IO { + pal(s : String) : Bool { + if s.length() = 0 + then true + else if s.length() = 1 + then true + else if s.substr(0, 1) = s.substr(s.length() - 1, 1) + then pal(s.substr(1, s.length() -2)) + else false + fi fi fi + }; + + i : Int; + + main() : IO { + { + i <- ~1; + out_string("enter a string\n"); + if pal(in_string()) + then out_string("that was a palindrome\n") + else out_string("that was not a palindrome\n") + fi; + } + }; +}; diff --git a/tests/codegen/palindrome_input.txt b/tests/codegen/palindrome_input.txt index 8e1b64142..c49a0114c 100644 --- a/tests/codegen/palindrome_input.txt +++ b/tests/codegen/palindrome_input.txt @@ -1 +1 @@ -anitalabalatina +anitalabalatina diff --git a/tests/codegen/palindrome_output.txt b/tests/codegen/palindrome_output.txt index 7a0095959..e93d36585 100644 --- a/tests/codegen/palindrome_output.txt +++ b/tests/codegen/palindrome_output.txt @@ -1,2 +1,2 @@ -enter a string -that was a palindrome +enter a string +that was a palindrome diff --git a/tests/codegen/primes_output.txt b/tests/codegen/primes_output.txt index a4d0fcb3f..cf5d78d49 100644 --- a/tests/codegen/primes_output.txt +++ b/tests/codegen/primes_output.txt @@ -1,96 +1,96 @@ -2 is trivially prime. -3 is prime. -5 is prime. -7 is prime. -11 is prime. -13 is prime. -17 is prime. -19 is prime. -23 is prime. -29 is prime. -31 is prime. -37 is prime. -41 is prime. -43 is prime. -47 is prime. -53 is prime. -59 is prime. -61 is prime. -67 is prime. -71 is prime. -73 is prime. -79 is prime. -83 is prime. -89 is prime. -97 is prime. -101 is prime. -103 is prime. -107 is prime. -109 is prime. -113 is prime. -127 is prime. -131 is prime. -137 is prime. -139 is prime. -149 is prime. -151 is prime. -157 is prime. -163 is prime. -167 is prime. -173 is prime. -179 is prime. -181 is prime. -191 is prime. -193 is prime. -197 is prime. -199 is prime. -211 is prime. -223 is prime. -227 is prime. -229 is prime. -233 is prime. -239 is prime. -241 is prime. -251 is prime. -257 is prime. -263 is prime. -269 is prime. -271 is prime. -277 is prime. -281 is prime. -283 is prime. -293 is prime. -307 is prime. -311 is prime. -313 is prime. -317 is prime. -331 is prime. -337 is prime. -347 is prime. -349 is prime. -353 is prime. -359 is prime. -367 is prime. -373 is prime. -379 is prime. -383 is prime. -389 is prime. -397 is prime. -401 is prime. -409 is prime. -419 is prime. -421 is prime. -431 is prime. -433 is prime. -439 is prime. -443 is prime. -449 is prime. -457 is prime. -461 is prime. -463 is prime. -467 is prime. -479 is prime. -487 is prime. -491 is prime. -499 is prime. -Abort called from class String +2 is trivially prime. +3 is prime. +5 is prime. +7 is prime. +11 is prime. +13 is prime. +17 is prime. +19 is prime. +23 is prime. +29 is prime. +31 is prime. +37 is prime. +41 is prime. +43 is prime. +47 is prime. +53 is prime. +59 is prime. +61 is prime. +67 is prime. +71 is prime. +73 is prime. +79 is prime. +83 is prime. +89 is prime. +97 is prime. +101 is prime. +103 is prime. +107 is prime. +109 is prime. +113 is prime. +127 is prime. +131 is prime. +137 is prime. +139 is prime. +149 is prime. +151 is prime. +157 is prime. +163 is prime. +167 is prime. +173 is prime. +179 is prime. +181 is prime. +191 is prime. +193 is prime. +197 is prime. +199 is prime. +211 is prime. +223 is prime. +227 is prime. +229 is prime. +233 is prime. +239 is prime. +241 is prime. +251 is prime. +257 is prime. +263 is prime. +269 is prime. +271 is prime. +277 is prime. +281 is prime. +283 is prime. +293 is prime. +307 is prime. +311 is prime. +313 is prime. +317 is prime. +331 is prime. +337 is prime. +347 is prime. +349 is prime. +353 is prime. +359 is prime. +367 is prime. +373 is prime. +379 is prime. +383 is prime. +389 is prime. +397 is prime. +401 is prime. +409 is prime. +419 is prime. +421 is prime. +431 is prime. +433 is prime. +439 is prime. +443 is prime. +449 is prime. +457 is prime. +461 is prime. +463 is prime. +467 is prime. +479 is prime. +487 is prime. +491 is prime. +499 is prime. +Abort called from class String diff --git a/tests/codegen/print-cool_output.txt b/tests/codegen/print-cool_output.txt index 2b58f8985..3c8cd620c 100644 --- a/tests/codegen/print-cool_output.txt +++ b/tests/codegen/print-cool_output.txt @@ -1 +1 @@ -cool +cool diff --git a/tests/codegen/sort-list_input.txt b/tests/codegen/sort-list_input.txt index f599e28b8..d43401489 100644 --- a/tests/codegen/sort-list_input.txt +++ b/tests/codegen/sort-list_input.txt @@ -1 +1 @@ -10 +10 diff --git a/tests/codegen/sort-list_output.txt b/tests/codegen/sort-list_output.txt index 9878d57ea..7b1d40452 100644 --- a/tests/codegen/sort-list_output.txt +++ b/tests/codegen/sort-list_output.txt @@ -1,10 +1,10 @@ -How many numbers to sort? 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 +How many numbers to sort? 0 +1 +2 +3 +4 +5 +6 +7 +8 +9 diff --git a/tests/codegen_test.py b/tests/codegen_test.py index 48df768ff..e748bd2d1 100644 --- a/tests/codegen_test.py +++ b/tests/codegen_test.py @@ -1,17 +1,17 @@ -import pytest -import os -from utils import compare_outputs - -tests_dir = __file__.rpartition('/')[0] + '/codegen/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -# @pytest.mark.lexer -# @pytest.mark.parser -# @pytest.mark.semantic -@pytest.mark.codegen -@pytest.mark.ok -@pytest.mark.run(order=4) -@pytest.mark.parametrize("cool_file", tests) -def test_codegen(compiler_path, cool_file): - compare_outputs(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_input.txt',\ +import pytest +import os +from utils import compare_outputs + +tests_dir = __file__.rpartition('/')[0] + '/codegen/' +tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] + +# @pytest.mark.lexer +# @pytest.mark.parser +# @pytest.mark.semantic +@pytest.mark.codegen +@pytest.mark.ok +@pytest.mark.run(order=4) +@pytest.mark.parametrize("cool_file", tests) +def test_codegen(compiler_path, cool_file): + compare_outputs(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_input.txt',\ tests_dir + cool_file[:-3] + '_output.txt') \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 1f44eeb72..561d8bafc 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,6 +1,6 @@ -import pytest -import os - -@pytest.fixture -def compiler_path(): +import pytest +import os + +@pytest.fixture +def compiler_path(): return os.path.abspath('./coolc.sh') \ No newline at end of file diff --git a/tests/lexer/comment1.cl b/tests/lexer/comment1.cl index 69533f23c..1b63af3c7 100644 --- a/tests/lexer/comment1.cl +++ b/tests/lexer/comment1.cl @@ -1,55 +1,55 @@ ---Any characters between two dashes “--” and the next newline ---(or EOF, if there is no next newline) are treated as comments - -(*(*(* -Comments may also be written by enclosing -text in (∗ . . . ∗). The latter form of comment may be nested. -Comments cannot cross file boundaries. -*)*)*) - -class Error() { - - (* There was once a comment, - that was quite long. - But, the reader soon discovered that - the comment was indeed longer than - previously assumed. Now, the reader - was in a real dilemma; is the comment - ever gonna end? If I stop reading, will - it end? - He started imagining all sorts of things. - He thought about heisenberg's cat and how - how that relates to the end of the sentence. - He thought to himself "I'm gonna stop reading". - "If I keep reading this comment, I'm gonna know - the fate of this sentence; That will be disastorous." - He knew that such a comment was gonna extend to - another file. It was too awesome to be contained in - a single file. And he would have kept reading too... - if only... - cool wasn't a super-duper-fab-awesomest language; - but cool is that language; - "This comment shall go not cross this file" said cool. - Alas! The reader could read no more. - There was once a comment, - that was quite long. - But, the reader soon discovered that - the comment was indeed longer than - previously assumed. Now, the reader - was in a real dilemma; is the comment - ever gonna end? If I stop reading, will - it end? - He started imagining all sorts of things. - He thought about heisenberg's cat and how - how that relates to the end of the sentence. - He thought to himself "I'm gonna stop reading". - "If I keep reading this comment, I'm gonna know - the fate of this sentence; That will be disastorous." - He knew that such a comment was gonna extend to - another file. It was too awesome to be contained in - a single file. And he would have kept reading too... - if only... - cool wasn't a super-duper-fab-awesomest language; - but cool is that language; - "This comment shall go not cross this file" said cool. +--Any characters between two dashes “--” and the next newline +--(or EOF, if there is no next newline) are treated as comments + +(*(*(* +Comments may also be written by enclosing +text in (∗ . . . ∗). The latter form of comment may be nested. +Comments cannot cross file boundaries. +*)*)*) + +class Error() { + + (* There was once a comment, + that was quite long. + But, the reader soon discovered that + the comment was indeed longer than + previously assumed. Now, the reader + was in a real dilemma; is the comment + ever gonna end? If I stop reading, will + it end? + He started imagining all sorts of things. + He thought about heisenberg's cat and how + how that relates to the end of the sentence. + He thought to himself "I'm gonna stop reading". + "If I keep reading this comment, I'm gonna know + the fate of this sentence; That will be disastorous." + He knew that such a comment was gonna extend to + another file. It was too awesome to be contained in + a single file. And he would have kept reading too... + if only... + cool wasn't a super-duper-fab-awesomest language; + but cool is that language; + "This comment shall go not cross this file" said cool. + Alas! The reader could read no more. + There was once a comment, + that was quite long. + But, the reader soon discovered that + the comment was indeed longer than + previously assumed. Now, the reader + was in a real dilemma; is the comment + ever gonna end? If I stop reading, will + it end? + He started imagining all sorts of things. + He thought about heisenberg's cat and how + how that relates to the end of the sentence. + He thought to himself "I'm gonna stop reading". + "If I keep reading this comment, I'm gonna know + the fate of this sentence; That will be disastorous." + He knew that such a comment was gonna extend to + another file. It was too awesome to be contained in + a single file. And he would have kept reading too... + if only... + cool wasn't a super-duper-fab-awesomest language; + but cool is that language; + "This comment shall go not cross this file" said cool. Alas! The reader could read no more. \ No newline at end of file diff --git a/tests/lexer/comment1_error.txt b/tests/lexer/comment1_error.txt index 9fd7b8d67..710483ee9 100644 --- a/tests/lexer/comment1_error.txt +++ b/tests/lexer/comment1_error.txt @@ -1 +1 @@ -(55, 46) - LexicographicError: EOF in comment +(55, 46) - LexicographicError: EOF in comment diff --git a/tests/lexer/iis1.cl b/tests/lexer/iis1.cl index 12cb52beb..ca6b68ac3 100644 --- a/tests/lexer/iis1.cl +++ b/tests/lexer/iis1.cl @@ -1,111 +1,111 @@ -(* Integers, Identifiers, and Special Notation *) - -0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ -5! = 120, 2 + 2 = 5 or E = mc2; p + 1 @ p = 1: for x in range(len(b)) -new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) -class Class if then else fi testing Testing ~007agent_bond james_007B0N3SS___ -loop pool while tRuE or noT faLsE let in case of ESAC - -(* -#3 INT_CONST 0007 -#3 INT_CONST 123 -#3 '+' -#3 INT_CONST 1 -#3 '-' -#3 INT_CONST 1 -#3 '+' -#3 INT_CONST 90 -#3 '-' -#3 INT_CONST 09 -#3 '+' -#3 INT_CONST 11113 -#3 '-' -#3 INT_CONST 4 -#3 OBJECTID r -#3 '*' -#3 OBJECTID a -#3 '*' -#3 OBJECTID self -#3 '*' -#3 OBJECTID c -#3 '+' -#3 '+' -#4 INT_CONST 5 -#4 ERROR "!" -#4 '=' -#4 INT_CONST 120 -#4 ',' -#4 INT_CONST 2 -#4 '+' -#4 INT_CONST 2 -#4 '=' -#4 INT_CONST 5 -#4 OBJECTID or -#4 TYPEID E -#4 '=' -#4 OBJECTID mc2 -#4 ';' -#4 OBJECTID p -#4 '+' -#4 INT_CONST 1 -#4 '@' -#4 OBJECTID p -#4 '=' -#4 INT_CONST 1 -#4 ':' -#4 OBJECTID for -#4 OBJECTID x -#4 IN -#4 OBJECTID range -#4 '(' -#4 OBJECTID len -#4 '(' -#4 OBJECTID b -#4 ')' -#4 ')' -#5 NEW -#5 '/' -#5 ASSIGN -#5 '<' -#5 LE -#5 DARROW -#5 '{' -#5 '(' -#5 TYPEID Int -#5 ':' -#5 TYPEID Objet -#5 ',' -#5 TYPEID Bool -#5 ';' -#5 TYPEID String -#5 '.' -#5 OBJECTID string -#5 TYPEID SELF_TYPE -#5 ISVOID -#5 '}' -#5 ')' -#6 CLASS -#6 CLASS -#6 IF -#6 THEN -#6 ELSE -#6 FI -#6 OBJECTID testing -#6 TYPEID Testing -#6 '~' -#6 INT_CONST 007 -#6 OBJECTID agent_bond -#6 OBJECTID james_007B0N3SS___ -#7 LOOP -#7 POOL -#7 WHILE -#7 BOOL_CONST true -#7 OBJECTID or -#7 NOT -#7 BOOL_CONST false -#7 LET -#7 IN -#7 CASE -#7 OF -#7 ESAC +(* Integers, Identifiers, and Special Notation *) + +0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ +5! = 120, 2 + 2 = 5 or E = mc2; p + 1 @ p = 1: for x in range(len(b)) +new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) +class Class if then else fi testing Testing ~007agent_bond james_007B0N3SS___ +loop pool while tRuE or noT faLsE let in case of ESAC + +(* +#3 INT_CONST 0007 +#3 INT_CONST 123 +#3 '+' +#3 INT_CONST 1 +#3 '-' +#3 INT_CONST 1 +#3 '+' +#3 INT_CONST 90 +#3 '-' +#3 INT_CONST 09 +#3 '+' +#3 INT_CONST 11113 +#3 '-' +#3 INT_CONST 4 +#3 OBJECTID r +#3 '*' +#3 OBJECTID a +#3 '*' +#3 OBJECTID self +#3 '*' +#3 OBJECTID c +#3 '+' +#3 '+' +#4 INT_CONST 5 +#4 ERROR "!" +#4 '=' +#4 INT_CONST 120 +#4 ',' +#4 INT_CONST 2 +#4 '+' +#4 INT_CONST 2 +#4 '=' +#4 INT_CONST 5 +#4 OBJECTID or +#4 TYPEID E +#4 '=' +#4 OBJECTID mc2 +#4 ';' +#4 OBJECTID p +#4 '+' +#4 INT_CONST 1 +#4 '@' +#4 OBJECTID p +#4 '=' +#4 INT_CONST 1 +#4 ':' +#4 OBJECTID for +#4 OBJECTID x +#4 IN +#4 OBJECTID range +#4 '(' +#4 OBJECTID len +#4 '(' +#4 OBJECTID b +#4 ')' +#4 ')' +#5 NEW +#5 '/' +#5 ASSIGN +#5 '<' +#5 LE +#5 DARROW +#5 '{' +#5 '(' +#5 TYPEID Int +#5 ':' +#5 TYPEID Objet +#5 ',' +#5 TYPEID Bool +#5 ';' +#5 TYPEID String +#5 '.' +#5 OBJECTID string +#5 TYPEID SELF_TYPE +#5 ISVOID +#5 '}' +#5 ')' +#6 CLASS +#6 CLASS +#6 IF +#6 THEN +#6 ELSE +#6 FI +#6 OBJECTID testing +#6 TYPEID Testing +#6 '~' +#6 INT_CONST 007 +#6 OBJECTID agent_bond +#6 OBJECTID james_007B0N3SS___ +#7 LOOP +#7 POOL +#7 WHILE +#7 BOOL_CONST true +#7 OBJECTID or +#7 NOT +#7 BOOL_CONST false +#7 LET +#7 IN +#7 CASE +#7 OF +#7 ESAC *) \ No newline at end of file diff --git a/tests/lexer/iis1_error.txt b/tests/lexer/iis1_error.txt index 9e6d66cac..12f62f1ba 100644 --- a/tests/lexer/iis1_error.txt +++ b/tests/lexer/iis1_error.txt @@ -1 +1 @@ -(4, 2) - LexicographicError: ERROR "!" +(4, 2) - LexicographicError: ERROR "!" diff --git a/tests/lexer/iis2.cl b/tests/lexer/iis2.cl index 9b25715d4..d42552494 100644 --- a/tests/lexer/iis2.cl +++ b/tests/lexer/iis2.cl @@ -1,120 +1,120 @@ -(* Integers, Identifiers, and Special Notation *) - -0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ -class Class if then else fi testing Testing ~007agent_bond james_007bones___ - - -new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) -loop pool while tRuE or noT faLsE let in case of ESAC - -factorial(5) = 120, 2 + 2 = 5? or E = mc2; p + 1 resto p = 1: (@ for x in range(len(b))) - -(* -#3 INT_CONST 0007 -#3 INT_CONST 123 -#3 '+' -#3 INT_CONST 1 -#3 '-' -#3 INT_CONST 1 -#3 '+' -#3 INT_CONST 90 -#3 '-' -#3 INT_CONST 09 -#3 '+' -#3 INT_CONST 11113 -#3 '-' -#3 INT_CONST 4 -#3 OBJECTID r -#3 '*' -#3 OBJECTID a -#3 '*' -#3 OBJECTID self -#3 '*' -#3 OBJECTID c -#3 '+' -#3 '+' -#4 CLASS -#4 CLASS -#4 IF -#4 THEN -#4 ELSE -#4 FI -#4 OBJECTID testing -#4 TYPEID Testing -#4 '~' -#4 INT_CONST 007 -#4 OBJECTID agent_bond -#4 OBJECTID james_007bones___ -#7 NEW -#7 '/' -#7 ASSIGN -#7 '<' -#7 LE -#7 DARROW -#7 '{' -#7 '(' -#7 TYPEID Int -#7 ':' -#7 TYPEID Objet -#7 ',' -#7 TYPEID Bool -#7 ';' -#7 TYPEID String -#7 '.' -#7 OBJECTID string -#7 TYPEID SELF_TYPE -#7 ISVOID -#7 '}' -#7 ')' -#8 LOOP -#8 POOL -#8 WHILE -#8 BOOL_CONST true -#8 OBJECTID or -#8 NOT -#8 BOOL_CONST false -#8 LET -#8 IN -#8 CASE -#8 OF -#8 ESAC -#10 OBJECTID factorial -#10 '(' -#10 INT_CONST 5 -#10 ')' -#10 '=' -#10 INT_CONST 120 -#10 ',' -#10 INT_CONST 2 -#10 '+' -#10 INT_CONST 2 -#10 '=' -#10 INT_CONST 5 -#10 ERROR "?" -#10 OBJECTID or -#10 TYPEID E -#10 '=' -#10 OBJECTID mc2 -#10 ';' -#10 OBJECTID p -#10 '+' -#10 INT_CONST 1 -#10 OBJECTID resto -#10 OBJECTID p -#10 '=' -#10 INT_CONST 1 -#10 ':' -#10 '(' -#10 '@' -#10 OBJECTID for -#10 OBJECTID x -#10 IN -#10 OBJECTID range -#10 '(' -#10 OBJECTID len -#10 '(' -#10 OBJECTID b -#10 ')' -#10 ')' -#10 ')' +(* Integers, Identifiers, and Special Notation *) + +0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ +class Class if then else fi testing Testing ~007agent_bond james_007bones___ + + +new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) +loop pool while tRuE or noT faLsE let in case of ESAC + +factorial(5) = 120, 2 + 2 = 5? or E = mc2; p + 1 resto p = 1: (@ for x in range(len(b))) + +(* +#3 INT_CONST 0007 +#3 INT_CONST 123 +#3 '+' +#3 INT_CONST 1 +#3 '-' +#3 INT_CONST 1 +#3 '+' +#3 INT_CONST 90 +#3 '-' +#3 INT_CONST 09 +#3 '+' +#3 INT_CONST 11113 +#3 '-' +#3 INT_CONST 4 +#3 OBJECTID r +#3 '*' +#3 OBJECTID a +#3 '*' +#3 OBJECTID self +#3 '*' +#3 OBJECTID c +#3 '+' +#3 '+' +#4 CLASS +#4 CLASS +#4 IF +#4 THEN +#4 ELSE +#4 FI +#4 OBJECTID testing +#4 TYPEID Testing +#4 '~' +#4 INT_CONST 007 +#4 OBJECTID agent_bond +#4 OBJECTID james_007bones___ +#7 NEW +#7 '/' +#7 ASSIGN +#7 '<' +#7 LE +#7 DARROW +#7 '{' +#7 '(' +#7 TYPEID Int +#7 ':' +#7 TYPEID Objet +#7 ',' +#7 TYPEID Bool +#7 ';' +#7 TYPEID String +#7 '.' +#7 OBJECTID string +#7 TYPEID SELF_TYPE +#7 ISVOID +#7 '}' +#7 ')' +#8 LOOP +#8 POOL +#8 WHILE +#8 BOOL_CONST true +#8 OBJECTID or +#8 NOT +#8 BOOL_CONST false +#8 LET +#8 IN +#8 CASE +#8 OF +#8 ESAC +#10 OBJECTID factorial +#10 '(' +#10 INT_CONST 5 +#10 ')' +#10 '=' +#10 INT_CONST 120 +#10 ',' +#10 INT_CONST 2 +#10 '+' +#10 INT_CONST 2 +#10 '=' +#10 INT_CONST 5 +#10 ERROR "?" +#10 OBJECTID or +#10 TYPEID E +#10 '=' +#10 OBJECTID mc2 +#10 ';' +#10 OBJECTID p +#10 '+' +#10 INT_CONST 1 +#10 OBJECTID resto +#10 OBJECTID p +#10 '=' +#10 INT_CONST 1 +#10 ':' +#10 '(' +#10 '@' +#10 OBJECTID for +#10 OBJECTID x +#10 IN +#10 OBJECTID range +#10 '(' +#10 OBJECTID len +#10 '(' +#10 OBJECTID b +#10 ')' +#10 ')' +#10 ')' *) \ No newline at end of file diff --git a/tests/lexer/iis2_error.txt b/tests/lexer/iis2_error.txt index 922391a9d..988d0286e 100644 --- a/tests/lexer/iis2_error.txt +++ b/tests/lexer/iis2_error.txt @@ -1 +1 @@ -(10, 30) - LexicographicError: ERROR "?" +(10, 30) - LexicographicError: ERROR "?" diff --git a/tests/lexer/iis3.cl b/tests/lexer/iis3.cl index 0b965ddea..dcd85f960 100644 --- a/tests/lexer/iis3.cl +++ b/tests/lexer/iis3.cl @@ -1,121 +1,121 @@ -(* Integers, Identifiers, and Special Notation *) - -factorial(5) = 120, 2 + 2 = 5 or E = mc^2; p + 1 @ p = 1: z for x in range(len(b))) - -loop pool while tRuE or noT faLsE let in case of ESAC - -new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) - - -0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ -class Class if then else fi testing Testing ~007agent_bond james_007bones___ - -(* -#3 OBJECTID factorial -#3 '(' -#3 INT_CONST 5 -#3 ')' -#3 '=' -#3 INT_CONST 120 -#3 ',' -#3 INT_CONST 2 -#3 '+' -#3 INT_CONST 2 -#3 '=' -#3 INT_CONST 5 -#3 OBJECTID or -#3 TYPEID E -#3 '=' -#3 OBJECTID mc -#3 ERROR "^" -#3 INT_CONST 2 -#3 ';' -#3 OBJECTID p -#3 '+' -#3 INT_CONST 1 -#3 '@' -#3 OBJECTID p -#3 '=' -#3 INT_CONST 1 -#3 ':' -#3 OBJECTID z -#3 OBJECTID for -#3 OBJECTID x -#3 IN -#3 OBJECTID range -#3 '(' -#3 OBJECTID len -#3 '(' -#3 OBJECTID b -#3 ')' -#3 ')' -#3 ')' -#5 LOOP -#5 POOL -#5 WHILE -#5 BOOL_CONST true -#5 OBJECTID or -#5 NOT -#5 BOOL_CONST false -#5 LET -#5 IN -#5 CASE -#5 OF -#5 ESAC -#7 NEW -#7 '/' -#7 ASSIGN -#7 '<' -#7 LE -#7 DARROW -#7 '{' -#7 '(' -#7 TYPEID Int -#7 ':' -#7 TYPEID Objet -#7 ',' -#7 TYPEID Bool -#7 ';' -#7 TYPEID String -#7 '.' -#7 OBJECTID string -#7 TYPEID SELF_TYPE -#7 ISVOID -#7 '}' -#7 ')' -#10 INT_CONST 0007 -#10 INT_CONST 123 -#10 '+' -#10 INT_CONST 1 -#10 '-' -#10 INT_CONST 1 -#10 '+' -#10 INT_CONST 90 -#10 '-' -#10 INT_CONST 09 -#10 '+' -#10 INT_CONST 11113 -#10 '-' -#10 INT_CONST 4 -#10 OBJECTID r -#10 '*' -#10 OBJECTID a -#10 '*' -#10 OBJECTID self -#10 '*' -#10 OBJECTID c -#10 '+' -#10 '+' -#11 CLASS -#11 CLASS -#11 IF -#11 THEN -#11 ELSE -#11 FI -#11 OBJECTID testing -#11 TYPEID Testing -#11 '~' -#11 INT_CONST 007 -#11 OBJECTID agent_bond -#11 OBJECTID james_007bones___ +(* Integers, Identifiers, and Special Notation *) + +factorial(5) = 120, 2 + 2 = 5 or E = mc^2; p + 1 @ p = 1: z for x in range(len(b))) + +loop pool while tRuE or noT faLsE let in case of ESAC + +new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) + + +0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ +class Class if then else fi testing Testing ~007agent_bond james_007bones___ + +(* +#3 OBJECTID factorial +#3 '(' +#3 INT_CONST 5 +#3 ')' +#3 '=' +#3 INT_CONST 120 +#3 ',' +#3 INT_CONST 2 +#3 '+' +#3 INT_CONST 2 +#3 '=' +#3 INT_CONST 5 +#3 OBJECTID or +#3 TYPEID E +#3 '=' +#3 OBJECTID mc +#3 ERROR "^" +#3 INT_CONST 2 +#3 ';' +#3 OBJECTID p +#3 '+' +#3 INT_CONST 1 +#3 '@' +#3 OBJECTID p +#3 '=' +#3 INT_CONST 1 +#3 ':' +#3 OBJECTID z +#3 OBJECTID for +#3 OBJECTID x +#3 IN +#3 OBJECTID range +#3 '(' +#3 OBJECTID len +#3 '(' +#3 OBJECTID b +#3 ')' +#3 ')' +#3 ')' +#5 LOOP +#5 POOL +#5 WHILE +#5 BOOL_CONST true +#5 OBJECTID or +#5 NOT +#5 BOOL_CONST false +#5 LET +#5 IN +#5 CASE +#5 OF +#5 ESAC +#7 NEW +#7 '/' +#7 ASSIGN +#7 '<' +#7 LE +#7 DARROW +#7 '{' +#7 '(' +#7 TYPEID Int +#7 ':' +#7 TYPEID Objet +#7 ',' +#7 TYPEID Bool +#7 ';' +#7 TYPEID String +#7 '.' +#7 OBJECTID string +#7 TYPEID SELF_TYPE +#7 ISVOID +#7 '}' +#7 ')' +#10 INT_CONST 0007 +#10 INT_CONST 123 +#10 '+' +#10 INT_CONST 1 +#10 '-' +#10 INT_CONST 1 +#10 '+' +#10 INT_CONST 90 +#10 '-' +#10 INT_CONST 09 +#10 '+' +#10 INT_CONST 11113 +#10 '-' +#10 INT_CONST 4 +#10 OBJECTID r +#10 '*' +#10 OBJECTID a +#10 '*' +#10 OBJECTID self +#10 '*' +#10 OBJECTID c +#10 '+' +#10 '+' +#11 CLASS +#11 CLASS +#11 IF +#11 THEN +#11 ELSE +#11 FI +#11 OBJECTID testing +#11 TYPEID Testing +#11 '~' +#11 INT_CONST 007 +#11 OBJECTID agent_bond +#11 OBJECTID james_007bones___ *) \ No newline at end of file diff --git a/tests/lexer/iis3_error.txt b/tests/lexer/iis3_error.txt index b001b6a71..3abc2b556 100644 --- a/tests/lexer/iis3_error.txt +++ b/tests/lexer/iis3_error.txt @@ -1 +1 @@ -(3, 40) - LexicographicError: ERROR "^" +(3, 40) - LexicographicError: ERROR "^" diff --git a/tests/lexer/iis4.cl b/tests/lexer/iis4.cl index 9e7a9cb62..5357ab734 100644 --- a/tests/lexer/iis4.cl +++ b/tests/lexer/iis4.cl @@ -1,120 +1,120 @@ -(* Integers, Identifiers, and Special Notation *) - -new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) -0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ - -factorial(5) = 120, 2 + 2 = 5 or E = mc2; p + 1 % p = 1: @.@ for x in range(len(b))~ - - -loop pool while tRuE or noT faLsE let in case of ESAC -class Class if then else fi testing Testing ~007agent_bond james_007bones___ - -(* -#3 NEW -#3 '/' -#3 ASSIGN -#3 '<' -#3 LE -#3 DARROW -#3 '{' -#3 '(' -#3 TYPEID Int -#3 ':' -#3 TYPEID Objet -#3 ',' -#3 TYPEID Bool -#3 ';' -#3 TYPEID String -#3 '.' -#3 OBJECTID string -#3 TYPEID SELF_TYPE -#3 ISVOID -#3 '}' -#3 ')' -#4 INT_CONST 0007 -#4 INT_CONST 123 -#4 '+' -#4 INT_CONST 1 -#4 '-' -#4 INT_CONST 1 -#4 '+' -#4 INT_CONST 90 -#4 '-' -#4 INT_CONST 09 -#4 '+' -#4 INT_CONST 11113 -#4 '-' -#4 INT_CONST 4 -#4 OBJECTID r -#4 '*' -#4 OBJECTID a -#4 '*' -#4 OBJECTID self -#4 '*' -#4 OBJECTID c -#4 '+' -#4 '+' -#6 OBJECTID factorial -#6 '(' -#6 INT_CONST 5 -#6 ')' -#6 '=' -#6 INT_CONST 120 -#6 ',' -#6 INT_CONST 2 -#6 '+' -#6 INT_CONST 2 -#6 '=' -#6 INT_CONST 5 -#6 OBJECTID or -#6 TYPEID E -#6 '=' -#6 OBJECTID mc2 -#6 ';' -#6 OBJECTID p -#6 '+' -#6 INT_CONST 1 -#6 ERROR "%" -#6 OBJECTID p -#6 '=' -#6 INT_CONST 1 -#6 ':' -#6 '@' -#6 '.' -#6 '@' -#6 OBJECTID for -#6 OBJECTID x -#6 IN -#6 OBJECTID range -#6 '(' -#6 OBJECTID len -#6 '(' -#6 OBJECTID b -#6 ')' -#6 ')' -#6 '~' -#9 LOOP -#9 POOL -#9 WHILE -#9 BOOL_CONST true -#9 OBJECTID or -#9 NOT -#9 BOOL_CONST false -#9 LET -#9 IN -#9 CASE -#9 OF -#9 ESAC -#10 CLASS -#10 CLASS -#10 IF -#10 THEN -#10 ELSE -#10 FI -#10 OBJECTID testing -#10 TYPEID Testing -#10 '~' -#10 INT_CONST 007 -#10 OBJECTID agent_bond -#10 OBJECTID james_007bones___ +(* Integers, Identifiers, and Special Notation *) + +new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) +0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ + +factorial(5) = 120, 2 + 2 = 5 or E = mc2; p + 1 % p = 1: @.@ for x in range(len(b))~ + + +loop pool while tRuE or noT faLsE let in case of ESAC +class Class if then else fi testing Testing ~007agent_bond james_007bones___ + +(* +#3 NEW +#3 '/' +#3 ASSIGN +#3 '<' +#3 LE +#3 DARROW +#3 '{' +#3 '(' +#3 TYPEID Int +#3 ':' +#3 TYPEID Objet +#3 ',' +#3 TYPEID Bool +#3 ';' +#3 TYPEID String +#3 '.' +#3 OBJECTID string +#3 TYPEID SELF_TYPE +#3 ISVOID +#3 '}' +#3 ')' +#4 INT_CONST 0007 +#4 INT_CONST 123 +#4 '+' +#4 INT_CONST 1 +#4 '-' +#4 INT_CONST 1 +#4 '+' +#4 INT_CONST 90 +#4 '-' +#4 INT_CONST 09 +#4 '+' +#4 INT_CONST 11113 +#4 '-' +#4 INT_CONST 4 +#4 OBJECTID r +#4 '*' +#4 OBJECTID a +#4 '*' +#4 OBJECTID self +#4 '*' +#4 OBJECTID c +#4 '+' +#4 '+' +#6 OBJECTID factorial +#6 '(' +#6 INT_CONST 5 +#6 ')' +#6 '=' +#6 INT_CONST 120 +#6 ',' +#6 INT_CONST 2 +#6 '+' +#6 INT_CONST 2 +#6 '=' +#6 INT_CONST 5 +#6 OBJECTID or +#6 TYPEID E +#6 '=' +#6 OBJECTID mc2 +#6 ';' +#6 OBJECTID p +#6 '+' +#6 INT_CONST 1 +#6 ERROR "%" +#6 OBJECTID p +#6 '=' +#6 INT_CONST 1 +#6 ':' +#6 '@' +#6 '.' +#6 '@' +#6 OBJECTID for +#6 OBJECTID x +#6 IN +#6 OBJECTID range +#6 '(' +#6 OBJECTID len +#6 '(' +#6 OBJECTID b +#6 ')' +#6 ')' +#6 '~' +#9 LOOP +#9 POOL +#9 WHILE +#9 BOOL_CONST true +#9 OBJECTID or +#9 NOT +#9 BOOL_CONST false +#9 LET +#9 IN +#9 CASE +#9 OF +#9 ESAC +#10 CLASS +#10 CLASS +#10 IF +#10 THEN +#10 ELSE +#10 FI +#10 OBJECTID testing +#10 TYPEID Testing +#10 '~' +#10 INT_CONST 007 +#10 OBJECTID agent_bond +#10 OBJECTID james_007bones___ *) \ No newline at end of file diff --git a/tests/lexer/iis4_error.txt b/tests/lexer/iis4_error.txt index f24076a8c..aab8f39c1 100644 --- a/tests/lexer/iis4_error.txt +++ b/tests/lexer/iis4_error.txt @@ -1 +1 @@ -(6, 49) - LexicographicError: ERROR "!" +(6, 49) - LexicographicError: ERROR "!" diff --git a/tests/lexer/iis5.cl b/tests/lexer/iis5.cl index d146c0547..f602488b9 100644 --- a/tests/lexer/iis5.cl +++ b/tests/lexer/iis5.cl @@ -1,121 +1,121 @@ -(* Integers, Identifiers, and Special Notation *) - - -loop pool while tRuE or noT faLsE let in case of ESAC -new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) -class Class if then else fi testing Testing ~007agent_bond james_007bones___ - -factorial(5) = 120, 2 + 2 = 5 or E = mc2; p + 1 resto p = 1: [@.@ for x in range(len(b))] - -0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ - -(* -#4 LOOP -#4 POOL -#4 WHILE -#4 BOOL_CONST true -#4 OBJECTID or -#4 NOT -#4 BOOL_CONST false -#4 LET -#4 IN -#4 CASE -#4 OF -#4 ESAC -#5 NEW -#5 '/' -#5 ASSIGN -#5 '<' -#5 LE -#5 DARROW -#5 '{' -#5 '(' -#5 TYPEID Int -#5 ':' -#5 TYPEID Objet -#5 ',' -#5 TYPEID Bool -#5 ';' -#5 TYPEID String -#5 '.' -#5 OBJECTID string -#5 TYPEID SELF_TYPE -#5 ISVOID -#5 '}' -#5 ')' -#6 CLASS -#6 CLASS -#6 IF -#6 THEN -#6 ELSE -#6 FI -#6 OBJECTID testing -#6 TYPEID Testing -#6 '~' -#6 INT_CONST 007 -#6 OBJECTID agent_bond -#6 OBJECTID james_007bones___ -#8 OBJECTID factorial -#8 '(' -#8 INT_CONST 5 -#8 ')' -#8 '=' -#8 INT_CONST 120 -#8 ',' -#8 INT_CONST 2 -#8 '+' -#8 INT_CONST 2 -#8 '=' -#8 INT_CONST 5 -#8 OBJECTID or -#8 TYPEID E -#8 '=' -#8 OBJECTID mc2 -#8 ';' -#8 OBJECTID p -#8 '+' -#8 INT_CONST 1 -#8 OBJECTID resto -#8 OBJECTID p -#8 '=' -#8 INT_CONST 1 -#8 ':' -#8 ERROR "[" -#8 '@' -#8 '.' -#8 '@' -#8 OBJECTID for -#8 OBJECTID x -#8 IN -#8 OBJECTID range -#8 '(' -#8 OBJECTID len -#8 '(' -#8 OBJECTID b -#8 ')' -#8 ')' -#8 ERROR "]" -#10 INT_CONST 0007 -#10 INT_CONST 123 -#10 '+' -#10 INT_CONST 1 -#10 '-' -#10 INT_CONST 1 -#10 '+' -#10 INT_CONST 90 -#10 '-' -#10 INT_CONST 09 -#10 '+' -#10 INT_CONST 11113 -#10 '-' -#10 INT_CONST 4 -#10 OBJECTID r -#10 '*' -#10 OBJECTID a -#10 '*' -#10 OBJECTID self -#10 '*' -#10 OBJECTID c -#10 '+' -#10 '+' -*) +(* Integers, Identifiers, and Special Notation *) + + +loop pool while tRuE or noT faLsE let in case of ESAC +new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) +class Class if then else fi testing Testing ~007agent_bond james_007bones___ + +factorial(5) = 120, 2 + 2 = 5 or E = mc2; p + 1 resto p = 1: [@.@ for x in range(len(b))] + +0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ + +(* +#4 LOOP +#4 POOL +#4 WHILE +#4 BOOL_CONST true +#4 OBJECTID or +#4 NOT +#4 BOOL_CONST false +#4 LET +#4 IN +#4 CASE +#4 OF +#4 ESAC +#5 NEW +#5 '/' +#5 ASSIGN +#5 '<' +#5 LE +#5 DARROW +#5 '{' +#5 '(' +#5 TYPEID Int +#5 ':' +#5 TYPEID Objet +#5 ',' +#5 TYPEID Bool +#5 ';' +#5 TYPEID String +#5 '.' +#5 OBJECTID string +#5 TYPEID SELF_TYPE +#5 ISVOID +#5 '}' +#5 ')' +#6 CLASS +#6 CLASS +#6 IF +#6 THEN +#6 ELSE +#6 FI +#6 OBJECTID testing +#6 TYPEID Testing +#6 '~' +#6 INT_CONST 007 +#6 OBJECTID agent_bond +#6 OBJECTID james_007bones___ +#8 OBJECTID factorial +#8 '(' +#8 INT_CONST 5 +#8 ')' +#8 '=' +#8 INT_CONST 120 +#8 ',' +#8 INT_CONST 2 +#8 '+' +#8 INT_CONST 2 +#8 '=' +#8 INT_CONST 5 +#8 OBJECTID or +#8 TYPEID E +#8 '=' +#8 OBJECTID mc2 +#8 ';' +#8 OBJECTID p +#8 '+' +#8 INT_CONST 1 +#8 OBJECTID resto +#8 OBJECTID p +#8 '=' +#8 INT_CONST 1 +#8 ':' +#8 ERROR "[" +#8 '@' +#8 '.' +#8 '@' +#8 OBJECTID for +#8 OBJECTID x +#8 IN +#8 OBJECTID range +#8 '(' +#8 OBJECTID len +#8 '(' +#8 OBJECTID b +#8 ')' +#8 ')' +#8 ERROR "]" +#10 INT_CONST 0007 +#10 INT_CONST 123 +#10 '+' +#10 INT_CONST 1 +#10 '-' +#10 INT_CONST 1 +#10 '+' +#10 INT_CONST 90 +#10 '-' +#10 INT_CONST 09 +#10 '+' +#10 INT_CONST 11113 +#10 '-' +#10 INT_CONST 4 +#10 OBJECTID r +#10 '*' +#10 OBJECTID a +#10 '*' +#10 OBJECTID self +#10 '*' +#10 OBJECTID c +#10 '+' +#10 '+' +*) diff --git a/tests/lexer/iis5_error.txt b/tests/lexer/iis5_error.txt index b3dbadcb6..9d6e1a738 100644 --- a/tests/lexer/iis5_error.txt +++ b/tests/lexer/iis5_error.txt @@ -1,2 +1,2 @@ -(8, 62) - LexicographicError: ERROR "[" -(8, 89) - LexicographicError: ERROR "]" +(8, 62) - LexicographicError: ERROR "[" +(8, 89) - LexicographicError: ERROR "]" diff --git a/tests/lexer/iis6.cl b/tests/lexer/iis6.cl index 1042f132b..ba93b19d9 100644 --- a/tests/lexer/iis6.cl +++ b/tests/lexer/iis6.cl @@ -1,125 +1,125 @@ -(* Integers, Identifiers, and Special Notation *) - -factorial(5) = 120, 2 + 2 = 5 or E = mc2; p + 1 resto p = 1: {@.@ for x in range(len(b))} - -new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) - - -class Class if then else fi testing Testing ~007agent_bond _james_007bones___ - - - -0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ -loop pool while tRuE or noT faLsE let in case of ESAC - -(* -#3 OBJECTID factorial -#3 '(' -#3 INT_CONST 5 -#3 ')' -#3 '=' -#3 INT_CONST 120 -#3 ',' -#3 INT_CONST 2 -#3 '+' -#3 INT_CONST 2 -#3 '=' -#3 INT_CONST 5 -#3 OBJECTID or -#3 TYPEID E -#3 '=' -#3 OBJECTID mc2 -#3 ';' -#3 OBJECTID p -#3 '+' -#3 INT_CONST 1 -#3 OBJECTID resto -#3 OBJECTID p -#3 '=' -#3 INT_CONST 1 -#3 ':' -#3 '{' -#3 '@' -#3 '.' -#3 '@' -#3 OBJECTID for -#3 OBJECTID x -#3 IN -#3 OBJECTID range -#3 '(' -#3 OBJECTID len -#3 '(' -#3 OBJECTID b -#3 ')' -#3 ')' -#3 '}' -#5 NEW -#5 '/' -#5 ASSIGN -#5 '<' -#5 LE -#5 DARROW -#5 '{' -#5 '(' -#5 TYPEID Int -#5 ':' -#5 TYPEID Objet -#5 ',' -#5 TYPEID Bool -#5 ';' -#5 TYPEID String -#5 '.' -#5 OBJECTID string -#5 TYPEID SELF_TYPE -#5 ISVOID -#5 '}' -#5 ')' -#8 CLASS -#8 CLASS -#8 IF -#8 THEN -#8 ELSE -#8 FI -#8 OBJECTID testing -#8 TYPEID Testing -#8 '~' -#8 INT_CONST 007 -#8 OBJECTID agent_bond -#8 ERROR "_" -#8 OBJECTID james_007bones___ -#12 INT_CONST 0007 -#12 INT_CONST 123 -#12 '+' -#12 INT_CONST 1 -#12 '-' -#12 INT_CONST 1 -#12 '+' -#12 INT_CONST 90 -#12 '-' -#12 INT_CONST 09 -#12 '+' -#12 INT_CONST 11113 -#12 '-' -#12 INT_CONST 4 -#12 OBJECTID r -#12 '*' -#12 OBJECTID a -#12 '*' -#12 OBJECTID self -#12 '*' -#12 OBJECTID c -#12 '+' -#12 '+' -#13 LOOP -#13 POOL -#13 WHILE -#13 BOOL_CONST true -#13 OBJECTID or -#13 NOT -#13 BOOL_CONST false -#13 LET -#13 IN -#13 CASE -#13 OF -#13 ESAC +(* Integers, Identifiers, and Special Notation *) + +factorial(5) = 120, 2 + 2 = 5 or E = mc2; p + 1 resto p = 1: {@.@ for x in range(len(b))} + +new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) + + +class Class if then else fi testing Testing ~007agent_bond _james_007bones___ + + + +0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ +loop pool while tRuE or noT faLsE let in case of ESAC + +(* +#3 OBJECTID factorial +#3 '(' +#3 INT_CONST 5 +#3 ')' +#3 '=' +#3 INT_CONST 120 +#3 ',' +#3 INT_CONST 2 +#3 '+' +#3 INT_CONST 2 +#3 '=' +#3 INT_CONST 5 +#3 OBJECTID or +#3 TYPEID E +#3 '=' +#3 OBJECTID mc2 +#3 ';' +#3 OBJECTID p +#3 '+' +#3 INT_CONST 1 +#3 OBJECTID resto +#3 OBJECTID p +#3 '=' +#3 INT_CONST 1 +#3 ':' +#3 '{' +#3 '@' +#3 '.' +#3 '@' +#3 OBJECTID for +#3 OBJECTID x +#3 IN +#3 OBJECTID range +#3 '(' +#3 OBJECTID len +#3 '(' +#3 OBJECTID b +#3 ')' +#3 ')' +#3 '}' +#5 NEW +#5 '/' +#5 ASSIGN +#5 '<' +#5 LE +#5 DARROW +#5 '{' +#5 '(' +#5 TYPEID Int +#5 ':' +#5 TYPEID Objet +#5 ',' +#5 TYPEID Bool +#5 ';' +#5 TYPEID String +#5 '.' +#5 OBJECTID string +#5 TYPEID SELF_TYPE +#5 ISVOID +#5 '}' +#5 ')' +#8 CLASS +#8 CLASS +#8 IF +#8 THEN +#8 ELSE +#8 FI +#8 OBJECTID testing +#8 TYPEID Testing +#8 '~' +#8 INT_CONST 007 +#8 OBJECTID agent_bond +#8 ERROR "_" +#8 OBJECTID james_007bones___ +#12 INT_CONST 0007 +#12 INT_CONST 123 +#12 '+' +#12 INT_CONST 1 +#12 '-' +#12 INT_CONST 1 +#12 '+' +#12 INT_CONST 90 +#12 '-' +#12 INT_CONST 09 +#12 '+' +#12 INT_CONST 11113 +#12 '-' +#12 INT_CONST 4 +#12 OBJECTID r +#12 '*' +#12 OBJECTID a +#12 '*' +#12 OBJECTID self +#12 '*' +#12 OBJECTID c +#12 '+' +#12 '+' +#13 LOOP +#13 POOL +#13 WHILE +#13 BOOL_CONST true +#13 OBJECTID or +#13 NOT +#13 BOOL_CONST false +#13 LET +#13 IN +#13 CASE +#13 OF +#13 ESAC *) \ No newline at end of file diff --git a/tests/lexer/iis6_error.txt b/tests/lexer/iis6_error.txt index d7fad9c79..79a9d5aee 100644 --- a/tests/lexer/iis6_error.txt +++ b/tests/lexer/iis6_error.txt @@ -1 +1 @@ -(8, 60) - LexicographicError: ERROR "_" +(8, 60) - LexicographicError: ERROR "_" diff --git a/tests/lexer/mixed1.cl b/tests/lexer/mixed1.cl index 803d58ef5..d3e520a10 100644 --- a/tests/lexer/mixed1.cl +++ b/tests/lexer/mixed1.cl @@ -1,14 +1,14 @@ -"lkjdsafkljdsalfj\u0000dsafdsaf\u0000djafslkjdsalf\nsdajf\" lkjfdsasdkjfl"123 -adsfasklj# -LKldsajf iNhERITS -"lkdsajf" - -(* -#1 STR_CONST "lkjdsafkljdsalfju0000dsafdsafu0000djafslkjdsalf\nsdajf\" lkjfdsasdkjfl" -#1 INT_CONST 123 -#2 OBJECTID adsfasklj -#2 ERROR "#" -#3 TYPEID LKldsajf -#3 INHERITS -#4 STR_CONST "lkdsajf" +"lkjdsafkljdsalfj\u0000dsafdsaf\u0000djafslkjdsalf\nsdajf\" lkjfdsasdkjfl"123 +adsfasklj# +LKldsajf iNhERITS +"lkdsajf" + +(* +#1 STR_CONST "lkjdsafkljdsalfju0000dsafdsafu0000djafslkjdsalf\nsdajf\" lkjfdsasdkjfl" +#1 INT_CONST 123 +#2 OBJECTID adsfasklj +#2 ERROR "#" +#3 TYPEID LKldsajf +#3 INHERITS +#4 STR_CONST "lkdsajf" *) \ No newline at end of file diff --git a/tests/lexer/mixed1_error.txt b/tests/lexer/mixed1_error.txt index 99af5fbdc..a142c2edd 100644 --- a/tests/lexer/mixed1_error.txt +++ b/tests/lexer/mixed1_error.txt @@ -1 +1 @@ -(2, 10) - LexicographicError: ERROR "#" +(2, 10) - LexicographicError: ERROR "#" diff --git a/tests/lexer/mixed2.cl b/tests/lexer/mixed2.cl index 12039e123..759bf9523 100644 --- a/tests/lexer/mixed2.cl +++ b/tests/lexer/mixed2.cl @@ -1,20 +1,20 @@ -"kjas\"lnnsdj\nfljrdsaf" -@.$.@ -@*%*@ -"alkjfldajf""dasfadsf - -(* -#1 STR_CONST "kjas\"lnnsdj\nfljrdsaf" -#2 '@' -#2 '.' -#2 ERROR "$" -#2 '.' -#2 '@' -#3 '@' -#3 '*' -#3 ERROR "%" -#3 '*' -#3 '@' -#4 STR_CONST "alkjfldajf" -#4 ERROR "Unterminated string constant" +"kjas\"lnnsdj\nfljrdsaf" +@.$.@ +@*%*@ +"alkjfldajf""dasfadsf + +(* +#1 STR_CONST "kjas\"lnnsdj\nfljrdsaf" +#2 '@' +#2 '.' +#2 ERROR "$" +#2 '.' +#2 '@' +#3 '@' +#3 '*' +#3 ERROR "%" +#3 '*' +#3 '@' +#4 STR_CONST "alkjfldajf" +#4 ERROR "Unterminated string constant" *) \ No newline at end of file diff --git a/tests/lexer/mixed2_error.txt b/tests/lexer/mixed2_error.txt index 097dc2a07..37cb73ac2 100644 --- a/tests/lexer/mixed2_error.txt +++ b/tests/lexer/mixed2_error.txt @@ -1,3 +1,3 @@ -(2, 3) - LexicographicError: ERROR "$" -(3, 3) - LexicographicError: ERROR "%" -(4, 22) - LexicographicError: Unterminated string constant +(2, 3) - LexicographicError: ERROR "$" +(3, 3) - LexicographicError: ERROR "%" +(4, 22) - LexicographicError: Unterminated string constant diff --git a/tests/lexer/string1.cl b/tests/lexer/string1.cl index 6c3c00833..f0a5bd873 100644 --- a/tests/lexer/string1.cl +++ b/tests/lexer/string1.cl @@ -1,6 +1,6 @@ -(* A non-escaped newline character may not appear in a string *) - -"This \ -is OK" -"This is not +(* A non-escaped newline character may not appear in a string *) + +"This \ +is OK" +"This is not OK" \ No newline at end of file diff --git a/tests/lexer/string1_error.txt b/tests/lexer/string1_error.txt index 078c12bbb..1dd4d70d9 100644 --- a/tests/lexer/string1_error.txt +++ b/tests/lexer/string1_error.txt @@ -1,2 +1,2 @@ -(5, 13) - LexicographicError: Unterminated string constant +(5, 13) - LexicographicError: Unterminated string constant (6, 4) - LexicographicError: EOF in string constant \ No newline at end of file diff --git a/tests/lexer/string2.cl b/tests/lexer/string2.cl index 3704b6ae7..cb3024180 100644 --- a/tests/lexer/string2.cl +++ b/tests/lexer/string2.cl @@ -1,19 +1,19 @@ -(* A string may not contain EOF *) - -" May the Triforce \ - 0 \ - 0v0 \ - 0vvv0 \ - 0vvvvv0 \ - 0vvvvvvv0 \ - 0vvvvvvvvv0 \ - 0vvvvvvvvvvv0 \ - 000000000000000 \ - 0v0 0v0 \ - 0vvv0 0vvv0 \ - 0vvvvv0 0vvvvv0 \ - 0vvvvvvv0 0vvvvvvv0 \ - 0vvvvvvvvv0 0vvvvvvvvv0 \ - 0vvvvvvvvvvv0 0vvvvvvvvvvv0 \ - 00000000000000000000000000000 \ +(* A string may not contain EOF *) + +" May the Triforce \ + 0 \ + 0v0 \ + 0vvv0 \ + 0vvvvv0 \ + 0vvvvvvv0 \ + 0vvvvvvvvv0 \ + 0vvvvvvvvvvv0 \ + 000000000000000 \ + 0v0 0v0 \ + 0vvv0 0vvv0 \ + 0vvvvv0 0vvvvv0 \ + 0vvvvvvv0 0vvvvvvv0 \ + 0vvvvvvvvv0 0vvvvvvvvv0 \ + 0vvvvvvvvvvv0 0vvvvvvvvvvv0 \ + 00000000000000000000000000000 \ be with you! \ No newline at end of file diff --git a/tests/lexer/string4.cl b/tests/lexer/string4.cl index f4d39c027..7ca4eb42b 100644 --- a/tests/lexer/string4.cl +++ b/tests/lexer/string4.cl @@ -1,38 +1,38 @@ -class Main { - str <- "The big brown fox - jumped over the fence"; - main() : Object { - { - out_string("Yay! This is the newest shites ); - } - }; -}; - -(* -#1 CLASS -#1 TYPEID Main -#1 '{' -#2 OBJECTID str -#2 ASSIGN -#3 ERROR "Unterminated string constant" -#3 OBJECTID jumped -#3 OBJECTID over -#3 OBJECTID the -#3 OBJECTID fence -#4 ERROR "Unterminated string constant" -#4 OBJECTID main -#4 '(' -#4 ')' -#4 ':' -#4 TYPEID Object -#4 '{' -#5 '{' -#6 OBJECTID out_string -#6 '(' -#7 ERROR "Unterminated string constant" -#7 '}' -#8 '}' -#8 ';' -#9 '}' -#9 ';' +class Main { + str <- "The big brown fox + jumped over the fence"; + main() : Object { + { + out_string("Yay! This is the newest shites ); + } + }; +}; + +(* +#1 CLASS +#1 TYPEID Main +#1 '{' +#2 OBJECTID str +#2 ASSIGN +#3 ERROR "Unterminated string constant" +#3 OBJECTID jumped +#3 OBJECTID over +#3 OBJECTID the +#3 OBJECTID fence +#4 ERROR "Unterminated string constant" +#4 OBJECTID main +#4 '(' +#4 ')' +#4 ':' +#4 TYPEID Object +#4 '{' +#5 '{' +#6 OBJECTID out_string +#6 '(' +#7 ERROR "Unterminated string constant" +#7 '}' +#8 '}' +#8 ';' +#9 '}' +#9 ';' *) \ No newline at end of file diff --git a/tests/lexer/string4_error.txt b/tests/lexer/string4_error.txt index 5ab0ea847..bf420217c 100644 --- a/tests/lexer/string4_error.txt +++ b/tests/lexer/string4_error.txt @@ -1,3 +1,3 @@ -(2, 30) - LexicographicError: Unterminated string constant -(3, 36) - LexicographicError: Unterminated string constant +(2, 30) - LexicographicError: Unterminated string constant +(3, 36) - LexicographicError: Unterminated string constant (6, 58) - LexicographicError: Unterminated string constant \ No newline at end of file diff --git a/tests/lexer_test.py b/tests/lexer_test.py index 2a27223d3..a21fd880a 100644 --- a/tests/lexer_test.py +++ b/tests/lexer_test.py @@ -1,13 +1,13 @@ -import pytest -import os -from utils import compare_errors - -tests_dir = __file__.rpartition('/')[0] + '/lexer/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -@pytest.mark.lexer -@pytest.mark.error -@pytest.mark.run(order=1) -@pytest.mark.parametrize("cool_file", tests) -def test_lexer_errors(compiler_path, cool_file): +import pytest +import os +from utils import compare_errors + +tests_dir = __file__.rpartition('/')[0] + '/lexer/' +tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] + +@pytest.mark.lexer +@pytest.mark.error +@pytest.mark.run(order=1) +@pytest.mark.parametrize("cool_file", tests) +def test_lexer_errors(compiler_path, cool_file): compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt') \ No newline at end of file diff --git a/tests/parser/assignment1.cl b/tests/parser/assignment1.cl index 75b4c5bbd..e89ade368 100644 --- a/tests/parser/assignment1.cl +++ b/tests/parser/assignment1.cl @@ -1,37 +1,37 @@ -(* An assignment has the form <- *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(): String { - Test1 <- "Hello World" -- Identifiers begin with a lower case letter - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* An assignment has the form <- *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(): String { + Test1 <- "Hello World" -- Identifiers begin with a lower case letter + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/assignment2.cl b/tests/parser/assignment2.cl index 4efb96487..7b8ed54ba 100644 --- a/tests/parser/assignment2.cl +++ b/tests/parser/assignment2.cl @@ -1,37 +1,37 @@ -(* An assignment has the form <- *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 - 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(): Int { - test1 <-- ~(1 + 2 + 3 + 4 + 5) -- The left side must be an expression - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* An assignment has the form <- *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 - 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(): Int { + test1 <-- ~(1 + 2 + 3 + 4 + 5) -- The left side must be an expression + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/assignment3.cl b/tests/parser/assignment3.cl index ff633f331..f54305e27 100644 --- a/tests/parser/assignment3.cl +++ b/tests/parser/assignment3.cl @@ -1,37 +1,37 @@ -(* An assignment has the form <- *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(): Bool { - test1 <- true++ -- The left side must be an expression - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* An assignment has the form <- *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(): Bool { + test1 <- true++ -- The left side must be an expression + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/attribute1.cl b/tests/parser/attribute1.cl index 063a02c02..59740336d 100644 --- a/tests/parser/attribute1.cl +++ b/tests/parser/attribute1.cl @@ -1,34 +1,34 @@ -(* An attribute of class A specifies a variable that is part of the state of objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - -- Attributes names must begin with lowercase letters - Test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* An attribute of class A specifies a variable that is part of the state of objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + -- Attributes names must begin with lowercase letters + Test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/attribute2.cl b/tests/parser/attribute2.cl index c05211483..337696859 100644 --- a/tests/parser/attribute2.cl +++ b/tests/parser/attribute2.cl @@ -1,34 +1,34 @@ -(* An attribute of class A specifies a variable that is part of the state of objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - -- Type names must begin with uppercase letters - test3: string <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* An attribute of class A specifies a variable that is part of the state of objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + -- Type names must begin with uppercase letters + test3: string <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/attribute3.cl b/tests/parser/attribute3.cl index d858ae47c..b29b4b26d 100644 --- a/tests/parser/attribute3.cl +++ b/tests/parser/attribute3.cl @@ -1,34 +1,34 @@ -(* An attribute of class A specifies a variable that is part of the state of objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - -- Expected '<-' not '<=' - test3: String <= "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* An attribute of class A specifies a variable that is part of the state of objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + -- Expected '<-' not '<=' + test3: String <= "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/block1.cl b/tests/parser/block1.cl index 3613d9268..f15872812 100644 --- a/tests/parser/block1.cl +++ b/tests/parser/block1.cl @@ -1,87 +1,87 @@ -(* A block has the form { ; ... ; } *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - pow: Int <- 1; - count: Int <- 0; - - testing6(a: Int): IO { - { - count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2 -- Missing ";" - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A block has the form { ; ... ; } *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + pow: Int <- 1; + count: Int <- 0; + + testing6(a: Int): IO { + { + count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2 -- Missing ";" + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/block2.cl b/tests/parser/block2.cl index f485dd0b1..1f45fca4c 100644 --- a/tests/parser/block2.cl +++ b/tests/parser/block2.cl @@ -1,87 +1,87 @@ -(* A block has the form { ; ... ; } *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - pow: Int <- 1; - count: Int <- 0; - - testing6(a: Int): IO { - -- Missing "{" - count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A block has the form { ; ... ; } *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + pow: Int <- 1; + count: Int <- 0; + + testing6(a: Int): IO { + -- Missing "{" + count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/block3.cl b/tests/parser/block3.cl index ae1598c3b..9b63b0015 100644 --- a/tests/parser/block3.cl +++ b/tests/parser/block3.cl @@ -1,87 +1,87 @@ -(* A block has the form { ; ... ; } *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - pow: Int <- 1; - count: Int <- 0; - - testing6(a: Int): IO { - { - count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - -- Missing "}" - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A block has the form { ; ... ; } *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + pow: Int <- 1; + count: Int <- 0; + + testing6(a: Int): IO { + { + count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + -- Missing "}" + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/block4.cl b/tests/parser/block4.cl index 8fd883d02..c144dae48 100644 --- a/tests/parser/block4.cl +++ b/tests/parser/block4.cl @@ -1,88 +1,88 @@ -(* A block has the form { ; ... ; } *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - pow: Int <- 1; - count: Int <- 0; - - testing6(a: Int): IO { - { - count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - true++; -- Only expressions - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A block has the form { ; ... ; } *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + pow: Int <- 1; + count: Int <- 0; + + testing6(a: Int): IO { + { + count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + true++; -- Only expressions + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/case1.cl b/tests/parser/case1.cl index c2f508809..35fe5af53 100644 --- a/tests/parser/case1.cl +++ b/tests/parser/case1.cl @@ -1,91 +1,91 @@ -(* Case expressions provide runtime type tests on objects *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 of - -- Every case expression must have at least one branch - esac - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Case expressions provide runtime type tests on objects *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 of + -- Every case expression must have at least one branch + esac + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/case2.cl b/tests/parser/case2.cl index f9162e49f..12cbb87b5 100644 --- a/tests/parser/case2.cl +++ b/tests/parser/case2.cl @@ -1,93 +1,93 @@ -(* Case expressions provide runtime type tests on objects *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case "2 + 2" of - x: Int => new IO.out_string("Es un entero!") -- Missing ";" - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Case expressions provide runtime type tests on objects *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case "2 + 2" of + x: Int => new IO.out_string("Es un entero!") -- Missing ";" + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/case3.cl b/tests/parser/case3.cl index a7eedc18b..8fd851836 100644 --- a/tests/parser/case3.cl +++ b/tests/parser/case3.cl @@ -1,93 +1,93 @@ -(* Case expressions provide runtime type tests on objects *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + false of - x: Int => new IO.out_string("Es un entero!"); - y: string => new IO.out_string("Es una cadena!"); -- Type identifiers starts with a uppercase letter - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Case expressions provide runtime type tests on objects *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + false of + x: Int => new IO.out_string("Es un entero!"); + y: string => new IO.out_string("Es una cadena!"); -- Type identifiers starts with a uppercase letter + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/case4.cl b/tests/parser/case4.cl index 25ca3858f..eb8a3d3a2 100644 --- a/tests/parser/case4.cl +++ b/tests/parser/case4.cl @@ -1,93 +1,93 @@ -(* Case expressions provide runtime type tests on objects *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case true of - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - Mazinger_Z: Bool => new IO.out_string("Es un booleano!"); -- Identifiers starts with a lowercase letter - esac - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Case expressions provide runtime type tests on objects *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case true of + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + Mazinger_Z: Bool => new IO.out_string("Es un booleano!"); -- Identifiers starts with a lowercase letter + esac + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/case5.cl b/tests/parser/case5.cl index b36c663e1..f0483f1f5 100644 --- a/tests/parser/case5.cl +++ b/tests/parser/case5.cl @@ -1,93 +1,93 @@ -(* Case expressions provide runtime type tests on objects *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case test2 of - x: Int <- new IO.out_string("Es un entero!"); -- Must be '=>' not '<-'; - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Case expressions provide runtime type tests on objects *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case test2 of + x: Int <- new IO.out_string("Es un entero!"); -- Must be '=>' not '<-'; + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/case6.cl b/tests/parser/case6.cl index 66e7df2ab..c49467a89 100644 --- a/tests/parser/case6.cl +++ b/tests/parser/case6.cl @@ -1,93 +1,93 @@ -(* Case expressions provide runtime type tests on objects *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 -- Missing "of" - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Case expressions provide runtime type tests on objects *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 -- Missing "of" + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/class1.cl b/tests/parser/class1.cl index f4815e3f4..1c0641a94 100644 --- a/tests/parser/class1.cl +++ b/tests/parser/class1.cl @@ -1,20 +1,20 @@ -(* A class is a list of features *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - testing(): Int { - 2 + 2 - }; -}; - --- Class names must begin with uppercase letters -class alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* A class is a list of features *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + testing(): Int { + 2 + 2 + }; +}; + +-- Class names must begin with uppercase letters +class alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/class2.cl b/tests/parser/class2.cl index f363b032a..baf290822 100644 --- a/tests/parser/class2.cl +++ b/tests/parser/class2.cl @@ -1,20 +1,20 @@ -(* A class is a list of features *) - -CLaSS Main { - main(): Object { - (new Alpha).print() - }; -}; - -CLaSS Test { - testing(): Int { - 2 + 2 - }; -}; - --- Type names must begin with uppercase letters -CLaSS Alpha iNHeRiTS iO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* A class is a list of features *) + +CLaSS Main { + main(): Object { + (new Alpha).print() + }; +}; + +CLaSS Test { + testing(): Int { + 2 + 2 + }; +}; + +-- Type names must begin with uppercase letters +CLaSS Alpha iNHeRiTS iO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/class3.cl b/tests/parser/class3.cl index 0c801372a..5c89c5eb8 100644 --- a/tests/parser/class3.cl +++ b/tests/parser/class3.cl @@ -1,34 +1,34 @@ -(* A class is a list of features *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - -- Missing semicolon - testing2(a: Alpha, b: Int): Int { - 2 + 2 - } - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* A class is a list of features *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + -- Missing semicolon + testing2(a: Alpha, b: Int): Int { + 2 + 2 + } + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/class4.cl b/tests/parser/class4.cl index 5c286b5e6..cdfbc313c 100644 --- a/tests/parser/class4.cl +++ b/tests/parser/class4.cl @@ -1,36 +1,36 @@ -(* A class is a list of features *) - -CLaSS Main { - main(): Object { - (new Alpha).print() - }; -}; - -CLaSS Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - -- Only features - 2 + 2; - - testing3(): String { - "2 + 2" - }; -}; - -CLaSS Alpha iNHeRiTS IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* A class is a list of features *) + +CLaSS Main { + main(): Object { + (new Alpha).print() + }; +}; + +CLaSS Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + -- Only features + 2 + 2; + + testing3(): String { + "2 + 2" + }; +}; + +CLaSS Alpha iNHeRiTS IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/class5.cl b/tests/parser/class5.cl index 3f40c36eb..d6b5c5fda 100644 --- a/tests/parser/class5.cl +++ b/tests/parser/class5.cl @@ -1,34 +1,34 @@ -(* A class is a list of features *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - --- Missing '{' -class Test - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* A class is a list of features *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +-- Missing '{' +class Test + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/class6.cl b/tests/parser/class6.cl index 8501d2593..af9ecbf15 100644 --- a/tests/parser/class6.cl +++ b/tests/parser/class6.cl @@ -1,34 +1,34 @@ -(* A class is a list of features *) - -CLaSS Main { - main(): Object { - (new Alpha).print() - }; -}; - --- Missing '}' -CLaSS Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -; - -CLaSS Alpha iNHeRiTS IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* A class is a list of features *) + +CLaSS Main { + main(): Object { + (new Alpha).print() + }; +}; + +-- Missing '}' +CLaSS Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +; + +CLaSS Alpha iNHeRiTS IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/conditional1.cl b/tests/parser/conditional1.cl index 4d546fc44..f03b9c4e6 100644 --- a/tests/parser/conditional1.cl +++ b/tests/parser/conditional1.cl @@ -1,69 +1,69 @@ -(* A conditional has the form if then else fi *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - if a.length() < b.length() -- Mising "then" - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - else - if a.length() = b.length() then - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - else - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fi - fi - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A conditional has the form if then else fi *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + if a.length() < b.length() -- Mising "then" + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + else + if a.length() = b.length() then + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + else + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fi + fi + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/conditional2.cl b/tests/parser/conditional2.cl index 4f10c2957..9ebd7fe84 100644 --- a/tests/parser/conditional2.cl +++ b/tests/parser/conditional2.cl @@ -1,69 +1,69 @@ -(* A conditional has the form if then else fi *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - if a.length() < b.length() then - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - else - if a.length() = b.length() then - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - else - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - -- Missing "fi" - fi - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A conditional has the form if then else fi *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + if a.length() < b.length() then + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + else + if a.length() = b.length() then + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + else + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + -- Missing "fi" + fi + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/conditional3.cl b/tests/parser/conditional3.cl index 67e991ade..ac143ad42 100644 --- a/tests/parser/conditional3.cl +++ b/tests/parser/conditional3.cl @@ -1,69 +1,69 @@ -(* A conditional has the form if then else fi *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - iF a.length() < b.length() tHen - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - elsE - if a.length() = b.length() then - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - eLseif -- elseif isn't a keyword - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A conditional has the form if then else fi *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + iF a.length() < b.length() tHen + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + elsE + if a.length() = b.length() then + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + eLseif -- elseif isn't a keyword + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/conditional4.cl b/tests/parser/conditional4.cl index 0792fdc85..51337f874 100644 --- a/tests/parser/conditional4.cl +++ b/tests/parser/conditional4.cl @@ -1,73 +1,73 @@ -(* A conditional has the form if then else fi *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(): Int { - if true++ then 1 else 0 -- Condition must be an expression - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A conditional has the form if then else fi *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(): Int { + if true++ then 1 else 0 -- Condition must be an expression + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/conditional5.cl b/tests/parser/conditional5.cl index 0c1e1aad0..399515701 100644 --- a/tests/parser/conditional5.cl +++ b/tests/parser/conditional5.cl @@ -1,73 +1,73 @@ -(* A conditional has the form if then else fi *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(): Int { - if true then true++ else 0 -- If branch must be an expression - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A conditional has the form if then else fi *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(): Int { + if true then true++ else 0 -- If branch must be an expression + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/conditional6.cl b/tests/parser/conditional6.cl index 02310404a..8daa35d7f 100644 --- a/tests/parser/conditional6.cl +++ b/tests/parser/conditional6.cl @@ -1,73 +1,73 @@ -(* A conditional has the form if then else fi *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(): Int { - if true then 1 else false++ -- Else branch must be an expression - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A conditional has the form if then else fi *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(): Int { + if true then 1 else false++ -- Else branch must be an expression + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch1.cl b/tests/parser/dispatch1.cl index 2ca394716..2eba9db03 100644 --- a/tests/parser/dispatch1.cl +++ b/tests/parser/dispatch1.cl @@ -1,45 +1,45 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - Test1.testing4(1, 2).testing4(3, 4).testing4(5, 6) -- Objet identifiers begin with a lower case letter - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + Test1.testing4(1, 2).testing4(3, 4).testing4(5, 6) -- Objet identifiers begin with a lower case letter + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch2.cl b/tests/parser/dispatch2.cl index 0b57467a1..139eba918 100644 --- a/tests/parser/dispatch2.cl +++ b/tests/parser/dispatch2.cl @@ -1,45 +1,45 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13,) -- Extra comma - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13,) -- Extra comma + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch3.cl b/tests/parser/dispatch3.cl index 9f1a5afff..0d88f5c23 100644 --- a/tests/parser/dispatch3.cl +++ b/tests/parser/dispatch3.cl @@ -1,45 +1,45 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).Testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) -- Identifiers begin with a lower case letter - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).Testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) -- Identifiers begin with a lower case letter + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch4.cl b/tests/parser/dispatch4.cl index d1efc469d..dc13fd762 100644 --- a/tests/parser/dispatch4.cl +++ b/tests/parser/dispatch4.cl @@ -1,53 +1,53 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - self.testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true++) -- Arguments must be expressions - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + self.testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true++) -- Arguments must be expressions + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch5.cl b/tests/parser/dispatch5.cl index 63a5afa79..b7bae25e1 100644 --- a/tests/parser/dispatch5.cl +++ b/tests/parser/dispatch5.cl @@ -1,53 +1,53 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, ,true + fALSE) -- Extra comma - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, ,true + fALSE) -- Extra comma + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch6.cl b/tests/parser/dispatch6.cl index 0a953e2e6..6887c60cd 100644 --- a/tests/parser/dispatch6.cl +++ b/tests/parser/dispatch6.cl @@ -1,57 +1,57 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@object.copy() -- Type identifiers begin with a upper case letter - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@object.copy() -- Type identifiers begin with a upper case letter + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch7.cl b/tests/parser/dispatch7.cl index 3ecac4d0f..a9ff1b67a 100644 --- a/tests/parser/dispatch7.cl +++ b/tests/parser/dispatch7.cl @@ -1,57 +1,57 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.Copy() -- Identifiers begin with a lower case letter - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.Copy() -- Identifiers begin with a lower case letter + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch8.cl b/tests/parser/dispatch8.cl index eef0455ef..c1bb2abba 100644 --- a/tests/parser/dispatch8.cl +++ b/tests/parser/dispatch8.cl @@ -1,57 +1,57 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy(,) -- Extra comma - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy(,) -- Extra comma + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch9.cl b/tests/parser/dispatch9.cl index 5fdef22d6..8914a18c2 100644 --- a/tests/parser/dispatch9.cl +++ b/tests/parser/dispatch9.cl @@ -1,61 +1,61 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; - - testing5(): Object { - test1:Object.copy() -- Must be '@' not ':' - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; + + testing5(): Object { + test1:Object.copy() -- Must be '@' not ':' + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let1.cl b/tests/parser/let1.cl index 576ae383c..0e5fc6d17 100644 --- a/tests/parser/let1.cl +++ b/tests/parser/let1.cl @@ -1,85 +1,85 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let Count: Int <- 0, pow: Int <- 1 -- Object identifiers starts with a lowercase letter - in { - -- count <- 0; - -- pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let Count: Int <- 0, pow: Int <- 1 -- Object identifiers starts with a lowercase letter + in { + -- count <- 0; + -- pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let2.cl b/tests/parser/let2.cl index 4cfaef0f8..01d055dac 100644 --- a/tests/parser/let2.cl +++ b/tests/parser/let2.cl @@ -1,85 +1,85 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int, pow: int <- 1 -- Type identifiers starts with a uppercase letter - in { - count <- 0; - -- pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int, pow: int <- 1 -- Type identifiers starts with a uppercase letter + in { + count <- 0; + -- pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let3.cl b/tests/parser/let3.cl index 91e567fd8..b2b2fb005 100644 --- a/tests/parser/let3.cl +++ b/tests/parser/let3.cl @@ -1,85 +1,85 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int, pow: Int, -- Extra comma - in { - count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int, pow: Int, -- Extra comma + in { + count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let4.cl b/tests/parser/let4.cl index a716c332d..c7d0ea8e3 100644 --- a/tests/parser/let4.cl +++ b/tests/parser/let4.cl @@ -1,85 +1,85 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- true++, pow: Int <- 1 -- Initialization must be an expression - in { - count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- true++, pow: Int <- 1 -- Initialization must be an expression + in { + count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let5.cl b/tests/parser/let5.cl index d974cc138..cc4ed7a99 100644 --- a/tests/parser/let5.cl +++ b/tests/parser/let5.cl @@ -1,85 +1,85 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int = 0, pow: Int -- Must be '<-' not '=' - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int = 0, pow: Int -- Must be '<-' not '=' + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let6.cl b/tests/parser/let6.cl index b6e51d7e1..8bc8c4883 100644 --- a/tests/parser/let6.cl +++ b/tests/parser/let6.cl @@ -1,74 +1,74 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int <- 1 - in false++ -- Let body must be an expression - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int <- 1 + in false++ -- Let body must be an expression + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let7.cl b/tests/parser/let7.cl index 6fd63e6a7..816c59845 100644 --- a/tests/parser/let7.cl +++ b/tests/parser/let7.cl @@ -1,85 +1,85 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - (* Missing "in" *) { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + (* Missing "in" *) { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/loop1.cl b/tests/parser/loop1.cl index 7d0d7688f..2065de506 100644 --- a/tests/parser/loop1.cl +++ b/tests/parser/loop1.cl @@ -1,78 +1,78 @@ -(* A loop has the form while loop pool *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - count: Int <- 1; - - testing6(): Object { - while count < 1024*1024 - -- Missing "loop" - count <- count * 2 - pool - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A loop has the form while loop pool *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + count: Int <- 1; + + testing6(): Object { + while count < 1024*1024 + -- Missing "loop" + count <- count * 2 + pool + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/loop2.cl b/tests/parser/loop2.cl index a9613c487..70f8cd910 100644 --- a/tests/parser/loop2.cl +++ b/tests/parser/loop2.cl @@ -1,78 +1,78 @@ -(* A loop has the form while loop pool *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - count: Int <- 1; - - testing6(): Object { - while count < 1024*1024 - loop - count <- count * 2 - -- Missing "pool" - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A loop has the form while loop pool *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + count: Int <- 1; + + testing6(): Object { + while count < 1024*1024 + loop + count <- count * 2 + -- Missing "pool" + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/loop3.cl b/tests/parser/loop3.cl index 860adb4d1..fbb3a56b4 100644 --- a/tests/parser/loop3.cl +++ b/tests/parser/loop3.cl @@ -1,78 +1,78 @@ -(* A loop has the form while loop pool *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - count: Int <- 1; - - testing6(): Object { - while count => 1024*1024 -- Condition must be an expression - loop - count <- count * 2 - pool - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A loop has the form while loop pool *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + count: Int <- 1; + + testing6(): Object { + while count => 1024*1024 -- Condition must be an expression + loop + count <- count * 2 + pool + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/loop4.cl b/tests/parser/loop4.cl index 0a1194e82..47b0e5f4a 100644 --- a/tests/parser/loop4.cl +++ b/tests/parser/loop4.cl @@ -1,78 +1,78 @@ -(* A loop has the form while loop pool *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - count: Int <- 1; - - testing6(): Object { - while count < 1024*1024 - loop - count <- true++ -- While body must be an expression - pool - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A loop has the form while loop pool *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + count: Int <- 1; + + testing6(): Object { + while count < 1024*1024 + loop + count <- true++ -- While body must be an expression + pool + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/method1.cl b/tests/parser/method1.cl index fcfbbcd30..d86661430 100644 --- a/tests/parser/method1.cl +++ b/tests/parser/method1.cl @@ -1,34 +1,34 @@ -(* A method of class A is a procedure that may manipulate the variables and objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - -- Method names must begin with lowercase letters - Testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A method of class A is a procedure that may manipulate the variables and objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + -- Method names must begin with lowercase letters + Testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/method2.cl b/tests/parser/method2.cl index d5bdfd85c..83648f50d 100644 --- a/tests/parser/method2.cl +++ b/tests/parser/method2.cl @@ -1,34 +1,34 @@ -(* A method of class A is a procedure that may manipulate the variables and objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - -- Parameter names must begin with lowercase letters - testing2(a: Alpha, B: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A method of class A is a procedure that may manipulate the variables and objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + -- Parameter names must begin with lowercase letters + testing2(a: Alpha, B: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/method3.cl b/tests/parser/method3.cl index 1e5c9eb53..428b25fec 100644 --- a/tests/parser/method3.cl +++ b/tests/parser/method3.cl @@ -1,34 +1,34 @@ -(* A method of class A is a procedure that may manipulate the variables and objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - -- Type names must begin with uppercase letters - testing2(a: Alpha, b: int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A method of class A is a procedure that may manipulate the variables and objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + -- Type names must begin with uppercase letters + testing2(a: Alpha, b: int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/method4.cl b/tests/parser/method4.cl index 019ada276..52ec07bce 100644 --- a/tests/parser/method4.cl +++ b/tests/parser/method4.cl @@ -1,34 +1,34 @@ -(* A method of class A is a procedure that may manipulate the variables and objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - -- Missing paremeter - testing3(x: Int,): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A method of class A is a procedure that may manipulate the variables and objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + -- Missing paremeter + testing3(x: Int,): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/method5.cl b/tests/parser/method5.cl index 13127f664..706a3145c 100644 --- a/tests/parser/method5.cl +++ b/tests/parser/method5.cl @@ -1,34 +1,34 @@ -(* A method of class A is a procedure that may manipulate the variables and objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - -- Type names must begin with uppercase letters - testing3(): string { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A method of class A is a procedure that may manipulate the variables and objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + -- Type names must begin with uppercase letters + testing3(): string { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/method6.cl b/tests/parser/method6.cl index d48cd1293..26ce7f19f 100644 --- a/tests/parser/method6.cl +++ b/tests/parser/method6.cl @@ -1,33 +1,33 @@ -(* A method of class A is a procedure that may manipulate the variables and objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - -- Body can't be empty - testing2(a: Alpha, b: Int): Int { - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A method of class A is a procedure that may manipulate the variables and objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + -- Body can't be empty + testing2(a: Alpha, b: Int): Int { + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/mixed1.cl b/tests/parser/mixed1.cl index a27879513..b13e679da 100644 --- a/tests/parser/mixed1.cl +++ b/tests/parser/mixed1.cl @@ -1,100 +1,100 @@ -(* Cool has four binary arithmetic operations: +, -, *, /. *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 of - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; - - a: Int <- 1; - - testing8(x: Int, y: Int): Bool { - let z: Int <- 3, w: Int <- 4 - in isvoid (3 + a * (x / w + new Int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) - }; -}-- Mising ";" - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Cool has four binary arithmetic operations: +, -, *, /. *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 of + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; + + a: Int <- 1; + + testing8(x: Int, y: Int): Bool { + let z: Int <- 3, w: Int <- 4 + in isvoid (3 + a * (x / w + new Int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) + }; +}-- Mising ";" + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/mixed2.cl b/tests/parser/mixed2.cl index f5477e0bb..6776fcc12 100644 --- a/tests/parser/mixed2.cl +++ b/tests/parser/mixed2.cl @@ -1,14 +1,14 @@ -class Main { - main(): Object { - (new Alpha).print() - }; - -}; - -(* Class names must begin with uppercase letters *) -class alpha inherits IO { - print() : Object { - out_string("reached!!\n"); - }; -}; - +class Main { + main(): Object { + (new Alpha).print() + }; + +}; + +(* Class names must begin with uppercase letters *) +class alpha inherits IO { + print() : Object { + out_string("reached!!\n"); + }; +}; + diff --git a/tests/parser/mixed3.cl b/tests/parser/mixed3.cl index 1bdcad743..f5271eb3e 100644 --- a/tests/parser/mixed3.cl +++ b/tests/parser/mixed3.cl @@ -1,40 +1,40 @@ -class Main inherits IO { - main() : Object { - { - out_string("Enter a number to check if number is prime\n"); - let i : Int <- in_int() in { - if(i <= 1) then { - out_string("Invalid Input\n"); - abort(); - } else { - if (isPrime(i) = 1) then - out_string("Number is prime\n") - else - out_string("Number is composite\n") - fi; - } - fi; - }; - } - }; - - mod(i : Int, ) : Int { -- Formal list must be comma separated. A comma does not terminate a list of formals. - i - (i/k)*k - }; - - isPrime(i : Int) : Int { - { - let x : Int <- 2, - c : Int <- 1 in - { - while (not (x = i)) loop - if (mod(i, x) = 0) then { - c <- 0; - x <- i; - } else x <- x + 1 fi - pool; - c; - }; - } - }; -}; +class Main inherits IO { + main() : Object { + { + out_string("Enter a number to check if number is prime\n"); + let i : Int <- in_int() in { + if(i <= 1) then { + out_string("Invalid Input\n"); + abort(); + } else { + if (isPrime(i) = 1) then + out_string("Number is prime\n") + else + out_string("Number is composite\n") + fi; + } + fi; + }; + } + }; + + mod(i : Int, ) : Int { -- Formal list must be comma separated. A comma does not terminate a list of formals. + i - (i/k)*k + }; + + isPrime(i : Int) : Int { + { + let x : Int <- 2, + c : Int <- 1 in + { + while (not (x = i)) loop + if (mod(i, x) = 0) then { + c <- 0; + x <- i; + } else x <- x + 1 fi + pool; + c; + }; + } + }; +}; diff --git a/tests/parser/mixed4.cl b/tests/parser/mixed4.cl index e752253be..47e6ea5e9 100644 --- a/tests/parser/mixed4.cl +++ b/tests/parser/mixed4.cl @@ -1,21 +1,21 @@ -class Main inherits IO { - main() : Object { - { - out_string("Enter number of numbers to multiply\n"); - out_int(prod(in_int())); - out_string("\n"); - } - }; - - prod(i : Int) : Int { - let y : Int <- 1 in { - while (not (i = 0) ) loop { - out_string("Enter Number: "); - y <- y * in_int(Main : Int); -- the parser correctly catches the error here - i <- i - 1; - } - pool; - y; - } - }; -}; +class Main inherits IO { + main() : Object { + { + out_string("Enter number of numbers to multiply\n"); + out_int(prod(in_int())); + out_string("\n"); + } + }; + + prod(i : Int) : Int { + let y : Int <- 1 in { + while (not (i = 0) ) loop { + out_string("Enter Number: "); + y <- y * in_int(Main : Int); -- the parser correctly catches the error here + i <- i - 1; + } + pool; + y; + } + }; +}; diff --git a/tests/parser/mixed5.cl b/tests/parser/mixed5.cl index c9176a890..d4ca68f44 100644 --- a/tests/parser/mixed5.cl +++ b/tests/parser/mixed5.cl @@ -1,20 +1,20 @@ -class Main inherits IO { - str <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; - main() : Object { - { - out_string("Enter number of numbers to multiply\n"); - out_int(prod(in_int())); - out_string("\n"); - } - }; - prod(i : Int) : Int { - let y : Int <- 1 in { - while (not (i = 0) ) loop { - out_string("Enter Number: "); - y <- y * in_int(); - i <- i - 1; - } - y; - } - }; -} +class Main inherits IO { + str <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + main() : Object { + { + out_string("Enter number of numbers to multiply\n"); + out_int(prod(in_int())); + out_string("\n"); + } + }; + prod(i : Int) : Int { + let y : Int <- 1 in { + while (not (i = 0) ) loop { + out_string("Enter Number: "); + y <- y * in_int(); + i <- i - 1; + } + y; + } + }; +} diff --git a/tests/parser/mixed6.cl b/tests/parser/mixed6.cl index 5da80da31..0a51656c9 100644 --- a/tests/parser/mixed6.cl +++ b/tests/parser/mixed6.cl @@ -1,5 +1,5 @@ -classs Doom { - i : Int <- 0; - main() : Object { - if i = 0 then out_string("This is da real *h*t") - +classs Doom { + i : Int <- 0; + main() : Object { + if i = 0 then out_string("This is da real *h*t") + diff --git a/tests/parser/operation1.cl b/tests/parser/operation1.cl index d38eb72d0..d892ec8a6 100644 --- a/tests/parser/operation1.cl +++ b/tests/parser/operation1.cl @@ -1,101 +1,101 @@ -(* Cool has four binary arithmetic operations: +, -, *, /. *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 of - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; - - a: Int <- 1; - - testing8(x: Int, y: Int): Bool { - let z: Int <- 3, w: Int <- 4 - -- Missing ')' - in isvoid (3 + a * (x / w + new Int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a)/(0)*(((4 * 4))))) - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Cool has four binary arithmetic operations: +, -, *, /. *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 of + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; + + a: Int <- 1; + + testing8(x: Int, y: Int): Bool { + let z: Int <- 3, w: Int <- 4 + -- Missing ')' + in isvoid (3 + a * (x / w + new Int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a)/(0)*(((4 * 4))))) + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/operation2.cl b/tests/parser/operation2.cl index 2dc628359..1f167409a 100644 --- a/tests/parser/operation2.cl +++ b/tests/parser/operation2.cl @@ -1,101 +1,101 @@ -(* Cool has four binary arithmetic operations: +, -, *, /. *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 of - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; - - a: Int <- 1; - - testing8(x: Int, y: Int): Bool { - let z: Int <- 3, w: Int <- 4 - -- Type identifiers starts with a uppercase letter - in isvoid (3 + a * (x / w + new int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Cool has four binary arithmetic operations: +, -, *, /. *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 of + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; + + a: Int <- 1; + + testing8(x: Int, y: Int): Bool { + let z: Int <- 3, w: Int <- 4 + -- Type identifiers starts with a uppercase letter + in isvoid (3 + a * (x / w + new int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/operation3.cl b/tests/parser/operation3.cl index 61d6cbfa8..ef125927a 100644 --- a/tests/parser/operation3.cl +++ b/tests/parser/operation3.cl @@ -1,101 +1,101 @@ -(* Cool has four binary arithmetic operations: +, -, *, /. *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 of - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; - - a: Int <- 1; - - testing8(x: Int, y: Int): Bool { - let z: Int <- 3, w: Int <- 4 - -- Object identifiers starts with a lowercase letter - in isvoid (3 + a * (x / w + new Int) - y - (((if tRue = not faLSe then ~Mazinger_Z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Cool has four binary arithmetic operations: +, -, *, /. *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 of + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; + + a: Int <- 1; + + testing8(x: Int, y: Int): Bool { + let z: Int <- 3, w: Int <- 4 + -- Object identifiers starts with a lowercase letter + in isvoid (3 + a * (x / w + new Int) - y - (((if tRue = not faLSe then ~Mazinger_Z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/operation4.cl b/tests/parser/operation4.cl index bae7de5b5..2212740e7 100644 --- a/tests/parser/operation4.cl +++ b/tests/parser/operation4.cl @@ -1,101 +1,101 @@ -(* Cool has four binary arithmetic operations: +, -, *, /. *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 of - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; - - a: Int <- 1; - - testing8(x: Int, y: Int): Bool { - let z: Int <- 3, w: Int <- 4 - -- Double "+" - in isvoid (3 + a * (x / w++ new Int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Cool has four binary arithmetic operations: +, -, *, /. *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 of + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; + + a: Int <- 1; + + testing8(x: Int, y: Int): Bool { + let z: Int <- 3, w: Int <- 4 + -- Double "+" + in isvoid (3 + a * (x / w++ new Int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/program2.cl b/tests/parser/program2.cl index f8b16779c..a281c6c14 100644 --- a/tests/parser/program2.cl +++ b/tests/parser/program2.cl @@ -1,20 +1,20 @@ -(* Cool programs are sets of classes *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - --- Missing semicolon -class Test { - testing(): Int { - 2 + 2 - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* Cool programs are sets of classes *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +-- Missing semicolon +class Test { + testing(): Int { + 2 + 2 + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/program3.cl b/tests/parser/program3.cl index e27889c57..10d2dc71e 100644 --- a/tests/parser/program3.cl +++ b/tests/parser/program3.cl @@ -1,24 +1,24 @@ -(* Cool programs are sets of classes *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - testing(): Int { - 2 + 2 - }; -}; - --- Only classes -suma(a: Int, b: Int) int { - a + b -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* Cool programs are sets of classes *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + testing(): Int { + 2 + 2 + }; +}; + +-- Only classes +suma(a: Int, b: Int) int { + a + b +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser_test.py b/tests/parser_test.py index 129c0f20a..166de45de 100644 --- a/tests/parser_test.py +++ b/tests/parser_test.py @@ -1,13 +1,13 @@ -import pytest -import os -from utils import compare_errors - -tests_dir = __file__.rpartition('/')[0] + '/parser/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -@pytest.mark.parser -@pytest.mark.error -@pytest.mark.run(order=2) -@pytest.mark.parametrize("cool_file", tests) -def test_parser_errors(compiler_path, cool_file): +import pytest +import os +from utils import compare_errors + +tests_dir = __file__.rpartition('/')[0] + '/parser/' +tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] + +@pytest.mark.parser +@pytest.mark.error +@pytest.mark.run(order=2) +@pytest.mark.parametrize("cool_file", tests) +def test_parser_errors(compiler_path, cool_file): compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt') \ No newline at end of file diff --git a/tests/semantic/arithmetic1.cl b/tests/semantic/arithmetic1.cl index bf94eb194..65719c064 100644 --- a/tests/semantic/arithmetic1.cl +++ b/tests/semantic/arithmetic1.cl @@ -1,11 +1,11 @@ ---The static types of the two sub-expressions must be Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Int <- 1 * 2 / 3 - 4 + new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in x <- x + new A.type_name().concat(new B.type_name().concat(new C.type_name())); +--The static types of the two sub-expressions must be Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Int <- 1 * 2 / 3 - 4 + new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in x <- x + new A.type_name().concat(new B.type_name().concat(new C.type_name())); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic10.cl b/tests/semantic/arithmetic10.cl index bbfe6cdb3..b2488ad7f 100644 --- a/tests/semantic/arithmetic10.cl +++ b/tests/semantic/arithmetic10.cl @@ -1,15 +1,15 @@ -(* -The expression ~ is the integer -complement of . The expression must have static type Int and the entire expression -has static type Int. -*) - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in ~new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); +(* +The expression ~ is the integer +complement of . The expression must have static type Int and the entire expression +has static type Int. +*) + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in ~new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic11.cl b/tests/semantic/arithmetic11.cl index fc067dc1a..05cec0465 100644 --- a/tests/semantic/arithmetic11.cl +++ b/tests/semantic/arithmetic11.cl @@ -1,14 +1,14 @@ -(* -The expression not is the boolean complement of . The expression - must have static type Bool and the entire expression has static type Bool. -*) - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in not 1 + new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); +(* +The expression not is the boolean complement of . The expression + must have static type Bool and the entire expression has static type Bool. +*) + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in not 1 + new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic12.cl b/tests/semantic/arithmetic12.cl index 2e012fc41..05a2da918 100644 --- a/tests/semantic/arithmetic12.cl +++ b/tests/semantic/arithmetic12.cl @@ -1,14 +1,14 @@ -(* -The expression not is the boolean complement of . The expression - must have static type Bool and the entire expression has static type Bool. -*) - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in not 1 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); +(* +The expression not is the boolean complement of . The expression + must have static type Bool and the entire expression has static type Bool. +*) + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in not 1 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic1_error.txt b/tests/semantic/arithmetic1_error.txt index a74ebf3da..59213724d 100644 --- a/tests/semantic/arithmetic1_error.txt +++ b/tests/semantic/arithmetic1_error.txt @@ -1 +1 @@ -(10, 27) - TypeError: non-Int arguments: Int + String +(10, 27) - TypeError: non-Int arguments: Int + String diff --git a/tests/semantic/arithmetic2.cl b/tests/semantic/arithmetic2.cl index 59532573d..f1f0935e2 100644 --- a/tests/semantic/arithmetic2.cl +++ b/tests/semantic/arithmetic2.cl @@ -1,11 +1,11 @@ ---The static types of the two sub-expressions must be Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Int <- 1 + 2 * 3 / 4 - new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in x <- x - new A.type_name().concat(new B.type_name().concat(new C.type_name())); +--The static types of the two sub-expressions must be Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Int <- 1 + 2 * 3 / 4 - new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in x <- x - new A.type_name().concat(new B.type_name().concat(new C.type_name())); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic2_error.txt b/tests/semantic/arithmetic2_error.txt index 2c7952af8..aebc7aab9 100644 --- a/tests/semantic/arithmetic2_error.txt +++ b/tests/semantic/arithmetic2_error.txt @@ -1 +1 @@ -(10, 27) - TypeError: non-Int arguments: Int - String +(10, 27) - TypeError: non-Int arguments: Int - String diff --git a/tests/semantic/arithmetic3.cl b/tests/semantic/arithmetic3.cl index b208957f5..df64d8000 100644 --- a/tests/semantic/arithmetic3.cl +++ b/tests/semantic/arithmetic3.cl @@ -1,11 +1,11 @@ ---The static types of the two sub-expressions must be Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Int <- 1 - 2 + 3 * 4 / new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in x <- x / new A.type_name().concat(new B.type_name().concat(new C.type_name())); +--The static types of the two sub-expressions must be Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Int <- 1 - 2 + 3 * 4 / new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in x <- x / new A.type_name().concat(new B.type_name().concat(new C.type_name())); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic3_error.txt b/tests/semantic/arithmetic3_error.txt index 81d88331a..d0af01bb5 100644 --- a/tests/semantic/arithmetic3_error.txt +++ b/tests/semantic/arithmetic3_error.txt @@ -1 +1 @@ -(10, 27) - TypeError: non-Int arguments: Int / String +(10, 27) - TypeError: non-Int arguments: Int / String diff --git a/tests/semantic/arithmetic4.cl b/tests/semantic/arithmetic4.cl index 2c7dd4fc9..68512ca44 100644 --- a/tests/semantic/arithmetic4.cl +++ b/tests/semantic/arithmetic4.cl @@ -1,11 +1,11 @@ ---The static types of the two sub-expressions must be Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Int <- 1 / 2 - 3 + 4 * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in x <- x * new A.type_name().concat(new B.type_name().concat(new C.type_name())); +--The static types of the two sub-expressions must be Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Int <- 1 / 2 - 3 + 4 * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in x <- x * new A.type_name().concat(new B.type_name().concat(new C.type_name())); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic5.cl b/tests/semantic/arithmetic5.cl index bc08c6e82..fd77c7971 100644 --- a/tests/semantic/arithmetic5.cl +++ b/tests/semantic/arithmetic5.cl @@ -1,11 +1,11 @@ ---The static type of the expression is Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Bool <- let x: Int <- 1 / 2 - 3 + 4 * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in x <- x * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); +--The static type of the expression is Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Bool <- let x: Int <- 1 / 2 - 3 + 4 * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in x <- x * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic5_error.txt b/tests/semantic/arithmetic5_error.txt index dd5346844..8c67c2f53 100644 --- a/tests/semantic/arithmetic5_error.txt +++ b/tests/semantic/arithmetic5_error.txt @@ -1 +1 @@ -(9, 19) - TypeError: Inferred type Int of initialization of attribute test does not conform to declared type Bool. +(9, 19) - TypeError: Inferred type Int of initialization of attribute test does not conform to declared type Bool. diff --git a/tests/semantic/arithmetic6.cl b/tests/semantic/arithmetic6.cl index a0c3d03ff..d4da66a73 100644 --- a/tests/semantic/arithmetic6.cl +++ b/tests/semantic/arithmetic6.cl @@ -1,11 +1,11 @@ - --The static types of the two sub-expressions must be Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 <= new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in 1 <= new A.type_name().concat(new B.type_name().concat(new C.type_name())); -}; + --The static types of the two sub-expressions must be Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 <= new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in 1 <= new A.type_name().concat(new B.type_name().concat(new C.type_name())); +}; diff --git a/tests/semantic/arithmetic6_error.txt b/tests/semantic/arithmetic6_error.txt index 2e43dfc17..a0d67cb48 100644 --- a/tests/semantic/arithmetic6_error.txt +++ b/tests/semantic/arithmetic6_error.txt @@ -1 +1 @@ -(10, 22) - TypeError: non-Int arguments: Int <= String +(10, 22) - TypeError: non-Int arguments: Int <= String diff --git a/tests/semantic/arithmetic7.cl b/tests/semantic/arithmetic7.cl index c00c75cde..b98a4b0e2 100644 --- a/tests/semantic/arithmetic7.cl +++ b/tests/semantic/arithmetic7.cl @@ -1,12 +1,12 @@ - --The static types of the two sub-expressions must be Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in 1 < new A.type_name().concat(new B.type_name().concat(new C.type_name())); -}; - + --The static types of the two sub-expressions must be Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in 1 < new A.type_name().concat(new B.type_name().concat(new C.type_name())); +}; + diff --git a/tests/semantic/arithmetic7_error.txt b/tests/semantic/arithmetic7_error.txt index 6f3537117..166bcc8ef 100644 --- a/tests/semantic/arithmetic7_error.txt +++ b/tests/semantic/arithmetic7_error.txt @@ -1 +1 @@ -(10, 22) - TypeError: non-Int arguments: Int < String +(10, 22) - TypeError: non-Int arguments: Int < String diff --git a/tests/semantic/arithmetic8.cl b/tests/semantic/arithmetic8.cl index 3210bdb8a..f3ad37ec4 100644 --- a/tests/semantic/arithmetic8.cl +++ b/tests/semantic/arithmetic8.cl @@ -1,13 +1,13 @@ - --The rules are exactly the same as for the binary arithmetic operations, except that the result is a Bool. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in 1 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); -}; - - + --The rules are exactly the same as for the binary arithmetic operations, except that the result is a Bool. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in 1 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); +}; + + diff --git a/tests/semantic/arithmetic8_error.txt b/tests/semantic/arithmetic8_error.txt index ebcaa3797..5a8814e1a 100644 --- a/tests/semantic/arithmetic8_error.txt +++ b/tests/semantic/arithmetic8_error.txt @@ -1 +1 @@ -(9, 18) - TypeError: Inferred type Bool of initialization of attribute test does not conform to declared type Int. +(9, 18) - TypeError: Inferred type Bool of initialization of attribute test does not conform to declared type Int. diff --git a/tests/semantic/arithmetic9.cl b/tests/semantic/arithmetic9.cl index 95579e134..b7b4d3645 100644 --- a/tests/semantic/arithmetic9.cl +++ b/tests/semantic/arithmetic9.cl @@ -1,15 +1,15 @@ -(* -The expression ~ is the integer -complement of . The expression must have static type Int and the entire expression -has static type Int. -*) - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in 1 + ~new A.type_name().concat(new B.type_name().concat(new C.type_name())); +(* +The expression ~ is the integer +complement of . The expression must have static type Int and the entire expression +has static type Int. +*) + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in 1 + ~new A.type_name().concat(new B.type_name().concat(new C.type_name())); }; \ No newline at end of file diff --git a/tests/semantic/assignment1.cl b/tests/semantic/assignment1.cl index 19ab70219..174f93e2b 100644 --- a/tests/semantic/assignment1.cl +++ b/tests/semantic/assignment1.cl @@ -1,7 +1,7 @@ ---The static type of the expression must conform to the declared type of the identifier - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: Int <- "String"; -}; +--The static type of the expression must conform to the declared type of the identifier + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: Int <- "String"; +}; diff --git a/tests/semantic/assignment1_error.txt b/tests/semantic/assignment1_error.txt index 6eb883012..9d05707aa 100644 --- a/tests/semantic/assignment1_error.txt +++ b/tests/semantic/assignment1_error.txt @@ -1 +1 @@ -(6, 18) - TypeError: Inferred type String of initialization of attribute test does not conform to declared type Int. +(6, 18) - TypeError: Inferred type String of initialization of attribute test does not conform to declared type Int. diff --git a/tests/semantic/assignment2.cl b/tests/semantic/assignment2.cl index cace221ae..c7f3d7873 100644 --- a/tests/semantic/assignment2.cl +++ b/tests/semantic/assignment2.cl @@ -1,13 +1,13 @@ ---The static type of an assignment is the static type of . - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(a: A): B { a <- new C }; - test2(a: A): D { a <- new C }; -}; +--The static type of an assignment is the static type of . + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(a: A): B { a <- new C }; + test2(a: A): D { a <- new C }; +}; diff --git a/tests/semantic/assignment2_error.txt b/tests/semantic/assignment2_error.txt index ed10b7f38..55f5aa214 100644 --- a/tests/semantic/assignment2_error.txt +++ b/tests/semantic/assignment2_error.txt @@ -1 +1 @@ -(12, 22) - TypeError: Inferred return type C of method test2 does not conform to declared return type D. +(12, 22) - TypeError: Inferred return type C of method test2 does not conform to declared return type D. diff --git a/tests/semantic/assignment3.cl b/tests/semantic/assignment3.cl index eba0d69e2..9d60a4b6c 100644 --- a/tests/semantic/assignment3.cl +++ b/tests/semantic/assignment3.cl @@ -1,14 +1,14 @@ ---The static type of an assignment is the static type of . - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - a: A; - b: B <- a <- new C; - d: D <- a <- new C; -}; +--The static type of an assignment is the static type of . + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + a: A; + b: B <- a <- new C; + d: D <- a <- new C; +}; diff --git a/tests/semantic/attributes1.cl b/tests/semantic/attributes1.cl index 3fa0440e4..d11ea7cdb 100644 --- a/tests/semantic/attributes1.cl +++ b/tests/semantic/attributes1.cl @@ -1,13 +1,13 @@ ---The static type of the expression must conform to the declared type of the attribute. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - test1: IO <- new Main; - test2: B <- new A; - - main(): IO { out_string("Hello World!")}; +--The static type of the expression must conform to the declared type of the attribute. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + test1: IO <- new Main; + test2: B <- new A; + + main(): IO { out_string("Hello World!")}; }; \ No newline at end of file diff --git a/tests/semantic/attributes1_error.txt b/tests/semantic/attributes1_error.txt index 9cb8460c9..22e45b837 100644 --- a/tests/semantic/attributes1_error.txt +++ b/tests/semantic/attributes1_error.txt @@ -1 +1 @@ -(10, 17) - TypeError: Inferred type A of initialization of attribute test2 does not conform to declared type B. +(10, 17) - TypeError: Inferred type A of initialization of attribute test2 does not conform to declared type B. diff --git a/tests/semantic/attributes2.cl b/tests/semantic/attributes2.cl index 7937c2cc8..85c791b5e 100644 --- a/tests/semantic/attributes2.cl +++ b/tests/semantic/attributes2.cl @@ -1,13 +1,13 @@ ---The static type of the expression must conform to the declared type of the attribute. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - test1: IO <- new Main; - test2: C <- new D; - - main(): IO { out_string("Hello World!")}; +--The static type of the expression must conform to the declared type of the attribute. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + test1: IO <- new Main; + test2: C <- new D; + + main(): IO { out_string("Hello World!")}; }; \ No newline at end of file diff --git a/tests/semantic/attributes2_error.txt b/tests/semantic/attributes2_error.txt index 6d601b7cd..d7694b0ad 100644 --- a/tests/semantic/attributes2_error.txt +++ b/tests/semantic/attributes2_error.txt @@ -1 +1 @@ -(10, 17) - TypeError: Inferred type D of initialization of attribute test2 does not conform to declared type C. +(10, 17) - TypeError: Inferred type D of initialization of attribute test2 does not conform to declared type C. diff --git a/tests/semantic/attributes3.cl b/tests/semantic/attributes3.cl index 8a67decd1..0c8294fa2 100644 --- a/tests/semantic/attributes3.cl +++ b/tests/semantic/attributes3.cl @@ -1,25 +1,25 @@ ---Attributes are local to the class in which they are defined or inherited. - -class A { - a: Int <- 5; - test(x1: Int, y1: Int): Int { - let x: Int <- x1, y: Int <-y1 in { - x <- x + a; - y <- y + a; - if b then x + y else x - y fi; - } - }; -}; -class B inherits A { - b: Bool <- true; -}; -class C inherits B { - c: String <- "C"; -}; -class D inherits B { - d: IO <- new Main.main(); -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!") }; +--Attributes are local to the class in which they are defined or inherited. + +class A { + a: Int <- 5; + test(x1: Int, y1: Int): Int { + let x: Int <- x1, y: Int <-y1 in { + x <- x + a; + y <- y + a; + if b then x + y else x - y fi; + } + }; +}; +class B inherits A { + b: Bool <- true; +}; +class C inherits B { + c: String <- "C"; +}; +class D inherits B { + d: IO <- new Main.main(); +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!") }; }; \ No newline at end of file diff --git a/tests/semantic/attributes3_error.txt b/tests/semantic/attributes3_error.txt index 6195c816c..68a2ba571 100644 --- a/tests/semantic/attributes3_error.txt +++ b/tests/semantic/attributes3_error.txt @@ -1 +1 @@ -(9, 16) - NameError: Undeclared identifier b. +(9, 16) - NameError: Undeclared identifier b. diff --git a/tests/semantic/attributes4.cl b/tests/semantic/attributes4.cl index a7f63adbd..307b185fd 100644 --- a/tests/semantic/attributes4.cl +++ b/tests/semantic/attributes4.cl @@ -1,39 +1,39 @@ ---Attributes are local to the class in which they are defined or inherited. - -class A { - a: Int <- 5; -}; -class B inherits A { - b: Bool <- true; - test(x1: Int, y1: Int): Int { - let x: Int <- x1, y: Int <-y1 in { - x <- x + a; - y <- y + a; - if b then x + y else x - y fi; - } - }; -}; -class D inherits B { - d: IO <- new Main.main(); - test3(x1: Int, y1: Int): IO { - let x: Int <- x1, y: Int <-y1, c: String <- "C" in { - x <- x + a; - y <- y + a; - if b then new IO.out_string(c) else d fi; - } - }; -}; -class C inherits B { - c: String <- "C"; - test2(x1: Int, y1: Int): IO { - let x: Int <- x1, y: Int <-y1 in { - x <- x + a; - y <- y + a; - if b then new IO.out_string(c) else d fi; - } - }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!") }; +--Attributes are local to the class in which they are defined or inherited. + +class A { + a: Int <- 5; +}; +class B inherits A { + b: Bool <- true; + test(x1: Int, y1: Int): Int { + let x: Int <- x1, y: Int <-y1 in { + x <- x + a; + y <- y + a; + if b then x + y else x - y fi; + } + }; +}; +class D inherits B { + d: IO <- new Main.main(); + test3(x1: Int, y1: Int): IO { + let x: Int <- x1, y: Int <-y1, c: String <- "C" in { + x <- x + a; + y <- y + a; + if b then new IO.out_string(c) else d fi; + } + }; +}; +class C inherits B { + c: String <- "C"; + test2(x1: Int, y1: Int): IO { + let x: Int <- x1, y: Int <-y1 in { + x <- x + a; + y <- y + a; + if b then new IO.out_string(c) else d fi; + } + }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!") }; }; \ No newline at end of file diff --git a/tests/semantic/basics1.cl b/tests/semantic/basics1.cl index 32ae16564..af84ca0c9 100644 --- a/tests/semantic/basics1.cl +++ b/tests/semantic/basics1.cl @@ -1,10 +1,10 @@ --- It is an error to redefine the IO class. - -class IO { - scan(): String { ":)" }; - print(s: String): IO { new IO }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; +-- It is an error to redefine the IO class. + +class IO { + scan(): String { ":)" }; + print(s: String): IO { new IO }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; }; \ No newline at end of file diff --git a/tests/semantic/basics1_error.txt b/tests/semantic/basics1_error.txt index 676f5049c..0db23a051 100644 --- a/tests/semantic/basics1_error.txt +++ b/tests/semantic/basics1_error.txt @@ -1 +1 @@ -(3, 7) - SemanticError: Redefinition of basic class IO. +(3, 7) - SemanticError: Redefinition of basic class IO. diff --git a/tests/semantic/basics2.cl b/tests/semantic/basics2.cl index cf2b1cd2f..61399a989 100644 --- a/tests/semantic/basics2.cl +++ b/tests/semantic/basics2.cl @@ -1,9 +1,9 @@ --- It is an error to inherit from or redefine Int. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class A inherits Int { - is_prime(): Bool { false }; -}; +-- It is an error to inherit from or redefine Int. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class A inherits Int { + is_prime(): Bool { false }; +}; diff --git a/tests/semantic/basics2_error.txt b/tests/semantic/basics2_error.txt index 69a3b6814..e2810833a 100644 --- a/tests/semantic/basics2_error.txt +++ b/tests/semantic/basics2_error.txt @@ -1 +1 @@ -(7, 18) - SemanticError: Class A cannot inherit class Int. +(7, 18) - SemanticError: Class A cannot inherit class Int. diff --git a/tests/semantic/basics3.cl b/tests/semantic/basics3.cl index fef017a8d..8c28b31e1 100644 --- a/tests/semantic/basics3.cl +++ b/tests/semantic/basics3.cl @@ -1,9 +1,9 @@ --- It is an error to inherit from or redefine Int. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class Int { - is_prime(): Bool { false }; +-- It is an error to inherit from or redefine Int. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class Int { + is_prime(): Bool { false }; }; \ No newline at end of file diff --git a/tests/semantic/basics3_error.txt b/tests/semantic/basics3_error.txt index d8f80cb12..ed382c8eb 100644 --- a/tests/semantic/basics3_error.txt +++ b/tests/semantic/basics3_error.txt @@ -1 +1 @@ -(7, 7) - SemanticError: Redefinition of basic class Int. +(7, 7) - SemanticError: Redefinition of basic class Int. diff --git a/tests/semantic/basics4.cl b/tests/semantic/basics4.cl index 9266ec79b..4475bc08f 100644 --- a/tests/semantic/basics4.cl +++ b/tests/semantic/basics4.cl @@ -1,9 +1,9 @@ --- It is an error to inherit from or redefine String. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class A inherits String { - is_palindrome(): Bool { false }; +-- It is an error to inherit from or redefine String. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class A inherits String { + is_palindrome(): Bool { false }; }; \ No newline at end of file diff --git a/tests/semantic/basics4_error.txt b/tests/semantic/basics4_error.txt index d5cd4c3db..bfe08a9a6 100644 --- a/tests/semantic/basics4_error.txt +++ b/tests/semantic/basics4_error.txt @@ -1 +1 @@ -(7, 18) - SemanticError: Class A cannot inherit class String. +(7, 18) - SemanticError: Class A cannot inherit class String. diff --git a/tests/semantic/basics5.cl b/tests/semantic/basics5.cl index bad5eff13..f0d4dafb3 100644 --- a/tests/semantic/basics5.cl +++ b/tests/semantic/basics5.cl @@ -1,9 +1,9 @@ --- It is an error to inherit from or redefine String. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class String { - is_palindrome(): Bool { false }; +-- It is an error to inherit from or redefine String. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class String { + is_palindrome(): Bool { false }; }; \ No newline at end of file diff --git a/tests/semantic/basics5_error.txt b/tests/semantic/basics5_error.txt index 8437accf7..47b247faa 100644 --- a/tests/semantic/basics5_error.txt +++ b/tests/semantic/basics5_error.txt @@ -1 +1 @@ -(7, 7) - SemanticError: Redefinition of basic class String. +(7, 7) - SemanticError: Redefinition of basic class String. diff --git a/tests/semantic/basics6.cl b/tests/semantic/basics6.cl index 47266ebed..c16572a31 100644 --- a/tests/semantic/basics6.cl +++ b/tests/semantic/basics6.cl @@ -1,9 +1,9 @@ --- It is an error to inherit from or redefine Bool. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class A inherits Bool { - xor(b: Bool): Bool { false }; +-- It is an error to inherit from or redefine Bool. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class A inherits Bool { + xor(b: Bool): Bool { false }; }; \ No newline at end of file diff --git a/tests/semantic/basics6_error.txt b/tests/semantic/basics6_error.txt index b4d22da13..9adf1d488 100644 --- a/tests/semantic/basics6_error.txt +++ b/tests/semantic/basics6_error.txt @@ -1 +1 @@ -(7, 18) - SemanticError: Class A cannot inherit class Bool. +(7, 18) - SemanticError: Class A cannot inherit class Bool. diff --git a/tests/semantic/basics7.cl b/tests/semantic/basics7.cl index 0f30aaec3..38f789245 100644 --- a/tests/semantic/basics7.cl +++ b/tests/semantic/basics7.cl @@ -1,9 +1,9 @@ --- It is an error to inherit from or redefine Bool. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class Bool { - xor(b: Bool): Bool { false }; +-- It is an error to inherit from or redefine Bool. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class Bool { + xor(b: Bool): Bool { false }; }; \ No newline at end of file diff --git a/tests/semantic/basics7_error.txt b/tests/semantic/basics7_error.txt index 92660ab9f..9f1347200 100644 --- a/tests/semantic/basics7_error.txt +++ b/tests/semantic/basics7_error.txt @@ -1 +1 @@ -(7, 7) - SemanticError: Redefinition of basic class Bool. +(7, 7) - SemanticError: Redefinition of basic class Bool. diff --git a/tests/semantic/basics8.cl b/tests/semantic/basics8.cl index 3b9697d4f..d45cd941d 100644 --- a/tests/semantic/basics8.cl +++ b/tests/semantic/basics8.cl @@ -1,9 +1,9 @@ --- It is an error redefine Object. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class Object { - xor(b: Bool): Bool { false }; +-- It is an error redefine Object. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class Object { + xor(b: Bool): Bool { false }; }; \ No newline at end of file diff --git a/tests/semantic/basics8_error.txt b/tests/semantic/basics8_error.txt index 652f47b30..45767c9c5 100644 --- a/tests/semantic/basics8_error.txt +++ b/tests/semantic/basics8_error.txt @@ -1 +1 @@ -(7, 7) - SemanticError: Redefinition of basic class Object. +(7, 7) - SemanticError: Redefinition of basic class Object. diff --git a/tests/semantic/blocks1.cl b/tests/semantic/blocks1.cl index 1e928908b..bad9093d7 100644 --- a/tests/semantic/blocks1.cl +++ b/tests/semantic/blocks1.cl @@ -1,31 +1,31 @@ ---The static type of a block is the static type of the last expression. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: B <- { - new A; - { - new B; - { - new C; - { - new D; - { - new E; - { - new F; - }; - }; - }; - }; - }; - }; +--The static type of a block is the static type of the last expression. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: B <- { + new A; + { + new B; + { + new C; + { + new D; + { + new E; + { + new F; + }; + }; + }; + }; + }; + }; }; \ No newline at end of file diff --git a/tests/semantic/blocks1_error.txt b/tests/semantic/blocks1_error.txt index 2f0e2caf3..6bd9d6118 100644 --- a/tests/semantic/blocks1_error.txt +++ b/tests/semantic/blocks1_error.txt @@ -1 +1 @@ -(13, 16) - TypeError: Inferred type F of initialization of attribute test does not conform to declared type B. +(13, 16) - TypeError: Inferred type F of initialization of attribute test does not conform to declared type B. diff --git a/tests/semantic/case1.cl b/tests/semantic/case1.cl index 82c6a4d61..af452f11c 100644 --- a/tests/semantic/case1.cl +++ b/tests/semantic/case1.cl @@ -1,23 +1,23 @@ ---For each branch, let Ti be the static type of . The static type of a case expression is Join 1≤i≤n Ti. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- case "true" of - i: Int => New C; - b: Bool => New D; - s: String => New E; - esac; - - test: B <- case 0 of - b: Bool => new F; - i: Int => new E; - esac; -}; +--For each branch, let Ti be the static type of . The static type of a case expression is Join 1≤i≤n Ti. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- case "true" of + i: Int => New C; + b: Bool => New D; + s: String => New E; + esac; + + test: B <- case 0 of + b: Bool => new F; + i: Int => new E; + esac; +}; diff --git a/tests/semantic/case1_error.txt b/tests/semantic/case1_error.txt index f05ce31b9..70c7d16ca 100644 --- a/tests/semantic/case1_error.txt +++ b/tests/semantic/case1_error.txt @@ -1 +1 @@ -(19, 16) - TypeError: Inferred type A of initialization of attribute test does not conform to declared type B. +(19, 16) - TypeError: Inferred type A of initialization of attribute test does not conform to declared type B. diff --git a/tests/semantic/case2.cl b/tests/semantic/case2.cl index ae97b41da..dbbe4148c 100644 --- a/tests/semantic/case2.cl +++ b/tests/semantic/case2.cl @@ -1,23 +1,23 @@ --- The variables declared on each branch of a case must all have distinct types. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- case "true" of - i: Int => New C; - b: Bool => New D; - s: String => New E; - esac; - - test: A <- case 0 of - b: Bool => new F; - i: Bool => new E; - esac; +-- The variables declared on each branch of a case must all have distinct types. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- case "true" of + i: Int => New C; + b: Bool => New D; + s: String => New E; + esac; + + test: A <- case 0 of + b: Bool => new F; + i: Bool => new E; + esac; }; \ No newline at end of file diff --git a/tests/semantic/case3.cl b/tests/semantic/case3.cl index da79bbfe6..9ff06336a 100644 --- a/tests/semantic/case3.cl +++ b/tests/semantic/case3.cl @@ -1,23 +1,23 @@ --- Missing type - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- case "true" of - i: Int => New C; - b: Bool => New D; - s: String => New E; - esac; - - test: A <- case 0 of - b: Bool => new F; - i: Ball => new E; - esac; +-- Missing type + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- case "true" of + i: Int => New C; + b: Bool => New D; + s: String => New E; + esac; + + test: A <- case 0 of + b: Bool => new F; + i: Ball => new E; + esac; }; \ No newline at end of file diff --git a/tests/semantic/class1.cl b/tests/semantic/class1.cl index ed83da9d1..576a3d0eb 100644 --- a/tests/semantic/class1.cl +++ b/tests/semantic/class1.cl @@ -1,9 +1,9 @@ --- Classes may not be redefined. - -class Repeat { - sum(a: Int, b: Int): Int { a + b }; -}; - -class Repeat { - mult(a: Int, b: Int): Int { a * b }; +-- Classes may not be redefined. + +class Repeat { + sum(a: Int, b: Int): Int { a + b }; +}; + +class Repeat { + mult(a: Int, b: Int): Int { a * b }; }; \ No newline at end of file diff --git a/tests/semantic/class1_error.txt b/tests/semantic/class1_error.txt index 19c507672..6337828d0 100644 --- a/tests/semantic/class1_error.txt +++ b/tests/semantic/class1_error.txt @@ -1,2 +1,2 @@ -(7, 5) - SemanticError: Classes may not be redefined - +(7, 5) - SemanticError: Classes may not be redefined + diff --git a/tests/semantic/conditionals1.cl b/tests/semantic/conditionals1.cl index 3446a8b0f..46af8cc73 100644 --- a/tests/semantic/conditionals1.cl +++ b/tests/semantic/conditionals1.cl @@ -1,14 +1,14 @@ ---The predicate must have static type Bool. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - a: A <- if new F then new D else new C fi; +--The predicate must have static type Bool. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + a: A <- if new F then new D else new C fi; }; \ No newline at end of file diff --git a/tests/semantic/conditionals1_error.txt b/tests/semantic/conditionals1_error.txt index b86345359..52db300b9 100644 --- a/tests/semantic/conditionals1_error.txt +++ b/tests/semantic/conditionals1_error.txt @@ -1 +1 @@ -(13, 16) - TypeError: Predicate of 'if' does not have type Bool. +(13, 16) - TypeError: Predicate of 'if' does not have type Bool. diff --git a/tests/semantic/conditionals2.cl b/tests/semantic/conditionals2.cl index 9d6313d75..8814177fc 100644 --- a/tests/semantic/conditionals2.cl +++ b/tests/semantic/conditionals2.cl @@ -1,24 +1,24 @@ -(* -Let T and F be the static types of the branches of the conditional. Then the static type of the -conditional is T t F. (think: Walk towards Object from each of T and F until the paths meet.) -*) - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- if true then - new C - else - if false then new D - else new E fi - fi; - - test: B <- if not true then new F else new E fi; -}; +(* +Let T and F be the static types of the branches of the conditional. Then the static type of the +conditional is T t F. (think: Walk towards Object from each of T and F until the paths meet.) +*) + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- if true then + new C + else + if false then new D + else new E fi + fi; + + test: B <- if not true then new F else new E fi; +}; diff --git a/tests/semantic/conditionals2_error.txt b/tests/semantic/conditionals2_error.txt index d6f5fc307..8f54d195e 100644 --- a/tests/semantic/conditionals2_error.txt +++ b/tests/semantic/conditionals2_error.txt @@ -1,2 +1,2 @@ -(23, 16) - TypeError: Inferred type A of initialization of attribute test does not conform to declared type B. - +(23, 16) - TypeError: Inferred type A of initialization of attribute test does not conform to declared type B. + diff --git a/tests/semantic/dispatch1.cl b/tests/semantic/dispatch1.cl index 1c0457fa3..bfd90f075 100644 --- a/tests/semantic/dispatch1.cl +++ b/tests/semantic/dispatch1.cl @@ -1,33 +1,33 @@ -(* -e0 .f(e1, . . . , en ) -Assume e0 has static type A. -Class A must have a method f -*) - -class A inherits IO { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - g(v: Int): Int { v + v + v }; - - back(s: String): B { { - out_string(s); - self; - } }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: B <- new D.back("Hello ").back("World!"); +(* +e0 .f(e1, . . . , en ) +Assume e0 has static type A. +Class A must have a method f +*) + +class A inherits IO { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + g(v: Int): Int { v + v + v }; + + back(s: String): B { { + out_string(s); + self; + } }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: B <- new D.back("Hello ").back("World!"); }; \ No newline at end of file diff --git a/tests/semantic/dispatch1_error.txt b/tests/semantic/dispatch1_error.txt index 7fb22edce..89fa22b77 100644 --- a/tests/semantic/dispatch1_error.txt +++ b/tests/semantic/dispatch1_error.txt @@ -1 +1 @@ -(32, 37) - AttributeError: Dispatch to undefined method back. +(32, 37) - AttributeError: Dispatch to undefined method back. diff --git a/tests/semantic/dispatch2.cl b/tests/semantic/dispatch2.cl index 5182912b8..ebca718ac 100644 --- a/tests/semantic/dispatch2.cl +++ b/tests/semantic/dispatch2.cl @@ -1,34 +1,34 @@ -(* -e0 .f(e1, . . . , en ) -Assume e0 has static type A. -Class A must have a method f -the dispatch and the definition of f must have the same number of arguments -*) - -class A inherits IO { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - g(v: Int): Int { v + v + v }; - - back(s: String): B { { - out_string(s); - self; - } }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: Int <- new D.back("Hello ").g(2, 2); +(* +e0 .f(e1, . . . , en ) +Assume e0 has static type A. +Class A must have a method f +the dispatch and the definition of f must have the same number of arguments +*) + +class A inherits IO { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + g(v: Int): Int { v + v + v }; + + back(s: String): B { { + out_string(s); + self; + } }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: Int <- new D.back("Hello ").g(2, 2); }; \ No newline at end of file diff --git a/tests/semantic/dispatch2_error.txt b/tests/semantic/dispatch2_error.txt index a86c35340..1530fb82c 100644 --- a/tests/semantic/dispatch2_error.txt +++ b/tests/semantic/dispatch2_error.txt @@ -1 +1 @@ -(33, 39) - SemanticError: Method g called with wrong number of arguments. +(33, 39) - SemanticError: Method g called with wrong number of arguments. diff --git a/tests/semantic/dispatch3.cl b/tests/semantic/dispatch3.cl index ecb1535db..98c19da77 100644 --- a/tests/semantic/dispatch3.cl +++ b/tests/semantic/dispatch3.cl @@ -1,36 +1,36 @@ -(* -e0 .f(e1, . . . , en ) -Assume e0 has static type A. -Class A must have a method f -the static type of the ith actual parameter must conform to the declared type of the ith formal parameter. -*) - -class A inherits IO { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - g(v: Int): Int { v + v + v }; - - back(s: String): B { { - out_string(s); - self; - } }; - - alphabet(a: A, b: B, c: C): D { self }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: B <- new D.alphabet(new D, new D, new D.back("Hello ")).back("World!"); +(* +e0 .f(e1, . . . , en ) +Assume e0 has static type A. +Class A must have a method f +the static type of the ith actual parameter must conform to the declared type of the ith formal parameter. +*) + +class A inherits IO { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + g(v: Int): Int { v + v + v }; + + back(s: String): B { { + out_string(s); + self; + } }; + + alphabet(a: A, b: B, c: C): D { self }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: B <- new D.alphabet(new D, new D, new D.back("Hello ")).back("World!"); }; \ No newline at end of file diff --git a/tests/semantic/dispatch3_error.txt b/tests/semantic/dispatch3_error.txt index 0def5cf03..77e81db72 100644 --- a/tests/semantic/dispatch3_error.txt +++ b/tests/semantic/dispatch3_error.txt @@ -1 +1 @@ -(35, 45) - TypeError: In call of method alphabet, type B of parameter c does not conform to declared type C. +(35, 45) - TypeError: In call of method alphabet, type B of parameter c does not conform to declared type C. diff --git a/tests/semantic/dispatch4.cl b/tests/semantic/dispatch4.cl index 9cadd8332..604e462a2 100644 --- a/tests/semantic/dispatch4.cl +++ b/tests/semantic/dispatch4.cl @@ -1,36 +1,36 @@ -(* -e0 .f(e1, . . . , en ) -Assume e0 has static type A. -Class A must have a method f -If f has return type B and B is a class name, then the static type of the dispatch is B. -*) - -class A inherits IO { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - g(v: Int): Int { v + v + v }; - - back(s: String): B { { - out_string(s); - self; - } }; - - alphabet(a: A, b: B, c: C): D { self }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: D <- new D.alphabet(new D, new D.back("Hello "), new C).back("World!"); +(* +e0 .f(e1, . . . , en ) +Assume e0 has static type A. +Class A must have a method f +If f has return type B and B is a class name, then the static type of the dispatch is B. +*) + +class A inherits IO { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + g(v: Int): Int { v + v + v }; + + back(s: String): B { { + out_string(s); + self; + } }; + + alphabet(a: A, b: B, c: C): D { self }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: D <- new D.alphabet(new D, new D.back("Hello "), new C).back("World!"); }; \ No newline at end of file diff --git a/tests/semantic/dispatch5.cl b/tests/semantic/dispatch5.cl index b4437b1b4..9820e5ee1 100644 --- a/tests/semantic/dispatch5.cl +++ b/tests/semantic/dispatch5.cl @@ -1,31 +1,31 @@ -(* -(,...,) is shorthand for self.(,...,). -*) - -class A inherits IO { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; - sum(m: Int, n: Int, p: Int): Int { m + n + p }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - - back(s: String): B { { - out_string(s); - g(2); - sum(1, 2, 3); - self; - } }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; +(* +(,...,) is shorthand for self.(,...,). +*) + +class A inherits IO { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; + sum(m: Int, n: Int, p: Int): Int { m + n + p }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + + back(s: String): B { { + out_string(s); + g(2); + sum(1, 2, 3); + self; + } }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; }; \ No newline at end of file diff --git a/tests/semantic/dispatch5_error.txt b/tests/semantic/dispatch5_error.txt index d26bf34a1..6a6922f32 100644 --- a/tests/semantic/dispatch5_error.txt +++ b/tests/semantic/dispatch5_error.txt @@ -1 +1 @@ -(24, 9) - AttributeError: Dispatch to undefined method sum. +(24, 9) - AttributeError: Dispatch to undefined method sum. diff --git a/tests/semantic/dispatch6.cl b/tests/semantic/dispatch6.cl index fcc033f2c..bbe58fbb1 100644 --- a/tests/semantic/dispatch6.cl +++ b/tests/semantic/dispatch6.cl @@ -1,32 +1,32 @@ -(* -e@B.f() invokes the method -f in class B on the object that is the value of e. For this form of dispatch, the static type to the left of -“@”must conform to the type specified to the right of “@”. -*) - -class A { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; - sum(m: Int, n: Int, p: Int): Int { m + n + p }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - g(v: Int): Int { v + v + v }; - sum(v: Int, w: Int, z: Int): Int { v - w - z }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - a: A <- new D; - b: Int <- new D@B.sum(1, 2, 3); - test: Int <- a@B.sum(1, 2, 3); -}; +(* +e@B.f() invokes the method +f in class B on the object that is the value of e. For this form of dispatch, the static type to the left of +“@”must conform to the type specified to the right of “@”. +*) + +class A { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; + sum(m: Int, n: Int, p: Int): Int { m + n + p }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + g(v: Int): Int { v + v + v }; + sum(v: Int, w: Int, z: Int): Int { v - w - z }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + a: A <- new D; + b: Int <- new D@B.sum(1, 2, 3); + test: Int <- a@B.sum(1, 2, 3); +}; diff --git a/tests/semantic/dispatch6_error.txt b/tests/semantic/dispatch6_error.txt index ae9184b2f..7d5ec3780 100644 --- a/tests/semantic/dispatch6_error.txt +++ b/tests/semantic/dispatch6_error.txt @@ -1 +1 @@ -(31, 18) - TypeError: Expression type A does not conform to declared static dispatch type B. +(31, 18) - TypeError: Expression type A does not conform to declared static dispatch type B. diff --git a/tests/semantic/eq1.cl b/tests/semantic/eq1.cl index 88f2a7ffe..dc8a0cd43 100644 --- a/tests/semantic/eq1.cl +++ b/tests/semantic/eq1.cl @@ -1,17 +1,17 @@ -(* -The comparison = is a special -case. If either or has static type Int, Bool, or String, then the other must have the -same static type. Any other types, including SELF TYPE, may be freely compared. -*) - -class A { }; -class B inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - x: Bool <- 1 = 2; - test: Bool <- 1 = new A; - y: Bool <- "1" = "2"; - z: Bool <- true = not false; +(* +The comparison = is a special +case. If either or has static type Int, Bool, or String, then the other must have the +same static type. Any other types, including SELF TYPE, may be freely compared. +*) + +class A { }; +class B inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + x: Bool <- 1 = 2; + test: Bool <- 1 = new A; + y: Bool <- "1" = "2"; + z: Bool <- true = not false; }; \ No newline at end of file diff --git a/tests/semantic/eq1_error.txt b/tests/semantic/eq1_error.txt index f81425683..0b85d2fa0 100644 --- a/tests/semantic/eq1_error.txt +++ b/tests/semantic/eq1_error.txt @@ -1 +1 @@ -(14, 21) - TypeError: Illegal comparison with a basic type. +(14, 21) - TypeError: Illegal comparison with a basic type. diff --git a/tests/semantic/eq2.cl b/tests/semantic/eq2.cl index d76852780..f4b2ffac7 100644 --- a/tests/semantic/eq2.cl +++ b/tests/semantic/eq2.cl @@ -1,17 +1,17 @@ -(* -The comparison = is a special -case. If either or has static type Int, Bool, or String, then the other must have the -same static type. Any other types, including SELF TYPE, may be freely compared. -*) - -class A { }; -class B inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - x: Bool <- 1 = 2; - y: Bool <- "1" = "2"; - test: Bool <- "1" = new B; - z: Bool <- true = not false; -}; +(* +The comparison = is a special +case. If either or has static type Int, Bool, or String, then the other must have the +same static type. Any other types, including SELF TYPE, may be freely compared. +*) + +class A { }; +class B inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + x: Bool <- 1 = 2; + y: Bool <- "1" = "2"; + test: Bool <- "1" = new B; + z: Bool <- true = not false; +}; diff --git a/tests/semantic/eq2_error.txt b/tests/semantic/eq2_error.txt index a44ab0d51..1bb29ca32 100644 --- a/tests/semantic/eq2_error.txt +++ b/tests/semantic/eq2_error.txt @@ -1 +1 @@ -(15, 23) - TypeError: Illegal comparison with a basic type. +(15, 23) - TypeError: Illegal comparison with a basic type. diff --git a/tests/semantic/eq3.cl b/tests/semantic/eq3.cl index 4dad693ee..b7ee462c5 100644 --- a/tests/semantic/eq3.cl +++ b/tests/semantic/eq3.cl @@ -1,17 +1,17 @@ -(* -The comparison = is a special -case. If either or has static type Int, Bool, or String, then the other must have the -same static type. Any other types, including SELF TYPE, may be freely compared. -*) - -class A { }; -class B inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - x: Bool <- 1 = 2; - y: Bool <- "1" = "2"; - z: Bool <- true = not false; - test: Bool <- "true" = not false; -}; +(* +The comparison = is a special +case. If either or has static type Int, Bool, or String, then the other must have the +same static type. Any other types, including SELF TYPE, may be freely compared. +*) + +class A { }; +class B inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + x: Bool <- 1 = 2; + y: Bool <- "1" = "2"; + z: Bool <- true = not false; + test: Bool <- "true" = not false; +}; diff --git a/tests/semantic/eq3_error.txt b/tests/semantic/eq3_error.txt index c4e27eb8a..d57841b95 100644 --- a/tests/semantic/eq3_error.txt +++ b/tests/semantic/eq3_error.txt @@ -1 +1 @@ -(16, 26) - TypeError: Illegal comparison with a basic type. +(16, 26) - TypeError: Illegal comparison with a basic type. diff --git a/tests/semantic/eq4.cl b/tests/semantic/eq4.cl index 11afc119f..63c1067f0 100644 --- a/tests/semantic/eq4.cl +++ b/tests/semantic/eq4.cl @@ -1,17 +1,17 @@ -(* -The comparison = is a special -case. If either or has static type Int, Bool, or String, then the other must have the -same static type. Any other types, including SELF TYPE, may be freely compared. The result is a Bool. -*) - -class A { }; -class B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - x: Bool <- 1 = 2; - y: Bool <- "1" = "2"; - z: Bool <- new A = new B; - test: Int <- new A = new B; -}; +(* +The comparison = is a special +case. If either or has static type Int, Bool, or String, then the other must have the +same static type. Any other types, including SELF TYPE, may be freely compared. The result is a Bool. +*) + +class A { }; +class B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + x: Bool <- 1 = 2; + y: Bool <- "1" = "2"; + z: Bool <- new A = new B; + test: Int <- new A = new B; +}; diff --git a/tests/semantic/eq4_error.txt b/tests/semantic/eq4_error.txt index 3ead21d0e..f075fecbe 100644 --- a/tests/semantic/eq4_error.txt +++ b/tests/semantic/eq4_error.txt @@ -1 +1 @@ -(16, 18) - TypeError: Inferred type Bool of initialization of attribute test does not conform to declared type Int. +(16, 18) - TypeError: Inferred type Bool of initialization of attribute test does not conform to declared type Int. diff --git a/tests/semantic/features1.cl b/tests/semantic/features1.cl old mode 100755 new mode 100644 diff --git a/tests/semantic/features1_error.txt b/tests/semantic/features1_error.txt old mode 100755 new mode 100644 diff --git a/tests/semantic/features2.cl b/tests/semantic/features2.cl old mode 100755 new mode 100644 diff --git a/tests/semantic/features2_error.txt b/tests/semantic/features2_error.txt old mode 100755 new mode 100644 diff --git a/tests/semantic/features3.cl b/tests/semantic/features3.cl old mode 100755 new mode 100644 diff --git a/tests/semantic/features3_error.txt b/tests/semantic/features3_error.txt old mode 100755 new mode 100644 diff --git a/tests/semantic/inheritance1.cl b/tests/semantic/inheritance1.cl old mode 100755 new mode 100644 diff --git a/tests/semantic/inheritance1_error.txt b/tests/semantic/inheritance1_error.txt old mode 100755 new mode 100644 diff --git a/tests/semantic/inheritance2.cl b/tests/semantic/inheritance2.cl old mode 100755 new mode 100644 diff --git a/tests/semantic/inheritance2_error.txt b/tests/semantic/inheritance2_error.txt old mode 100755 new mode 100644 diff --git a/tests/semantic/inheritance3.cl b/tests/semantic/inheritance3.cl old mode 100755 new mode 100644 diff --git a/tests/semantic/inheritance4.cl b/tests/semantic/inheritance4.cl old mode 100755 new mode 100644 diff --git a/tests/semantic/inheritance5.cl b/tests/semantic/inheritance5.cl old mode 100755 new mode 100644 diff --git a/tests/semantic/isvoid1.cl b/tests/semantic/isvoid1.cl index 072720d85..7c3a83a77 100644 --- a/tests/semantic/isvoid1.cl +++ b/tests/semantic/isvoid1.cl @@ -1,26 +1,26 @@ ---evaluates to true if expr is void and evaluates to false if expr is not void. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- if isvoid new F then - new C - else - if false then new D - else new E fi - fi; - - test: B <- isvoid if isvoid new F then - new C - else - if false then new D - else new E fi - fi; +--evaluates to true if expr is void and evaluates to false if expr is not void. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- if isvoid new F then + new C + else + if false then new D + else new E fi + fi; + + test: B <- isvoid if isvoid new F then + new C + else + if false then new D + else new E fi + fi; }; \ No newline at end of file diff --git a/tests/semantic/isvoid1_error.txt b/tests/semantic/isvoid1_error.txt index 0922de909..3fd0157b4 100644 --- a/tests/semantic/isvoid1_error.txt +++ b/tests/semantic/isvoid1_error.txt @@ -1 +1 @@ -(20, 16) - TypeError: Inferred type Bool of initialization of attribute test does not conform to declared type B. +(20, 16) - TypeError: Inferred type Bool of initialization of attribute test does not conform to declared type B. diff --git a/tests/semantic/let1.cl b/tests/semantic/let1.cl index 26ef63026..9220d3dbc 100644 --- a/tests/semantic/let1.cl +++ b/tests/semantic/let1.cl @@ -1,15 +1,15 @@ ---The type of an initialization expression must conform to the declared type of the identifier. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; - test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: C <- new E in b; +--The type of an initialization expression must conform to the declared type of the identifier. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; + test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: C <- new E in b; }; \ No newline at end of file diff --git a/tests/semantic/let1_error.txt b/tests/semantic/let1_error.txt index 16ecf780c..56547dae5 100644 --- a/tests/semantic/let1_error.txt +++ b/tests/semantic/let1_error.txt @@ -1 +1 @@ -(14, 76) - TypeError: Inferred type E of initialization of b does not conform to identifier's declared type C. +(14, 76) - TypeError: Inferred type E of initialization of b does not conform to identifier's declared type C. diff --git a/tests/semantic/let2.cl b/tests/semantic/let2.cl index c5956ead3..2949fb94d 100644 --- a/tests/semantic/let2.cl +++ b/tests/semantic/let2.cl @@ -1,15 +1,15 @@ ---The type of let is the type of the body. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; - test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: A <- new E in b; +--The type of let is the type of the body. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; + test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: A <- new E in b; }; \ No newline at end of file diff --git a/tests/semantic/let2_error.txt b/tests/semantic/let2_error.txt index b1e8a365d..3b7c669a3 100644 --- a/tests/semantic/let2_error.txt +++ b/tests/semantic/let2_error.txt @@ -1 +1 @@ -(14, 16) - TypeError: Inferred type A of initialization of attribute test does not conform to declared type B. +(14, 16) - TypeError: Inferred type A of initialization of attribute test does not conform to declared type B. diff --git a/tests/semantic/let3.cl b/tests/semantic/let3.cl index 8c0670ab8..0a4a9ceaf 100644 --- a/tests/semantic/let3.cl +++ b/tests/semantic/let3.cl @@ -1,15 +1,15 @@ --- Missing type - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; - test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: Cadena in new B; +-- Missing type + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; + test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: Cadena in new B; }; \ No newline at end of file diff --git a/tests/semantic/loops1.cl b/tests/semantic/loops1.cl index de3a624d2..6a0a81818 100644 --- a/tests/semantic/loops1.cl +++ b/tests/semantic/loops1.cl @@ -1,8 +1,8 @@ ---The predicate must have static type Bool. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - i: Int <- 1; - test: Object <- while "true" loop i <- i + 1 pool; +--The predicate must have static type Bool. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + i: Int <- 1; + test: Object <- while "true" loop i <- i + 1 pool; }; \ No newline at end of file diff --git a/tests/semantic/loops2.cl b/tests/semantic/loops2.cl index dea69fa14..d52169da7 100644 --- a/tests/semantic/loops2.cl +++ b/tests/semantic/loops2.cl @@ -1,9 +1,9 @@ ---The static type of a loop expression is Object. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - i: Int <- 1; - test: Object <- while not false loop i <- i + 1 pool; - test2: Int <- while not false loop i <- i + 1 pool; -}; +--The static type of a loop expression is Object. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + i: Int <- 1; + test: Object <- while not false loop i <- i + 1 pool; + test2: Int <- while not false loop i <- i + 1 pool; +}; diff --git a/tests/semantic/loops2_error.txt b/tests/semantic/loops2_error.txt index 9711cdf6a..ab79de8da 100644 --- a/tests/semantic/loops2_error.txt +++ b/tests/semantic/loops2_error.txt @@ -1 +1 @@ -(8, 19) - TypeError: Inferred type Object of initialization of attribute test2 does not conform to declared type Int. +(8, 19) - TypeError: Inferred type Object of initialization of attribute test2 does not conform to declared type Int. diff --git a/tests/semantic/methods1.cl b/tests/semantic/methods1.cl index d12031970..f4ff07bb0 100644 --- a/tests/semantic/methods1.cl +++ b/tests/semantic/methods1.cl @@ -1,12 +1,12 @@ ---The identifiers used in the formal parameter list must be distinct - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(a: A, a: B): Int { 4 }; +--The identifiers used in the formal parameter list must be distinct + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(a: A, a: B): Int { 4 }; }; \ No newline at end of file diff --git a/tests/semantic/methods1_error.txt b/tests/semantic/methods1_error.txt index 06ab88a92..809036803 100644 --- a/tests/semantic/methods1_error.txt +++ b/tests/semantic/methods1_error.txt @@ -1 +1 @@ -(11, 16) - SemanticError: Formal parameter a is multiply defined. +(11, 16) - SemanticError: Formal parameter a is multiply defined. diff --git a/tests/semantic/methods2.cl b/tests/semantic/methods2.cl index 3865f0e13..c010df01e 100644 --- a/tests/semantic/methods2.cl +++ b/tests/semantic/methods2.cl @@ -1,12 +1,12 @@ ---The type of the method body must conform to the declared return type. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(a: A, b: B): C { new D }; +--The type of the method body must conform to the declared return type. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(a: A, b: B): C { new D }; }; \ No newline at end of file diff --git a/tests/semantic/methods2_error.txt b/tests/semantic/methods2_error.txt index f7e4a330d..1a4baea17 100644 --- a/tests/semantic/methods2_error.txt +++ b/tests/semantic/methods2_error.txt @@ -1 +1 @@ -(11, 27) - TypeError: Inferred return type D of method test does not conform to declared return type C. +(11, 27) - TypeError: Inferred return type D of method test does not conform to declared return type C. diff --git a/tests/semantic/methods3.cl b/tests/semantic/methods3.cl index b92faeb97..9aff4d167 100644 --- a/tests/semantic/methods3.cl +++ b/tests/semantic/methods3.cl @@ -1,14 +1,14 @@ ---A formal parameter hides any definition of an attribute of the same name. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - a: C <- new C; - test(a: D): D { a }; - test2(a: B): C { a }; +--A formal parameter hides any definition of an attribute of the same name. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + a: C <- new C; + test(a: D): D { a }; + test2(a: B): C { a }; }; \ No newline at end of file diff --git a/tests/semantic/methods3_error.txt b/tests/semantic/methods3_error.txt index 1165b7595..a0f6d9db2 100644 --- a/tests/semantic/methods3_error.txt +++ b/tests/semantic/methods3_error.txt @@ -1 +1 @@ -(13, 22) - TypeError: Inferred return type B of method test2 does not conform to declared return type C. +(13, 22) - TypeError: Inferred return type B of method test2 does not conform to declared return type C. diff --git a/tests/semantic/methods4.cl b/tests/semantic/methods4.cl index be8fa36ef..e093bac1c 100644 --- a/tests/semantic/methods4.cl +++ b/tests/semantic/methods4.cl @@ -1,19 +1,19 @@ -(* -The rule is -simple: If a class C inherits a method f from an ancestor class P, then C may override the inherited -definition of f provided the number of arguments, the types of the formal parameters, and the return -type are exactly the same in both definitions. -*) - -class A { - f(x: Int, y: Int): Int { x + y }; -}; -class B inherits A { - f(x: Int, y: Object): Int { x }; -}; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; +(* +The rule is +simple: If a class C inherits a method f from an ancestor class P, then C may override the inherited +definition of f provided the number of arguments, the types of the formal parameters, and the return +type are exactly the same in both definitions. +*) + +class A { + f(x: Int, y: Int): Int { x + y }; +}; +class B inherits A { + f(x: Int, y: Object): Int { x }; +}; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; }; \ No newline at end of file diff --git a/tests/semantic/methods4_error.txt b/tests/semantic/methods4_error.txt index 9f1486dec..c9fc2d12a 100644 --- a/tests/semantic/methods4_error.txt +++ b/tests/semantic/methods4_error.txt @@ -1 +1 @@ -(12, 15) - SemanticError: In redefined method f, parameter type Object is different from original type Int. +(12, 15) - SemanticError: In redefined method f, parameter type Object is different from original type Int. diff --git a/tests/semantic/methods5.cl b/tests/semantic/methods5.cl index 3905dfdd6..732e4d408 100644 --- a/tests/semantic/methods5.cl +++ b/tests/semantic/methods5.cl @@ -1,20 +1,20 @@ -(* -The rule is -simple: If a class C inherits a method f from an ancestor class P, then C may override the inherited -definition of f provided the number of arguments, the types of the formal parameters, and the return -type are exactly the same in both definitions. -*) - -class A { - f(x: Int, y: Int): Int { x + y }; -}; -class B inherits A { - f(a: Int, b: Int): Object { a - b }; -}; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - +(* +The rule is +simple: If a class C inherits a method f from an ancestor class P, then C may override the inherited +definition of f provided the number of arguments, the types of the formal parameters, and the return +type are exactly the same in both definitions. +*) + +class A { + f(x: Int, y: Int): Int { x + y }; +}; +class B inherits A { + f(a: Int, b: Int): Object { a - b }; +}; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + diff --git a/tests/semantic/methods5_error.txt b/tests/semantic/methods5_error.txt index 8b6bdf36e..073eee8c5 100644 --- a/tests/semantic/methods5_error.txt +++ b/tests/semantic/methods5_error.txt @@ -1 +1 @@ -(12, 24) - SemanticError: In redefined method f, return type Object is different from original return type Int. +(12, 24) - SemanticError: In redefined method f, return type Object is different from original return type Int. diff --git a/tests/semantic/methods6.cl b/tests/semantic/methods6.cl index dd2b73da6..61a62b4b0 100644 --- a/tests/semantic/methods6.cl +++ b/tests/semantic/methods6.cl @@ -1,27 +1,27 @@ -(* -The rule is -simple: If a class C inherits a method f from an ancestor class P, then C may override the inherited -definition of f provided the number of arguments, the types of the formal parameters, and the return -type are exactly the same in both definitions. -*) - -class A { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - g(v: Int, w: Int, z: Int): Int { v + w + z }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; +(* +The rule is +simple: If a class C inherits a method f from an ancestor class P, then C may override the inherited +definition of f provided the number of arguments, the types of the formal parameters, and the return +type are exactly the same in both definitions. +*) + +class A { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + g(v: Int, w: Int, z: Int): Int { v + w + z }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; }; \ No newline at end of file diff --git a/tests/semantic/methods6_error.txt b/tests/semantic/methods6_error.txt index 8e32663b9..70ad02e32 100644 --- a/tests/semantic/methods6_error.txt +++ b/tests/semantic/methods6_error.txt @@ -1 +1 @@ -(22, 5) - SemanticError: Incompatible number of formal parameters in redefined method g. +(22, 5) - SemanticError: Incompatible number of formal parameters in redefined method g. diff --git a/tests/semantic/methods7.cl b/tests/semantic/methods7.cl index e5a01f682..21e8ca275 100644 --- a/tests/semantic/methods7.cl +++ b/tests/semantic/methods7.cl @@ -1,12 +1,12 @@ --- Missing type - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(a: A, b: Ball): Int { 4 }; +-- Missing type + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(a: A, b: Ball): Int { 4 }; }; \ No newline at end of file diff --git a/tests/semantic/methods8.cl b/tests/semantic/methods8.cl index 3fccab54c..121210748 100644 --- a/tests/semantic/methods8.cl +++ b/tests/semantic/methods8.cl @@ -1,12 +1,12 @@ --- Missing type - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(a: A, b: B): Integrer { 4 }; +-- Missing type + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(a: A, b: B): Integrer { 4 }; }; \ No newline at end of file diff --git a/tests/semantic/new1.cl b/tests/semantic/new1.cl index d007fc03d..40a8b9e9b 100644 --- a/tests/semantic/new1.cl +++ b/tests/semantic/new1.cl @@ -1,31 +1,31 @@ --- Missing type - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: F <- { - new A; - { - new Ball; - { - new C; - { - new D; - { - new E; - { - new F; - }; - }; - }; - }; - }; - }; +-- Missing type + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: F <- { + new A; + { + new Ball; + { + new C; + { + new D; + { + new E; + { + new F; + }; + }; + }; + }; + }; + }; }; \ No newline at end of file diff --git a/tests/semantic/self1.cl b/tests/semantic/self1.cl index 3387fd263..399f6ff06 100644 --- a/tests/semantic/self1.cl +++ b/tests/semantic/self1.cl @@ -1,11 +1,11 @@ -(* -But it is an error to assign to self or to bind self in a let, a -case, or as a formal parameter. It is also illegal to have attributes named self. -*) - - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(a: Main): IO { self <- a }; -}; +(* +But it is an error to assign to self or to bind self in a let, a +case, or as a formal parameter. It is also illegal to have attributes named self. +*) + + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(a: Main): IO { self <- a }; +}; diff --git a/tests/semantic/self1_error.txt b/tests/semantic/self1_error.txt index 6beb3cda2..f9f51b9b3 100644 --- a/tests/semantic/self1_error.txt +++ b/tests/semantic/self1_error.txt @@ -1 +1 @@ -(10, 30) - SemanticError: Cannot assign to 'self'. +(10, 30) - SemanticError: Cannot assign to 'self'. diff --git a/tests/semantic/self2.cl b/tests/semantic/self2.cl index 2e6921a92..6ef75e368 100644 --- a/tests/semantic/self2.cl +++ b/tests/semantic/self2.cl @@ -1,10 +1,10 @@ -(* -But it is an error to assign to self or to bind self in a let, a -case, or as a formal parameter. It is also illegal to have attributes named self. -*) - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(): IO { let self: Main <- new Main in self }; -}; +(* +But it is an error to assign to self or to bind self in a let, a +case, or as a formal parameter. It is also illegal to have attributes named self. +*) + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(): IO { let self: Main <- new Main in self }; +}; diff --git a/tests/semantic/self2_error.txt b/tests/semantic/self2_error.txt index 20c883c91..2e53bb210 100644 --- a/tests/semantic/self2_error.txt +++ b/tests/semantic/self2_error.txt @@ -1 +1 @@ -(9, 22) - SemanticError: 'self' cannot be bound in a 'let' expression. +(9, 22) - SemanticError: 'self' cannot be bound in a 'let' expression. diff --git a/tests/semantic/self3.cl b/tests/semantic/self3.cl index 81709b4b5..d314798a9 100644 --- a/tests/semantic/self3.cl +++ b/tests/semantic/self3.cl @@ -1,10 +1,10 @@ -(* -But it is an error to assign to self or to bind self in a let, a -case, or as a formal parameter. It is also illegal to have attributes named self. -*) - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(self: IO): IO { self }; -}; +(* +But it is an error to assign to self or to bind self in a let, a +case, or as a formal parameter. It is also illegal to have attributes named self. +*) + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(self: IO): IO { self }; +}; diff --git a/tests/semantic/self3_error.txt b/tests/semantic/self3_error.txt index 0ae382007..0015bbe0a 100644 --- a/tests/semantic/self3_error.txt +++ b/tests/semantic/self3_error.txt @@ -1 +1 @@ -(9, 10) - SemanticError: 'self' cannot be the name of a formal parameter. +(9, 10) - SemanticError: 'self' cannot be the name of a formal parameter. diff --git a/tests/semantic/self4.cl b/tests/semantic/self4.cl index 7c2b960cb..9185c8760 100644 --- a/tests/semantic/self4.cl +++ b/tests/semantic/self4.cl @@ -1,10 +1,10 @@ -(* -But it is an error to assign to self or to bind self in a let, a -case, or as a formal parameter. It is also illegal to have attributes named self. -*) - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - self: IO <- self; +(* +But it is an error to assign to self or to bind self in a let, a +case, or as a formal parameter. It is also illegal to have attributes named self. +*) + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + self: IO <- self; }; \ No newline at end of file diff --git a/tests/semantic/self4_error.txt b/tests/semantic/self4_error.txt index c19ca400f..bf8740604 100644 --- a/tests/semantic/self4_error.txt +++ b/tests/semantic/self4_error.txt @@ -1 +1 @@ -(9, 5) - SemanticError: 'self' cannot be the name of an attribute. +(9, 5) - SemanticError: 'self' cannot be the name of an attribute. diff --git a/tests/semantic_test.py b/tests/semantic_test.py index cac9cd78b..46f07439d 100644 --- a/tests/semantic_test.py +++ b/tests/semantic_test.py @@ -1,14 +1,14 @@ -import pytest -import os -from utils import compare_errors, first_error_only_line - -tests_dir = __file__.rpartition('/')[0] + '/semantic/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -@pytest.mark.semantic -@pytest.mark.error -@pytest.mark.run(order=3) -@pytest.mark.parametrize("cool_file", tests) -def test_semantic_errors(compiler_path, cool_file): - compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ +import pytest +import os +from utils import compare_errors, first_error_only_line + +tests_dir = __file__.rpartition('/')[0] + '/semantic/' +tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] + +@pytest.mark.semantic +@pytest.mark.error +@pytest.mark.run(order=3) +@pytest.mark.parametrize("cool_file", tests) +def test_semantic_errors(compiler_path, cool_file): + compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ cmp=first_error_only_line) \ No newline at end of file diff --git a/tests/utils/utils.py b/tests/utils/utils.py index 961cf7cbc..f98d19dd0 100644 --- a/tests/utils/utils.py +++ b/tests/utils/utils.py @@ -1,91 +1,91 @@ -import subprocess -import re - - -COMPILER_TIMEOUT = 'El compilador tarda mucho en responder.' -SPIM_TIMEOUT = 'El spim tarda mucho en responder.' -TEST_MUST_FAIL = 'El test %s debe fallar al compilar' -TEST_MUST_COMPILE = 'El test %s debe compilar' -BAD_ERROR_FORMAT = '''El error no esta en formato: (,) - : - o no se encuentra en la 3ra linea\n\n%s''' -UNEXPECTED_ERROR = 'Se esperaba un %s en (%d, %d). Su error fue un %s en (%d, %d)' -UNEXPECTED_OUTPUT = 'La salida de %s no es la esperada:\n%s\nEsperada:\n%s' - -ERROR_FORMAT = r'^\s*\(\s*(\d+)\s*,\s*(\d+)\s*\)\s*-\s*(\w+)\s*:(.*)$' - -def parse_error(error: str): - merror = re.fullmatch(ERROR_FORMAT, error) - assert merror, BAD_ERROR_FORMAT % error - - return (t(x) for t, x in zip([int, int, str, str], merror.groups())) - - -def first_error(compiler_output: list, errors: list): - line, column, error_type, _ = parse_error(errors[0]) - - oline, ocolumn, oerror_type, _ = parse_error(compiler_output[0]) - - assert line == oline and column == ocolumn and error_type == oerror_type,\ - UNEXPECTED_ERROR % (error_type, line, column, oerror_type, oline, ocolumn) - -def first_error_only_line(compiler_output: list, errors: list): - line, column, error_type, _ = parse_error(errors[0]) - - oline, ocolumn, oerror_type, _ = parse_error(compiler_output[0]) - - assert line == oline and error_type == oerror_type,\ - UNEXPECTED_ERROR % (error_type, line, column, oerror_type, oline, ocolumn) - - -def get_file_name(path: str): - try: - return path[path.rindex('/') + 1:] - except ValueError: - return path - -def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str, cmp=first_error, timeout=100): - try: - sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) - return_code, output = sp.returncode, sp.stdout.decode() - except subprocess.TimeoutExpired: - assert False, COMPILER_TIMEOUT - - assert return_code == 1, TEST_MUST_FAIL % get_file_name(cool_file_path) - - fd = open(error_file_path, 'r') - errors = fd.read().split('\n') - fd.close() - - # checking the errors of compiler - compiler_output = output.split('\n') - cmp(compiler_output[2:], errors) - -SPIM_HEADER = r'''^SPIM Version .+ of .+ -Copyright .+\, James R\. Larus\. -All Rights Reserved\. -See the file README for a full copyright notice\. -(?:Loaded: .+\n)*''' -def compare_outputs(compiler_path: str, cool_file_path: str, input_file_path: str, output_file_path: str, timeout=100): - try: - sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) - assert sp.returncode == 0, TEST_MUST_COMPILE % get_file_name(cool_file_path) - except subprocess.TimeoutExpired: - assert False, COMPILER_TIMEOUT - - spim_file = cool_file_path[:-2] + 'mips' - - try: - fd = open(input_file_path, 'rb') - sp = subprocess.run(['spim', '-file', spim_file], input=fd.read(), capture_output=True, timeout=timeout) - fd.close() - mo = re.match(SPIM_HEADER, sp.stdout.decode()) - if mo: - output = mo.string[mo.end():] - except subprocess.TimeoutExpired: - assert False, SPIM_TIMEOUT - - fd = open(output_file_path, 'r') - eoutput = fd.read() - fd.close() - - assert output == eoutput, UNEXPECTED_OUTPUT % (spim_file, repr(output), repr(eoutput)) +import subprocess +import re + + +COMPILER_TIMEOUT = 'El compilador tarda mucho en responder.' +SPIM_TIMEOUT = 'El spim tarda mucho en responder.' +TEST_MUST_FAIL = 'El test %s debe fallar al compilar' +TEST_MUST_COMPILE = 'El test %s debe compilar' +BAD_ERROR_FORMAT = '''El error no esta en formato: (,) - : + o no se encuentra en la 3ra linea\n\n%s''' +UNEXPECTED_ERROR = 'Se esperaba un %s en (%d, %d). Su error fue un %s en (%d, %d)' +UNEXPECTED_OUTPUT = 'La salida de %s no es la esperada:\n%s\nEsperada:\n%s' + +ERROR_FORMAT = r'^\s*\(\s*(\d+)\s*,\s*(\d+)\s*\)\s*-\s*(\w+)\s*:(.*)$' + +def parse_error(error: str): + merror = re.fullmatch(ERROR_FORMAT, error) + assert merror, BAD_ERROR_FORMAT % error + + return (t(x) for t, x in zip([int, int, str, str], merror.groups())) + + +def first_error(compiler_output: list, errors: list): + line, column, error_type, _ = parse_error(errors[0]) + + oline, ocolumn, oerror_type, _ = parse_error(compiler_output[0]) + + assert line == oline and column == ocolumn and error_type == oerror_type,\ + UNEXPECTED_ERROR % (error_type, line, column, oerror_type, oline, ocolumn) + +def first_error_only_line(compiler_output: list, errors: list): + line, column, error_type, _ = parse_error(errors[0]) + + oline, ocolumn, oerror_type, _ = parse_error(compiler_output[0]) + + assert line == oline and error_type == oerror_type,\ + UNEXPECTED_ERROR % (error_type, line, column, oerror_type, oline, ocolumn) + + +def get_file_name(path: str): + try: + return path[path.rindex('/') + 1:] + except ValueError: + return path + +def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str, cmp=first_error, timeout=100): + try: + sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) + return_code, output = sp.returncode, sp.stdout.decode() + except subprocess.TimeoutExpired: + assert False, COMPILER_TIMEOUT + + assert return_code == 1, TEST_MUST_FAIL % get_file_name(cool_file_path) + + fd = open(error_file_path, 'r') + errors = fd.read().split('\n') + fd.close() + + # checking the errors of compiler + compiler_output = output.split('\n') + cmp(compiler_output[2:], errors) + +SPIM_HEADER = r'''^SPIM Version .+ of .+ +Copyright .+\, James R\. Larus\. +All Rights Reserved\. +See the file README for a full copyright notice\. +(?:Loaded: .+\n)*''' +def compare_outputs(compiler_path: str, cool_file_path: str, input_file_path: str, output_file_path: str, timeout=100): + try: + sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) + assert sp.returncode == 0, TEST_MUST_COMPILE % get_file_name(cool_file_path) + except subprocess.TimeoutExpired: + assert False, COMPILER_TIMEOUT + + spim_file = cool_file_path[:-2] + 'mips' + + try: + fd = open(input_file_path, 'rb') + sp = subprocess.run(['spim', '-file', spim_file], input=fd.read(), capture_output=True, timeout=timeout) + fd.close() + mo = re.match(SPIM_HEADER, sp.stdout.decode()) + if mo: + output = mo.string[mo.end():] + except subprocess.TimeoutExpired: + assert False, SPIM_TIMEOUT + + fd = open(output_file_path, 'r') + eoutput = fd.read() + fd.close() + + assert output == eoutput, UNEXPECTED_OUTPUT % (spim_file, repr(output), repr(eoutput)) From 4e5b176856b6d739773279834dd3cfdbcde5d9fe Mon Sep 17 00:00:00 2001 From: regnod Date: Sun, 14 Mar 2021 17:17:00 -0400 Subject: [PATCH 02/93] pasados tests de lexer, falta ver lo del estado del string --- src/lexer/lexer.py | 81 ++++++++++++++++++++++++++++++++++++------ src/main.py | 4 ++- tests/lexer/mixed2.cl | 3 +- tests/lexer/string1.cl | 2 +- 4 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/lexer/lexer.py b/src/lexer/lexer.py index 74e59bd36..597f37e7e 100755 --- a/src/lexer/lexer.py +++ b/src/lexer/lexer.py @@ -50,9 +50,45 @@ 'newline', 'type', 'id' - #ress ] _tokens += list(reserved.values()) +def find_all(s): + b = [] + a = s.find('a') + while a != -1: + b.append(a) + a = s.find('a', a + 1) + return b + +def find_last(text, row, col): + first = text.find("\n") + temp_text = text + add_col= first + add_row = 0 + loop = True + while loop: + if first > 0: + if temp_text[first-1] == "\\": + temp_text = temp_text[first+1: ] + add_col = first + first = temp_text.find("\n") + add_row += 1 + loop = True + else: + loop = False + if first + 1 == len(temp_text): + eof = True + else: + eof = False + else: + # para cuando no hay newline + add_col = len(temp_text) + 1 + eof = True + break + if add_row == 0: + add_col += col + add_row += row + return (add_row, add_col, eof) class CoolLexer: tokens = _tokens @@ -146,34 +182,58 @@ def t_number(self, t): t_assignArrow = r'<\-' t_rArrow = r'=>' - - t_string = r'\"[^\"]*\"' + + def t_string(self, t): + r"\"([^\n]|(? Date: Sun, 14 Mar 2021 17:22:10 -0400 Subject: [PATCH 03/93] agregando estado del string en lexer.py --- src/lexer/lexer.py | 15 ++++++++++++++- src/main.py | 2 +- tests/lexer/iis4_error.txt | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/lexer/lexer.py b/src/lexer/lexer.py index 74e59bd36..f40f0bede 100755 --- a/src/lexer/lexer.py +++ b/src/lexer/lexer.py @@ -58,6 +58,7 @@ class CoolLexer: tokens = _tokens states = ( ('chunkComment', 'exclusive'), + ('string', 'inclusive') ) # Define a rule so we can track line numbers @@ -147,7 +148,19 @@ def t_number(self, t): t_rArrow = r'=>' - t_string = r'\"[^\"]*\"' + def t_string(self, t): + r'\"' + t.lexer.begin('string') + pass + + def t_string_string(self, t): + r'[^\"]*\"' + t.lexer.begin('INITIAL') + return t + + def t_string_error(self, t): + print(f'ERROR tokenizando un string en {t.lexer.lineno}') + t.lexer.skip(1) t_arroba = r'@' diff --git a/src/main.py b/src/main.py index e95d34e95..71520ea10 100644 --- a/src/main.py +++ b/src/main.py @@ -2,7 +2,7 @@ import lexer.lexer as lexer import c_parser.parser as parser -with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/lexer/comment1.cl') as f: +with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/lexer/string3.cl') as f: program = f.read() coolLexer = lexer.CoolLexer() diff --git a/tests/lexer/iis4_error.txt b/tests/lexer/iis4_error.txt index aab8f39c1..8138abd07 100644 --- a/tests/lexer/iis4_error.txt +++ b/tests/lexer/iis4_error.txt @@ -1 +1 @@ -(6, 49) - LexicographicError: ERROR "!" +(6, 49) - LexicographicError: ERROR "%" From bc7bff693fb3a75788d1d9262bda783169cb7926 Mon Sep 17 00:00:00 2001 From: regnod Date: Sun, 14 Mar 2021 22:35:39 -0400 Subject: [PATCH 04/93] going to merge --- src/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.py b/src/main.py index fffe39586..e05fd3e01 100644 --- a/src/main.py +++ b/src/main.py @@ -2,7 +2,7 @@ import lexer.lexer as lexer import c_parser.parser as parser -with open('/home/regnod/Documents/cmp_compiler/cmp/cool-compiler-2021/tests/lexer/string3.cl') as f: +with open('/home/regnod/Documents/cmp_compiler/cmp/cool-compiler-2021/tests/lexer/string1.cl') as f: program = f.read() coolLexer = lexer.CoolLexer() From 3ace997f0e9e89cdaebac0f589a9993ea441e2f7 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Fri, 9 Apr 2021 17:21:52 -0400 Subject: [PATCH 05/93] Pasados todos los tests del parser --- src/c_parser/parser.py | 44 ++++++++++++--- src/c_parser/parsetab.py | 113 ++++++++++++++++++++------------------- src/lexer/lexer.py | 4 +- src/main.py | 20 ++++--- src/utils/errors.py | 3 +- tests/parser/program1.cl | 2 +- 6 files changed, 113 insertions(+), 73 deletions(-) diff --git a/src/c_parser/parser.py b/src/c_parser/parser.py index bae83f66f..4b51a5119 100644 --- a/src/c_parser/parser.py +++ b/src/c_parser/parser.py @@ -2,6 +2,7 @@ from lexer.lexer import _tokens from cool_ast.cool_ast import * import ply.yacc as yacc +from utils.errors import SyntacticError coolLexer = lexer.CoolLexer() tokens = _tokens @@ -17,15 +18,17 @@ ( 'nonassoc', 'assignArrow') ) +errors = [] class CoolParser: # def __init__(self): - def parse(self, lexer, program): self.tokens = _tokens self.lexer = lexer self.lexer.build() - return self.parser.parse(program) + ast = self.parser.parse(program) + self.errors = errors + return ast def p_program(p): 'program : class_list' @@ -89,16 +92,22 @@ def p_def_func(p): p[0] = FuncDeclarationNode(p[1],p[3],p[6],p[8]) def p_arg_list(p): - '''arg_list : arg - | arg comma arg_list + '''arg_list : non_empty_arg_list | ''' + if len(p) == 2: #p[1] == 'non_empty_arg_list': + p[0] = p[1] + else: + p[0] = [] + + def p_non_empty_arg_list(p): + '''non_empty_arg_list : arg + | arg comma non_empty_arg_list + ''' if len(p) == 4: p[0] = [p[1]] + p[3] elif len(p) == 2: p[0] = [p[1]] - else: - p[0] = [] def p_arg(p): 'arg : id colon type' @@ -264,4 +273,27 @@ def p_case_list(p): else: p[0] = [(p[1], p[3], p[5], p[7])] + # Compute column. + # input is the input text string + # token is a token instance + def find_column(input, token): + line_start = input.rfind('\n', 0, token.lexpos) + 1 + return (token.lexpos - line_start) + 1 #parentesis? + + def p_error(p): + global errors + def find_column(input, token): + line_start = input.rfind('\n', 0, token.lexpos) + 1 + return (token.lexpos - line_start) + 1 #parentesis? + + if not p: + errors.append(SyntacticError % (0,0,'EOF')) + return + + token_column = find_column(p.lexer.lexdata, p) + errors.append(SyntacticError % (p.lineno, token_column, p.value)) + # print(SyntacticError % (p.lineno, token_column, p.value)) + # print(f'({p.lineno}, {token_column}) - SyntacticError: ERROR at or near "{p.value}"') + a=0 + parser = yacc.yacc(debug = True) diff --git a/src/c_parser/parsetab.py b/src/c_parser/parsetab.py index d630d0320..3688fe254 100644 --- a/src/c_parser/parsetab.py +++ b/src/c_parser/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'nonassocdotnonassocarrobanonassoccomplementnonassocisvoidleftstardivleftplusminusnonnasocleqlneqequalleftnotnonassocassignArrowarroba assignArrow case ccur chunkComment class colon comma complement cpar div dot else equal esac false fi id if in inherits isvoid leq let lineComment lneq loop minus new newline not number ocur of opar plus pool rArrow semi space star string tab then true type whileprogram : class_listclass_list : def_class\n | def_class class_list\n def_class : class type ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur semi\n feature_list : def_attr feature_list\n | def_func feature_list\n | \n def_attr : id colon type semi\n | id colon type assignArrow expr semi\n def_func : id opar arg_list cpar colon type ocur expr ccur semiarg_list : arg\n | arg comma arg_list\n | \n arg : id colon typeparam_list : expr_list\n | \n expr_list : expr\n | expr comma expr_list\n chunk : expr semi\n | expr semi chunk\n expr : id assignArrow exprexpr : expr dot id opar param_list cpar\n | expr arroba type dot id opar param_list cpar\n | id opar param_list cpar\n expr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : ocur chunk ccurexpr : let decl_list in exprexpr : case expr of case_list esacexpr : new typeexpr : isvoid exprexpr : expr plus expr\n | expr minus expr\n expr : expr star expr\n | expr div expr\n expr : expr equal expr\n | expr lneq expr\n | expr leq expr\n expr : complement expr\n | not expr\n expr : opar expr cparexpr : idexpr : numberexpr : stringexpr : true \n | falsedecl_list : decl \n | decl comma decl_listdecl : id colon type\n | id colon type assignArrow expr\n case_list : id colon type rArrow expr semi\n | id colon type rArrow expr semi case_list\n ' +_lr_signature = 'nonassocdotnonassocarrobanonassoccomplementnonassocisvoidleftstardivleftplusminusnonnasocleqlneqequalleftnotnonassocassignArrowarroba assignArrow case ccur chunkComment class colon comma complement cpar div dot else equal esac false fi id if in inherits isvoid leq let lineComment lneq loop minus new newline not number ocur of opar plus pool rArrow semi space star string tab then true type whileprogram : class_listclass_list : def_class\n | def_class class_list\n def_class : class type ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur semi\n feature_list : def_attr feature_list\n | def_func feature_list\n | \n def_attr : id colon type semi\n | id colon type assignArrow expr semi\n def_func : id opar arg_list cpar colon type ocur expr ccur semiarg_list : non_empty_arg_list\n | \n non_empty_arg_list : arg\n | arg comma non_empty_arg_list\n arg : id colon typeparam_list : expr_list\n | \n expr_list : expr\n | expr comma expr_list\n chunk : expr semi\n | expr semi chunk\n expr : id assignArrow exprexpr : expr dot id opar param_list cpar\n | expr arroba type dot id opar param_list cpar\n | id opar param_list cpar\n expr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : ocur chunk ccurexpr : let decl_list in exprexpr : case expr of case_list esacexpr : new typeexpr : isvoid exprexpr : expr plus expr\n | expr minus expr\n expr : expr star expr\n | expr div expr\n expr : expr equal expr\n | expr lneq expr\n | expr leq expr\n expr : complement expr\n | not expr\n expr : opar expr cparexpr : idexpr : numberexpr : stringexpr : true \n | falsedecl_list : decl \n | decl comma decl_listdecl : id colon type\n | id colon type assignArrow expr\n case_list : id colon type rArrow expr semi\n | id colon type rArrow expr semi case_list\n ' -_lr_action_items = {'class':([0,3,20,51,],[4,4,-4,-5,]),'$end':([1,2,3,5,20,51,],[0,-1,-2,-3,-4,-5,]),'type':([4,8,17,28,40,49,56,98,121,],[6,13,21,48,73,77,83,110,127,]),'ocur':([6,13,27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,77,92,93,95,96,100,102,103,117,119,124,131,],[7,19,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,100,37,37,37,37,37,37,37,37,37,37,37,]),'inherits':([6,],[8,]),'ccur':([7,9,10,11,15,16,19,25,26,32,44,45,46,47,54,67,73,74,75,76,78,84,85,86,87,88,89,90,91,94,95,101,107,108,113,118,120,123,128,130,132,],[-8,14,-8,-8,-6,-7,-8,31,-9,-43,-44,-45,-46,-47,-10,94,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-20,-25,-21,-29,122,-27,-30,-23,-11,-26,-24,]),'id':([7,10,11,18,19,26,27,30,34,35,36,37,38,39,41,42,43,52,53,54,55,57,58,59,60,61,62,63,92,93,95,96,97,99,100,102,103,104,117,119,124,128,131,134,],[12,12,12,22,12,-9,32,22,32,32,32,32,71,32,32,32,32,32,32,-10,82,32,32,32,32,32,32,32,32,32,32,32,71,112,32,32,32,116,32,32,32,-11,32,112,]),'colon':([12,22,29,71,112,],[17,28,49,98,121,]),'opar':([12,27,32,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,82,92,93,95,96,100,102,103,116,117,119,124,131,],[18,34,53,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,103,34,34,34,34,34,34,34,124,34,34,34,34,]),'semi':([14,21,31,32,33,44,45,46,47,68,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,122,123,130,132,133,],[20,26,51,-43,54,-44,-45,-46,-47,95,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,128,-23,-26,-24,134,]),'cpar':([18,23,24,30,32,44,45,46,47,48,50,53,64,73,74,75,76,78,79,80,81,84,85,86,87,88,89,90,91,94,101,103,108,114,115,118,120,123,124,129,130,132,],[-14,29,-12,-14,-43,-44,-45,-46,-47,-15,-13,-17,91,-31,-32,-40,-41,-22,101,-16,-18,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-17,-29,-19,123,-27,-30,-23,-17,132,-26,-24,]),'assignArrow':([21,32,110,],[27,52,119,]),'comma':([24,32,44,45,46,47,48,70,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,108,110,118,120,123,126,130,132,],[30,-43,-44,-45,-46,-47,-15,97,-31,-32,-40,-41,-22,102,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-50,-27,-30,-23,-51,-26,-24,]),'if':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,]),'while':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,]),'let':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,]),'case':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'new':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'isvoid':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'complement':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'not':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'number':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'string':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'true':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'false':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[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,]),'dot':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,83,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,55,-44,-45,-46,-47,55,55,55,55,55,-31,-32,-40,-41,-22,55,104,-33,-34,-35,-36,55,55,55,-42,-28,-25,55,55,55,55,-27,-30,-23,55,55,-26,-24,55,]),'arroba':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,56,-44,-45,-46,-47,56,56,56,56,56,-31,-32,-40,-41,-22,56,-33,-34,-35,-36,56,56,56,-42,-28,-25,56,56,56,56,-27,-30,-23,56,56,-26,-24,56,]),'plus':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,57,-44,-45,-46,-47,57,57,57,57,57,-31,57,57,-41,-22,57,-33,-34,57,57,57,57,57,-42,-28,-25,57,57,57,57,-27,-30,-23,57,57,-26,-24,57,]),'minus':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,58,-44,-45,-46,-47,58,58,58,58,58,-31,58,58,-41,-22,58,-33,-34,58,58,58,58,58,-42,-28,-25,58,58,58,58,-27,-30,-23,58,58,-26,-24,58,]),'star':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,59,-44,-45,-46,-47,59,59,59,59,59,-31,59,59,-41,-22,59,-33,-34,-35,-36,59,59,59,-42,-28,-25,59,59,59,59,-27,-30,-23,59,59,-26,-24,59,]),'div':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,60,-44,-45,-46,-47,60,60,60,60,60,-31,60,60,-41,-22,60,-33,-34,-35,-36,60,60,60,-42,-28,-25,60,60,60,60,-27,-30,-23,60,60,-26,-24,60,]),'equal':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,61,-44,-45,-46,-47,61,61,61,61,61,-31,-32,-40,-41,-22,61,-33,-34,-35,-36,61,61,61,-42,-28,-25,61,61,61,61,-27,-30,-23,61,61,-26,-24,61,]),'lneq':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,62,-44,-45,-46,-47,62,62,62,62,62,-31,-32,-40,-41,-22,62,-33,-34,-35,-36,62,62,62,-42,-28,-25,62,62,62,62,-27,-30,-23,62,62,-26,-24,62,]),'leq':([32,33,44,45,46,47,64,65,66,68,72,73,74,75,76,78,81,84,85,86,87,88,89,90,91,94,101,105,106,108,113,118,120,123,125,126,130,132,133,],[-43,63,-44,-45,-46,-47,63,63,63,63,63,-31,-32,-40,-41,-22,63,-33,-34,-35,-36,63,63,63,-42,-28,-25,63,63,63,63,-27,-30,-23,63,63,-26,-24,63,]),'then':([32,44,45,46,47,65,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,92,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,-23,-26,-24,]),'loop':([32,44,45,46,47,66,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,93,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,-23,-26,-24,]),'of':([32,44,45,46,47,72,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,99,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,-23,-26,-24,]),'else':([32,44,45,46,47,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,105,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,117,-29,-27,-30,-23,-26,-24,]),'pool':([32,44,45,46,47,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,106,108,118,120,123,130,132,],[-43,-44,-45,-46,-47,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,118,-29,-27,-30,-23,-26,-24,]),'fi':([32,44,45,46,47,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,118,120,123,125,130,132,],[-43,-44,-45,-46,-47,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-27,-30,-23,130,-26,-24,]),'in':([32,44,45,46,47,69,70,73,74,75,76,78,84,85,86,87,88,89,90,91,94,101,108,109,110,118,120,123,126,130,132,],[-43,-44,-45,-46,-47,96,-48,-31,-32,-40,-41,-22,-33,-34,-35,-36,-37,-38,-39,-42,-28,-25,-29,-49,-50,-27,-30,-23,-51,-26,-24,]),'esac':([111,134,135,],[120,-52,-53,]),'rArrow':([127,],[131,]),} +_lr_action_items = {'class':([0,3,20,52,],[4,4,-4,-5,]),'$end':([1,2,3,5,20,52,],[0,-1,-2,-3,-4,-5,]),'type':([4,8,17,29,41,50,57,99,122,],[6,13,21,49,74,78,84,111,128,]),'ocur':([6,13,28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,78,93,94,96,97,101,103,104,118,120,125,132,],[7,19,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,101,38,38,38,38,38,38,38,38,38,38,38,]),'inherits':([6,],[8,]),'ccur':([7,9,10,11,15,16,19,26,27,33,45,46,47,48,55,68,74,75,76,77,79,85,86,87,88,89,90,91,92,95,96,102,108,109,114,119,121,124,129,131,133,],[-8,14,-8,-8,-6,-7,-8,32,-9,-44,-45,-46,-47,-48,-10,95,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-21,-26,-22,-30,123,-28,-31,-24,-11,-27,-25,]),'id':([7,10,11,18,19,27,28,31,35,36,37,38,39,40,42,43,44,53,54,55,56,58,59,60,61,62,63,64,93,94,96,97,98,100,101,103,104,105,118,120,125,129,132,135,],[12,12,12,22,12,-9,33,22,33,33,33,33,72,33,33,33,33,33,33,-10,83,33,33,33,33,33,33,33,33,33,33,33,72,113,33,33,33,117,33,33,33,-11,33,113,]),'colon':([12,22,30,72,113,],[17,29,50,99,122,]),'opar':([12,28,33,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,83,93,94,96,97,101,103,104,117,118,120,125,132,],[18,35,54,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,104,35,35,35,35,35,35,35,125,35,35,35,35,]),'semi':([14,21,32,33,34,45,46,47,48,69,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,123,124,131,133,134,],[20,27,52,-44,55,-45,-46,-47,-48,96,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,129,-24,-27,-25,135,]),'cpar':([18,23,24,25,33,45,46,47,48,49,51,54,65,74,75,76,77,79,80,81,82,85,86,87,88,89,90,91,92,95,102,104,109,115,116,119,121,124,125,130,131,133,],[-13,30,-12,-14,-44,-45,-46,-47,-48,-16,-15,-18,92,-32,-33,-41,-42,-23,102,-17,-19,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-18,-30,-20,124,-28,-31,-24,-18,133,-27,-25,]),'assignArrow':([21,33,111,],[28,53,120,]),'comma':([25,33,45,46,47,48,49,71,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,109,111,119,121,124,127,131,133,],[31,-44,-45,-46,-47,-48,-16,98,-32,-33,-41,-42,-23,103,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-51,-28,-31,-24,-52,-27,-25,]),'if':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,]),'while':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'let':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'new':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'isvoid':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'complement':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'not':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'number':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'string':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'true':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'false':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'dot':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,84,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,56,-45,-46,-47,-48,56,56,56,56,56,-32,-33,-41,-42,-23,56,105,-34,-35,-36,-37,56,56,56,-43,-29,-26,56,56,56,56,-28,-31,-24,56,56,-27,-25,56,]),'arroba':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,57,-45,-46,-47,-48,57,57,57,57,57,-32,-33,-41,-42,-23,57,-34,-35,-36,-37,57,57,57,-43,-29,-26,57,57,57,57,-28,-31,-24,57,57,-27,-25,57,]),'plus':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,58,-45,-46,-47,-48,58,58,58,58,58,-32,58,58,-42,-23,58,-34,-35,58,58,58,58,58,-43,-29,-26,58,58,58,58,-28,-31,-24,58,58,-27,-25,58,]),'minus':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,59,-45,-46,-47,-48,59,59,59,59,59,-32,59,59,-42,-23,59,-34,-35,59,59,59,59,59,-43,-29,-26,59,59,59,59,-28,-31,-24,59,59,-27,-25,59,]),'star':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,60,-45,-46,-47,-48,60,60,60,60,60,-32,60,60,-42,-23,60,-34,-35,-36,-37,60,60,60,-43,-29,-26,60,60,60,60,-28,-31,-24,60,60,-27,-25,60,]),'div':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,61,-45,-46,-47,-48,61,61,61,61,61,-32,61,61,-42,-23,61,-34,-35,-36,-37,61,61,61,-43,-29,-26,61,61,61,61,-28,-31,-24,61,61,-27,-25,61,]),'equal':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,62,-45,-46,-47,-48,62,62,62,62,62,-32,-33,-41,-42,-23,62,-34,-35,-36,-37,62,62,62,-43,-29,-26,62,62,62,62,-28,-31,-24,62,62,-27,-25,62,]),'lneq':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,63,-45,-46,-47,-48,63,63,63,63,63,-32,-33,-41,-42,-23,63,-34,-35,-36,-37,63,63,63,-43,-29,-26,63,63,63,63,-28,-31,-24,63,63,-27,-25,63,]),'leq':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,64,-45,-46,-47,-48,64,64,64,64,64,-32,-33,-41,-42,-23,64,-34,-35,-36,-37,64,64,64,-43,-29,-26,64,64,64,64,-28,-31,-24,64,64,-27,-25,64,]),'then':([33,45,46,47,48,66,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,93,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,-27,-25,]),'loop':([33,45,46,47,48,67,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,94,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,-27,-25,]),'of':([33,45,46,47,48,73,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,100,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,-27,-25,]),'else':([33,45,46,47,48,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,106,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,118,-30,-28,-31,-24,-27,-25,]),'pool':([33,45,46,47,48,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,107,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,119,-30,-28,-31,-24,-27,-25,]),'fi':([33,45,46,47,48,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,126,131,133,],[-44,-45,-46,-47,-48,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,131,-27,-25,]),'in':([33,45,46,47,48,70,71,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,110,111,119,121,124,127,131,133,],[-44,-45,-46,-47,-48,97,-49,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-50,-51,-28,-31,-24,-52,-27,-25,]),'esac':([112,135,136,],[121,-53,-54,]),'rArrow':([128,],[132,]),} _lr_action = {} for _k, _v in _lr_action_items.items(): @@ -17,7 +17,7 @@ _lr_action[_x][_k] = _y del _lr_action_items -_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,10,11,19,],[9,15,16,25,]),'def_attr':([7,10,11,19,],[10,10,10,10,]),'def_func':([7,10,11,19,],[11,11,11,11,]),'arg_list':([18,30,],[23,50,]),'arg':([18,30,],[24,24,]),'expr':([27,34,35,36,37,39,41,42,43,52,53,57,58,59,60,61,62,63,92,93,95,96,100,102,103,117,119,124,131,],[33,64,65,66,68,72,74,75,76,78,81,84,85,86,87,88,89,90,105,106,68,108,113,81,81,125,126,81,133,]),'chunk':([37,95,],[67,107,]),'decl_list':([38,97,],[69,109,]),'decl':([38,97,],[70,70,]),'param_list':([53,103,124,],[79,115,129,]),'expr_list':([53,102,103,124,],[80,114,80,80,]),'case_list':([99,134,],[111,135,]),} +_lr_goto_items = {'program':([0,],[1,]),'class_list':([0,3,],[2,5,]),'def_class':([0,3,],[3,3,]),'feature_list':([7,10,11,19,],[9,15,16,26,]),'def_attr':([7,10,11,19,],[10,10,10,10,]),'def_func':([7,10,11,19,],[11,11,11,11,]),'arg_list':([18,],[23,]),'non_empty_arg_list':([18,31,],[24,51,]),'arg':([18,31,],[25,25,]),'expr':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[34,65,66,67,69,73,75,76,77,79,82,85,86,87,88,89,90,91,106,107,69,109,114,82,82,126,127,82,134,]),'chunk':([38,96,],[68,108,]),'decl_list':([39,98,],[70,110,]),'decl':([39,98,],[71,71,]),'param_list':([54,104,125,],[80,116,130,]),'expr_list':([54,103,104,125,],[81,115,81,81,]),'case_list':([100,135,],[112,136,]),} _lr_goto = {} for _k, _v in _lr_goto_items.items(): @@ -27,57 +27,58 @@ del _lr_goto_items _lr_productions = [ ("S' -> program","S'",1,None,None,None), - ('program -> class_list','program',1,'p_program','parser.py',31), - ('class_list -> def_class','class_list',1,'p_class_list','parser.py',35), - ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',36), - ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',44), - ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',45), - ('feature_list -> def_attr feature_list','feature_list',2,'p_feature_list_attr','parser.py',53), - ('feature_list -> def_func feature_list','feature_list',2,'p_feature_list_attr','parser.py',54), - ('feature_list -> ','feature_list',0,'p_feature_list_attr','parser.py',55), - ('def_attr -> id colon type semi','def_attr',4,'p_def_attr','parser.py',79), - ('def_attr -> id colon type assignArrow expr semi','def_attr',6,'p_def_attr','parser.py',80), - ('def_func -> id opar arg_list cpar colon type ocur expr ccur semi','def_func',10,'p_def_func','parser.py',88), - ('arg_list -> arg','arg_list',1,'p_arg_list','parser.py',92), - ('arg_list -> arg comma arg_list','arg_list',3,'p_arg_list','parser.py',93), - ('arg_list -> ','arg_list',0,'p_arg_list','parser.py',94), - ('arg -> id colon type','arg',3,'p_arg','parser.py',104), - ('param_list -> expr_list','param_list',1,'p_param_list','parser.py',108), - ('param_list -> ','param_list',0,'p_param_list','parser.py',109), - ('expr_list -> expr','expr_list',1,'p_expr_list','parser.py',117), - ('expr_list -> expr comma expr_list','expr_list',3,'p_expr_list','parser.py',118), - ('chunk -> expr semi','chunk',2,'p_chunk','parser.py',126), - ('chunk -> expr semi chunk','chunk',3,'p_chunk','parser.py',127), - ('expr -> id assignArrow expr','expr',3,'p_expr_assign','parser.py',135), - ('expr -> expr dot id opar param_list cpar','expr',6,'p_expr_call','parser.py',139), - ('expr -> expr arroba type dot id opar param_list cpar','expr',8,'p_expr_call','parser.py',140), - ('expr -> id opar param_list cpar','expr',4,'p_expr_call','parser.py',141), - ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','parser.py',151), - ('expr -> while expr loop expr pool','expr',5,'p_expr_while','parser.py',155), - ('expr -> ocur chunk ccur','expr',3,'p_expr_chunk','parser.py',159), - ('expr -> let decl_list in expr','expr',4,'p_expr_let','parser.py',163), - ('expr -> case expr of case_list esac','expr',5,'p_expr_case','parser.py',167), - ('expr -> new type','expr',2,'p_expr_instantiate','parser.py',171), - ('expr -> isvoid expr','expr',2,'p_expr_isvoid','parser.py',175), - ('expr -> expr plus expr','expr',3,'p_expr_bin1','parser.py',179), - ('expr -> expr minus expr','expr',3,'p_expr_bin1','parser.py',180), - ('expr -> expr star expr','expr',3,'p_expr_bin2','parser.py',188), - ('expr -> expr div expr','expr',3,'p_expr_bin2','parser.py',189), - ('expr -> expr equal expr','expr',3,'p_expr_bin3','parser.py',197), - ('expr -> expr lneq expr','expr',3,'p_expr_bin3','parser.py',198), - ('expr -> expr leq expr','expr',3,'p_expr_bin3','parser.py',199), - ('expr -> complement expr','expr',2,'p_expr_unary','parser.py',209), - ('expr -> not expr','expr',2,'p_expr_unary','parser.py',210), - ('expr -> opar expr cpar','expr',3,'p_expr_par','parser.py',218), - ('expr -> id','expr',1,'p_expr_id','parser.py',222), - ('expr -> number','expr',1,'p_expr_int','parser.py',226), - ('expr -> string','expr',1,'p_expr_string','parser.py',230), - ('expr -> true','expr',1,'p_expr_boolean','parser.py',234), - ('expr -> false','expr',1,'p_expr_boolean','parser.py',235), - ('decl_list -> decl','decl_list',1,'p_decl_list','parser.py',242), - ('decl_list -> decl comma decl_list','decl_list',3,'p_decl_list','parser.py',243), - ('decl -> id colon type','decl',3,'p_decl','parser.py',250), - ('decl -> id colon type assignArrow expr','decl',5,'p_decl','parser.py',251), - ('case_list -> id colon type rArrow expr semi','case_list',6,'p_case_list','parser.py',259), - ('case_list -> id colon type rArrow expr semi case_list','case_list',7,'p_case_list','parser.py',260), + ('program -> class_list','program',1,'p_program','parser.py',34), + ('class_list -> def_class','class_list',1,'p_class_list','parser.py',38), + ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',39), + ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',47), + ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',48), + ('feature_list -> def_attr feature_list','feature_list',2,'p_feature_list_attr','parser.py',56), + ('feature_list -> def_func feature_list','feature_list',2,'p_feature_list_attr','parser.py',57), + ('feature_list -> ','feature_list',0,'p_feature_list_attr','parser.py',58), + ('def_attr -> id colon type semi','def_attr',4,'p_def_attr','parser.py',82), + ('def_attr -> id colon type assignArrow expr semi','def_attr',6,'p_def_attr','parser.py',83), + ('def_func -> id opar arg_list cpar colon type ocur expr ccur semi','def_func',10,'p_def_func','parser.py',91), + ('arg_list -> non_empty_arg_list','arg_list',1,'p_arg_list','parser.py',95), + ('arg_list -> ','arg_list',0,'p_arg_list','parser.py',96), + ('non_empty_arg_list -> arg','non_empty_arg_list',1,'p_non_empty_arg_list','parser.py',104), + ('non_empty_arg_list -> arg comma non_empty_arg_list','non_empty_arg_list',3,'p_non_empty_arg_list','parser.py',105), + ('arg -> id colon type','arg',3,'p_arg','parser.py',113), + ('param_list -> expr_list','param_list',1,'p_param_list','parser.py',117), + ('param_list -> ','param_list',0,'p_param_list','parser.py',118), + ('expr_list -> expr','expr_list',1,'p_expr_list','parser.py',126), + ('expr_list -> expr comma expr_list','expr_list',3,'p_expr_list','parser.py',127), + ('chunk -> expr semi','chunk',2,'p_chunk','parser.py',135), + ('chunk -> expr semi chunk','chunk',3,'p_chunk','parser.py',136), + ('expr -> id assignArrow expr','expr',3,'p_expr_assign','parser.py',144), + ('expr -> expr dot id opar param_list cpar','expr',6,'p_expr_call','parser.py',148), + ('expr -> expr arroba type dot id opar param_list cpar','expr',8,'p_expr_call','parser.py',149), + ('expr -> id opar param_list cpar','expr',4,'p_expr_call','parser.py',150), + ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','parser.py',160), + ('expr -> while expr loop expr pool','expr',5,'p_expr_while','parser.py',164), + ('expr -> ocur chunk ccur','expr',3,'p_expr_chunk','parser.py',168), + ('expr -> let decl_list in expr','expr',4,'p_expr_let','parser.py',172), + ('expr -> case expr of case_list esac','expr',5,'p_expr_case','parser.py',176), + ('expr -> new type','expr',2,'p_expr_instantiate','parser.py',180), + ('expr -> isvoid expr','expr',2,'p_expr_isvoid','parser.py',184), + ('expr -> expr plus expr','expr',3,'p_expr_bin1','parser.py',188), + ('expr -> expr minus expr','expr',3,'p_expr_bin1','parser.py',189), + ('expr -> expr star expr','expr',3,'p_expr_bin2','parser.py',197), + ('expr -> expr div expr','expr',3,'p_expr_bin2','parser.py',198), + ('expr -> expr equal expr','expr',3,'p_expr_bin3','parser.py',206), + ('expr -> expr lneq expr','expr',3,'p_expr_bin3','parser.py',207), + ('expr -> expr leq expr','expr',3,'p_expr_bin3','parser.py',208), + ('expr -> complement expr','expr',2,'p_expr_unary','parser.py',218), + ('expr -> not expr','expr',2,'p_expr_unary','parser.py',219), + ('expr -> opar expr cpar','expr',3,'p_expr_par','parser.py',227), + ('expr -> id','expr',1,'p_expr_id','parser.py',231), + ('expr -> number','expr',1,'p_expr_int','parser.py',235), + ('expr -> string','expr',1,'p_expr_string','parser.py',239), + ('expr -> true','expr',1,'p_expr_boolean','parser.py',243), + ('expr -> false','expr',1,'p_expr_boolean','parser.py',244), + ('decl_list -> decl','decl_list',1,'p_decl_list','parser.py',251), + ('decl_list -> decl comma decl_list','decl_list',3,'p_decl_list','parser.py',252), + ('decl -> id colon type','decl',3,'p_decl','parser.py',259), + ('decl -> id colon type assignArrow expr','decl',5,'p_decl','parser.py',260), + ('case_list -> id colon type rArrow expr semi','case_list',6,'p_case_list','parser.py',268), + ('case_list -> id colon type rArrow expr semi case_list','case_list',7,'p_case_list','parser.py',269), ] diff --git a/src/lexer/lexer.py b/src/lexer/lexer.py index adffcf750..2e70dfc23 100755 --- a/src/lexer/lexer.py +++ b/src/lexer/lexer.py @@ -189,7 +189,6 @@ def t_number(self, t): t_assignArrow = r'<\-' t_rArrow = r'=>' -# <<<<<<< HEAD def t_string(self, t): r'\"' @@ -221,9 +220,11 @@ def t_string_error(self, t): row, col, eof = find_last(t.value, t.lexer.lineno, self.find_column(t.lexer.lexdata,t)) if eof: self.errors.append(LexicographicError % (row, col, f'EOF in string constant')) + # print(LexicographicError % (row, col, f'EOF in string constant')) t.lexer.skip(len(t.value)) else: self.errors.append(LexicographicError % (row, col, f'Unterminated string constant')) + # print(LexicographicError % (row, col, f'Unterminated string constant')) t.lexer.skip(1) t.lexer.begin('INITIAL') @@ -260,6 +261,7 @@ def t_error(self,t): # self.errors.append(LexicographicError % (row, col, f'Unterminated string constant')) # else: self.errors.append(LexicographicError % (t.lexer.lineno, self.find_column(t.lexer.lexdata,t), f'ERROR "{t.value[0]}"')) + # print(LexicographicError % (t.lexer.lineno, self.find_column(t.lexer.lexdata,t), f'ERROR "{t.value[0]}"')) t.lexer.skip(1) def t_chunkComment_error(self,t): diff --git a/src/main.py b/src/main.py index caa77733a..2b0b39cf3 100644 --- a/src/main.py +++ b/src/main.py @@ -2,14 +2,18 @@ import lexer.lexer as lexer import c_parser.parser as parser -with open('/home/regnod/Documents/cmp_compiler 4to/cool-compiler-2021/tests/lexer/string4.cl') as f: +with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/parser/operation4.cl') as f: program = f.read() -coolLexer = lexer.CoolLexer() -coolLexer.build() -tokens = coolLexer.input(program) -for error in coolLexer.errors: - print(error) -# coolParser = parser.CoolParser() -# ast = coolParser.parse(coolLexer, program) +# coolLexer = lexer.CoolLexer() +# coolLexer.build() +# tokens = coolLexer.input(program) +# for error in coolLexer.errors: +# print(error) +coolParser = parser.CoolParser() +ast = coolParser.parse(lexer.CoolLexer(), program) +for lexing_error in coolParser.lexer.errors: + print(lexing_error) +for parsing_error in coolParser.errors: + print(parsing_error) a = 0 diff --git a/src/utils/errors.py b/src/utils/errors.py index f9020ec12..d526cf996 100644 --- a/src/utils/errors.py +++ b/src/utils/errors.py @@ -1 +1,2 @@ -LexicographicError = "(%d, %d) - LexicographicError: %s" \ No newline at end of file +LexicographicError = "(%d, %d) - LexicographicError: %s" +SyntacticError = '(%d, %d) - SyntacticError: ERROR at or near "%s"' \ No newline at end of file diff --git a/tests/parser/program1.cl b/tests/parser/program1.cl index 8e5cf617f..33cbcd02a 100644 --- a/tests/parser/program1.cl +++ b/tests/parser/program1.cl @@ -1 +1 @@ -(* A Cool program can't be empty *) \ No newline at end of file +(* A Cool program can't be empty *) From db30d2df3f49e4d6a0c278be8ceebb2c61e74dfa Mon Sep 17 00:00:00 2001 From: regnod Date: Fri, 9 Apr 2021 17:24:04 -0400 Subject: [PATCH 06/93] salva --- src/c_parser/parser.py | 9 +++++++-- src/lexer/lexer.py | 1 - src/main.py | 15 ++++++++------- src/utils/errors.py | 3 ++- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/c_parser/parser.py b/src/c_parser/parser.py index bae83f66f..0e27911b7 100644 --- a/src/c_parser/parser.py +++ b/src/c_parser/parser.py @@ -16,7 +16,7 @@ ( 'left', 'not'), ( 'nonassoc', 'assignArrow') ) - +errors = [] class CoolParser: # def __init__(self): @@ -25,7 +25,9 @@ def parse(self, lexer, program): self.tokens = _tokens self.lexer = lexer self.lexer.build() - return self.parser.parse(program) + ast = self.parser.parse(program) + return ast + def p_program(p): 'program : class_list' @@ -264,4 +266,7 @@ def p_case_list(p): else: p[0] = [(p[1], p[3], p[5], p[7])] + def p_error(p): + a = 0 + parser = yacc.yacc(debug = True) diff --git a/src/lexer/lexer.py b/src/lexer/lexer.py index adffcf750..4493aca69 100755 --- a/src/lexer/lexer.py +++ b/src/lexer/lexer.py @@ -189,7 +189,6 @@ def t_number(self, t): t_assignArrow = r'<\-' t_rArrow = r'=>' -# <<<<<<< HEAD def t_string(self, t): r'\"' diff --git a/src/main.py b/src/main.py index caa77733a..ce3256100 100644 --- a/src/main.py +++ b/src/main.py @@ -2,14 +2,15 @@ import lexer.lexer as lexer import c_parser.parser as parser -with open('/home/regnod/Documents/cmp_compiler 4to/cool-compiler-2021/tests/lexer/string4.cl') as f: +with open('/home/regnod/Documents/cmp_compiler 4to/cool-compiler-2021/tests/parser/assignment1.cl') as f: program = f.read() +# coolLexer = lexer.CoolLexer() +# coolLexer.build() +# tokens = coolLexer.input(program) +# for error in coolLexer.errors: +# print(error) coolLexer = lexer.CoolLexer() -coolLexer.build() -tokens = coolLexer.input(program) -for error in coolLexer.errors: - print(error) -# coolParser = parser.CoolParser() -# ast = coolParser.parse(coolLexer, program) +coolParser = parser.CoolParser() +ast = coolParser.parse(coolLexer, program) a = 0 diff --git a/src/utils/errors.py b/src/utils/errors.py index f9020ec12..7b6010d3b 100644 --- a/src/utils/errors.py +++ b/src/utils/errors.py @@ -1 +1,2 @@ -LexicographicError = "(%d, %d) - LexicographicError: %s" \ No newline at end of file +LexicographicError = "(%d, %d) - LexicographicError: %s" +SintacticError = '(%d, %d) - SintacticError: ERROR at or near "%s"' \ No newline at end of file From 0ef3d535277ed5995a12dcbd8cbc1b5b7e925e8c Mon Sep 17 00:00:00 2001 From: regnod Date: Fri, 9 Apr 2021 17:31:17 -0400 Subject: [PATCH 07/93] pull exitoso --- src/c_parser/parser.py | 15 --------------- src/main.py | 10 ---------- src/utils/errors.py | 4 ---- 3 files changed, 29 deletions(-) diff --git a/src/c_parser/parser.py b/src/c_parser/parser.py index 79a1ae7ee..bad7074eb 100644 --- a/src/c_parser/parser.py +++ b/src/c_parser/parser.py @@ -17,10 +17,6 @@ ( 'left', 'not'), ( 'nonassoc', 'assignArrow') ) -<<<<<<< HEAD -======= - ->>>>>>> 3ace997f0e9e89cdaebac0f589a9993ea441e2f7 errors = [] class CoolParser: # def __init__(self): @@ -30,13 +26,8 @@ def parse(self, lexer, program): self.lexer = lexer self.lexer.build() ast = self.parser.parse(program) -<<<<<<< HEAD - return ast - -======= self.errors = errors return ast ->>>>>>> 3ace997f0e9e89cdaebac0f589a9993ea441e2f7 def p_program(p): 'program : class_list' @@ -281,11 +272,6 @@ def p_case_list(p): else: p[0] = [(p[1], p[3], p[5], p[7])] -<<<<<<< HEAD - def p_error(p): - a = 0 - -======= # Compute column. # input is the input text string # token is a token instance @@ -309,5 +295,4 @@ def find_column(input, token): # print(f'({p.lineno}, {token_column}) - SyntacticError: ERROR at or near "{p.value}"') a=0 ->>>>>>> 3ace997f0e9e89cdaebac0f589a9993ea441e2f7 parser = yacc.yacc(debug = True) diff --git a/src/main.py b/src/main.py index 7e7806a42..fe11eaf69 100644 --- a/src/main.py +++ b/src/main.py @@ -2,11 +2,7 @@ import lexer.lexer as lexer import c_parser.parser as parser -<<<<<<< HEAD with open('/home/regnod/Documents/cmp_compiler 4to/cool-compiler-2021/tests/parser/assignment1.cl') as f: -======= -with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/parser/operation4.cl') as f: ->>>>>>> 3ace997f0e9e89cdaebac0f589a9993ea441e2f7 program = f.read() # coolLexer = lexer.CoolLexer() @@ -14,16 +10,10 @@ # tokens = coolLexer.input(program) # for error in coolLexer.errors: # print(error) -<<<<<<< HEAD -coolLexer = lexer.CoolLexer() -coolParser = parser.CoolParser() -ast = coolParser.parse(coolLexer, program) -======= coolParser = parser.CoolParser() ast = coolParser.parse(lexer.CoolLexer(), program) for lexing_error in coolParser.lexer.errors: print(lexing_error) for parsing_error in coolParser.errors: print(parsing_error) ->>>>>>> 3ace997f0e9e89cdaebac0f589a9993ea441e2f7 a = 0 diff --git a/src/utils/errors.py b/src/utils/errors.py index 384c39a26..23c12f9a1 100644 --- a/src/utils/errors.py +++ b/src/utils/errors.py @@ -1,6 +1,2 @@ LexicographicError = "(%d, %d) - LexicographicError: %s" -<<<<<<< HEAD -SintacticError = '(%d, %d) - SintacticError: ERROR at or near "%s"' -======= SyntacticError = '(%d, %d) - SyntacticError: ERROR at or near "%s"' ->>>>>>> 3ace997f0e9e89cdaebac0f589a9993ea441e2f7 From 0bc825f0b852cc3c205a107da777046958c48aaf Mon Sep 17 00:00:00 2001 From: regnod Date: Tue, 13 Apr 2021 02:34:09 -0400 Subject: [PATCH 08/93] =?UTF-8?q?a=C3=B1adiendo=20una=20lista=20de=20token?= =?UTF-8?q?s=20a=20los=20nodods=20del=20ast?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/c_parser/parser.py | 34 +++ src/main.py | 6 +- src/pipeline.py | 63 +++++ src/utils/automata.py | 511 +++++++++++++++++++++++++++++++++++++ src/utils/digraph.py | 102 ++++++++ src/utils/exceptions.py | 5 + src/utils/first_follows.py | 105 ++++++++ src/utils/pycompile.py | 504 ++++++++++++++++++++++++++++++++++++ src/utils/semantic.py | 252 ++++++++++++++++++ src/utils/serialize.py | 41 +++ src/utils/utils.py | 258 +++++++++++++++++++ src/visitors/Builder.py | 239 +++++++++++++++++ src/visitors/Checker.py | 378 +++++++++++++++++++++++++++ src/visitors/Collector.py | 33 +++ src/visitors/Depicter.py | 177 +++++++++++++ src/visitors/Executor.py | 365 ++++++++++++++++++++++++++ src/visitors/visitor.py | 78 ++++++ 17 files changed, 3150 insertions(+), 1 deletion(-) create mode 100644 src/pipeline.py create mode 100755 src/utils/automata.py create mode 100755 src/utils/digraph.py create mode 100755 src/utils/exceptions.py create mode 100755 src/utils/first_follows.py create mode 100755 src/utils/pycompile.py create mode 100755 src/utils/semantic.py create mode 100755 src/utils/serialize.py create mode 100755 src/utils/utils.py create mode 100755 src/visitors/Builder.py create mode 100755 src/visitors/Checker.py create mode 100755 src/visitors/Collector.py create mode 100755 src/visitors/Depicter.py create mode 100755 src/visitors/Executor.py create mode 100755 src/visitors/visitor.py diff --git a/src/c_parser/parser.py b/src/c_parser/parser.py index bad7074eb..81d2af877 100644 --- a/src/c_parser/parser.py +++ b/src/c_parser/parser.py @@ -2,6 +2,7 @@ from lexer.lexer import _tokens from cool_ast.cool_ast import * import ply.yacc as yacc +import ply.lex as lt from utils.errors import SyntacticError coolLexer = lexer.CoolLexer() tokens = _tokens @@ -32,6 +33,7 @@ def parse(self, lexer, program): def p_program(p): 'program : class_list' p[0] = ProgramNode(p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_class_list(p): '''class_list : def_class @@ -48,8 +50,10 @@ def p_def_class(p): ''' if len(p) == 7: p[0] = ClassDeclarationNode(p[2], p[4]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = ClassDeclarationNode(p[2], p[6], p[4]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_feature_list_attr(p): ''' feature_list : def_attr feature_list @@ -83,12 +87,15 @@ def p_def_attr(p): ''' if len(p) == 5: p[0] = AttrDeclarationNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = AttrDeclarationNode(p[1],p[3],p[5]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_def_func(p): 'def_func : id opar arg_list cpar colon type ocur expr ccur semi' p[0] = FuncDeclarationNode(p[1],p[3],p[6],p[8]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_arg_list(p): '''arg_list : non_empty_arg_list @@ -142,6 +149,7 @@ def p_chunk(p): def p_expr_assign(p): 'expr : id assignArrow expr' p[0] = AssignNode(p[1],p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_call(p): '''expr : expr dot id opar param_list cpar @@ -150,38 +158,48 @@ def p_expr_call(p): ''' if len(p) == 7: p[0] = CallNode(p[3], p[5], p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] elif len(p) == 9: p[0] = CallNode(p[5], p[7], p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = CallNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_if(p): 'expr : if expr then expr else expr fi' p[0] = ConditionalNode(p[2],p[4],p[6]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_while(p): 'expr : while expr loop expr pool' p[0] = WhileNode(p[2], p[4]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_chunk(p): 'expr : ocur chunk ccur' p[0] = ChunkNode(p[2]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_let(p): 'expr : let decl_list in expr' p[0] = LetInNode(p[2],p[4]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_case(p): 'expr : case expr of case_list esac' p[0] = SwitchCaseNode(p[2],p[4]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_instantiate(p): 'expr : new type' p[0] = InstantiateNode(p[2]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_isvoid(p): 'expr : isvoid expr' p[0] = IsVoidNode(p[2]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_bin1(p): '''expr : expr plus expr @@ -189,8 +207,10 @@ def p_expr_bin1(p): ''' if p[2] == '+': p[0] = PlusNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = MinusNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_bin2(p): '''expr : expr star expr @@ -198,8 +218,10 @@ def p_expr_bin2(p): ''' if p[2] == '*': p[0] = StarNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = DivNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_bin3(p): '''expr : expr equal expr @@ -208,10 +230,13 @@ def p_expr_bin3(p): ''' if p[2] == '=': p[0] = EqualNode(p[1],p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] elif p[3] == '=': p[0] = LeqNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = LessNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_unary(p): '''expr : complement expr @@ -219,8 +244,10 @@ def p_expr_unary(p): ''' if p[1] == '~': p[0] = ComplementNode(p[2]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = NotNode(p[2]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_par(p): 'expr : opar expr cpar' @@ -229,22 +256,27 @@ def p_expr_par(p): def p_expr_id(p): 'expr : id' p[0] = VariableNode(p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_int(p): 'expr : number' p[0] = ConstantNumNode(p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_string(p): 'expr : string' p[0] = StringNode(p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_boolean(p): '''expr : true | false''' if p[1] == 'true': p[0] = TrueNode(p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = FalseNode(p[1]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_decl_list(p): '''decl_list : decl @@ -260,8 +292,10 @@ def p_decl(p): ''' if len(p) == 4: p[0] = VarDeclarationNode(p[1], p[3]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = VarDeclarationNode(p[1], p[3], p[5]) + p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_case_list(p): '''case_list : id colon type rArrow expr semi diff --git a/src/main.py b/src/main.py index fe11eaf69..48feaae65 100644 --- a/src/main.py +++ b/src/main.py @@ -1,8 +1,10 @@ import lexer.lexer as lexer import c_parser.parser as parser +from pipeline import Pipeline -with open('/home/regnod/Documents/cmp_compiler 4to/cool-compiler-2021/tests/parser/assignment1.cl') as f: + +with open('/home/regnod/Documents/cmp_compiler 4to/cool-compiler-2021/tests/semantic/arithmetic1.cl') as f: program = f.read() # coolLexer = lexer.CoolLexer() @@ -10,7 +12,9 @@ # tokens = coolLexer.input(program) # for error in coolLexer.errors: # print(error) +Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), True) coolParser = parser.CoolParser() + ast = coolParser.parse(lexer.CoolLexer(), program) for lexing_error in coolParser.lexer.errors: print(lexing_error) diff --git a/src/pipeline.py b/src/pipeline.py new file mode 100644 index 000000000..73a1cedc6 --- /dev/null +++ b/src/pipeline.py @@ -0,0 +1,63 @@ +from utils.semantic import Scope, Context +from visitors.Depicter import Depicter#, Formatter +from visitors.Collector import TypeCollector +from visitors.Builder import TypeBuilder +from visitors.Checker import TypeChecker +from visitors.Executor import Executor, RuntimeException + +class Pipeline(): + def __init__(self, program, lexer, parser, verbose=False): + self.context: Context = Context() + self.errors = [] + self.scope: Scope = Scope() + self.program = program + self.lexer = lexer + self.parser = parser + + # current_position = 0 + # for char in self.program: + + # self.tokens = self.lexer.lexer(self.program) + + # self.tokens = [ token for token in self.tokens if token.token_type not in ['space', 'newLine', 'chunkComment', 'lineComment', 'tab']] + + # derivations, operations = self.parser.Parser(self.tokens, True) + + self.ast = parser.parse(lexer, program)#= evaluate_reverse_parse(derivations, operations, self.tokens) + + if len(parser.errors) != 0: + return -1 + + if self.ast is None: + return -1 + + self.depicter = Depicter() + if verbose: + print(self.depicter.visit(self.ast,0), '\n') + print() + + self.typeCollector = TypeCollector(self.context, self.errors) + self.typeCollector.visit(self.ast) + self.typeBuilder = TypeBuilder(self.context, self.errors) + self.typeBuilder.visit(self.ast) + self.typeChecker = TypeChecker(self.context, self.errors) + self.typeChecker.visit(self.ast, Scope()) + + if verbose: + print('This is after infering types:') + print() + print(self.depicter.visit(self.ast,0)) + print() + self.executor = Executor(self.context) + + if len(self.errors) == 0: + try: + executorScope = Scope() + self.executor.visit(self.ast,executorScope) + print() + print('Done!!') + except RuntimeException as e: + print(e) + print() + for error in self.errors: + print(error) \ No newline at end of file diff --git a/src/utils/automata.py b/src/utils/automata.py new file mode 100755 index 000000000..9abb91665 --- /dev/null +++ b/src/utils/automata.py @@ -0,0 +1,511 @@ +try: + import pydot +except: + pass + + +class State: + def __init__(self, state, final=False, formatter=lambda x: str(x), shape='circle'): + self.state = state + self.final = final + self.transitions = {} + self.epsilon_transitions = set() + self.tag = None + self.formatter = formatter + self.shape = shape + + # The method name is set this way from compatibility issues. + def set_formatter(self, value, attr='formatter', visited=None): + if visited is None: + visited = set() + elif self in visited: + return + + visited.add(self) + self.__setattr__(attr, value) + for destinations in self.transitions.values(): + for node in destinations: + node.set_formatter(value, attr, visited) + for node in self.epsilon_transitions: + node.set_formatter(value, attr, visited) + return self + + def has_transition(self, symbol): + return symbol in self.transitions + + def add_transition(self, symbol, state): + try: + self.transitions[symbol].append(state) + except: + self.transitions[symbol] = [state] + return self + + def add_epsilon_transition(self, state): + self.epsilon_transitions.add(state) + return self + + def recognize(self, string): + states = self.epsilon_closure + for symbol in string: + states = self.move_by_state(symbol, *states) + states = self.epsilon_closure_by_state(*states) + return any(s.final for s in states) + + def to_deterministic(self, formatter=lambda x: str(x)): + closure = self.epsilon_closure + start = State(tuple(closure), any(s.final for s in closure), formatter) + + closures = [closure] + states = [start] + pending = [start] + + while pending: + state = pending.pop() + symbols = {symbol for s in state.state for symbol in s.transitions} + + for symbol in symbols: + move = self.move_by_state(symbol, *state.state) + closure = self.epsilon_closure_by_state(*move) + + if closure not in closures: + new_state = State(tuple(closure), any(s.final for s in closure), formatter) + closures.append(closure) + states.append(new_state) + pending.append(new_state) + else: + index = closures.index(closure) + new_state = states[index] + + state.add_transition(symbol, new_state) + + return start + + @staticmethod + def from_nfa(nfa, get_states=False): + states = [] + for n in range(nfa.states): + state = State(n, n in nfa.finals) + states.append(state) + + for (origin, symbol), destinations in nfa.map.items(): + origin = states[origin] + origin[symbol] = [states[d] for d in destinations] + + if get_states: + return states[nfa.start], states + return states[nfa.start] + + @staticmethod + def move_by_state(symbol, *states): + return {s for state in states if state.has_transition(symbol) for s in state[symbol]} + + @staticmethod + def epsilon_closure_by_state(*states): + closure = {state for state in states} + + l = 0 + while l != len(closure): + l = len(closure) + tmp = [s for s in closure] + for s in tmp: + for epsilon_state in s.epsilon_transitions: + closure.add(epsilon_state) + return closure + + @property + def epsilon_closure(self): + return self.epsilon_closure_by_state(self) + + @property + def name(self): + return self.formatter(self.state) + + def get(self, symbol): + target = self.transitions[symbol] + assert len(target) == 1 + return target[0] + + def __getitem__(self, symbol): + if symbol == '': + return self.epsilon_transitions + try: + return self.transitions[symbol] + except KeyError: + return None + + def __setitem__(self, symbol, value): + if symbol == '': + self.epsilon_transitions = value + else: + self.transitions[symbol] = value + + def __repr__(self): + return str(self) + + def __str__(self): + return str(self.state) + + def __hash__(self): + return hash(self.state) + + def __iter__(self): + yield from self._visit() + + def _visit(self, visited=None): + if visited is None: + visited = set() + elif self in visited: + return + + visited.add(self) + yield self + + for destinations in self.transitions.values(): + for node in destinations: + yield from node._visit(visited) + for node in self.epsilon_transitions: + yield from node._visit(visited) + + def graph(self): + G = pydot.Dot(rankdir='LR', margin=0.1) + G.add_node(pydot.Node('start', shape='plaintext', label='', width=0, height=0)) + + visited = set() + + def visit(start): + ids = id(start) + if ids not in visited: + visited.add(ids) + G.add_node(pydot.Node(ids, label=start.name, shape=self.shape, style='bold' if start.final else '')) + for tran, destinations in start.transitions.items(): + for end in destinations: + visit(end) + G.add_edge(pydot.Edge(ids, id(end), label=tran, labeldistance=2)) + for end in start.epsilon_transitions: + visit(end) + G.add_edge(pydot.Edge(ids, id(end), label='ε', labeldistance=2)) + + visit(self) + G.add_edge(pydot.Edge('start', id(self), label='', style='dashed')) + + return G + + def _repr_svg_(self): + try: + return self.graph().create_svg().decode('utf8') + except: + pass + + # def write_to(self, fname): + # return self.graph().write_svg(fname) + + +def multiline_formatter(state): + return '\n'.join(str(item) for item in state) + + +def lr0_formatter(state): + try: + return '\n'.join(str(item)[:-1] for item in state) + except TypeError: + return str(state)[:-1] # this used to be -4 + + +import pydot +from tools.utils import ContainerSet, DisjointSet + + +class NFA: + def __init__(self, states, finals, transitions, start=0): + self.states = states + self.start = start + self.finals = set(finals) + self.map = transitions + self.vocabulary = set() + self.transitions = {state: {} for state in range(states)} + + for (origin, symbol), destinations in transitions.items(): + assert hasattr(destinations, '__iter__'), 'Invalid collection of states' + self.transitions[origin][symbol] = destinations + self.vocabulary.add(symbol) + + self.vocabulary.discard('') + + def epsilon_transitions(self, state): + assert state in self.transitions, 'Invalid state' + try: + return self.transitions[state][''] + except KeyError: + return () + + def graph(self): + G = pydot.Dot(rankdir='LR', margin=0.1) + G.add_node(pydot.Node('start', shape='plaintext', label='', width=0, height=0)) + + for (start, tran), destinations in self.map.items(): + tran = 'ε' if tran == '' else tran + G.add_node(pydot.Node(start, shape='circle', style='bold' if start in self.finals else '')) + for end in destinations: + G.add_node(pydot.Node(end, shape='circle', style='bold' if end in self.finals else '')) + G.add_edge(pydot.Edge(start, end, label=tran, labeldistance=2)) + + G.add_edge(pydot.Edge('start', self.start, label='', style='dashed')) + return G + + def _repr_svg_(self): + try: + return self.graph().create_svg().decode('utf8') + except: + pass + + +class DFA(NFA): + + def __init__(self, states, finals, transitions, start=0): + assert all(isinstance(value, int) for value in transitions.values()) + assert all(len(symbol) > 0 for origin, symbol in transitions) + + transitions = {key: [value] for key, value in transitions.items()} + NFA.__init__(self, states, finals, transitions, start) + self.current = start + + def _move(self, symbol): + try: + self.current = self.transitions[self.current[0]][symbol] + return True + except KeyError: + return False + + def _reset(self): + self.current = self.start + + def recognize(self, string): + self.current = [self.current] + for char in string: + if not self._move(char): + self._reset() + return False + tmp = self.current[0] + self._reset() + return tmp in self.finals + + +def move(automaton, states, symbol): + moves = set() + for state in states: + try: + for new_state in automaton.transitions[state][symbol]: + moves.add(new_state) + except KeyError: + pass + return moves + + +def epsilon_closure(automaton, states): + pending = [s for s in states] + closure = {s for s in states} + + while pending: + state = pending.pop() + # Your code here + for new_state in automaton.epsilon_transitions(state): + closure.add(new_state) + pending.append(new_state) + + return ContainerSet(*closure) + + +def nfa_to_dfa(automaton): + transitions = {} + + start = epsilon_closure(automaton, [automaton.start]) + start.id = 0 + start.is_final = any(s in automaton.finals for s in start) + states = [start] + + pending = [start] + while pending: + state = pending.pop() + + for symbol in automaton.vocabulary: + goto = move(automaton, state, symbol) + new_state = epsilon_closure(automaton, goto) + if len(new_state) == 0: + continue + new_state.is_final = any(s in automaton.finals for s in new_state) + + try: + transitions[state.id, symbol] + assert False, 'Invalid DFA!!!' + except KeyError: + # Your code here + new_id = 0 + for i, item in enumerate(states, 0): + if item.set.issubset(new_state.set) and new_state.set.issubset(item.set): + new_state.id = item.id + new_id = item.id + break + else: + new_state.id = i + 1 + pending.append(new_state) + states.append(new_state) + new_id = i + 1 + + transitions[state.id, symbol] = new_id + + finals = [state.id for state in states if state.is_final] + dfa = DFA(len(states), finals, transitions) + return dfa + + +def automata_union(a1, a2): + transitions = {} + + start = 0 + d1 = 1 + d2 = a1.states + d1 + final = a2.states + d2 + + for (origin, symbol), destinations in a1.map.items(): + transitions[origin + d1, symbol] = [i + d1 for i in destinations] + + for (origin, symbol), destinations in a2.map.items(): + transitions[origin + d2, symbol] = [i + d2 for i in destinations] + + transitions[start, ''] = [d1, d2] + + for final_a1 in a1.finals: + transitions[final_a1 + d1, ''] = [final] + for final_a2 in a2.finals: + transitions[final_a2 + d2, ''] = [final] + + states = a1.states + a2.states + 2 + finals = {final} + + return NFA(states, finals, transitions, start) + + +def automata_concatenation(a1, a2): + transitions = {} + + start = 0 + d1 = 0 + d2 = a1.states + d1 + final = a2.states + d2 + + for (origin, symbol), destinations in a1.map.items(): + transitions[origin, symbol] = destinations + + for (origin, symbol), destinations in a2.map.items(): + transitions[origin + d2, symbol] = [i + d2 for i in destinations] + + for final_a1 in a1.finals: + transitions[final_a1, ''] = [d2] + for final_a2 in a2.finals: + transitions[final_a2 + d2, ''] = [final] + + states = a1.states + a2.states + 1 + finals = {final} + + return NFA(states, finals, transitions, start) + + +def automata_closure(a1): + transitions = {} + + start = 0 + d1 = 1 + final = a1.states + d1 + + for (origin, symbol), destinations in a1.map.items(): + transitions[origin + d1, symbol] = {d + d1 for d in destinations} + transitions[start, ''] = [a1.start + d1, final] + + for f in a1.finals: + try: + X = transitions[f + d1, ''] + except KeyError: + X = transitions[f + d1, ''] = set() + X.add(final) + X.add(a1.start + d1) + J = a1.states + 2 + S = {final} + return NFA(J, S, transitions, start) + + +def distinguish_states(group, automaton, partition): + split = {} + vocabulary = tuple(automaton.vocabulary) + + transition = automaton.transitions + + for member in group: + for item in split.keys(): + for symbol in vocabulary: + q1 = None + q2 = None + try: + q1 = partition[transition[item][symbol][0]].representative + except KeyError: + q1 = None + try: + q2 = partition[transition[member.value][symbol][0]].representative + except KeyError: + q2 = None + if q1 != q2: + break + else: + split[item].append(member.value) + break + else: + split[member.value] = [member.value] + + return [group for group in split.values()] + + +def state_minimization(automaton): + partition = DisjointSet(*range(automaton.states)) + + finals = list(automaton.finals) + non_finals = [state for state in range(automaton.states) if not state in automaton.finals] + partition.merge(finals) + partition.merge(non_finals) + + while True: + new_partition = DisjointSet(*range(automaton.states)) + + for group in partition.groups: + new_groups = distinguish_states(group, automaton, partition) + for new_group in new_groups: + new_partition.merge(new_group) + + if len(new_partition) == len(partition): + break + + partition = new_partition + + return partition + + +def automata_minimization(automaton): + partition = state_minimization(automaton) + + states = [s for s in partition.representatives] + + transitions = {} + for i, state in enumerate(states): + origin = state.value + for symbol, destinations in automaton.transitions[origin].items(): + new_dest = states.index(partition[destinations[0]].representative) + + try: + transitions[i, symbol] + assert False + except KeyError: + transitions[i, symbol] = new_dest + pass + + start = states.index(partition[automaton.start].representative) + finals = set([i for i in range(len(states)) if states[i].value in automaton.finals]) + + return DFA(len(states), finals, transitions, start) diff --git a/src/utils/digraph.py b/src/utils/digraph.py new file mode 100755 index 000000000..8675a2ee3 --- /dev/null +++ b/src/utils/digraph.py @@ -0,0 +1,102 @@ +class DNode: + def setType(self, typex): + pass + +class PrimeNode(DNode): + def __init__(self, typex): + self.type = typex + + def setType(self, new_type): + self.type = new_type + +class AttrNode(DNode): + def __init__(self, typex, attr): + self.type = typex + self.attribute = attr + + def setType(self, new_type): + self.type = new_type + self.attribute.type = new_type + +class ParamNode(DNode): + def __init__(self, typex, method, i): + self.type = typex + self.index = i + self.method = method + + def setType(self, typex): + self.type = typex + self.method.param_types[self.index] = typex + +class RTypeNode(DNode): + def __init__(self, typex, method): + self.type = typex + self.method = method + + def setType(self, typex): + self.type = typex + self.method.return_type = typex + +class VarNode(DNode): #do not confundir con VariableNode de semantic.py + def __init__(self, typex, varInfo): + self.type = typex + self.varInfo = varInfo + + def setType(self, typex): + self.type = typex + self.varInfo.type = typex + +class DGraph: + def __init__(self): + self.dependencies = {} + + def CreateNode(self, node): + if node not in self.dependencies: + self.dependencies[node] = [] + + def AddEdge(self,fromNode, toNode): + try: + self.dependencies[fromNode].append(toNode) + except: + self.dependencies[fromNode] = [toNode] + + self.CreateNode(toNode) + + def Build(self, objectType): + # pending = [v for v in self.dependencies.keys() if isinstance(v,PrimeNode)] + pending = [ ] + for v in self.dependencies.keys(): + if isinstance(v, PrimeNode): + pending.append(v) + + visited = set() + + while pending: + n = pending[0] + pending = pending[1:len(pending)] + + if n in visited: + continue + + self.UpdateNode(n,visited) + + for m in self.dependencies: + if m not in visited: + m.setType(objectType) #object pacasa'e domingo + + def UpdateNode(self, node, visited): + # pending = [node] + self.dependencies[node] + pending = [ node ] + pending.extend(self.dependencies[node]) + + t = node.type + while pending: + n = pending[0] + pending = pending[1:len(pending)] + + if n in visited: + continue + + n.setType(t) + visited.add(n) + pending.extend(self.dependencies[n]) \ No newline at end of file diff --git a/src/utils/exceptions.py b/src/utils/exceptions.py new file mode 100755 index 000000000..68ddca147 --- /dev/null +++ b/src/utils/exceptions.py @@ -0,0 +1,5 @@ +class ParsingException(Exception): + pass + +class RuntimeException(Exception): + pass \ No newline at end of file diff --git a/src/utils/first_follows.py b/src/utils/first_follows.py new file mode 100755 index 000000000..70a9a5100 --- /dev/null +++ b/src/utils/first_follows.py @@ -0,0 +1,105 @@ +from itertools import islice +from tools.utils import ContainerSet + +def compute_local_first(firsts, alpha): + first_alpha = ContainerSet() + + try: + alpha_is_epsilon = alpha.IsEpsilon + except: + alpha_is_epsilon = False + + if alpha_is_epsilon: + first_alpha.set_epsilon() + else: + for x in alpha: + symbol_first = firsts[x] + + first_alpha.update(symbol_first) + + if not symbol_first.contains_epsilon: + break + else: + first_alpha.set_epsilon() + + # First(alpha) + return first_alpha + +def compute_firsts(G): + firsts = {} + change = True + + # init First(Vt) + for terminal in G.terminals: + firsts[terminal] = ContainerSet(terminal) + + # init First(Vn) + for nonterminal in G.nonTerminals: + firsts[nonterminal] = ContainerSet() + + while change: + change = False + + # P: x -> alpha + for production in G.Productions: + x = production.Left + alpha = production.Right + + # get current First(x) + first_x = firsts[x] + + # init First(alpha) + try: + first_alpha = firsts[alpha] + except KeyError: + first_alpha = firsts[alpha] = ContainerSet() + + # CurrentFirst(alpha)??? + local_first = compute_local_first(firsts, alpha) + + # update First(x) and First(alpha) from CurrentFirst(alpha) + change |= first_alpha.hard_update(local_first) + change |= first_x.hard_update(local_first) + + # First(Vt) + First(Vt) + First(RightSides) + return firsts + +def compute_follows(G, firsts): + follows = {} + change = True + + local_firsts = {} + + # init Follow(Vn) + for nonterminal in G.nonTerminals: + follows[nonterminal] = ContainerSet() + follows[G.startSymbol] = ContainerSet(G.EOF) + + while change: + change = False + + # P: X -> alpha + for production in G.Productions: + x = production.Left + alpha = production.Right + + follow_x = follows[x] + + for i, Y in enumerate(alpha): + + if not Y.IsTerminal: + + follow_y = follows[Y] + + try: + first_beta = local_firsts[alpha, i] + except KeyError: + first_beta = local_firsts[alpha, i] = compute_local_first(firsts, islice(alpha, i + 1, None)) + + change |= follow_y.update(first_beta) + + if i == len(alpha) - 1 or first_beta.contains_epsilon: + change |= follow_y.update(follow_x) + + # Follow(Vn) + return follows diff --git a/src/utils/pycompile.py b/src/utils/pycompile.py new file mode 100755 index 000000000..8293c48f6 --- /dev/null +++ b/src/utils/pycompile.py @@ -0,0 +1,504 @@ +import json + + +class Symbol(object): + + def __init__(self, name, grammar): + self.Name = name + self.Grammar = grammar + + def __str__(self): + return self.Name + + def __repr__(self): + return repr(self.Name) + + def __add__(self, other): + if isinstance(other, Symbol): + return Sentence(self, other) + + raise TypeError(other) + + def __or__(self, other): + + if isinstance(other, (Sentence)): + return SentenceList(Sentence(self), other) + + raise TypeError(other) + + @property + def IsEpsilon(self): + return False + + def __len__(self): + return 1 + +class NonTerminal(Symbol): + + def __init__(self, name, grammar): + super().__init__(name, grammar) + self.productions = [] + + def __imod__(self, other): + + if isinstance(other, (Sentence)): + p = Production(self, other) + self.Grammar.Add_Production(p) + return self + + if isinstance(other, tuple): + assert len(other) > 1 + + if len(other) == 2: + other += (None,) * len(other[0]) + + assert len(other) == len( + other[0]) + 2, "Debe definirse una, y solo una, regla por cada símbolo de la producción" + # assert len(other) == 2, "Tiene que ser una Tupla de 2 elementos (sentence, attribute)" + + if isinstance(other[0], Symbol) or isinstance(other[0], Sentence): + p = AttributeProduction(self, other[0], other[1:]) + else: + raise Exception("") + + self.Grammar.Add_Production(p) + return self + + if isinstance(other, Symbol): + p = Production(self, Sentence(other)) + self.Grammar.Add_Production(p) + return self + + if isinstance(other, SentenceList): + + for s in other: + p = Production(self, s) + self.Grammar.Add_Production(p) + + return self + + raise TypeError(other) + + @property + def IsTerminal(self): + return False + + @property + def IsNonTerminal(self): + return True + + @property + def IsEpsilon(self): + return False + +class Terminal(Symbol): + + def __init__(self, name, grammar): + super().__init__(name, grammar) + + @property + def IsTerminal(self): + return True + + @property + def IsNonTerminal(self): + return False + + @property + def IsEpsilon(self): + return False + +class EOF(Terminal): + + def __init__(self, Grammar): + super().__init__('$', Grammar) + +class Sentence(object): + + def __init__(self, *args): + self._symbols = tuple(x for x in args if not x.IsEpsilon) + self.hash = hash(self._symbols) + + def __len__(self): + return len(self._symbols) + + def __add__(self, other): + if isinstance(other, Symbol): + return Sentence(*(self._symbols + (other,))) + + if isinstance(other, Sentence): + return Sentence(*(self._symbols + other._symbols)) + + raise TypeError(other) + + def __or__(self, other): + if isinstance(other, Sentence): + return SentenceList(self, other) + + if isinstance(other, Symbol): + return SentenceList(self, Sentence(other)) + + raise TypeError(other) + + def __repr__(self): + return str(self) + + def __str__(self): + return ("%s " * len(self._symbols) % tuple(self._symbols)).strip() + + def __iter__(self): + return iter(self._symbols) + + def __getitem__(self, index): + return self._symbols[index] + + def __eq__(self, other): + return self._symbols == other._symbols + + def __hash__(self): + return self.hash + + @property + def IsEpsilon(self): + return False + +class SentenceList(object): + + def __init__(self, *args): + self._sentences = list(args) + + def Add(self, symbol): + if not symbol and (symbol is None or not symbol.IsEpsilon): + raise ValueError(symbol) + + self._sentences.append(symbol) + + def __iter__(self): + return iter(self._sentences) + + def __or__(self, other): + if isinstance(other, Sentence): + self.Add(other) + return self + + if isinstance(other, Symbol): + return self | Sentence(other) + +class Epsilon(Terminal, Sentence): + + def __init__(self, grammar): + super().__init__('epsilon', grammar) + + def __str__(self): + return "e" + + def __repr__(self): + return 'epsilon' + + def __iter__(self): + yield from () + + def __len__(self): + return 0 + + def __add__(self, other): + return other + + def __eq__(self, other): + return isinstance(other, (Epsilon,)) + + def __hash__(self): + return hash("") + + @property + def IsEpsilon(self): + return True + +class Production(object): + + def __init__(self, nonTerminal, sentence): + self.Left = nonTerminal + self.Right = sentence + + def __str__(self): + return '%s := %s' % (self.Left, self.Right) + + def __repr__(self): + return '%s -> %s' % (self.Left, self.Right) + + def __iter__(self): + yield self.Left + yield self.Right + + def __eq__(self, other): + return isinstance(other, Production) and self.Left == other.Left and self.Right == other.Right + + def __hash__(self): + return hash((self.Left, self.Right)) + + @property + def IsEpsilon(self): + return self.Right.IsEpsilon + +class AttributeProduction(Production): + + def __init__(self, nonTerminal, sentence, attributes): + if not isinstance(sentence, Sentence) and isinstance(sentence, Symbol): + sentence = Sentence(sentence) + super(AttributeProduction, self).__init__(nonTerminal, sentence) + + self.attributes = attributes + + def __str__(self): + return '%s := %s' % (self.Left, self.Right) + + def __repr__(self): + return '%s -> %s' % (self.Left, self.Right) + + def __iter__(self): + yield self.Left + yield self.Right + + @property + def IsEpsilon(self): + return self.Right.IsEpsilon + + # sintetizar en ingles??????, pending aggrement + def syntetice(self): + pass + +class Grammar(): + + def __init__(self): + + self.Productions = [] + self.nonTerminals = [] + self.terminals = [] + self.startSymbol = None + # production type + self.pType = None + self.Epsilon = Epsilon(self) + self.EOF = EOF(self) + + self.symbDict = {'$': self.EOF} + + def NonTerminal(self, name, startSymbol=False): + + name = name.strip() + if not name: + raise Exception("Empty name") + + term = NonTerminal(name, self) + + if startSymbol: + + if self.startSymbol is None: + self.startSymbol = term + else: + raise Exception("Cannot define more than one start symbol.") + + self.nonTerminals.append(term) + self.symbDict[name] = term + return term + + def NonTerminals(self, names): + + ans = tuple((self.NonTerminal(x) for x in names.strip().split())) + + return ans + + def Add_Production(self, production): + + if len(self.Productions) == 0: + self.pType = type(production) + + # assert type(production) == self.pType, "The Productions most be of only 1 type." + + production.Left.productions.append(production) + self.Productions.append(production) + + def Terminal(self, name): + + name = name.strip() + if not name: + raise Exception("Empty name") + + term = Terminal(name, self) + self.terminals.append(term) + self.symbDict[name] = term + return term + + def Terminals(self, names): + + ans = tuple((self.Terminal(x) for x in names.strip().split())) + + return ans + + def __str__(self): + + mul = '%s, ' + + ans = 'Non-Terminals:\n\t' + + nonterminals = mul * (len(self.nonTerminals) - 1) + '%s\n' + + ans += nonterminals % tuple(self.nonTerminals) + + ans += 'Terminals:\n\t' + + terminals = mul * (len(self.terminals) - 1) + '%s\n' + + ans += terminals % tuple(self.terminals) + + ans += 'Productions:\n\t' + + ans += str(self.Productions) + + return ans + + def __getitem__(self, name): + try: + return self.symbDict[name] + except KeyError: + return None + + @property + def to_json(self): + + productions = [] + + for p in self.Productions: + head = p.Left.Name + + body = [] + + for s in p.Right: + body.append(s.Name) + + productions.append({'Head': head, 'Body': body}) + + d = {'NonTerminals': [symb.Name for symb in self.nonTerminals], + 'Terminals': [symb.Name for symb in self.terminals], \ + 'Productions': productions} + + # [{'Head':p.Left.Name, "Body": [s.Name for s in p.Right]} for p in self.Productions] + return json.dumps(d) + + @staticmethod + def from_json(data): + data = json.loads(data) + + G = Grammar() + dic = {'epsilon': G.Epsilon} + + for term in data['Terminals']: + dic[term] = G.Terminal(term) + + for noTerm in data['NonTerminals']: + dic[noTerm] = G.NonTerminal(noTerm) + + for p in data['Productions']: + head = p['Head'] + dic[head] %= Sentence(*[dic[term] for term in p['Body']]) + + return G + + def copy(self): + G = Grammar() + G.Productions = self.Productions.copy() + G.nonTerminals = self.nonTerminals.copy() + G.terminals = self.terminals.copy() + G.pType = self.pType + G.startSymbol = self.startSymbol + G.Epsilon = self.Epsilon + G.EOF = self.EOF + G.symbDict = self.symbDict.copy() + + return G + + @property + def IsAugmentedGrammar(self): + augmented = 0 + for left, right in self.Productions: + if self.startSymbol == left: + augmented += 1 + if augmented <= 1: + return True + else: + return False + + def AugmentedGrammar(self, force=False): + if not self.IsAugmentedGrammar or force: + + G = self.copy() + # S, self.startSymbol, SS = self.startSymbol, None, self.NonTerminal('S\'', True) + S = G.startSymbol + G.startSymbol = None + SS = G.NonTerminal('S\'', True) + if G.pType is AttributeProduction: + SS %= S + G.Epsilon, lambda x: x + else: + SS %= S + G.Epsilon + + return G + else: + return self.copy() + # endchange + +class Item: + + def __init__(self, production, pos, lookaheads=[]): + self.production = production + self.pos = pos + self.lookaheads = frozenset(look for look in lookaheads) + + def __str__(self): + s = str(self.production.Left) + " -> " + if len(self.production.Right) > 0: + for i, c in enumerate(self.production.Right): + if i == self.pos: + s += "." + s += str(self.production.Right[i]) + if self.pos == len(self.production.Right): + s += "." + else: + s += "." + s += ", " + str(self.lookaheads)[10:-1] + return s + + def __repr__(self): + return str(self) + + def __eq__(self, other): + return ( + (self.pos == other.pos) and + (self.production == other.production) and + (set(self.lookaheads) == set(other.lookaheads)) + ) + + def __hash__(self): + return hash((self.production, self.pos, self.lookaheads)) + + @property + def IsReduceItem(self): + return len(self.production.Right) == self.pos + + @property + def NextSymbol(self): + if self.pos < len(self.production.Right): + return self.production.Right[self.pos] + else: + return None + + def NextItem(self): + if self.pos < len(self.production.Right): + return Item(self.production, self.pos + 1, self.lookaheads) + else: + return None + + def Preview(self, skip=1): + unseen = self.production.Right[self.pos + skip:] + return [unseen + (lookahead,) for lookahead in self.lookaheads] + + def Center(self): + return Item(self.production, self.pos) diff --git a/src/utils/semantic.py b/src/utils/semantic.py new file mode 100755 index 000000000..89cab9951 --- /dev/null +++ b/src/utils/semantic.py @@ -0,0 +1,252 @@ +from enum import Enum, auto +from collections import OrderedDict +from typing import List, Optional, Dict, Tuple, Union + +class SemanticError(Exception): + @property + def text(self): + return self.args[0] + +class Attribute: + def __init__(self, name, typex): + self.name: str = name + self.type: '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: str = name + self.param_names: List[str] = param_names + self.param_types: List['Type'] = params_types + self.return_type: '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 + tuple(other.param_types) == tuple(self.param_types)) + +class Type: + def __init__(self, name: str): + self.name: str = name + self.attributes_dict: OrderedDict[str, Attribute] = OrderedDict() + self.methods_dict: OrderedDict[str, Method] = OrderedDict() + self.parent: Optional['Type'] = None + + @property + def attributes(self): + return [x for _, x in self.attributes_dict.items()] + + @property + def methods(self): + return [x for _, x in self.methods_dict.items()] + + def set_parent(self, parent: 'Type') -> None: + if 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, typex, visited , get_owner: bool = False) -> Union[Attribute, Tuple[Attribute, 'Type']]: + try: + return self.attributes_dict[name] if not get_owner else (self.attributes_dict[name], self) + except KeyError: + if typex.name == self.name: + if visited: + raise SemanticError(f'Attribute "{name}" is not defined in {self.name}.') + visited = True + if self.parent is None: + raise SemanticError(f'Attribute "{name}" is not defined in {self.name}.') + try: + return self.parent.get_attribute(name, typex, visited, get_owner) + except SemanticError: + raise SemanticError(f'Attribute "{name}" is not defined in {self.name}.') + + def define_attribute(self, name: str, typex: 'Type') -> Attribute: + try: + self.get_attribute(name, self, False) + except SemanticError: + attribute = Attribute(name, typex) + self.attributes_dict[name] = attribute + return attribute + else: + raise SemanticError(f'Attribute "{name}" is already defined in {self.name}.') + + def contains_attribute(self, name: str) -> bool: + return name in self.attributes_dict or self.parent is not None and self.parent.contains_attribute(name) + + def get_method(self, name: str, typex, visited, get_owner: bool = False) -> Union[Method, Tuple[Method, 'Type']]: + try: + return self.methods_dict[name] if not get_owner else (self.methods_dict[name], self) + except KeyError: + if typex is not None and self.name == typex.name: + if visited: + raise SemanticError(f'Method {name} is not defined in {self.name}.') + visited = True + try: + return self.parent.get_method(name, typex, visited, get_owner) + except SemanticError: + raise SemanticError(f'Attribute {name} is not defined in {self.name}.') + if self.parent is None: + raise SemanticError(f'Method "{name}" is not defined in {self.name}.') + try: + return self.parent.get_method(name, typex, visited, get_owner) + except SemanticError: + raise SemanticError(f'Method "{name}" is not defined in {self.name}.') + + def define_method(self, name: str, + param_names: List[str], + param_types: List['Type'], + return_type: 'Type') -> Method: + if name in self.methods_dict: + raise SemanticError(f'Method "{name}" already defined in {self.name}') + + method = Method(name, param_names, param_types, return_type) + self.methods_dict[name] = method + return method + + def contains_method(self, name) -> bool: + return name in self.methods_dict or (self.parent is not None and self.parent.contains_method(name)) + + def all_attributes(self) -> List[Tuple[Attribute, 'Type']]: + attributes = [] if self.parent is None else self.parent.all_attributes() + attributes += [(x, self) for x in self.attributes] + return attributes + + def all_methods(self) -> List[Tuple[Method, 'Type']]: + methods = [] if self.parent is None else self.parent.all_methods() + methods += [(x, self) for x in self.methods] + return methods + + def conforms_to(self, other: 'Type') -> bool: + return other.bypass() or self == other or self.parent is not None and self.parent.conforms_to(other) + + def join(self, other: 'Type') -> 'Type': + self_ancestors = set(self.get_ancestors()) + + current_type = other + while current_type is not None: + if current_type in self_ancestors: + break + current_type = current_type.parent + return current_type + + @staticmethod + def multi_join(types: List['Type']) -> 'Type': + static_type = types[0] + for t in types[1:]: + static_type = static_type.join(t) + return static_type + + def bypass(self) -> bool: + return False + + def get_ancestors(self): + if self.parent is None: + return [self] + return [self] + self.parent.get_ancestors() + + 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_dict else '' + output += '\n\t'.join(str(x) for x in self.methods) + output += '\n' if self.methods_dict else '' + output += '}\n' + return output + + def __repr__(self): + return str(self) + +class ErrorType(Type): + def __init__(self): + super().__init__('Error') + + def conforms_to(self, other): + return True + + def bypass(self): + return True + + def __eq__(self, other): + return isinstance(other, Type) + +class Context: + def __init__(self): + self.types: Dict[str, Type] = {} + + def create_type(self, name: str) -> Type: + if name in self.types: + raise SemanticError(f'Type with the same name ({name}) already in context.') + typex = self.types[name] = Type(name) + return typex + + def get_type(self, name: str) -> Type: + try: + return self.types[name] + except KeyError: + raise SemanticError(f'Type "{name}" is not defined.') + + def __str__(self): + return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' + + def __repr__(self): + return str(self) + + def __iter__(self): + return iter(self.types.values()) + +class VariableInfo: + def __init__(self, name, vtype): + self.name: str = name + self.type: Type = vtype + +class FunctionInfo: + def __init__(self, name, params): + self.name = name + self.params = params + +class Scope: + def __init__(self, parent: Optional['Scope'] = None): + self.locals: Dict[str, VariableInfo] = {} + self.parent: Optional['Scope'] = parent + self.children: List[Scope] = [] + + def create_child(self) -> 'Scope': + child = Scope(self) + self.children.append(child) + return child + + def define_variable(self, vname: str, vtype: Type) -> VariableInfo: + info = VariableInfo(vname, vtype) + self.locals[vname] = info + return info + + def find_variable(self, vname: str) -> Optional[VariableInfo]: + try: + return self.locals[vname] + except KeyError: + return self.parent.find_variable(vname) if self.parent is not None else None + + def is_defined(self, vname) -> bool: + return self.find_variable(vname) is not None + + def is_local(self, vname: str) -> bool: + return vname in self.locals + + def clear(self): + self.children = [] + + def __len__(self): + return len(self.locals) \ No newline at end of file diff --git a/src/utils/serialize.py b/src/utils/serialize.py new file mode 100755 index 000000000..157fc39fb --- /dev/null +++ b/src/utils/serialize.py @@ -0,0 +1,41 @@ +import dill +from lexer.lexer import Lexer +from parsers.parser_lr1 import LR1Parser + +class DillLexer: + def __init__(self): + self.regEx = None + self.eof = None + self.lexer = None + + def Create(self, regEx, eof): + self.regEx = regEx + self.eof = eof + self.lexer = Lexer(self.regEx, self.eof) + + def Save(self): + with open('./serializedLexer', 'wb') as _lexer: + dill.dump(self.lexer, _lexer) + + def Load(self): + with open('./serializedLexer', 'rb') as _lexer: + self.lexer = dill.load(_lexer) + return self.lexer + +class DillParser: + def __init__(self): + self.Grammar = None + self.Parser = None + + def Create(self, grammar): + self.Grammar = grammar + self.Parser = LR1Parser(self.Grammar) + + def Save(self): + with open('./serializedParser', 'wb') as _parser: + dill.dump(self.Parser, _parser) + + def Load(self): + with open('./serializedParser', 'rb') as _parser: + self.Parser = dill.load(_parser) + return self.Parser \ No newline at end of file diff --git a/src/utils/utils.py b/src/utils/utils.py new file mode 100755 index 000000000..657710df1 --- /dev/null +++ b/src/utils/utils.py @@ -0,0 +1,258 @@ +from tools.pycompile import Production, Sentence, Symbol, EOF, Epsilon + +class TrieNode: + + def __init__(self, value, terminating=False): + self.value = value + self.children = {} + self.terminating = terminating + +class Trie: + + def __init__(self): + self.root = TrieNode(' ') + + def insert(self, sentence: Sentence): + root = self.root + for symbol in sentence: + if symbol not in root.children: + root.children[symbol] = TrieNode(symbol) + root = root.children[symbol] + root.terminating = True + + def search_prefix(self): + root = self.root + if len(root.children) == 1: + prefix = Sentence() + root = list(root.children.values())[0] + while True: + prefix += root.value + if len(root.children) > 1 or len(root.children) == 0: + break + root = list(root.children.values())[0] + if root.terminating: + return + return prefix + else: + return + +class ContainerSet: + def __init__(self, *values, contains_epsilon=False): + self.set = set(values) + self.contains_epsilon = contains_epsilon + + def add(self, value): + n = len(self.set) + self.set.add(value) + return n != len(self.set) + + def extend(self, values): + change = False + for value in values: + change |= self.add(value) + return change + + def set_epsilon(self, value=True): + last = self.contains_epsilon + self.contains_epsilon = value + return last != self.contains_epsilon + + def update(self, other): + n = len(self.set) + self.set.update(other.set) + return n != len(self.set) + + def epsilon_update(self, other): + return self.set_epsilon(self.contains_epsilon | other.contains_epsilon) + + def hard_update(self, other): + return self.update(other) | self.epsilon_update(other) + + def find_match(self, match): + for item in self.set: + if item == match: + return item + return None + + def __len__(self): + return len(self.set) + int(self.contains_epsilon) + + def __str__(self): + return '%s-%s' % (str(self.set), self.contains_epsilon) + + def __repr__(self): + return str(self) + + def __iter__(self): + return iter(self.set) + + def __nonzero__(self): + return len(self) > 0 + + def __eq__(self, other): + if isinstance(other, set): + return self.set == other + return isinstance(other, + ContainerSet) and self.set == other.set and self.contains_epsilon == other.contains_epsilon + +def inspect(item, grammar_name='G', mapper=None): + try: + return mapper[item] + except (TypeError, KeyError): + if isinstance(item, dict): + items = ',\n '.join( + f'{inspect(key, grammar_name, mapper)}: {inspect(value, grammar_name, mapper)}' for key, value in + item.items()) + return f'{{\n {items} \n}}' + elif isinstance(item, ContainerSet): + args = f'{", ".join(inspect(x, grammar_name, mapper) for x in item.set)} ,' if item.set else '' + return f'ContainerSet({args} contains_epsilon={item.contains_epsilon})' + elif isinstance(item, EOF): + return f'{grammar_name}.EOF' + elif isinstance(item, Epsilon): + return f'{grammar_name}.Epsilon' + elif isinstance(item, Symbol): + return f"G['{item.Name}']" + elif isinstance(item, Sentence): + items = ', '.join(inspect(s, grammar_name, mapper) for s in item._symbols) + return f'Sentence({items})' + elif isinstance(item, Production): + left = inspect(item.Left, grammar_name, mapper) + right = inspect(item.Right, grammar_name, mapper) + return f'Production({left}, {right})' + elif isinstance(item, tuple) or isinstance(item, list): + ctor = ('(', ')') if isinstance(item, tuple) else ('[', ']') + return f'{ctor[0]} {("%s, " * len(item)) % tuple(inspect(x, grammar_name, mapper) for x in item)}{ctor[1]}' + else: + raise ValueError(f'Invalid: {item}') + +def pprint(item, header=""): + if header: + print(header) + + if isinstance(item, dict): + for key, value in item.items(): + print(f'{key} ---> {value}') + elif isinstance(item, list): + print('[') + for x in item: + print(f' {repr(x)}') + print(']') + else: + print(item) + +class Token: + """ + Basic token class. + + Parameters + ---------- + lex : str + Token's lexeme. + token_type : Enum + Token's type. + """ + + def __init__(self, lex, token_type): + self.lex = lex + self.token_type = token_type + + def __str__(self): + return f'{self.token_type}: {self.lex}' + + def __repr__(self): + return str(self) + + @property + def is_valid(self): + return True + +class UnknownToken(Token): + def __init__(self, lex): + Token.__init__(self, lex, None) + + def transform_to(self, token_type): + return Token(self.lex, token_type) + + @property + def is_valid(self): + return False + +def tokenizer(G, fixed_tokens): + def decorate(func): + def tokenize_text(text): + tokens = [] + for lex in text.split(): + try: + token = fixed_tokens[lex] + except KeyError: + token = UnknownToken(lex) + try: + token = func(token) + except TypeError: + pass + tokens.append(token) + tokens.append(Token('$', G.EOF)) + return tokens + + if hasattr(func, '__call__'): + return tokenize_text + elif isinstance(func, str): + return tokenize_text(func) + else: + raise TypeError('Argument must be "str" or a callable object.') + + return decorate + +class DisjointSet: + def __init__(self, *items): + self.nodes = {x: DisjointNode(x) for x in items} + + def merge(self, items): + items = (self.nodes[x] for x in items) + try: + head, *others = items + for other in others: + head.merge(other) + except ValueError: + pass + + @property + def representatives(self): + return {n.representative for n in self.nodes.values()} + + @property + def groups(self): + return [[n for n in self.nodes.values() if n.representative == r] for r in self.representatives] + + def __len__(self): + return len(self.representatives) + + def __getitem__(self, item): + return self.nodes[item] + + def __str__(self): + return str(self.groups) + + def __repr__(self): + return str(self) + +class DisjointNode: + def __init__(self, value): + self.value = value + self.parent = self + + @property + def representative(self): + if self.parent != self: + self.parent = self.parent.representative + return self.parent + + def merge(self, other): + other.representative.parent = self.representative + + def __str__(self): + return str(self.value) + + def __repr__(self): + return str(self) \ No newline at end of file diff --git a/src/visitors/Builder.py b/src/visitors/Builder.py new file mode 100755 index 000000000..44177a108 --- /dev/null +++ b/src/visitors/Builder.py @@ -0,0 +1,239 @@ +from cool_ast.cool_ast import ProgramNode, ClassDeclarationNode, AttrDeclarationNode, FuncDeclarationNode +import visitors.visitor as visitor +from utils.semantic import Context, SemanticError, Type, ErrorType + + +class TypeBuilder: + def __init__(self, context, errors): + self.context = context + self.current_type = None + self.errors = errors + self.check_node = None + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + + _object = self.context.get_type('Object') + _int = self.context.get_type('Int') + _bool = self.context.get_type('Bool') + _string = self.context.get_type('String') + _io = self.context.get_type('IO') + _self = self.context.get_type('SELF_TYPE') + + _object.define_method('abort', [], [], _object) + _object.define_method('type_name', [], [], _string) + _object.define_method('copy', [], [], _self) + + _io.set_parent(_object) + _string.set_parent(_object) + _int.set_parent(_object) + _bool.set_parent(_object) + + _io.define_method('in_string', [], [], _string) + _io.define_method('out_string', ['x'], [_string], _self) + _io.define_method('in_int', [], [], _int) + _io.define_method('out_int', ['x'], [_int], _self) + + _string.define_method('length', [], [], _int) + _string.define_method('substr', ['index', 'length'], [_int, _int], _string) + _string.define_method('concat', ['str'], [_string], _string) + + + for declaration in node.declarations: + self.visit(declaration) + + self.check_node = Check_Node('Object') + + cyclicHeritage = self.CheckHeritageTree() + + if cyclicHeritage: + self.errors.append('CyclicError: Cyclic heritage is not allowed') + + types = self.context.types + main_type = None + for type in types.values(): + if 'Main' == type.name: + main_type = type + break + if main_type is not None: + methods = main_type.methods + main_method = None + for m in methods: + # if m.name == 'main' and len(m.param_names) == 0: + if m.name == 'main': + main_method = m + break + if main_method is None: + self.errors.append('MainTypeError: Type Main does not have a main method or the main method have params') + else: + self.errors.append("ProgramError: The program doesn't have a type Main") + + acker = OverrideACK(self.context,self.errors) + acker.visit(node) + + @visitor.when(ClassDeclarationNode) + def visit(self, node): + self.current_type = self.context.get_type(node.id) + + if node.parent is not None: + if node.parent in ("Int", "String", "Bool", "SELF_TYPE"): + self.errors.append(f'TypeError: Class {node.id} cannot inherits from {node.parent}' ) + try: + self.current_type.set_parent(self.context.get_type(node.parent)) + except SemanticError as e: + self.errors.append(e.text) + else: + self.current_type.set_parent(self.context.get_type('Object')) + + # self_attr = AttrDeclarationNode('self', self.current_type.name) + # self.visit(self_attr) + + for feature in node.features: + self.visit(feature) + + @visitor.when(AttrDeclarationNode) + def visit(self, node): + try: + t_attr = self.context.get_type(node.type) + except SemanticError as e: + self.errors.append(e.text) + t_attr = ErrorType() + try: + self.current_type.define_attribute(node.id, t_attr) + except SemanticError as e: + self.errors.append(e.text) + + @visitor.when(FuncDeclarationNode) + def visit(self, node): + param_names = [] + param_types = [] + for name, typex in node.params: + param_names.append(name) + try: + param_types.append(self.context.get_type(typex)) + except SemanticError as e: + param_types.append(ErrorType()) + self.errors.append(e.text) + + try: + return_type = self.context.get_type(node.type) + except SemanticError as e: + return_type = ErrorType() + self.errors.append(e.text) + + self.current_type.define_method(node.id, param_names, param_types, return_type) + +#################################################################### + def CheckHeritageTree(self): + def CheckCyclicHeritage(n): #n is root, idealmente n = Object + pending = [n] + visited = {} + while pending: + node = pending.pop() + try: + if visited[node]: + return True, visited + except KeyError: + visited[node] = True, visited + + pending.extend(node.adj) + return False, visited + + gNodes = self.BuildGraph(self.context.get_type('Object')) + + visited = {} + for n in gNodes: + visited[n] = False + + for n in gNodes: + if visited[n]: + continue + cycle, nVisited = CheckCyclicHeritage(n) + if cycle: + return True + for node in nVisited: + visited[node] = True + + return False + + def BuildGraph(self, rootType): + #esto no deberia lanzar excepcion, a menos que haya hecho mal el bfs o algo.... :D + _root = Check_Node(rootType.name) + + nodes = {} + nodes[_root.name] = _root + + # l = self.context.types.keys() + types = self.context.types + for t in types.values(): # no se puede heredar de int ni de bool, y object lo hice a mano + if t.name in ['Object']: + continue + try: + _node = nodes[t.name] + except: + _node = Check_Node(t.name) + nodes[t.name] = _node + if t.parent is not None and t.parent.name not in ['Bool', 'int']: + try: + nodes[t.parent.name].AddAdj(_node) + except KeyError: + parentNode = Check_Node(t.parent.name,[_node]) + nodes[t.parent.name] = parentNode + return nodes.values() + +class Check_Node: + def __init__(self, name, adjuntos = []): + self.name = name + self.adj = [] + for t in adjuntos: + self.adj.append(t) + + def AddAdj(self, node): + if node in self.adj: + raise Exception(f'{self.name} ya era adyacente a {node.name}') + self.adj.append(node) + +class OverrideACK: + def __init__(self, context, errors): + self.context = context + self.current_type = None + self.errors = errors + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + for declaration in node.declarations: + self.visit(declaration) + + @visitor.when(ClassDeclarationNode) + def visit(self, node): + nodeType = self.context.get_type(node.id) + self.current_type = nodeType + + for feature in node.features: + self.visit(feature) + + @visitor.when(AttrDeclarationNode) + def visit(self, node): + try: + attribute, owner = self.current_type.parent.get_attribute(node.id,self.current_type, False, True) + self.errors.append(f'The attribute {attribute.name} is already defined in {owner.name}') + except: + pass + + @visitor.when(FuncDeclarationNode) + def visit(self, node): + current_method = self.current_type.get_method(node.id, self.current_type, False) + try: + method, owner = self.current_type.parent.get_method(node.id, self.current_type, False, get_owner=True) + if method != current_method: + self.errors.append(f'Function {node.id} is already defined in {owner.name}.') + except: + pass \ No newline at end of file diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py new file mode 100755 index 000000000..b87d0e05d --- /dev/null +++ b/src/visitors/Checker.py @@ -0,0 +1,378 @@ +from cool_ast.cool_ast import * +from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo +import visitors.visitor as visitor + +class TypeChecker: + def __init__(self, context, errors, c_m = None, c_t = None): + self.context = context + self.errors = errors + + self.current_method = c_m + self.current_type = c_t + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode) + def visit(self, node, scope = None): + if scope is None: + scope = Scope() + + for declaration in node.declarations: + self.visit(declaration, scope.create_child()) + + return scope + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope): + self.current_type = self.context.get_type(node.id) + _char = node.id[0] + if _char not in ''.join(chr(n) for n in range(ord('A'),ord('Z')+1)): + self.errors.append((f'Class names must be capitalized')) + + attrs = [] + methods = [] + for feature in node.features: + if isinstance(feature,AttrDeclarationNode): + attrs.append(feature) + else: + methods.append(feature) + + for attr, owner in self.current_type.all_attributes(): #definir atributos de los ancestros + if owner != self.current_type: + scope.define_variable(attr.name, attr.type) + for attr in attrs: + self.visit(attr, scope) + + for method in methods: + self.visit(method, scope.create_child()) + + @visitor.when(FuncDeclarationNode) + def visit(self, node, scope): + self.current_method = self.current_type.get_method(node.id, self.current_type, False) + scope.define_variable('self', self.current_type) + _char = node.id[0] + if _char not in ''.join(chr(n) for n in range(ord('a'),ord('z')+1)): + self.errors.append((f'Class names must be capitalized')) + + # for param_name, param_type in zip(self.current_method.param_names, self.current_method.param_types): + for i in range(len(self.current_method.param_names)): + ithParamName = self.current_method.param_names[i] + ithParamType = self.current_method.param_types[i] + if not scope.is_local(ithParamName): + if ithParamType.name == 'SELF_TYPE': + self.errors.append('SELF_TYPE cannot be the type of a parameter.') + scope.define_variable(ithParamName, ErrorType()) + else: + scope.define_variable(ithParamName, self.context.get_type(ithParamType.name)) + else: + self.errors.append(f'Variable {ithParamName} is already defined in {self.current_method.name}.') + + if node.type != 'SELF_TYPE': + rType = self.context.get_type(node.type) + else: + rType = self.current_type + + exprType = self.visit(node.body, scope) + + if not exprType.conforms_to(rType): + self.errors.append(f'{exprType.name} does not conform {rType.name}.') + + @visitor.when(ConditionalNode) + def visit(self, node, scope): + ifT = self.visit(node.ifChunk, scope) + thenT = self.visit(node.thenChunk, scope) + elseT = self.visit(node.elseChunk, scope) + + if ifT != self.context.get_type('Bool'): + self.errors.append(f"Can't convert {ifT.name} to Bool.") + return thenT.join(elseT) + + @visitor.when(LetInNode) + def visit(self, node, scope): + for nod in node.decl_list: + _id = nod.id + _t = nod.type + _e = nod.expr + + try: + if _t != 'SELF_TYPE': + var_type = self.context.get_type(_t) + else: + var_type = self.current_type + except SemanticError as e: + self.errors.append(e.text) + var_type = ErrorType() + + if scope.is_local(_id): + self.errors.append(f'Variable {_id} is already defined in {self.current_method.name}.') + else: + scope.define_variable(_id, var_type) + + if _e is not None: + expr = self.visit(_e, scope.create_child()) + else: + expr = None + if expr is not None and not expr.conforms_to(var_type): + self.errors.append(f"Can't convert {expr.name} to {var_type.name}.") + + return self.visit(node.expression, scope.create_child()) + + @visitor.when(AttrDeclarationNode) + def visit(self, node, scope): + if node.id == 'self': + self.errors.append('"self" cannot be an attribute.') + + _char = node.id[0] + + if _char not in ''.join(chr(n) for n in range(ord('a'),ord('z')+1)): + self.errors.append((f'Attribute names must not be capitalized')) + + if node.type != 'SELF_TYPE': + attrType = self.context.get_type(node.type) + else: + attrType = self.current_type + + if node.value is not None: + value_t = self.visit(node.value, scope.create_child()) + if not value_t.conforms_to(attrType): + self.errors.append(f"Can't convert {value_t.name} to {attrType.name}.") + + scope.define_variable(node.id, attrType) + + @visitor.when(AssignNode) + def visit(self, node, scope): + var_info = scope.find_variable(node.id) + + exprType = self.visit(node.expr, scope.create_child()) + + if var_info is None: + self.errors.append(f'Undefined variable {node.id} in {self.current_method.name}.') + else: + if not exprType.conforms_to(var_info.type): + self.errors.append(f"Can't convert {exprType.name} to {var_info.name}.") + + return exprType + + @visitor.when(WhileNode) + def visit(self, node, scope): + condition = self.visit(node.condition, scope) + if condition != self.context.get_type('Bool'): + self.errors.append(f"Can't convert {condition.name} to Bool.") + + self.visit(node.loopChunk, scope.create_child()) + return self.context.get_type('Object') + + @visitor.when(ChunkNode) + def visit(self, node, scope): + child_scope = scope.create_child() + return_type = ErrorType() + + for expr in node.chunk: + return_type = self.visit(expr, child_scope) + return return_type + + @visitor.when(SwitchCaseNode) + def visit(self, node, scope): + self.visit(node.expr, scope) + types = [] + for i, t, e in node.case_list: + child_scope = scope.create_child() + try: + if t != 'SELF_TYPE': + child_scope.define_variable(i, self.context.get_type(t)) + else: + self.errors.append(f'SELF_TYPE is not valid as the type of a case branch.') + except SemanticError as e: + child_scope.define_variable(i, ErrorType()) + self.errors.append(e.text) + + types.append(self.visit(e, child_scope)) + + return Type.multi_join(types) + + + @visitor.when(PlusNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + intType = self.context.get_type('Int') + + if lt == rt == intType: + return intType + self.errors.append(f'Undefined operation "+" between {lt.name} and {rt.name}.') + return ErrorType() + + @visitor.when(MinusNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + intType = self.context.get_type('Int') + + if lt == rt == intType: + return intType + self.errors.append(f'Undefined operation "-" between {lt.name} and {rt.name}.') + return ErrorType() + + @visitor.when(StarNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + intType = self.context.get_type('Int') + + if lt == rt == intType: + return intType + self.errors.append(f'Undefined operation "*" between {lt.name} and {rt.name}.') + return ErrorType() + + @visitor.when(DivNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + intType = self.context.get_type('Int') + + if lt == rt == intType: + return intType + self.errors.append(f'Undefined operation "/" between {lt.name} and {rt.name}.') + return ErrorType() + + @visitor.when(CallNode) + def visit(self, node, scope): + if node.obj is None: + node.obj = VariableNode('self') + obj_type = self.visit(node.obj, scope) + + if node.parent is not None: + try: + ancestor_type = self.context.get_type(node.parent) + except SemanticError as e: + ancestor_type = ErrorType() + self.errors.append(e.text) + + if not obj_type.conforms_to(ancestor_type): + self.errors.append(f'{obj_type.name} does not inherits from {ancestor_type.name}.') + else: + ancestor_type = obj_type + + try: + method = ancestor_type.get_method(node.method, self.current_type, False) + except SemanticError as e: + self.errors.append(e.text) + for arg in node.args: + self.visit(arg, scope) + return ErrorType() + + if len(node.args) != len(method.param_names): + self.errors.append(f'Function {method.name} is already defined in {obj_type.name}.') + + for i, arg in enumerate(node.args): + arg_type = self.visit(arg, scope) + if not arg_type.conforms_to(method.param_types[i]): + self.errors.append(f"Can't convert {arg_type.name} to {method.param_types[i].name}.") + + if method.return_type.name != 'SELF_TYPE': + return method.return_type + else: + return ancestor_type + + @visitor.when(ConstantNumNode) + def visit(self, node, scope): + return self.context.get_type('Int') + + @visitor.when(StringNode) + def visit(self, node, scope): + return self.context.get_type('String') + + @visitor.when(TrueNode) + def visit(self, node, scope): + return self.context.get_type('Bool') + + @visitor.when(FalseNode) + def visit(self, node, scope): + return self.context.get_type('Bool') + + @visitor.when(VariableNode) + def visit(self, node, scope): + if node.lex == 'self': + variable = VariableInfo('self', self.current_type) + else: + variable = scope.find_variable(node.lex) + if variable is None: + _var = self.current_type.get_attribute(node.lex, self.current_type, False) + _var = VariableInfo(_var.name, _var.type) + if variable is None: + self.errors.append(f'Variable {node.lex} is not defined in {self.current_method.name}.') + return ErrorType() + return variable.type + + @visitor.when(InstantiateNode) + def visit(self, node, scope): + try: + if node.lex != 'SELF_TYPE': + return self.context.get_type(node.lex) + else: + return self.current_type + except SemanticError as e: + self.errors.append(e.text) + return ErrorType() + + @visitor.when(NotNode) + def visit(self, node, scope): + tp = self.visit(node.expression, scope) + if tp == self.context.get_type('Bool'): + return tp + self.errors.append(f'Undefined operation "not" for {tp.name}.') + return ErrorType() + + @visitor.when(ComplementNode) + def visit(self, node, scope): + tp = self.visit(node.expr, scope) + if tp == self.context.get_type('Int'): + return tp + self.errors.append(f'Undefined operation "~" for {tp.name}.') + return ErrorType() + + @visitor.when(IsVoidNode) + def visit(self, node, scope): + self.visit(node.method, scope) + return self.context.get_type('Bool') + + @visitor.when(LeqNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + intType = self.context.get_type('Int') + boolType = self.context.get_type('Bool') + + if lt == rt == intType: + return boolType + self.errors.append(f'Undefined operation "<=" for {lt.name} and {rt.name}.') + return ErrorType() + + @visitor.when(LessNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + intType = self.context.get_type('Int') + boolType = self.context.get_type('Bool') + if lt == rt == intType: + return boolType + self.errors.append(f'Undefined operation "<" for {lt.name} and {rt.name}.') + return ErrorType() + + @visitor.when(EqualNode) + def visit(self, node, scope): + lt = self.visit(node.left, scope) + rt = self.visit(node.right, scope) + + if lt == rt: + return self.context.get_type('Bool') + self.errors.append(f'Operation "=" is only defined between objects of the same type.') + return ErrorType() \ No newline at end of file diff --git a/src/visitors/Collector.py b/src/visitors/Collector.py new file mode 100755 index 000000000..2183743d2 --- /dev/null +++ b/src/visitors/Collector.py @@ -0,0 +1,33 @@ +from cool_ast.cool_ast import ProgramNode, ClassDeclarationNode +import visitors.visitor as visitor +from utils.semantic import Context, SemanticError + + +class TypeCollector: + def __init__(self, context = Context(), errors = []): + self.errors = errors + self.context = context + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + self.context.create_type('Object') + self.context.create_type('Int') + self.context.create_type('Bool') + self.context.create_type('String') + self.context.create_type('IO') + self.context.create_type('SELF_TYPE') + self.context.create_type('AUTO_TYPE') + + for declaration in node.declarations: + self.visit(declaration) + + @visitor.when(ClassDeclarationNode) + def visit(self, node): + try: + self.context.create_type(node.id) + except SemanticError as e: + self.errors.append(e.text) \ No newline at end of file diff --git a/src/visitors/Depicter.py b/src/visitors/Depicter.py new file mode 100755 index 000000000..36382ec46 --- /dev/null +++ b/src/visitors/Depicter.py @@ -0,0 +1,177 @@ +import visitors.visitor as visitor +from cool_ast.cool_ast import ProgramNode, ClassDeclarationNode, AttrDeclarationNode, FuncDeclarationNode, LetInNode +from cool_ast.cool_ast import AssignNode, ChunkNode, ConditionalNode, WhileNode, SwitchCaseNode, CallNode +from cool_ast.cool_ast import PlusNode, MinusNode, StarNode, DivNode, LeqNode, LessNode, EqualNode, NotNode +from cool_ast.cool_ast import ComplementNode, IsVoidNode, AtomicNode, InstantiateNode, BinaryNode + +class Depicter(object): + @visitor.on('node') + def visit(self, node, tabs): + pass + + @visitor.when(ProgramNode) + def visit(self, node, tabs = 0): + return '\n\n'.join(self.visit(dec, tabs) for dec in node.declarations) + + @visitor.when(ClassDeclarationNode) + def visit(self, node, tabs = 0): + par = '' if node.parent is None else f"inherits {node.parent}" + depiction = f'class {node.id} {par} {{\n' + '\n'.join(self.visit(feature, tabs + 1) for feature in node.features) + '\n};' + return (depiction) + + @visitor.when(AttrDeclarationNode) + def visit(self, node, tabs = 0): + value = f' <- {self.visit(node.value, 0)}' if node.value else '' + depiction = ' ' * tabs + f'{node.id}: {node.type}{value}' + return depiction + + @visitor.when(FuncDeclarationNode) + def visit(self, node, tabs = 0): + params = ', '.join(': '.join(param) for param in node.params) + header = ' ' * tabs + f'{node.id} ({params}): {node.type}' + body = self.visit(node.body, tabs + 1) + depiction = f'{header} {{\n{body}\n }};' + return depiction + + @visitor.when(ChunkNode) + def visit(self, node, tabs = 0): + exprs = '' + for smth in node.chunk: + to_concat = self.visit(smth, tabs + 1) + exprs += to_concat + exprs += ';\n' + depiction = ' ' * tabs + f'{{\n{exprs}\n' + ' ' * tabs + '};' + return depiction + + @visitor.when(AssignNode) + def visit(self, node, tabs = 0): + depiction = ' ' * tabs + f'{node.id} <- {self.visit(node.expr)}' + return depiction + + @visitor.when(ConditionalNode) + def visit(self, node, tabs = 0): + if_expr = self.visit(node.ifChunk, 0)# + then_expr = self.visit(node.thenChunk, tabs + 1) + else_expr = self.visit(node.elseChunk, tabs + 1) + # depiction = ' ' * tabs + f'if {if_expr}\n' + ' ' * tabs + f'then\n{then_expr}\n' + ' ' * tabs + f'else\n{else_expr}\n' + ' ' * tabs + 'fi' + depiction = ' ' * tabs + f'if {if_expr} then\n' + f'{then_expr}\n' + ' ' * tabs + f'else\n{else_expr}\n' + ' ' * tabs + 'fi' + return depiction + + @visitor.when(LetInNode) + def visit(self, node, tabs = 0): + decls = [] + for decl in node.decl_list: + _id = decl.id + _type = decl.type + _val = decl.expr + if _val is not None: + decls.append(f'{_id}: {_type} <- {self.visit(_val)}') + else: + decls.append(f'{_id} : {_type}') + decls = ('\n' + ' ' * (tabs + 1)).join(decls) + depiction = ' ' * tabs + f'let {decls} in \n{self.visit(node.expression, tabs + 1)}' + return depiction + + @visitor.when(WhileNode) + def visit(self, node, tabs = 0): + _cond = self.visit(node.condition, 0) + _loop = self.visit(node.loopChunk, tabs + 1) + depiction = ' ' * tabs + f'while {_cond} loop\n {_loop}\n' + ' ' * tabs + 'pool' + return depiction + + @visitor.when(SwitchCaseNode) + def visit(self, node, tabs = 0): + _case_list = [] + for case in node.case_list: + _id = case[0] + _type = case[1] + _expr = case[2] + expr = self.visit(_expr, tabs + 2) + _case_list.append(' ' * (tabs + 1) + f'{_id} : {_type} =>\n{expr};') + expr = self.visit(node.expr) + _case_list = '\n'.join(_case_list) + depiction = ' ' * tabs + f'case {expr} of \n{_case_list}\n' + ' ' * tabs + 'esac' + return depiction + + @visitor.when(CallNode) + def visit(self, node, tabs = 0): + _id = f'{self.visit(node.obj, 0)}.' if node.obj is not None else '' + depiction = ' ' * tabs + f'{_id}{node.method}({", ".join(self.visit(arg, 0) for arg in node.args)})' + return depiction + + @visitor.when(NotNode) + def visit(self, node, tabs = 0): + expr = self.visit(node.expression) + depiction = f'Not {expr}' + return depiction + + @visitor.when(InstantiateNode) + def visit(self, node, tabs = 0): + depiction = ' ' * tabs + f'new {node.lex}' + return depiction + + @visitor.when(IsVoidNode) + def visit(self, node, tabs = 0): + expr = self.visit(node.method) + depiction = f'IsVoid({expr})' + return depiction + + @visitor.when(ComplementNode) + def visit(self, node, tabs = 0): + expr = self.visit(node.expr) + depiction = f'~ {expr}' + return depiction + + @visitor.when(AtomicNode) + def visit(self, node, tabs = 0): + depiction = ' ' * tabs + f'{node.lex}' + return depiction + + @visitor.when(EqualNode) + def visit(self, node, tabs = 0): + l = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + r = self.visit(node.right) + depiction = f'{l} = {r}' + return depiction + + @visitor.when(PlusNode) + def visit(self, node, tabs = 0): + left = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + right = self.visit(node.right) + depiction = f'{left} + {right}' + return depiction + + @visitor.when(MinusNode) + def visit(self, node, tabs = 0): + left = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + right = self.visit(node.right) + depiction = f'{left} - {right}' + return depiction + + @visitor.when(StarNode) + def visit(self, node, tabs = 0): + left = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + right = self.visit(node.right) + depiction = f'{left} * {right}' + return depiction + + @visitor.when(DivNode) + def visit(self, node, tabs = 0): + left = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + right = self.visit(node.right) + depiction = f'{left} / {right}' + return depiction + + @visitor.when(LessNode) + def visit(self, node, tabs = 0): + left = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + right = self.visit(node.right) + depiction = f'{left} < {right}' + return depiction + + @visitor.when(LeqNode) + def visit(self, node, tabs = 0): + left = self.visit(node.left) if isinstance(node.left, BinaryNode) else self.visit(node.left, tabs) + right = self.visit(node.right) + depiction = f'{left} <= {right}' + return depiction diff --git a/src/visitors/Executor.py b/src/visitors/Executor.py new file mode 100755 index 000000000..e37f2cf10 --- /dev/null +++ b/src/visitors/Executor.py @@ -0,0 +1,365 @@ +from cool_ast.cool_ast import * +from typing import List, Dict +import visitors.visitor as visitor +from utils.semantic import Context, Type, Method, Scope +from typing import Any +from utils.exceptions import RuntimeException + +class Pod: + def __init__(self, typex, value = None): + if value is None: + value = id(self) + + self.type = typex + self.value = value + self.attr = {} + + def set_attribute(self, name, value): + self.attr[name] = value + + def get_attribute(self, name): + return self.attr[name] + + def get_method(self, name, typex, visited): + return self.type.get_method(name, typex, visited) + + def __str__(self): + return f'{self.type.name}: {self.value}' + +def type_name(obj, context): + return Pod(context.get_type('String'), obj.type.name) + +def out_string(obj, s, context): + print(s.value, end='') + return obj + +def out_int(obj, s, context): + print(s.value, end='') + return obj + +def in_string(obj, context): + return Pod(context.get_type('Int'), input()) + +def in_int(obj, context): + return Pod(context.get_type('Int'), int(input())) + +def ocopy(obj, context) -> None: + x_copy = Pod(obj.type, obj.value if obj.type.name in ('Int', 'String', 'Bool') else None) + x_copy.attr_values = obj.attr_values + return x_copy + +def length(obj, context): + return Pod(context.get_type('Int'), len(obj.value)) + +def concat(obj, s, context): + return Pod(context.get_type('String'), obj.value + s.value) + +def substr(obj, i, l, context): + return Pod(context.get_type('String'), obj.value[i.value: i.value + l.value]) + +def abort(obj, context): + print('Aborting execution') + exit() + +cl_baseline = { + ('Object', 'type_name'): type_name, + ('Object', 'abort'): abort, + ('Object', 'copy'): ocopy, + ('IO', 'out_int'): out_int, + ('IO', 'out_string'): out_string, + ('IO', 'in_string'): in_string, + ('IO', 'in_int'): in_int, + ('String', 'concat'): concat, + ('String', 'substr'): substr, + ('String', 'length'): length +} + +class Executor: + def __init__(self, context: Context): + self.context: Context = context + self.currentType = None + self.currentPod = None + self.stack = [] + + @visitor.on('node') + def visit(self, node, tabs): + pass + + @visitor.when(ProgramNode) + def visit(self, node, scope): + for declaration in node.declarations: + self.visit(declaration, None) + + main_callnode = CallNode('main', [], InstantiateNode('Main')) + self.visit(main_callnode, scope) + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope): + self.currentType = self.context.get_type(node.id) + + attrs = [f for f in node.features if isinstance(f, AttrDeclarationNode)] + methods = [f for f in node.features if isinstance(f, FuncDeclarationNode)] + + for attr in attrs: + self.visit(attr, None) + + for method in methods: + self.visit(method, None) + + @visitor.when(AttrDeclarationNode) + def visit(self, node, scope): + self.currentType.get_attribute(node.id, self.currentType, False).expr = node.value + + @visitor.when(FuncDeclarationNode) + def visit(self, node, scope): + self.currentType.get_method(node.id, self.currentType, False).expr = node.body + + @visitor.when(CallNode) + def visit(self, node, scope): + token = self.visit(node.obj, scope) + + if isinstance(token, VoidPod): + raise RuntimeException('Reference to an instance of a void object.') + + _o = self.context.get_type('Object') + _s = self.context.get_type('String') + _io = self.context.get_type('IO') + + if token.type.conforms_to(_o) and (_o.name, node.method) in cl_baseline: + args = (token,) + tuple(self.visit(arg, scope) for arg in node.args) + (self.context,) + return cl_baseline[_o.name, node.method](*args) + + if token.type.conforms_to(_s) and (_s.name, node.method) in cl_baseline: + args = (token,) + tuple(self.visit(arg, scope) for arg in node.args) + (self.context,) + return cl_baseline[_s.name, node.method](*args) + + if token.type.conforms_to(_io) and (_io.name, node.method) in cl_baseline: + args = (token,) + tuple(self.visit(arg, scope) for arg in node.args) + (self.context,) + return cl_baseline[_io.name, node.method](*args) + + #si es una instantiate.f() meter en el scope hijo todos sus atributos + _funcCall_scope = Scope() + #para el caso a@b.f() + if not node.parent is None: + parent_t = self.context.get_type(node.parent) + method = parent_t.get_method(node.method, parent_t, False) + else: + method = token.get_method(node.method, self.currentType, False) + + for _id, _t, _arg in zip(method.param_names, method.param_types, node.args): + _funcCall_scope.define_variable(_id, _t).token = self.visit(_arg, scope) + + + _funcCall_scope.define_variable('self', token.type).token = token + # atrbs = [] + # if node.obj.lex != 'self': + # for attr in token.attr_values.keys(): + # if scope.is_local(attr): + # pass + # else: + # child_scope.define_variable(attr, token.attr_values[attr].type).token = token.attr_values[attr] + # atrbs.append(attr) + self.stack.append(self.currentPod) + self.currentPod = token + + result = self.visit(method.expr, _funcCall_scope) + + # for name in atrbs: + # token.attr_values[name] = child_scope.find_variable(name).token + + self.currentPod = self.stack.pop() + return result + + @visitor.when(LetInNode) + def visit(self, node, scope): + a = 0 + + for nod in node.decl_list: + _id = nod.id + _t = nod.type + _expr = nod.expr + if _t in ['Int', 'String', 'Bool'] and _expr is None: + tempNode = InstantiateNode(_t) + token = self.visit(tempNode, scope) + else: + if _expr is not None: + token = self.visit(_expr, scope.create_child()) + else: + token = VoidPod() + + if isinstance(token, VoidPod): + try: + token.type = self.context.get_type(_t) + except: + pass + scope.define_variable(_id, token.type).token = token + + return self.visit(node.expression, scope.create_child()) + + @visitor.when(AssignNode) + def visit(self, node, scope): + variable_info = scope.find_variable(node.id) + if variable_info is None: + token = self.visit(node.expr, scope) + attr = self.currentPod.get_attribute(node.id) + self.currentPod.set_attribute(node.id, token) + return token + + variable_info.token = self.visit(node.expr, scope) + return variable_info.token + + @visitor.when(VariableNode) + def visit(self, node, scope): + if node.lex == 'self': + return self.currentPod + + variable_info = scope.find_variable(node.lex) + + if variable_info is not None and not isinstance(variable_info.token, VoidPod): + return variable_info.token + try: + return self.currentPod.get_attribute(node.lex) + except: + return variable_info.token + + @visitor.when(InstantiateNode) + def visit(self, node, scope): + start_value = None + if node.lex == 'Int': + start_value = 0 + elif node.lex == 'Bool': + start_value = False + elif node.lex == 'String': + start_value = '' + + token = Pod(self.context.get_type(node.lex), start_value) + + self.stack.append(self.currentPod) + self.currentPod = token + for attr, _t in token.type.all_attributes(): + if attr.expr is not None: + attr_token = self.visit(attr.expr, scope) + else: + attr_token = VoidPod() + # scope.define_variable(attr.name, attr.type).token = attr_token + self.currentPod.set_attribute(attr.name, attr_token) + self.currentPod = self.stack.pop() + return token + + @visitor.when(ChunkNode) + def visit(self, node, scope): + child_scope = scope.create_child() + token = None + for expr in node.chunk: + token = self.visit(expr, child_scope) + return token + + @visitor.when(ConditionalNode) + def visit(self, node, scope): + if_token = self.visit(node.ifChunk, scope) + + if if_token.value: + return self.visit(node.thenChunk, scope.create_child()) + + return self.visit(node.elseChunk, scope.create_child()) + + @visitor.when(EqualNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), self.visit(node.left, scope).value == self.visit(node.right, scope).value) + + @visitor.when(LeqNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), self.visit(node.left, scope).value <= self.visit(node.right, scope).value) + + @visitor.when(LessNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), self.visit(node.left, scope).value < self.visit(node.right, scope).value) + + @visitor.when(SwitchCaseNode) + def visit(self, node, scope): + token = self.visit(node.expr, scope) + + if isinstance(token, VoidPod): + raise RuntimeException('Reference to an instance of a void object.') + + types = [(i, self.context.get_type(t)) for i, (_, t, _) in enumerate(node.case_list) + if token.type.conforms_to(self.context.get_type(t))] + + if len(types) == 0: + raise RuntimeException('NotTypeFoundError: None of the types were valid') + + (index, temp) = types[0] + for i, t in types: + if t.conforms_to(temp): + index, temp = i, t + + child_scope = scope.create_child() + _id, _t, _e = node.case_list[index] + child_scope.define_variable(_id, self.context.get_type(_t)).token = token + return self.visit(_e, child_scope) + + @visitor.when(WhileNode) + def visit(self, node, scope): + # if isinstance(node.condition, ConditionalNode) and isinstance(node.condition.ifChunk, CallNode): + a = 0 + while self.visit(node.condition, scope).value: + self.visit(node.loopChunk, scope.create_child()) + + return VoidPod() + + @visitor.when(ConstantNumNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Int'), int(node.lex)) + + @visitor.when(StringNode) + def visit(self, node, scope): + return Pod(self.context.get_type('String'), str(node.lex[1:-1].replace('\\n', '\n')).replace('\\t', '\t')) + + @visitor.when(TrueNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), True) + + @visitor.when(FalseNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), False) + + @visitor.when(PlusNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Int'), self.visit(node.left, scope).value + self.visit(node.right, scope).value) + + @visitor.when(MinusNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Int'), self.visit(node.left, scope).value - self.visit(node.right, scope).value) + + @visitor.when(StarNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Int'), self.visit(node.left, scope).value * self.visit(node.right, scope).value) + + @visitor.when(DivNode) + def visit(self, node, scope): + try: + return Pod(self.context.get_type('Int'), self.visit(node.left, scope).value // self.visit(node.right, scope).value) + except ZeroDivisionError as err: + raise RuntimeException('Runtime exception: ' + err.args[0]) + + @visitor.when(NotNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), not self.visit(node.expression, scope).value) + + @visitor.when(IsVoidNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Bool'), isinstance(self.visit(node.method, scope), VoidPod)) + + @visitor.when(ComplementNode) + def visit(self, node, scope): + return Pod(self.context.get_type('Int'), ~ self.visit(node.expression, scope).value) + + +## +class VoidPod(Pod): + def __init__(self): + super(VoidPod, self).__init__(None, None) + # raise Exception('hola worl') + + def __eq__(self, cousin): + return isinstance(cousin, VoidPod) \ No newline at end of file diff --git a/src/visitors/visitor.py b/src/visitors/visitor.py new file mode 100755 index 000000000..36d3e5d23 --- /dev/null +++ b/src/visitors/visitor.py @@ -0,0 +1,78 @@ +# 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) \ No newline at end of file From 05dafe943c597bd969d7e3992f4d574a6a7cc01a Mon Sep 17 00:00:00 2001 From: regnod Date: Fri, 6 Aug 2021 15:32:12 -0400 Subject: [PATCH 09/93] finishing semantics --- src/c_parser/parser.py | 242 ++++++++++++-- src/c_parser/parsetab.py | 112 +++---- src/lexer/lexer.py | 159 +++++++--- src/main.py | 10 +- src/pipeline.py | 11 +- src/utils/errors.py | 8 +- src/utils/semantic.py | 1 + src/visitors/Builder.py | 72 ++++- src/visitors/Checker.py | 144 ++++++--- src/visitors/Collector.py | 10 +- src/visitors/Inferencer.py | 577 ++++++++++++++++++++++++++++++++++ tests/semantic/arithmetic5.cl | 2 +- tests/semantic/arithmetic9.cl | 2 +- tests/semantic/let1.cl | 6 +- tests/semantic/let2.cl | 2 +- tests/semantic/let3.cl | 2 +- tests/semantic/methods4.cl | 2 +- 17 files changed, 1172 insertions(+), 190 deletions(-) create mode 100755 src/visitors/Inferencer.py diff --git a/src/c_parser/parser.py b/src/c_parser/parser.py index 81d2af877..b96269e47 100644 --- a/src/c_parser/parser.py +++ b/src/c_parser/parser.py @@ -3,20 +3,20 @@ from cool_ast.cool_ast import * import ply.yacc as yacc import ply.lex as lt -from utils.errors import SyntacticError +from utils.errors import _SyntacticError coolLexer = lexer.CoolLexer() tokens = _tokens precedence = ( - ( 'nonassoc', 'dot' ), - ( 'nonassoc', 'arroba'), - ( 'nonassoc', 'complement'), - ( 'nonassoc', 'isvoid'), - ( 'left', 'star', 'div'), - ( 'left', 'plus', 'minus'), - ( 'nonnasoc', 'leq', 'lneq', 'equal'), + ( 'nonassoc', 'assignArrow'), ( 'left', 'not'), - ( 'nonassoc', 'assignArrow') + ( 'nonassoc', 'leq', 'lneq', 'equal'), + ( 'left', 'plus', 'minus'), + ( 'left', 'star', 'div'), + ( 'nonassoc', 'isvoid'), + ( 'nonassoc', 'complement'), + ( 'nonassoc', 'arroba'), + ( 'nonassoc', 'dot' ) ) errors = [] class CoolParser: @@ -29,10 +29,20 @@ def parse(self, lexer, program): ast = self.parser.parse(program) self.errors = errors return ast - + + def find_column(input, token): + line_start = input.rfind('\n', 0, token.lexpos) + 1 + return (token.lexpos - line_start) + 1 + def p_program(p): 'program : class_list' p[0] = ProgramNode(p[1]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_class_list(p): @@ -50,9 +60,21 @@ def p_def_class(p): ''' if len(p) == 7: p[0] = ClassDeclarationNode(p[2], p[4]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = ClassDeclarationNode(p[2], p[6], p[4]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_feature_list_attr(p): @@ -87,14 +109,32 @@ def p_def_attr(p): ''' if len(p) == 5: p[0] = AttrDeclarationNode(p[1], p[3]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = AttrDeclarationNode(p[1],p[3],p[5]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_def_func(p): 'def_func : id opar arg_list cpar colon type ocur expr ccur semi' p[0] = FuncDeclarationNode(p[1],p[3],p[6],p[8]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_arg_list(p): @@ -149,6 +189,12 @@ def p_chunk(p): def p_expr_assign(p): 'expr : id assignArrow expr' p[0] = AssignNode(p[1],p[3]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_call(p): @@ -158,47 +204,109 @@ def p_expr_call(p): ''' if len(p) == 7: p[0] = CallNode(p[3], p[5], p[1]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] elif len(p) == 9: p[0] = CallNode(p[5], p[7], p[1], p[3]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = CallNode(p[1], p[3]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_if(p): 'expr : if expr then expr else expr fi' p[0] = ConditionalNode(p[2],p[4],p[6]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_while(p): 'expr : while expr loop expr pool' p[0] = WhileNode(p[2], p[4]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_chunk(p): 'expr : ocur chunk ccur' p[0] = ChunkNode(p[2]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_let(p): 'expr : let decl_list in expr' p[0] = LetInNode(p[2],p[4]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_case(p): 'expr : case expr of case_list esac' p[0] = SwitchCaseNode(p[2],p[4]) + a = p[4] + b = p[2] + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_instantiate(p): 'expr : new type' p[0] = InstantiateNode(p[2]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_isvoid(p): 'expr : isvoid expr' p[0] = IsVoidNode(p[2]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_bin1(p): @@ -207,9 +315,23 @@ def p_expr_bin1(p): ''' if p[2] == '+': p[0] = PlusNode(p[1], p[3]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # a= p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + # b = p.lexer.lexdata + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = MinusNode(p[1], p[3]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_bin2(p): @@ -218,9 +340,21 @@ def p_expr_bin2(p): ''' if p[2] == '*': p[0] = StarNode(p[1], p[3]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = DivNode(p[1], p[3]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_bin3(p): @@ -230,12 +364,30 @@ def p_expr_bin3(p): ''' if p[2] == '=': p[0] = EqualNode(p[1],p[3]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] - elif p[3] == '=': + elif p[2] == '<=': p[0] = LeqNode(p[1], p[3]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = LessNode(p[1], p[3]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_unary(p): @@ -244,9 +396,21 @@ def p_expr_unary(p): ''' if p[1] == '~': p[0] = ComplementNode(p[2]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = NotNode(p[2]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_par(p): @@ -256,16 +420,34 @@ def p_expr_par(p): def p_expr_id(p): 'expr : id' p[0] = VariableNode(p[1]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_int(p): 'expr : number' p[0] = ConstantNumNode(p[1]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_string(p): 'expr : string' p[0] = StringNode(p[1]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_boolean(p): @@ -273,9 +455,21 @@ def p_expr_boolean(p): | false''' if p[1] == 'true': p[0] = TrueNode(p[1]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = FalseNode(p[1]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_decl_list(p): @@ -292,9 +486,21 @@ def p_decl(p): ''' if len(p) == 4: p[0] = VarDeclarationNode(p[1], p[3]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = VarDeclarationNode(p[1], p[3], p[5]) + # token_list = [] + # for sl in p.slice: + # if type(lt.LexToken()) == type(sl): + # token_list.append(sl) + # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) + # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_case_list(p): @@ -302,16 +508,16 @@ def p_case_list(p): | id colon type rArrow expr semi case_list ''' if len(p) == 7: - p[0] = [(p[1], p[3], p[5])] + p[0] = [(p[1], p[3], p[5], [sl for sl in p.slice if type(lt.LexToken()) == type(sl)])] else: - p[0] = [(p[1], p[3], p[5], p[7])] + # p[0] = [(p[1], p[3], p[5], p[7])] + a = p[3] + p[0] = [(p[1], p[3], p[5], [sl for sl in p.slice if type(lt.LexToken()) == type(sl)])]+ p[7] # Compute column. # input is the input text string # token is a token instance - def find_column(input, token): - line_start = input.rfind('\n', 0, token.lexpos) + 1 - return (token.lexpos - line_start) + 1 #parentesis? + #parentesis? def p_error(p): global errors @@ -324,9 +530,9 @@ def find_column(input, token): return token_column = find_column(p.lexer.lexdata, p) - errors.append(SyntacticError % (p.lineno, token_column, p.value)) + errors.append(_SyntacticError % (p.lineno, token_column, p.value)) # print(SyntacticError % (p.lineno, token_column, p.value)) # print(f'({p.lineno}, {token_column}) - SyntacticError: ERROR at or near "{p.value}"') - a=0 + parser = yacc.yacc(debug = True) diff --git a/src/c_parser/parsetab.py b/src/c_parser/parsetab.py index 3688fe254..54289eed6 100644 --- a/src/c_parser/parsetab.py +++ b/src/c_parser/parsetab.py @@ -6,9 +6,9 @@ _lr_method = 'LALR' -_lr_signature = 'nonassocdotnonassocarrobanonassoccomplementnonassocisvoidleftstardivleftplusminusnonnasocleqlneqequalleftnotnonassocassignArrowarroba assignArrow case ccur chunkComment class colon comma complement cpar div dot else equal esac false fi id if in inherits isvoid leq let lineComment lneq loop minus new newline not number ocur of opar plus pool rArrow semi space star string tab then true type whileprogram : class_listclass_list : def_class\n | def_class class_list\n def_class : class type ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur semi\n feature_list : def_attr feature_list\n | def_func feature_list\n | \n def_attr : id colon type semi\n | id colon type assignArrow expr semi\n def_func : id opar arg_list cpar colon type ocur expr ccur semiarg_list : non_empty_arg_list\n | \n non_empty_arg_list : arg\n | arg comma non_empty_arg_list\n arg : id colon typeparam_list : expr_list\n | \n expr_list : expr\n | expr comma expr_list\n chunk : expr semi\n | expr semi chunk\n expr : id assignArrow exprexpr : expr dot id opar param_list cpar\n | expr arroba type dot id opar param_list cpar\n | id opar param_list cpar\n expr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : ocur chunk ccurexpr : let decl_list in exprexpr : case expr of case_list esacexpr : new typeexpr : isvoid exprexpr : expr plus expr\n | expr minus expr\n expr : expr star expr\n | expr div expr\n expr : expr equal expr\n | expr lneq expr\n | expr leq expr\n expr : complement expr\n | not expr\n expr : opar expr cparexpr : idexpr : numberexpr : stringexpr : true \n | falsedecl_list : decl \n | decl comma decl_listdecl : id colon type\n | id colon type assignArrow expr\n case_list : id colon type rArrow expr semi\n | id colon type rArrow expr semi case_list\n ' +_lr_signature = 'nonassocassignArrowleftnotnonassocleqlneqequalleftplusminusleftstardivnonassocisvoidnonassoccomplementnonassocarrobanonassocdotarroba assignArrow case ccur chunkComment class colon comma complement cpar div dot else equal esac false fi id if in inherits isvoid leq let lineComment lneq loop minus new newline not number ocur of opar plus pool rArrow semi space star string tab then true type whileprogram : class_listclass_list : def_class\n | def_class class_list\n def_class : class type ocur feature_list ccur semi\n | class type inherits type ocur feature_list ccur semi\n feature_list : def_attr feature_list\n | def_func feature_list\n | \n def_attr : id colon type semi\n | id colon type assignArrow expr semi\n def_func : id opar arg_list cpar colon type ocur expr ccur semiarg_list : non_empty_arg_list\n | \n non_empty_arg_list : arg\n | arg comma non_empty_arg_list\n arg : id colon typeparam_list : expr_list\n | \n expr_list : expr\n | expr comma expr_list\n chunk : expr semi\n | expr semi chunk\n expr : id assignArrow exprexpr : expr dot id opar param_list cpar\n | expr arroba type dot id opar param_list cpar\n | id opar param_list cpar\n expr : if expr then expr else expr fiexpr : while expr loop expr poolexpr : ocur chunk ccurexpr : let decl_list in exprexpr : case expr of case_list esacexpr : new typeexpr : isvoid exprexpr : expr plus expr\n | expr minus expr\n expr : expr star expr\n | expr div expr\n expr : expr equal expr\n | expr lneq expr\n | expr leq expr\n expr : complement expr\n | not expr\n expr : opar expr cparexpr : idexpr : numberexpr : stringexpr : true \n | falsedecl_list : decl \n | decl comma decl_listdecl : id colon type\n | id colon type assignArrow expr\n case_list : id colon type rArrow expr semi\n | id colon type rArrow expr semi case_list\n ' -_lr_action_items = {'class':([0,3,20,52,],[4,4,-4,-5,]),'$end':([1,2,3,5,20,52,],[0,-1,-2,-3,-4,-5,]),'type':([4,8,17,29,41,50,57,99,122,],[6,13,21,49,74,78,84,111,128,]),'ocur':([6,13,28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,78,93,94,96,97,101,103,104,118,120,125,132,],[7,19,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,101,38,38,38,38,38,38,38,38,38,38,38,]),'inherits':([6,],[8,]),'ccur':([7,9,10,11,15,16,19,26,27,33,45,46,47,48,55,68,74,75,76,77,79,85,86,87,88,89,90,91,92,95,96,102,108,109,114,119,121,124,129,131,133,],[-8,14,-8,-8,-6,-7,-8,32,-9,-44,-45,-46,-47,-48,-10,95,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-21,-26,-22,-30,123,-28,-31,-24,-11,-27,-25,]),'id':([7,10,11,18,19,27,28,31,35,36,37,38,39,40,42,43,44,53,54,55,56,58,59,60,61,62,63,64,93,94,96,97,98,100,101,103,104,105,118,120,125,129,132,135,],[12,12,12,22,12,-9,33,22,33,33,33,33,72,33,33,33,33,33,33,-10,83,33,33,33,33,33,33,33,33,33,33,33,72,113,33,33,33,117,33,33,33,-11,33,113,]),'colon':([12,22,30,72,113,],[17,29,50,99,122,]),'opar':([12,28,33,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,83,93,94,96,97,101,103,104,117,118,120,125,132,],[18,35,54,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,104,35,35,35,35,35,35,35,125,35,35,35,35,]),'semi':([14,21,32,33,34,45,46,47,48,69,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,123,124,131,133,134,],[20,27,52,-44,55,-45,-46,-47,-48,96,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,129,-24,-27,-25,135,]),'cpar':([18,23,24,25,33,45,46,47,48,49,51,54,65,74,75,76,77,79,80,81,82,85,86,87,88,89,90,91,92,95,102,104,109,115,116,119,121,124,125,130,131,133,],[-13,30,-12,-14,-44,-45,-46,-47,-48,-16,-15,-18,92,-32,-33,-41,-42,-23,102,-17,-19,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-18,-30,-20,124,-28,-31,-24,-18,133,-27,-25,]),'assignArrow':([21,33,111,],[28,53,120,]),'comma':([25,33,45,46,47,48,49,71,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,109,111,119,121,124,127,131,133,],[31,-44,-45,-46,-47,-48,-16,98,-32,-33,-41,-42,-23,103,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-51,-28,-31,-24,-52,-27,-25,]),'if':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,]),'while':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'let':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'new':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'isvoid':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'complement':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'not':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'number':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'string':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'true':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'false':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'dot':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,84,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,56,-45,-46,-47,-48,56,56,56,56,56,-32,-33,-41,-42,-23,56,105,-34,-35,-36,-37,56,56,56,-43,-29,-26,56,56,56,56,-28,-31,-24,56,56,-27,-25,56,]),'arroba':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,57,-45,-46,-47,-48,57,57,57,57,57,-32,-33,-41,-42,-23,57,-34,-35,-36,-37,57,57,57,-43,-29,-26,57,57,57,57,-28,-31,-24,57,57,-27,-25,57,]),'plus':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,58,-45,-46,-47,-48,58,58,58,58,58,-32,58,58,-42,-23,58,-34,-35,58,58,58,58,58,-43,-29,-26,58,58,58,58,-28,-31,-24,58,58,-27,-25,58,]),'minus':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,59,-45,-46,-47,-48,59,59,59,59,59,-32,59,59,-42,-23,59,-34,-35,59,59,59,59,59,-43,-29,-26,59,59,59,59,-28,-31,-24,59,59,-27,-25,59,]),'star':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,60,-45,-46,-47,-48,60,60,60,60,60,-32,60,60,-42,-23,60,-34,-35,-36,-37,60,60,60,-43,-29,-26,60,60,60,60,-28,-31,-24,60,60,-27,-25,60,]),'div':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,61,-45,-46,-47,-48,61,61,61,61,61,-32,61,61,-42,-23,61,-34,-35,-36,-37,61,61,61,-43,-29,-26,61,61,61,61,-28,-31,-24,61,61,-27,-25,61,]),'equal':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,62,-45,-46,-47,-48,62,62,62,62,62,-32,-33,-41,-42,-23,62,-34,-35,-36,-37,62,62,62,-43,-29,-26,62,62,62,62,-28,-31,-24,62,62,-27,-25,62,]),'lneq':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,63,-45,-46,-47,-48,63,63,63,63,63,-32,-33,-41,-42,-23,63,-34,-35,-36,-37,63,63,63,-43,-29,-26,63,63,63,63,-28,-31,-24,63,63,-27,-25,63,]),'leq':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,64,-45,-46,-47,-48,64,64,64,64,64,-32,-33,-41,-42,-23,64,-34,-35,-36,-37,64,64,64,-43,-29,-26,64,64,64,64,-28,-31,-24,64,64,-27,-25,64,]),'then':([33,45,46,47,48,66,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,93,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,-27,-25,]),'loop':([33,45,46,47,48,67,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,94,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,-27,-25,]),'of':([33,45,46,47,48,73,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,100,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,-27,-25,]),'else':([33,45,46,47,48,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,106,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,118,-30,-28,-31,-24,-27,-25,]),'pool':([33,45,46,47,48,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,107,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,119,-30,-28,-31,-24,-27,-25,]),'fi':([33,45,46,47,48,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,126,131,133,],[-44,-45,-46,-47,-48,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,131,-27,-25,]),'in':([33,45,46,47,48,70,71,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,110,111,119,121,124,127,131,133,],[-44,-45,-46,-47,-48,97,-49,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-50,-51,-28,-31,-24,-52,-27,-25,]),'esac':([112,135,136,],[121,-53,-54,]),'rArrow':([128,],[132,]),} +_lr_action_items = {'class':([0,3,20,52,],[4,4,-4,-5,]),'$end':([1,2,3,5,20,52,],[0,-1,-2,-3,-4,-5,]),'type':([4,8,17,29,41,50,57,99,122,],[6,13,21,49,74,78,84,111,128,]),'ocur':([6,13,28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,78,93,94,96,97,101,103,104,118,120,125,132,],[7,19,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,101,38,38,38,38,38,38,38,38,38,38,38,]),'inherits':([6,],[8,]),'ccur':([7,9,10,11,15,16,19,26,27,33,45,46,47,48,55,68,74,75,76,77,79,85,86,87,88,89,90,91,92,95,96,102,108,109,114,119,121,124,129,131,133,],[-8,14,-8,-8,-6,-7,-8,32,-9,-44,-45,-46,-47,-48,-10,95,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-21,-26,-22,-30,123,-28,-31,-24,-11,-27,-25,]),'id':([7,10,11,18,19,27,28,31,35,36,37,38,39,40,42,43,44,53,54,55,56,58,59,60,61,62,63,64,93,94,96,97,98,100,101,103,104,105,118,120,125,129,132,135,],[12,12,12,22,12,-9,33,22,33,33,33,33,72,33,33,33,33,33,33,-10,83,33,33,33,33,33,33,33,33,33,33,33,72,113,33,33,33,117,33,33,33,-11,33,113,]),'colon':([12,22,30,72,113,],[17,29,50,99,122,]),'opar':([12,28,33,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,83,93,94,96,97,101,103,104,117,118,120,125,132,],[18,35,54,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,104,35,35,35,35,35,35,35,125,35,35,35,35,]),'semi':([14,21,32,33,34,45,46,47,48,69,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,123,124,131,133,134,],[20,27,52,-44,55,-45,-46,-47,-48,96,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,129,-24,-27,-25,135,]),'cpar':([18,23,24,25,33,45,46,47,48,49,51,54,65,74,75,76,77,79,80,81,82,85,86,87,88,89,90,91,92,95,102,104,109,115,116,119,121,124,125,130,131,133,],[-13,30,-12,-14,-44,-45,-46,-47,-48,-16,-15,-18,92,-32,-33,-41,-42,-23,102,-17,-19,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-18,-30,-20,124,-28,-31,-24,-18,133,-27,-25,]),'assignArrow':([21,33,111,],[28,53,120,]),'comma':([25,33,45,46,47,48,49,71,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,109,111,119,121,124,127,131,133,],[31,-44,-45,-46,-47,-48,-16,98,-32,-33,-41,-42,-23,103,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-51,-28,-31,-24,-52,-27,-25,]),'if':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,]),'while':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,]),'let':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'new':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'isvoid':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'complement':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'not':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'number':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'string':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'true':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'false':([28,35,36,37,38,40,42,43,44,53,54,58,59,60,61,62,63,64,93,94,96,97,101,103,104,118,120,125,132,],[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,]),'dot':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,84,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,56,-45,-46,-47,-48,56,56,56,56,56,-32,56,56,56,56,56,105,56,56,56,56,56,56,56,-43,-29,-26,56,56,56,56,-28,-31,-24,56,56,-27,-25,56,]),'arroba':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,57,-45,-46,-47,-48,57,57,57,57,57,-32,57,57,57,57,57,57,57,57,57,57,57,57,-43,-29,-26,57,57,57,57,-28,-31,-24,57,57,-27,-25,57,]),'plus':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,58,-45,-46,-47,-48,58,58,58,58,58,-32,-33,-41,58,58,58,-34,-35,-36,-37,58,58,58,-43,-29,-26,58,58,58,58,-28,-31,-24,58,58,-27,-25,58,]),'minus':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,59,-45,-46,-47,-48,59,59,59,59,59,-32,-33,-41,59,59,59,-34,-35,-36,-37,59,59,59,-43,-29,-26,59,59,59,59,-28,-31,-24,59,59,-27,-25,59,]),'star':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,60,-45,-46,-47,-48,60,60,60,60,60,-32,-33,-41,60,60,60,60,60,-36,-37,60,60,60,-43,-29,-26,60,60,60,60,-28,-31,-24,60,60,-27,-25,60,]),'div':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,61,-45,-46,-47,-48,61,61,61,61,61,-32,-33,-41,61,61,61,61,61,-36,-37,61,61,61,-43,-29,-26,61,61,61,61,-28,-31,-24,61,61,-27,-25,61,]),'equal':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,62,-45,-46,-47,-48,62,62,62,62,62,-32,-33,-41,62,62,62,-34,-35,-36,-37,None,None,None,-43,-29,-26,62,62,62,62,-28,-31,-24,62,62,-27,-25,62,]),'lneq':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,63,-45,-46,-47,-48,63,63,63,63,63,-32,-33,-41,63,63,63,-34,-35,-36,-37,None,None,None,-43,-29,-26,63,63,63,63,-28,-31,-24,63,63,-27,-25,63,]),'leq':([33,34,45,46,47,48,65,66,67,69,73,74,75,76,77,79,82,85,86,87,88,89,90,91,92,95,102,106,107,109,114,119,121,124,126,127,131,133,134,],[-44,64,-45,-46,-47,-48,64,64,64,64,64,-32,-33,-41,64,64,64,-34,-35,-36,-37,None,None,None,-43,-29,-26,64,64,64,64,-28,-31,-24,64,64,-27,-25,64,]),'then':([33,45,46,47,48,66,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,93,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,-27,-25,]),'loop':([33,45,46,47,48,67,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,94,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,-27,-25,]),'of':([33,45,46,47,48,73,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,100,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,-27,-25,]),'else':([33,45,46,47,48,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,106,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,118,-30,-28,-31,-24,-27,-25,]),'pool':([33,45,46,47,48,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,107,109,119,121,124,131,133,],[-44,-45,-46,-47,-48,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,119,-30,-28,-31,-24,-27,-25,]),'fi':([33,45,46,47,48,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,119,121,124,126,131,133,],[-44,-45,-46,-47,-48,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-28,-31,-24,131,-27,-25,]),'in':([33,45,46,47,48,70,71,74,75,76,77,79,85,86,87,88,89,90,91,92,95,102,109,110,111,119,121,124,127,131,133,],[-44,-45,-46,-47,-48,97,-49,-32,-33,-41,-42,-23,-34,-35,-36,-37,-38,-39,-40,-43,-29,-26,-30,-50,-51,-28,-31,-24,-52,-27,-25,]),'esac':([112,135,136,],[121,-53,-54,]),'rArrow':([128,],[132,]),} _lr_action = {} for _k, _v in _lr_action_items.items(): @@ -27,58 +27,58 @@ del _lr_goto_items _lr_productions = [ ("S' -> program","S'",1,None,None,None), - ('program -> class_list','program',1,'p_program','parser.py',34), - ('class_list -> def_class','class_list',1,'p_class_list','parser.py',38), - ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',39), - ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',47), - ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',48), - ('feature_list -> def_attr feature_list','feature_list',2,'p_feature_list_attr','parser.py',56), - ('feature_list -> def_func feature_list','feature_list',2,'p_feature_list_attr','parser.py',57), - ('feature_list -> ','feature_list',0,'p_feature_list_attr','parser.py',58), - ('def_attr -> id colon type semi','def_attr',4,'p_def_attr','parser.py',82), - ('def_attr -> id colon type assignArrow expr semi','def_attr',6,'p_def_attr','parser.py',83), - ('def_func -> id opar arg_list cpar colon type ocur expr ccur semi','def_func',10,'p_def_func','parser.py',91), - ('arg_list -> non_empty_arg_list','arg_list',1,'p_arg_list','parser.py',95), - ('arg_list -> ','arg_list',0,'p_arg_list','parser.py',96), - ('non_empty_arg_list -> arg','non_empty_arg_list',1,'p_non_empty_arg_list','parser.py',104), - ('non_empty_arg_list -> arg comma non_empty_arg_list','non_empty_arg_list',3,'p_non_empty_arg_list','parser.py',105), - ('arg -> id colon type','arg',3,'p_arg','parser.py',113), - ('param_list -> expr_list','param_list',1,'p_param_list','parser.py',117), - ('param_list -> ','param_list',0,'p_param_list','parser.py',118), - ('expr_list -> expr','expr_list',1,'p_expr_list','parser.py',126), - ('expr_list -> expr comma expr_list','expr_list',3,'p_expr_list','parser.py',127), - ('chunk -> expr semi','chunk',2,'p_chunk','parser.py',135), - ('chunk -> expr semi chunk','chunk',3,'p_chunk','parser.py',136), - ('expr -> id assignArrow expr','expr',3,'p_expr_assign','parser.py',144), - ('expr -> expr dot id opar param_list cpar','expr',6,'p_expr_call','parser.py',148), - ('expr -> expr arroba type dot id opar param_list cpar','expr',8,'p_expr_call','parser.py',149), - ('expr -> id opar param_list cpar','expr',4,'p_expr_call','parser.py',150), - ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','parser.py',160), - ('expr -> while expr loop expr pool','expr',5,'p_expr_while','parser.py',164), - ('expr -> ocur chunk ccur','expr',3,'p_expr_chunk','parser.py',168), - ('expr -> let decl_list in expr','expr',4,'p_expr_let','parser.py',172), - ('expr -> case expr of case_list esac','expr',5,'p_expr_case','parser.py',176), - ('expr -> new type','expr',2,'p_expr_instantiate','parser.py',180), - ('expr -> isvoid expr','expr',2,'p_expr_isvoid','parser.py',184), - ('expr -> expr plus expr','expr',3,'p_expr_bin1','parser.py',188), - ('expr -> expr minus expr','expr',3,'p_expr_bin1','parser.py',189), - ('expr -> expr star expr','expr',3,'p_expr_bin2','parser.py',197), - ('expr -> expr div expr','expr',3,'p_expr_bin2','parser.py',198), - ('expr -> expr equal expr','expr',3,'p_expr_bin3','parser.py',206), - ('expr -> expr lneq expr','expr',3,'p_expr_bin3','parser.py',207), - ('expr -> expr leq expr','expr',3,'p_expr_bin3','parser.py',208), - ('expr -> complement expr','expr',2,'p_expr_unary','parser.py',218), - ('expr -> not expr','expr',2,'p_expr_unary','parser.py',219), - ('expr -> opar expr cpar','expr',3,'p_expr_par','parser.py',227), - ('expr -> id','expr',1,'p_expr_id','parser.py',231), - ('expr -> number','expr',1,'p_expr_int','parser.py',235), - ('expr -> string','expr',1,'p_expr_string','parser.py',239), - ('expr -> true','expr',1,'p_expr_boolean','parser.py',243), - ('expr -> false','expr',1,'p_expr_boolean','parser.py',244), - ('decl_list -> decl','decl_list',1,'p_decl_list','parser.py',251), - ('decl_list -> decl comma decl_list','decl_list',3,'p_decl_list','parser.py',252), - ('decl -> id colon type','decl',3,'p_decl','parser.py',259), - ('decl -> id colon type assignArrow expr','decl',5,'p_decl','parser.py',260), - ('case_list -> id colon type rArrow expr semi','case_list',6,'p_case_list','parser.py',268), - ('case_list -> id colon type rArrow expr semi case_list','case_list',7,'p_case_list','parser.py',269), + ('program -> class_list','program',1,'p_program','parser.py',38), + ('class_list -> def_class','class_list',1,'p_class_list','parser.py',49), + ('class_list -> def_class class_list','class_list',2,'p_class_list','parser.py',50), + ('def_class -> class type ocur feature_list ccur semi','def_class',6,'p_def_class','parser.py',58), + ('def_class -> class type inherits type ocur feature_list ccur semi','def_class',8,'p_def_class','parser.py',59), + ('feature_list -> def_attr feature_list','feature_list',2,'p_feature_list_attr','parser.py',81), + ('feature_list -> def_func feature_list','feature_list',2,'p_feature_list_attr','parser.py',82), + ('feature_list -> ','feature_list',0,'p_feature_list_attr','parser.py',83), + ('def_attr -> id colon type semi','def_attr',4,'p_def_attr','parser.py',107), + ('def_attr -> id colon type assignArrow expr semi','def_attr',6,'p_def_attr','parser.py',108), + ('def_func -> id opar arg_list cpar colon type ocur expr ccur semi','def_func',10,'p_def_func','parser.py',130), + ('arg_list -> non_empty_arg_list','arg_list',1,'p_arg_list','parser.py',141), + ('arg_list -> ','arg_list',0,'p_arg_list','parser.py',142), + ('non_empty_arg_list -> arg','non_empty_arg_list',1,'p_non_empty_arg_list','parser.py',150), + ('non_empty_arg_list -> arg comma non_empty_arg_list','non_empty_arg_list',3,'p_non_empty_arg_list','parser.py',151), + ('arg -> id colon type','arg',3,'p_arg','parser.py',159), + ('param_list -> expr_list','param_list',1,'p_param_list','parser.py',163), + ('param_list -> ','param_list',0,'p_param_list','parser.py',164), + ('expr_list -> expr','expr_list',1,'p_expr_list','parser.py',172), + ('expr_list -> expr comma expr_list','expr_list',3,'p_expr_list','parser.py',173), + ('chunk -> expr semi','chunk',2,'p_chunk','parser.py',181), + ('chunk -> expr semi chunk','chunk',3,'p_chunk','parser.py',182), + ('expr -> id assignArrow expr','expr',3,'p_expr_assign','parser.py',190), + ('expr -> expr dot id opar param_list cpar','expr',6,'p_expr_call','parser.py',201), + ('expr -> expr arroba type dot id opar param_list cpar','expr',8,'p_expr_call','parser.py',202), + ('expr -> id opar param_list cpar','expr',4,'p_expr_call','parser.py',203), + ('expr -> if expr then expr else expr fi','expr',7,'p_expr_if','parser.py',234), + ('expr -> while expr loop expr pool','expr',5,'p_expr_while','parser.py',245), + ('expr -> ocur chunk ccur','expr',3,'p_expr_chunk','parser.py',256), + ('expr -> let decl_list in expr','expr',4,'p_expr_let','parser.py',267), + ('expr -> case expr of case_list esac','expr',5,'p_expr_case','parser.py',278), + ('expr -> new type','expr',2,'p_expr_instantiate','parser.py',289), + ('expr -> isvoid expr','expr',2,'p_expr_isvoid','parser.py',300), + ('expr -> expr plus expr','expr',3,'p_expr_bin1','parser.py',311), + ('expr -> expr minus expr','expr',3,'p_expr_bin1','parser.py',312), + ('expr -> expr star expr','expr',3,'p_expr_bin2','parser.py',336), + ('expr -> expr div expr','expr',3,'p_expr_bin2','parser.py',337), + ('expr -> expr equal expr','expr',3,'p_expr_bin3','parser.py',359), + ('expr -> expr lneq expr','expr',3,'p_expr_bin3','parser.py',360), + ('expr -> expr leq expr','expr',3,'p_expr_bin3','parser.py',361), + ('expr -> complement expr','expr',2,'p_expr_unary','parser.py',392), + ('expr -> not expr','expr',2,'p_expr_unary','parser.py',393), + ('expr -> opar expr cpar','expr',3,'p_expr_par','parser.py',415), + ('expr -> id','expr',1,'p_expr_id','parser.py',419), + ('expr -> number','expr',1,'p_expr_int','parser.py',430), + ('expr -> string','expr',1,'p_expr_string','parser.py',441), + ('expr -> true','expr',1,'p_expr_boolean','parser.py',452), + ('expr -> false','expr',1,'p_expr_boolean','parser.py',453), + ('decl_list -> decl','decl_list',1,'p_decl_list','parser.py',474), + ('decl_list -> decl comma decl_list','decl_list',3,'p_decl_list','parser.py',475), + ('decl -> id colon type','decl',3,'p_decl','parser.py',482), + ('decl -> id colon type assignArrow expr','decl',5,'p_decl','parser.py',483), + ('case_list -> id colon type rArrow expr semi','case_list',6,'p_case_list','parser.py',505), + ('case_list -> id colon type rArrow expr semi case_list','case_list',7,'p_case_list','parser.py',506), ] diff --git a/src/lexer/lexer.py b/src/lexer/lexer.py index 2e70dfc23..e0e2699b3 100755 --- a/src/lexer/lexer.py +++ b/src/lexer/lexer.py @@ -1,5 +1,5 @@ import ply.lex as lex -from utils.errors import LexicographicError +from utils.errors import _LexicographicError reserved = { 'class' : 'class', 'new' : 'new', @@ -102,11 +102,12 @@ class CoolLexer: ('chunkComment', 'exclusive'), ('string', 'exclusive') ) - + col = 0 # Define a rule so we can track line numbers def t_newline(self, t): r'\n+' t.lexer.lineno += len(t.value) + self.col = 0 # Compute column. # input is the input text string @@ -116,8 +117,15 @@ def find_column(self, input, token): return (token.lexpos - line_start) + 1 #parentesis? t_ignore_space = r'[ ]+' - - t_ignore_lineComment = r'--.*' + # def t_space(self,t): + # r'[ ]+' + # pass + + # t_ignore_lineComment = r'--.*' + # preguntarle a andy como no hacer esto con la precedencia... + def t_ignore_lineComment(self, t): + r'--.*' + pass # t_ignore_chunkComment = r'\(\*[^$]*\*\)' @@ -153,43 +161,110 @@ def t_chunkComment_comment(self, t): def t_chunkComment_eof(self, t): if t.lexer.level > 0: - print(LexicographicError % (t.lexer.lineno, self.find_column(t.lexer.lexdata,t), 'EOF in comment')) + self.errors.append(_LexicographicError % (t.lexer.lineno, self.find_column(t.lexer.lexdata,t), 'EOF in comment')) + print(_LexicographicError % (t.lexer.lineno, self.find_column(t.lexer.lexdata,t), 'EOF in comment')) return None + # t_assignArrow = r'<\-' + def t_assignArrow(self, t): + r'<\-' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_rArrow = r'=>' + def t_rArrow(self, t): + r'=>' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_leq = r'<=' + def t_leq(self, t): + r'<=' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t def t_number(self, t): r'\d+' t.value = int(t.value) + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) return t - t_semi = r';' - - t_colon = r':' - - t_comma = r',' - - t_dot = r'\.' - - t_opar = r'\(' - t_cpar = r'\)' - - t_ocur = r'\{' - t_ccur = r'\}' - - t_plus = r'\+' - t_minus = r'\-' - t_star = r'\*' - t_div = r'/' - - t_equal = r'=' - t_lneq = r'<' - t_leq = r'<=' - - t_complement = r'\~' + # t_semi = r';' + def t_semi(self, t): + r';' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_colon = r':' + def t_colon(self, t): + r':' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_comma = r',' + def t_comma(self, t): + r',' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_dot = r'\.' + def t_dot(self, t): + r'\.' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_opar = r'\(' + def t_opar(self, t): + r'\(' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_cpar = r'\)' + def t_cpar(self, t): + r'\)' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t - t_assignArrow = r'<\-' + # t_ocur = r'\{' + def t_ocur(self, t): + r'\{' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_ccur = r'\}' + def t_ccur(self, t): + r'\}' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t - t_rArrow = r'=>' + # t_plus = r'\+' + def t_plus(self,t): + r'\+' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_minus = r'\-' + def t_minus(self,t): + r'\-' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + + # t_star = r'\*' + def t_star(self,t): + r'\*' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_div = r'/' + def t_div(self,t): + r'/' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_equal = r'=' + def t_equal(self,t): + r'=' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_lneq = r'<' + def t_lneq(self, t): + r'<' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t + # t_complement = r'\~' + def t_complement(self, t): + r'\~' + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) + return t def t_string(self, t): r'\"' t.lexer.begin('string') @@ -202,7 +277,7 @@ def t_string_string(self, t): errors = [] for c in t.value[1:]: if c =='\x00': - errors.append(LexicographicError % (row, col, f'String contains null character')) + errors.append(_LexicographicError % (row, col, f'String contains null character')) if c == '\n': t.lexer.lineno += 1 col = 0 @@ -211,6 +286,8 @@ def t_string_string(self, t): if len(errors) != 0: self.errors += errors else: + t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) -1 + t.value = '"'+t.value return t # t_string = r"\"([^\x00\n]|(? try: return self.parent.get_attribute(name, typex, visited, get_owner) except SemanticError: + # self.errors.append(_NameError % ()) raise SemanticError(f'Attribute "{name}" is not defined in {self.name}.') def define_attribute(self, name: str, typex: 'Type') -> Attribute: diff --git a/src/visitors/Builder.py b/src/visitors/Builder.py index 44177a108..bf9c5d303 100755 --- a/src/visitors/Builder.py +++ b/src/visitors/Builder.py @@ -1,7 +1,7 @@ from cool_ast.cool_ast import ProgramNode, ClassDeclarationNode, AttrDeclarationNode, FuncDeclarationNode import visitors.visitor as visitor from utils.semantic import Context, SemanticError, Type, ErrorType - +from utils.errors import _SemanticError, _TypeError class TypeBuilder: def __init__(self, context, errors): @@ -48,10 +48,11 @@ def visit(self, node): self.check_node = Check_Node('Object') - cyclicHeritage = self.CheckHeritageTree() + # cyclicHeritage = self.CheckHeritageTree() - if cyclicHeritage: - self.errors.append('CyclicError: Cyclic heritage is not allowed') + # if cyclicHeritage: + # self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Class {node.id}, or an ancestor of {node.id}, is involve in an inheritance cycle.' )) + # self.errors.append('CyclicError: Cyclic heritage is not allowed') types = self.context.types main_type = None @@ -81,13 +82,31 @@ def visit(self, node): if node.parent is not None: if node.parent in ("Int", "String", "Bool", "SELF_TYPE"): - self.errors.append(f'TypeError: Class {node.id} cannot inherits from {node.parent}' ) + self.errors.append(_SemanticError% (node.token_list[0].lineno, node.token_list[3].col, f'Class {node.id} cannot inherit class {node.parent}' )) try: - self.current_type.set_parent(self.context.get_type(node.parent)) + parent_t = self.context.get_type(node.parent) + self.current_type.set_parent(parent_t) + + parents = [self.current_type] + typo = self.current_type + while True: + if typo.parent is not None: + typo = typo.parent + if typo not in parents: + parents.append(typo) + else: + # self.errors.append() + self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[3].col, f'Class {node.id}, or an ancestor of {node.id}, is involved in an inheritance cycle.' )) + break + else: + break + except SemanticError as e: - self.errors.append(e.text) + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[3].col, f'Class {node.id} inherit from an undefined class {node.parent}' )) + # self.errors.append(e.text) else: self.current_type.set_parent(self.context.get_type('Object')) + # self_attr = AttrDeclarationNode('self', self.current_type.name) # self.visit(self_attr) @@ -100,12 +119,18 @@ def visit(self, node): try: t_attr = self.context.get_type(node.type) except SemanticError as e: - self.errors.append(e.text) + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[2].col, f'Class {node.type} of attribute {node.id} is undefined.')) + # self.errors.append(e.text) t_attr = ErrorType() try: self.current_type.define_attribute(node.id, t_attr) except SemanticError as e: - self.errors.append(e.text) + attr, owner = self.current_type.get_attribute(node.id, self.current_type, False, get_owner=True) + if owner == self.current_type: + self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Attribute {node.id} is multply defined in class {self.current_type.name}.')) + # else: + # self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Attribute {node.id} is an attribute of an inherited class.')) + # self.errors.append(e.text) @visitor.when(FuncDeclarationNode) def visit(self, node): @@ -117,16 +142,19 @@ def visit(self, node): param_types.append(self.context.get_type(typex)) except SemanticError as e: param_types.append(ErrorType()) - self.errors.append(e.text) + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f'Class {typex} of formal parameter {name} is undefined.')) + # self.errors.append(e.text) try: return_type = self.context.get_type(node.type) except SemanticError as e: + self.errors.append(_TypeError % (node.token_list[4].lineno, node.token_list[4].col, f'Undefined return type {node.type} in method {node.id}.')) return_type = ErrorType() - self.errors.append(e.text) - - self.current_type.define_method(node.id, param_names, param_types, return_type) - + # self.errors.append(e.text) + try: + self.current_type.define_method(node.id, param_names, param_types, return_type) + except SemanticError as e: + self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Method {node.id} is multply defined in class {self.current_type.name}.')) #################################################################### def CheckHeritageTree(self): def CheckCyclicHeritage(n): #n is root, idealmente n = Object @@ -224,7 +252,8 @@ def visit(self, node): def visit(self, node): try: attribute, owner = self.current_type.parent.get_attribute(node.id,self.current_type, False, True) - self.errors.append(f'The attribute {attribute.name} is already defined in {owner.name}') + self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Attribute {node.id} is an attribute of an inherited class.')) + # self.errors.append(f'The attribute {attribute.name} is already defined in {owner.name}') except: pass @@ -233,7 +262,16 @@ def visit(self, node): current_method = self.current_type.get_method(node.id, self.current_type, False) try: method, owner = self.current_type.parent.get_method(node.id, self.current_type, False, get_owner=True) - if method != current_method: - self.errors.append(f'Function {node.id} is already defined in {owner.name}.') + + if current_method.return_type != method.return_type: + # self.errors.append(f'Function {node.id} is already defined in {owner.name}.') + self.errors.append(_SemanticError % (node.token_list[4].lineno, node.token_list[4].col, f'In redefined method {current_method.name}, return type {current_method.return_type.name} is diferent from original return type {method.return_type.name}.')) + if len(current_method.param_types) != len(method.param_types): + self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Incompatible number of formal parameters in redefined method {current_method.name}.')) + else: + for pt1, pt2 in zip(current_method.param_types, method.param_types): + if pt1 != pt2: + self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'In redefined method {current_method.name}, parameter type {pt1.name} is diferent from original type {pt2.name}.')) + # if method != current_method: except: pass \ No newline at end of file diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py index b87d0e05d..f67c7eec0 100755 --- a/src/visitors/Checker.py +++ b/src/visitors/Checker.py @@ -1,7 +1,7 @@ from cool_ast.cool_ast import * from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo import visitors.visitor as visitor - +from utils.errors import _TypeError, _NameError, _SemanticError, _AtributeError class TypeChecker: def __init__(self, context, errors, c_m = None, c_t = None): self.context = context @@ -60,14 +60,23 @@ def visit(self, node, scope): for i in range(len(self.current_method.param_names)): ithParamName = self.current_method.param_names[i] ithParamType = self.current_method.param_types[i] + if ithParamName == 'self': + self.errors.append(_SemanticError %(node.token_list[0].lineno, node.token_list[0].col, f"'self' cannot be the name of a formal parameter.")) + continue if not scope.is_local(ithParamName): if ithParamType.name == 'SELF_TYPE': self.errors.append('SELF_TYPE cannot be the type of a parameter.') scope.define_variable(ithParamName, ErrorType()) else: + # try: + # param_t = self.context.get_type(ithParamType.name) + # except SemanticError as es: + # self.errors.append(es.text()) + # param_t = ErrorType() scope.define_variable(ithParamName, self.context.get_type(ithParamType.name)) else: - self.errors.append(f'Variable {ithParamName} is already defined in {self.current_method.name}.') + # self.errors.append(f'Variable {ithParamName} is already defined in {self.current_method.name}.') + self.errors.append(_SemanticError %(node.token_list[0].lineno, node.token_list[0].col, f'Formal parameter {ithParamName} is multiply defined.')) if node.type != 'SELF_TYPE': rType = self.context.get_type(node.type) @@ -77,7 +86,8 @@ def visit(self, node, scope): exprType = self.visit(node.body, scope) if not exprType.conforms_to(rType): - self.errors.append(f'{exprType.name} does not conform {rType.name}.') + self.errors.append(_TypeError %(node.body.token_list[0].lineno, node.body.token_list[0].col, f'Infered return type {exprType.name} of method {node.id} does not conform to declared return type {rType.name}.')) + # self.errors.append(f'{exprType.name} does not conform {rType.name}.') @visitor.when(ConditionalNode) def visit(self, node, scope): @@ -86,48 +96,62 @@ def visit(self, node, scope): elseT = self.visit(node.elseChunk, scope) if ifT != self.context.get_type('Bool'): - self.errors.append(f"Can't convert {ifT.name} to Bool.") - return thenT.join(elseT) + # self.errors.append(f"Can't convert {ifT.name} to Bool.") + self.errors.append(_TypeError % (node.ifChunk.token_list[0].lineno, node.ifChunk.token_list[0].col,f"Predicate of 'if' does not have type Bool.")) + try: + return thenT.join(elseT) + except: + return ErrorType() @visitor.when(LetInNode) def visit(self, node, scope): + iteration = 0 for nod in node.decl_list: _id = nod.id _t = nod.type _e = nod.expr + if _id =='self': + self.errors.append(_SemanticError %(node.decl_list[iteration].token_list[0].lineno, node.decl_list[iteration].token_list[0].col, f"'self' cannot be bound in a 'let' expression.")) + continue + try: if _t != 'SELF_TYPE': var_type = self.context.get_type(_t) else: var_type = self.current_type except SemanticError as e: - self.errors.append(e.text) + # self.errors.append(e.text) + self.errors.append(_TypeError %(node.decl_list[iteration].token_list[0].lineno, node.decl_list[iteration].token_list[2].col, f"Class {_t} of let-bound identifier {_id} is undefined.")) var_type = ErrorType() - if scope.is_local(_id): - self.errors.append(f'Variable {_id} is already defined in {self.current_method.name}.') - else: - scope.define_variable(_id, var_type) + # if scope.is_local(_id): + # self.errors.append(f'Variable {_id} is already defined in {self.current_method.name}.') + # else: + # scope.define_variable(_id, var_type) + scope.define_variable(_id, var_type) if _e is not None: expr = self.visit(_e, scope.create_child()) else: expr = None if expr is not None and not expr.conforms_to(var_type): - self.errors.append(f"Can't convert {expr.name} to {var_type.name}.") - + # self.errors.append(f"Can't convert {expr.name} to {var_type.name}.") + self.errors.append(_TypeError %(node.decl_list[iteration].token_list[0].lineno, node.decl_list[iteration].token_list[0].col, f"Infered type {expr.name} of initialization of {_id} does not conform to identifier's declared type {var_type.name}")) + iteration+=1 return self.visit(node.expression, scope.create_child()) @visitor.when(AttrDeclarationNode) def visit(self, node, scope): if node.id == 'self': - self.errors.append('"self" cannot be an attribute.') + self.errors.append(_SemanticError %(node.token_list[0].lineno, node.token_list[0].col, f"'self' cannot be the name of an attribute.")) + return _char = node.id[0] if _char not in ''.join(chr(n) for n in range(ord('a'),ord('z')+1)): - self.errors.append((f'Attribute names must not be capitalized')) + # self.errors.append((f'Attribute names must not be capitalized')) + self.errors.append(_SemanticError %(node.token_list[0].lineno, node.token_list[0].col, f"Attribute names must not be capitalized.")) if node.type != 'SELF_TYPE': attrType = self.context.get_type(node.type) @@ -137,7 +161,8 @@ def visit(self, node, scope): if node.value is not None: value_t = self.visit(node.value, scope.create_child()) if not value_t.conforms_to(attrType): - self.errors.append(f"Can't convert {value_t.name} to {attrType.name}.") + # self.errors.append(f"Can't convert {value_t.name} to {attrType.name}.") + self.errors.append(_TypeError %(node.value.token_list[0].lineno, node.value.token_list[0].col, f'Infered type {value_t.name} of initialization of attribute {node.id} does not conform to declared type {attrType.name}')) scope.define_variable(node.id, attrType) @@ -146,7 +171,11 @@ def visit(self, node, scope): var_info = scope.find_variable(node.id) exprType = self.visit(node.expr, scope.create_child()) - + + if node.id == 'self': + self.errors.append(_SemanticError % (node.token_list[1].lineno, node.token_list[1].col, f"Cannot assign to 'self'.")) + return ErrorType() + if var_info is None: self.errors.append(f'Undefined variable {node.id} in {self.current_method.name}.') else: @@ -159,7 +188,8 @@ def visit(self, node, scope): def visit(self, node, scope): condition = self.visit(node.condition, scope) if condition != self.context.get_type('Bool'): - self.errors.append(f"Can't convert {condition.name} to Bool.") + # self.errors.append(f"Can't convert {condition.name} to Bool.") + self.errors.append(_TypeError %(node.condition.token_list[0].lineno, node.condition.token_list[0].col, f'Loop condition does not have type Bool.')) self.visit(node.loopChunk, scope.create_child()) return self.context.get_type('Object') @@ -177,17 +207,25 @@ def visit(self, node, scope): def visit(self, node, scope): self.visit(node.expr, scope) types = [] - for i, t, e in node.case_list: + t_set = set() + # for i, t, e in node.case_list: + for i, t, e, token_list in node.case_list: child_scope = scope.create_child() try: if t != 'SELF_TYPE': - child_scope.define_variable(i, self.context.get_type(t)) + if t not in t_set: + t_set.add(t) + else: + self.errors.append(_SemanticError % (token_list[2].lineno, token_list[2].col, f'Duplicate branch {t} in case statement.')) + t_typo = self.context.get_type(t) + child_scope.define_variable(i, t_typo) else: self.errors.append(f'SELF_TYPE is not valid as the type of a case branch.') - except SemanticError as e: + except SemanticError as exc: child_scope.define_variable(i, ErrorType()) - self.errors.append(e.text) - + self.errors.append(_TypeError % (token_list[2].lineno, token_list[2].col, f'Class {t} of case branch is undefined.')) + # self.errors.append(exc.text) + types.append(self.visit(e, child_scope)) return Type.multi_join(types) @@ -202,7 +240,8 @@ def visit(self, node, scope): if lt == rt == intType: return intType - self.errors.append(f'Undefined operation "+" between {lt.name} and {rt.name}.') + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' + '+str(rt.name))) + # self.errors.append(f'Undefined operation "+" between {lt.name} and {rt.name}.') return ErrorType() @visitor.when(MinusNode) @@ -214,7 +253,8 @@ def visit(self, node, scope): if lt == rt == intType: return intType - self.errors.append(f'Undefined operation "-" between {lt.name} and {rt.name}.') + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' - '+str(rt.name))) + # self.errors.append(f'Undefined operation "-" between {lt.name} and {rt.name}.') return ErrorType() @visitor.when(StarNode) @@ -226,7 +266,8 @@ def visit(self, node, scope): if lt == rt == intType: return intType - self.errors.append(f'Undefined operation "*" between {lt.name} and {rt.name}.') + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' * '+str(rt.name))) + # self.errors.append(f'Undefined operation "*" between {lt.name} and {rt.name}.') return ErrorType() @visitor.when(DivNode) @@ -238,7 +279,8 @@ def visit(self, node, scope): if lt == rt == intType: return intType - self.errors.append(f'Undefined operation "/" between {lt.name} and {rt.name}.') + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' / '+str(rt.name))) + # self.errors.append(f'Undefined operation "/" between {lt.name} and {rt.name}.') return ErrorType() @visitor.when(CallNode) @@ -255,14 +297,16 @@ def visit(self, node, scope): self.errors.append(e.text) if not obj_type.conforms_to(ancestor_type): - self.errors.append(f'{obj_type.name} does not inherits from {ancestor_type.name}.') + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f'Expression type {obj_type.name} does not conform to declared static dispatch type {ancestor_type.name}.')) + # self.errors.append(f'{obj_type.name} does not inherits from {ancestor_type.name}.') else: ancestor_type = obj_type try: method = ancestor_type.get_method(node.method, self.current_type, False) except SemanticError as e: - self.errors.append(e.text) + self.errors.append(_AtributeError % (node.token_list[0].lineno, node.token_list[0].col, f'Dispatch to undefined method {node.method}')) + # self.errors.append(e.text) for arg in node.args: self.visit(arg, scope) return ErrorType() @@ -270,10 +314,14 @@ def visit(self, node, scope): if len(node.args) != len(method.param_names): self.errors.append(f'Function {method.name} is already defined in {obj_type.name}.') - for i, arg in enumerate(node.args): - arg_type = self.visit(arg, scope) - if not arg_type.conforms_to(method.param_types[i]): - self.errors.append(f"Can't convert {arg_type.name} to {method.param_types[i].name}.") + if len(node.args) != len(method.param_types): + self.errors.append(_SemanticError %(node.token_list[1].lineno, node.token_list[1].col, f"Method {method.name} called with wrong number of arguments")) + else: + for i, arg in enumerate(node.args): + arg_type = self.visit(arg, scope) + if not arg_type.conforms_to(method.param_types[i]): + # self.errors.append(f"Can't convert {arg_type.name} to {method.param_types[i].name}.") + self.errors.append(_TypeError %(node.args[i].token_list[0].lineno, node.args[i].token_list[0].col, f"In call of {method.name}, type {arg_type.name} of parameter {method.param_names[i]} does not conform to declare type {method.param_types[i].name}")) if method.return_type.name != 'SELF_TYPE': return method.return_type @@ -303,10 +351,15 @@ def visit(self, node, scope): else: variable = scope.find_variable(node.lex) if variable is None: - _var = self.current_type.get_attribute(node.lex, self.current_type, False) - _var = VariableInfo(_var.name, _var.type) + try: + _var = self.current_type.get_attribute(node.lex, self.current_type, False) + variable = VariableInfo(_var.name, _var.type) + except SemanticError as e: + print(e.text) + pass if variable is None: - self.errors.append(f'Variable {node.lex} is not defined in {self.current_method.name}.') + # self.errors.append(f'Variable {node.lex} is not defined in {self.current_method.name}.') + self.errors.append(_NameError % (node.token_list[0].lineno, node.token_list[0].col, f"Undeclared identifier {node.lex}.")) return ErrorType() return variable.type @@ -318,7 +371,8 @@ def visit(self, node, scope): else: return self.current_type except SemanticError as e: - self.errors.append(e.text) + self.errors.append(_TypeError % (node.token_list[1].lineno, node.token_list[1].col, f"'new' used with undefined class {node.lex}.")) + # self.errors.append(e.text) return ErrorType() @visitor.when(NotNode) @@ -326,7 +380,8 @@ def visit(self, node, scope): tp = self.visit(node.expression, scope) if tp == self.context.get_type('Bool'): return tp - self.errors.append(f'Undefined operation "not" for {tp.name}.') + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f"Argument of 'not' has type {tp.name} instead of Bool.")) + # self.errors.append(f'Undefined operation "not" for {tp.name}.') return ErrorType() @visitor.when(ComplementNode) @@ -334,7 +389,8 @@ def visit(self, node, scope): tp = self.visit(node.expr, scope) if tp == self.context.get_type('Int'): return tp - self.errors.append(f'Undefined operation "~" for {tp.name}.') + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f"Argument of '~' has type {tp.name} instead of Int.")) + # self.errors.append(f'Undefined operation "~" for {tp.name}.') return ErrorType() @visitor.when(IsVoidNode) @@ -352,7 +408,8 @@ def visit(self, node, scope): if lt == rt == intType: return boolType - self.errors.append(f'Undefined operation "<=" for {lt.name} and {rt.name}.') + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' <= '+str(rt.name))) + # self.errors.append(f'Undefined operation "<=" for {lt.name} and {rt.name}.') return ErrorType() @visitor.when(LessNode) @@ -364,15 +421,18 @@ def visit(self, node, scope): boolType = self.context.get_type('Bool') if lt == rt == intType: return boolType - self.errors.append(f'Undefined operation "<" for {lt.name} and {rt.name}.') + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' < '+str(rt.name))) + # self.errors.append(f'Undefined operation "<" for {lt.name} and {rt.name}.') return ErrorType() @visitor.when(EqualNode) def visit(self, node, scope): lt = self.visit(node.left, scope) rt = self.visit(node.right, scope) - + # quite self type de los basicos aqui + if lt.name not in ("Int", "String", "Bool", "IO", "Object") and rt.name not in ("Int", "String", "Bool", "IO", "Object"): + return self.context.get_type('Bool') if lt == rt: return self.context.get_type('Bool') - self.errors.append(f'Operation "=" is only defined between objects of the same type.') + self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f'Illegal comparison with a basic type.')) return ErrorType() \ No newline at end of file diff --git a/src/visitors/Collector.py b/src/visitors/Collector.py index 2183743d2..ee5eeb74d 100755 --- a/src/visitors/Collector.py +++ b/src/visitors/Collector.py @@ -1,6 +1,7 @@ from cool_ast.cool_ast import ProgramNode, ClassDeclarationNode import visitors.visitor as visitor from utils.semantic import Context, SemanticError +from utils.errors import _SemanticError class TypeCollector: @@ -20,7 +21,7 @@ def visit(self, node): self.context.create_type('String') self.context.create_type('IO') self.context.create_type('SELF_TYPE') - self.context.create_type('AUTO_TYPE') + # self.context.create_type('AUTO_TYPE') for declaration in node.declarations: self.visit(declaration) @@ -30,4 +31,9 @@ def visit(self, node): try: self.context.create_type(node.id) except SemanticError as e: - self.errors.append(e.text) \ No newline at end of file + f = e.text.find(')') + typo = e.text[25:f] + if typo in ("Int", "String", "Bool", "SELF_TYPE", "IO", "Object"): + self.errors.append(_SemanticError % (node.token_list[1].lineno, node.token_list[1].col, f"Redefinition of basic class {typo}.")) + else: + self.errors.append(_SemanticError % (node.token_list[1].lineno, node.token_list[1].col, f"Classes may not be redefined")) \ No newline at end of file diff --git a/src/visitors/Inferencer.py b/src/visitors/Inferencer.py new file mode 100755 index 000000000..310514f1a --- /dev/null +++ b/src/visitors/Inferencer.py @@ -0,0 +1,577 @@ +from cool_ast.cool_ast import * +import visitors.visitor as visitor +from utils.semantic import * +from utils.digraph import * + +class Inferencer: + def __init__(self, context, errors): + self.context = context + self.errors = errors + self.dGraph = DGraph() + self.attributes = { } + self.vars = { } + self.methods = { } + + self.currentType = None + self.currentMethod = None + self.defaultType = self.context.get_type('Object') + + for t in context.types.values(): + for attr in t.attributes: + self.attributes[t.name, attr.name] = AttrNode(t, attr) + for m in t.methods: + + paramNodesList = [ ] + for index, ptype in enumerate(m.param_types): + paramNodesList.append(ParamNode(ptype, m, index)) + self.methods[t.name,m.name] = (paramNodesList, RTypeNode(m.return_type,m)) + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode)# + def visit(self, node): + scope = Scope() + for _classDeclaration in node.declarations: + self.visit(_classDeclaration, scope.create_child()) + + self.dGraph.Build(self.defaultType) + backtracker = Backtracker(self.context, self.errors) + backtracker.visit(node, scope) + + @visitor.when(ClassDeclarationNode)# + def visit(self, node, scope): + self.currentType = self.context.get_type(node.id) + + for feature in node.features: + if isinstance(feature,AttrDeclarationNode): + self.visit(feature, scope) + else: + self.visit(feature, scope.create_child()) + + @visitor.when(AttrDeclarationNode)# + def visit(self, node, scope): + #crear un nodo del digrafo con la informacion del atributo encapsulada en un VarNode + attrType = self.context.get_type(node.type) + attr = scope.define_variable(node.id, attrType) + self.vars[attr] = VarNode(attrType, attr) + # self.vars[attr] = VarNode(self.context.get_type('AUTO_TYPE'), attr) ?? + varNode = self.vars[attr] + + attrValueNode = None + if node.value is not None: + attrValueNode = self.visit(node.value, scope.create_child()) + + if node.type == 'AUTO_TYPE': + attrNode = self.attributes[self.currentType.name, node.id] + self.dGraph.AddEdge(attrNode, varNode) + self.dGraph.AddEdge(varNode, attrNode) + if attrValueNode is not None: + self.dGraph.AddEdge(attrValueNode, varNode) + self.dGraph.AddEdge(varNode, attrValueNode) + + @visitor.when(FuncDeclarationNode)# + def visit(self, node, scope): + #el scope se pasa como un scope hijo del anterior, asi que toca definir self como variable + node.type = self.context.get_type(node.type) + _self = scope.define_variable('self', self.currentType) + self.vars[_self] = VarNode(self.currentType, _self) + + #ahora recorrer los parametros del metodo en busca de AUTO_TYPES para agregarlos al digrafo + self.currentMethod = self.currentType.get_method(node.id, self.currentType, False) + paramNodeList, _returnTypeNode = self.methods[self.currentType.name, self.currentMethod.name] + + + # for i, (_paramName, _paramType) in enumerate(zip(self.currentMethod.param_names, self.currentMethod.param_types)): + for i in range(len(self.currentMethod.param_names)): #param_names.Length = param_types.Length + #i -> indice del parametro en la lista de parametros + _ithParamName = self.currentMethod.param_names[i] + _ithParamType = self.currentMethod.param_types[i] + + #definir los parametros como variables locales, sobrescribiendo cualquier referencia a una variable de mismo nombre en un scope padre + ithParam = scope.define_variable(_ithParamName, _ithParamType) + self.vars[ithParam] = VarNode(_ithParamType, ithParam) + ithParamVarNode = self.vars[ithParam] + + if _ithParamType.name == 'AUTO_TYPE': + paramNode = paramNodeList[i] + self.dGraph.AddEdge(ithParamVarNode, paramNode) + self.dGraph.AddEdge(paramNode, ithParamVarNode) + + + + methodBodyNode = self.visit(node.body, scope) + if _returnTypeNode.type.name == 'AUTO_TYPE': + self.dGraph.AddEdge(methodBodyNode, _returnTypeNode) + + @visitor.when(TrueNode)# + def visit(self, node, scope): + _type = self.context.get_type('Bool') + return PrimeNode(_type) + + @visitor.when(FalseNode)# + def visit(self, node, scope): + _type = self.context.get_type('Bool') + return PrimeNode(_type) + + @visitor.when(ConstantNumNode)# + def visit(self, node, scope): + _type = self.context.get_type('Int') + return PrimeNode(_type) + + @visitor.when(StringNode)# + def visit(self, node, scope): + _type = self.context.get_type('String') + return PrimeNode(_type) + + @visitor.when(NotNode)# + def visit(self, node, scope): + n = self.visit(node.expression, scope) + _type = self.context.get_type('Bool') + return PrimeNode(_type) + + @visitor.when(ComplementNode)# + def visit(self, node, scope): + n = self.visit(node.expr, scope) + _type = self.context.get_type('Int') + return PrimeNode(_type) + + @visitor.when(PlusNode)# + def visit(self, node, scope): + intType = self.context.get_type('Int') + + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + + intPrimeNode = PrimeNode(intType) + + if not isinstance(left, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, left) + + if not isinstance(right, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, right) + + return PrimeNode(intType) + + @visitor.when(MinusNode)# + def visit(self, node, scope): + intType = self.context.get_type('Int') + + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + + intPrimeNode = PrimeNode(intType) + + if not isinstance(left, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, left) + + if not isinstance(right, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, right) + + return PrimeNode(intType) + + @visitor.when(StarNode)# + def visit(self, node, scope): + intType = self.context.get_type('Int') + + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + + intPrimeNode = PrimeNode(intType) + + if not isinstance(left, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, left) + + if not isinstance(right, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, right) + + return PrimeNode(intType) + + @visitor.when(DivNode)# + def visit(self, node, scope): + intType = self.context.get_type('Int') + + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + + intPrimeNode = PrimeNode(intType) + + if not isinstance(left, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, left) + + if not isinstance(right, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, right) + + return PrimeNode(intType) + + @visitor.when(EqualNode)# + def visit(self, node, scope): + boolType = self.context.get_type('Bool') + self.visit(node.left, scope) + self.visit(node.right, scope) + return PrimeNode(boolType) + + @visitor.when(LessNode)# + def visit(self, node, scope): + boolType = self.context.get_type('Bool') + intType = self.context.get_type('Int') + + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + + intPrimeNode = PrimeNode(intType) + + if not isinstance(left, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, left) + + if not isinstance(right, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, right) + + return PrimeNode(boolType) + + @visitor.when(LeqNode)# + def visit(self, node, scope): + boolType = self.context.get_type('Bool') + intType = self.context.get_type('Int') + + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + + intPrimeNode = PrimeNode(intType) + + if not isinstance(left, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, left) + + if not isinstance(right, PrimeNode): + self.dGraph.AddEdge(intPrimeNode, right) + + return PrimeNode(boolType) + + @visitor.when(WhileNode)# + def visit(self, node, scope): + self.visit(node.condition, scope) + self.visit(node.loopChunk, scope.create_child()) + return PrimeNode(self.defaultType) #The predicate must have static type Bool. The body may have any static type. The static type of a loop expression is Object section 7.6 + + @visitor.when(CallNode)# + def visit(self, node, scope): + node.obj = node.obj if node.obj is not None else VariableNode('self') + _node = self.visit(node.obj, scope) + if isinstance(_node, PrimeNode): + # if _node.type.name == 'SELF_TYPE': + # _method_type = self.context.get_type(node.parent) if node.parent is not None else self.currentType + # _function, _obj = _method_type.get_method(node.method, _method_type, False, True) + # else: + # _method_type = self.context.get_type(node.parent) if node.parent is not None else _node.type + # _function, _obj = _method_type.get_method(node.method, _method_type, False, True) + _method_type = self.context.get_type(node.parent) if node.parent is not None else _node.type + _function, _obj = _method_type.get_method(node.method, _method_type, False, True) + paramNodeList, _returnTypeNode = self.methods[_obj.name, _function.name] + for i in range(len(node.args)): + _ithFuncParam = paramNodeList[i] + _ithArg = node.args[i] + _ithArgNode = self.visit(_ithArg, scope) + if not isinstance(_ithArgNode, PrimeNode): + if _ithFuncParam.type.name == 'AUTO_TYPE': + self.dGraph.AddEdge(_ithFuncParam, _ithArgNode) + else: + self.dGraph.AddEdge(_ithFuncParam, _ithArgNode) + self.dGraph.AddEdge(_ithArgNode, _ithFuncParam) + elif isinstance(_ithArgNode, PrimeNode) and _ithFuncParam.type.name == 'AUTO_TYPE': + self.dGraph.AddEdge(_ithArgNode, _ithFuncParam) + if _returnTypeNode.type.name == 'AUTO_TYPE': + return _returnTypeNode + if _returnTypeNode.type.name == 'SELF_TYPE': + return PrimeNode(_node.type) + return PrimeNode(_returnTypeNode.type) + + + + for _arg in node.args: + self.visit(_arg, scope) + return PrimeNode(self.defaultType) + + @visitor.when(ConditionalNode)# + def visit(self, node, scope): + thenChunkNode = self.visit(node.thenChunk, scope.create_child()) + elseChunkNode = self.visit(node.elseChunk, scope.create_child()) + + ifChunkNode = self.visit(node.ifChunk, scope) + if not isinstance(ifChunkNode, PrimeNode): + _boolType = self.context.get_type('Bool') + _auxBoolNode = PrimeNode(_boolType) + self.dGraph.AddEdge(_auxBoolNode,ifChunkNode) + + + if isinstance(thenChunkNode, PrimeNode) and isinstance(elseChunkNode, PrimeNode): + #sea x el tipo del trozo 'then', sea ademas y el tipo del trozo 'else' + #el tipo de la expresion if completa es el "menor" tipo t, tal que x e y conformen a t + #according to COOL Reference Manual page 10 section 7.5 + + tType = thenChunkNode.type + eType = thenChunkNode.type + + while not isinstance(tType, Type): + tType = tType.type + while not isinstance(eType, Type): + eType = eType.type + + ancestorType = tType.join(eType) + return PrimeNode(ancestorType) + + else: + #sad + return PrimeNode(self.defaultType) + + @visitor.when(LetInNode)# + def visit(self, node, scope): + #definir cada una de las variables de node.decl_list en el scope y luego visitar la expresion + for d in node.decl_list: + # _varName = node.decl_list[i].id + # _varTypeName = node.decl_list[i].type + # _varValue = node.decl_list[i].expr + try: + _varType = self.context.get_type(d.type) + _var = scope.define_variable(d.id, _varType) + except: #si el type no existe....... + _var = scope.define_variable(d.id, ErrorType()) #error type de semantic.py para modelar estos casos + self.vars[_var] = VarNode(_var.type, _var) + _varNode = self.vars[_var] + + _varValueNode = None + if d.expr is not None: + _varValueNode = self.visit(d.expr, scope.create_child()) + + if d.type == 'AUTO_TYPE': + if _varValueNode is None: + self.dGraph.CreateNode(_varNode) + else: + self.dGraph.AddEdge(_varValueNode, _varNode) + #no use la variable i del enumerate, asi que cuando deje de debuggear se puede quitar + + _inScope = scope.create_child() + return self.visit(node.expression, _inScope) + + @visitor.when(SwitchCaseNode)# + def visit(self, node, scope): + _caseExpr0Node = self.visit(node.expr, scope) + _cases = [] + for _ithVarName, _ithTypeName, _ithExpr in node.case_list: + _ithVarType = self.context.get_type(_ithTypeName) + _ithScope = scope.create_child() + _ithVar = _ithScope.define_variable(_ithVarName, _ithVarType) + self.vars[_ithVar] = VarNode(_ithVarType, _ithVar) + _cases.append(self.visit(_ithExpr,_ithScope)) + + #jachtagsad + lca = _cases[0].type #todo switch case tiene al menos un case + if lca.name == 'AUTO_TYPE': #ehhhhhhhhhhh + return PrimeNode(self.defaultType) + for other_case in _cases[1:]: + if other_case.type.name == 'AUTO_TYPE': #ehhhhhhhhhhhh + return PrimeNode(self.defaultType) + lca.join(other_case.type) + return PrimeNode(lca) + + @visitor.when(ChunkNode)# + def visit(self, node, scope): + innerScope = scope.create_child() + #exprNode = [ ] + #if + exprNodes = [self.visit(i, innerScope) for i in node.chunk] + return exprNodes[-1] if exprNodes else None + + @visitor.when(AssignNode)# + def visit(self, node, scope): + var = scope.find_variable(node.id) + valueNode = self.visit(node.expr, scope.create_child()) + + #THE PARCHE + # if valueNode.type.name == 'SELF_TYPE' and isinstance(node.expr, CallNode) and node.expr.obj is not None: + # try: + # rType = scope.find_variable(node.expr.obj.lex).type if node.expr.parent is None else self.context.get_type(node.expr.parent) + # except: + # rType = self.context.get_type(node.expr.obj.lex) if node.expr.parent is None else self.context.get_type(node.expr.parent) + # if self.currentType.conforms_to(rType): + # pass + # else: + # valueNode = PrimeNode(rType) + + if var is not None: #cuando es None es xq esa variable no existe, y ese error no toca detectarlo ahora + _var = self.vars[var] + if var.type.name == "AUTO_TYPE" and valueNode.type.name == 'AUTO_TYPE': + self.dGraph.AddEdge(_var, valueNode) + self.dGraph.AddEdge(valueNode, _var) + if var.type.name == "AUTO_TYPE" and valueNode.type.name != 'AUTO_TYPE': + self.dGraph.AddEdge(valueNode, _var) + if var.type.name != "AUTO_TYPE" and valueNode.type.name == 'AUTO_TYPE': + self.dGraph.AddEdge(_var, valueNode) + return valueNode + + @visitor.when(IsVoidNode)# + def visit(self, node, scope): + n = self.visit(node.method, scope) + _type = self.context.get_type('Bool') + return PrimeNode(_type) + + @visitor.when(InstantiateNode) + def visit(self, node, scope): + _type = self.context.get_type(node.lex) + return PrimeNode(_type) + + @visitor.when(VariableNode) + def visit(self, node, scope): + if node.lex == 'self' : + _var = PrimeNode(self.currentType) + else: + _var = scope.find_variable(node.lex) + if _var is None: + _var = self.currentType.get_attribute(node.lex, self.currentType, False) + + if _var.type.name == 'AUTO_TYPE': + return self.vars[_var] + + return PrimeNode(_var.type) + + +class Backtracker: + def __init__(self, context, errors): + self.errors = errors + self.context = context + self.defaultType = self.context.get_type('Object') + self.currentType = self.defaultType + self.autoType = self.context.get_type('AUTO_TYPE') + + @visitor.on('node') + def visit(self, node, scope): + pass + + @visitor.when(ProgramNode)# + def visit(self, node, scope): + for i in range(len(node.declarations)): + _ithScope = scope.children[i] + self.visit(node.declarations[i], _ithScope) + + return scope + + @visitor.when(ClassDeclarationNode)# + def visit(self, node, scope): + # attrIndex = 0 + index = 0 + + self.currentType = self.context.get_type(node.id) + + for feature in node.features: + if isinstance(feature, AttrDeclarationNode): + if feature.value is not None: + feature._auxIndex = index + index += 1 + self.visit(feature, scope) + + else: #funcDeclaration + _ithMethodScope = scope.children[index] + index += 1 + self.visit(feature,_ithMethodScope) + + @visitor.when(AttrDeclarationNode)# + def visit(self, node, scope): + _var = scope.find_variable(node.id) + _type = self.context.get_type(node.type) + if node.value is not None: + self.visit(node.value, scope.children[node._auxIndex]) + if _type == self.autoType: + if _var.type == self.autoType: + self.errors.append(f'Unable to infer the type of {node.id}') + node.type = _var.type.name + + @visitor.when(FuncDeclarationNode)# + def visit(self, node, scope): + _func = self.currentType.get_method(node.id, self.currentType, False) + + for i in range(len(node.params)): + _ithParamName = node.params[i][0] + _param = scope.find_variable(_ithParamName) + if _param.type == self.autoType: + self.errors.append(f'Unable to infer the type of {_param.name}') + node.params[i] = (_ithParamName, _param.type.name) + self.visit(node.body, scope) + + if self.context.get_type(node.type.name) == self.autoType: + if _func.return_type == self.autoType: + self.errors.append(f'Unable to infer the type of {_func.name}') + node.type = _func.return_type.name # .name? + elif isinstance(node.type, Type): + node.type = node.type.name + + @visitor.when(ConditionalNode)# + def visit(self, node, scope): + _thenScope = scope.children[0] + _elseScope = scope.children[1] + + + self.visit(node.ifChunk, scope) + self.visit(node.thenChunk, _thenScope) + self.visit(node.elseChunk, _elseScope) + + @visitor.when(ChunkNode)# + def visit(self, node, scope): + for expr in node.chunk: + self.visit(expr, scope.children[0]) + + @visitor.when(CallNode)# + def visit(self, node, scope): + self.visit(node.obj, scope) + for _arg in node.args: + self.visit(_arg, scope) + + @visitor.when(LetInNode)# + def visit(self, node, scope): + count = 0 + for decl in node.decl_list: + expr = decl.expr + if expr is not None: + self.visit(expr, scope.children[count]) + count += 1 + + for d in node.decl_list: + _var = scope.find_variable(d.id) + if d.type == 'AUTO_TYPE': + if _var.type == self.autoType: + self.errors.append(f'Unable to infer the type of {_var.name}') + while not isinstance(_var.type, Type): + _var.type = _var.type.type + d.type = _var.type.name + + + # for i in range(len(node.decl_list)): + # _ithName, _ithTypeName, _value = node.decl_list[i] + # _ithVar = scope.find_variable(_ithName) + # if _ithTypeName == 'AUTO_TYPE': + # if _ithVar.type == self.autoType: + # self.errors.append(f'Unable to infer the type of {_ithVar.name}') + # node.decl_list[i] = (_ithName, _ithVar.type.name, _value) + + @visitor.when(SwitchCaseNode)# + def visit(self, node, scope): + self.visit(node.expr, scope) + for i in range(len(node.case_list)): + self.visit(node.case_list[i][2], scope.children[i]) + + @visitor.when(WhileNode)# + def visit(self, node, scope): + self.visit(node.condition, scope) + self.visit(node.loopChunk, scope.children[0]) + + @visitor.when(BinaryNode)# + def visit(self, node, scope): + self.visit(node.left, scope) + self.visit(node.right, scope) + + @visitor.when(AtomicNode)# + def visit(self, node, scope): + pass + + @visitor.when(AssignNode)# + def visit(self, node, scope): + self.visit(node.expr, scope.children[0]) \ No newline at end of file diff --git a/tests/semantic/arithmetic5.cl b/tests/semantic/arithmetic5.cl index fd77c7971..3a3e3f177 100644 --- a/tests/semantic/arithmetic5.cl +++ b/tests/semantic/arithmetic5.cl @@ -8,4 +8,4 @@ class Main inherits IO { main(): IO { out_string("Hello World!")}; test: Bool <- let x: Int <- 1 / 2 - 3 + 4 * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() in x <- x * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); -}; \ No newline at end of file +}; diff --git a/tests/semantic/arithmetic9.cl b/tests/semantic/arithmetic9.cl index b7b4d3645..76f4a2b42 100644 --- a/tests/semantic/arithmetic9.cl +++ b/tests/semantic/arithmetic9.cl @@ -12,4 +12,4 @@ class Main inherits IO { main(): IO { out_string("Hello World!")}; test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() in 1 + ~new A.type_name().concat(new B.type_name().concat(new C.type_name())); -}; \ No newline at end of file +}; diff --git a/tests/semantic/let1.cl b/tests/semantic/let1.cl index 9220d3dbc..32dd507fd 100644 --- a/tests/semantic/let1.cl +++ b/tests/semantic/let1.cl @@ -10,6 +10,6 @@ class F inherits A { }; class Main inherits IO { main(): IO { out_string("Hello World!")}; - b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; - test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: C <- new E in b; -}; \ No newline at end of file + b: B <- let a: Bool, a: Int <- 5, a: String, a : A <- new F, b: B <- new E in b; + test: B <- let a: Bool, a: Int <- 5, a: String, a : A <- new F, b: C <- new E in b; +}; diff --git a/tests/semantic/let2.cl b/tests/semantic/let2.cl index 2949fb94d..780cefd2d 100644 --- a/tests/semantic/let2.cl +++ b/tests/semantic/let2.cl @@ -12,4 +12,4 @@ class Main inherits IO { b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: A <- new E in b; -}; \ No newline at end of file +}; diff --git a/tests/semantic/let3.cl b/tests/semantic/let3.cl index 0a4a9ceaf..507d8cbec 100644 --- a/tests/semantic/let3.cl +++ b/tests/semantic/let3.cl @@ -12,4 +12,4 @@ class Main inherits IO { b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: Cadena in new B; -}; \ No newline at end of file +}; diff --git a/tests/semantic/methods4.cl b/tests/semantic/methods4.cl index e093bac1c..76318d5d9 100644 --- a/tests/semantic/methods4.cl +++ b/tests/semantic/methods4.cl @@ -16,4 +16,4 @@ class D inherits B { }; class Main inherits IO { main(): IO { out_string("Hello World!")}; -}; \ No newline at end of file +}; From 879d3b6b63153a338c10549b67842c0e03ce1c75 Mon Sep 17 00:00:00 2001 From: regnod Date: Tue, 17 Aug 2021 17:04:26 -0400 Subject: [PATCH 10/93] adding cil ast and visitor with class declaration node done --- src/cil_ast/cil_ast.py | 171 +++++++++++++++++++++++++ src/visitors/CooltoCil.py | 258 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 429 insertions(+) create mode 100644 src/cil_ast/cil_ast.py create mode 100644 src/visitors/CooltoCil.py diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py new file mode 100644 index 000000000..9513fc626 --- /dev/null +++ b/src/cil_ast/cil_ast.py @@ -0,0 +1,171 @@ + +class Node: + pass + +class ProgramNode(Node): + def __init__(self, dottypes, dotdata, dotcode): + self.dottypes = dottypes + self.dotdata = dotdata + self.dotcode = dotcode + +class TypeNode(Node): + def __init__(self, name): + self.name = name + self.attributes = [] + self.methods = [] + +class DataNode(Node): + def __init__(self, vname, value): + self.name = vname + self.value = value + +class FunctionNode(Node): + def __init__(self, fname, params, localvars, instructions): + self.name = fname + self.params = params + self.localvars = localvars + self.instructions = instructions + +class ParamNode(Node): + def __init__(self, name): + self.name = name + +class LocalNode(Node): + def __init__(self, name): + self.name = name + +class InstructionNode(Node): + pass + +class AssignNode(InstructionNode): + def __init__(self, dest, source): + self.dest = dest + self.source = source + +class ArithmeticNode(InstructionNode): + def __init__(self, dest, left, right): + self.dest = dest + self.left = left + self.right = right + +class PlusNode(ArithmeticNode): + pass + +class MinusNode(ArithmeticNode): + pass + +class StarNode(ArithmeticNode): + pass + +class DivNode(ArithmeticNode): + pass + +class GetAttribNode(InstructionNode): + def __init__(self, inst, attr): + self.inst = inst + self.attr = attr + +class SetAttribNode(InstructionNode): + def __init__(self, inst, attr, dest): + self.inst = inst + self.attr = attr + self.dest = dest + +class GetIndexNode(InstructionNode): + def __init__(self, array, index): + self.array = array + self.index = index + +class SetIndexNode(InstructionNode): + def __init__(self, array, index, source): + self.array = array + self.index = index + self.source = source + +class AllocateNode(InstructionNode): + def __init__(self, itype, dest): + self.type = itype + self.dest = dest + +class ArrayNode(InstructionNode): + def __init__(self, length): + #preguntar a jp + pass +class TypeOfNode(InstructionNode): + def __init__(self, obj, dest): + self.obj = obj + self.dest = dest + +class LabelNode(InstructionNode): + def __init__(self, name): + self.name = name + +class GotoNode(InstructionNode): + def __init__(self, label): + self.label = label + +class GotoIfNode(InstructionNode): + def __init__(self, label, condition): + self.label = label + self.condition = condition + +class StaticCallNode(InstructionNode): + def __init__(self, function, dest): + self.function = function + self.dest = dest + +class DynamicCallNode(InstructionNode): + def __init__(self, xtype, method, dest): + self.type = xtype + self.method = method + self.dest = dest + +class ArgNode(InstructionNode): + def __init__(self, name): + self.name = name + +class ReturnNode(InstructionNode): + def __init__(self, value=None): + self.value = value + +class LoadNode(InstructionNode): + def __init__(self, dest, msg): + self.dest = dest + self.msg = msg + +class LengthNode(InstructionNode): + def __init__(self, dest, string): + self.dest = dest + self.string = string + +class ConcatNode(InstructionNode): + def __init__(self, dest, prefix, sufix): + self.dest = dest + self.prefix = prefix + self.sufix = sufix + +class PrefixNode(InstructionNode): + def __init__(self, dest, string, n): + self.dest = dest + self.string = string + self.n = n + +class SubstringNode(InstructionNode): + def __init__(self, dest, string, i, n): + self.dest = dest + self.string = string + self.i = i + self.n = n + +class ToStrNode(InstructionNode): + def __init__(self, dest, ivalue): + self.dest = dest + self.ivalue = ivalue + +class ReadNode(InstructionNode): + def __init__(self, dest): + self.dest = dest + +class PrintNode(InstructionNode): + def __init__(self, str_addr): + self.str_addr = str_addr diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py new file mode 100644 index 000000000..d4ce08bd2 --- /dev/null +++ b/src/visitors/CooltoCil.py @@ -0,0 +1,258 @@ + +from cool_ast.cool_ast import * +import cil_ast.cil_ast as cil +from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo +import visitors.visitor as visitor +# from utils.errors import _TypeError, _NameError, _SemanticError, _AtributeError + +class BaseCOOLToCILVisitor: + 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 + + # for faster search + self.locals_dict = {} + self.param_set = set() + self.attr_set = set() + + @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 register_local(self, vinfo): + vinfo.name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' + local_node = cil.LocalNode(vinfo.name) + self.localvars.append(local_node) + return vinfo.name + + def define_internal_local(self): + vinfo = VariableInfo('internal', None) + return self.register_local(vinfo) + + def register_instruction(self, instruction): + self.instructions.append(instruction) + return instruction + + def to_function_name(self, method_name, type_name): + return f'function_{method_name}_at_{type_name}' + + def register_function(self, function_name): + function_node = cil.FunctionNode(function_name, [], [], []) + self.dotcode.append(function_node) + return function_node + + def register_type(self, name): + type_node = cil.TypeNode(name) + self.dottypes.append(type_node) + return type_node + + def register_data(self, value): + vname = f'data_{len(self.dotdata)}' + data_node = cil.DataNode(vname, value) + self.dotdata.append(data_node) + return data_node + + + + +class MiniCOOLToCILVisitor(BaseCOOLToCILVisitor): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node, scope): + ###################################################### + # node.declarations -> [ ClassDeclarationNode ... ] + ###################################################### + + self.current_function = self.register_function('entry') + instance = self.define_internal_local() + result = self.define_internal_local() + main_method_name = self.to_function_name('main', 'Main') + self.register_instruction(cil.AllocateNode('Main', instance)) + self.register_instruction(cil.ArgNode(instance)) + self.register_instruction(cil.StaticCallNode(main_method_name, result)) + self.register_instruction(cil.ReturnNode(0)) + self.current_function = None + + for declaration, child_scope in zip(node.declarations, scope.children): + self.visit(declaration, child_scope) + + return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope): + #################################################################### + # node.id -> str + # node.parent -> str + # node.features -> [ FuncDeclarationNode/AttrDeclarationNode ... ] + #################################################################### + + self.current_type = self.context.get_type(node.id) + + # Your code here!!! (Handle all the .TYPE section) + type_node = self.register_type(node.id) + + attributes = [] + methods = [] + + current = node + current_type = self.current_type + while current.parent is not None: + attr_temp = [] + method_temp = [] + for attr in current.attributes: + self.attr_set.add(attr.name) + attr_temp.append(attr.name) + + for method in current_type.methods: + method_temp.append((method.name, self.to_function_name(method.name, current_type.name))) + + attributes = attr_temp + attributes + methods = method_temp + methods + current = current.parent + current_type = self.context.get_type(current.id) + + type_node.attributes = attributes + type_node.methods = methods + + + func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) + for feature, child_scope in zip(func_declarations, scope.children): + self.visit(feature, child_scope) + + self.current_type = None + + @visitor.when(FuncDeclarationNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.params -> [ (str, str) ... ] + # node.type -> str + # node.body -> [ ExpressionNode ... ] + ############################### + + self.current_method = self.current_type.get_method(node.id) + + # Your code here!!! (Handle PARAMS) + + for instruction, child_scope in zip(node.body, scope.children): + value = self.visit(instruction, child_scope) + # Your code here!!! (Handle RETURN) + + self.current_method = None + + @visitor.when(VarDeclarationNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.type -> str + # node.expr -> ExpressionNode + ############################### + + # Your code here!!! + pass + + @visitor.when(AssignNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.expr -> ExpressionNode + ############################### + + # Your code here!!! + pass + + @visitor.when(CallNode) + def visit(self, node, scope): + ############################### + # node.obj -> AtomicNode + # node.id -> str + # node.args -> [ ExpressionNode ... ] + ############################### + + # Your code here!!! + pass + + @visitor.when(ConstantNumNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + + # Your code here!!! (Pretty easy ;-)) + pass + + @visitor.when(VariableNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + + # Your code here!!! + pass + + @visitor.when(InstantiateNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + + # Your code here!!! + pass + + @visitor.when(PlusNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + + # Your code here!!! + pass + + @visitor.when(MinusNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + + # Your code here!!! + pass + + @visitor.when(StarNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + + # Your code here!!! + pass + + @visitor.when(DivNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + + # Your code here!!! + pass + + # ====================================================================== \ No newline at end of file From 8266445bede0552c7a89166c1316cb3c8681836f Mon Sep 17 00:00:00 2001 From: Yumenio Date: Thu, 19 Aug 2021 15:32:30 -0400 Subject: [PATCH 11/93] enganchando el visitor para traducir a CIL --- README.md | 31 +++++ README.pdf | Bin 0 -> 22150 bytes Readme.md => orientacion.md | 0 src/cil_ast/cil.py | 259 ++++++++++++++++++++++++++++++++++++ src/main.py | 3 +- src/pipeline.py | 8 +- src/visitors/CooltoCil.py | 235 ++++++++++++++++++++++++++++++++ tests/boku/test1.cl | 16 +++ 8 files changed, 549 insertions(+), 3 deletions(-) create mode 100644 README.md create mode 100644 README.pdf rename Readme.md => orientacion.md (100%) create mode 100755 src/cil_ast/cil.py create mode 100644 src/visitors/CooltoCil.py create mode 100644 tests/boku/test1.cl diff --git a/README.md b/README.md new file mode 100644 index 000000000..2349a3111 --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +## Proyecto de compilación + + + +#### Integrantes: Richard Garcia De la Osa C412, Andy Castañeda Guerra C412 + + + +#### Bicliotecas usadas: + +​ En nuestro proyecto utilizamos la biblioteca **ply** para generar el **lexer** y el **parser** para la gramática de **Cool**. + + + +#### Fases del proyecto: + +​ Primeramente desarrollamos el lexer, apoyándonos de **ply.lex**, así como de la documentación del mismo. + +​ Una ventaja de trabajar con esta librería es que además, nos permite crear fácilmente el parser para nuestra gramática, apoyándonos en el lexer anteriormente creado. Para esto usamos **ply.yacc**, lo cual nos devuelve un **AST** con la estructura que deseemos. + +​ Al contar ya con el **AST**, realizaremos 5 recorridos sobre el mismo, estos son: + +* Type Collector: para registrar todos los tipos con los que trabajaremos en el programa. +* Type Builder: encargado de agregarle a cada uno de los tipos anteriormente colectados cada una de sus funcionalidades(atributos, funciones). +* Type Checker: con este recorrido nos aseguramos que la semántica del programa se corresponda con la semántica esperada para Cool. A partir de este punto el código no contiene ningún error. +* Code Gen: fase de generación de código, contenido por estudiar. +* Executor: ejecutar finalmente el programa. + + + +​ Pretendemos para septiembre tener finalizado el lexer, el parser, y los tres primeros recorridos enunciados, TypeCollector, TypeBuilder y TypeChecker. Para los meses restantes, pretendemos en octubre ya tener la fase de generación de código implementada. Luego en noviembre solo restaría la ejecución, y en el tiempo restante, dedicarnos a pulir errores. \ No newline at end of file diff --git a/README.pdf b/README.pdf new file mode 100644 index 0000000000000000000000000000000000000000..85db7c04c1a4ee0f6f471a0750a831d79f13d6bc GIT binary patch literal 22150 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�vuEJbUMQj?LgeR4NC9BL|H}wO7Or@p0KV% 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 literal 0 HcmV?d00001 diff --git a/Readme.md b/orientacion.md similarity index 100% rename from Readme.md rename to orientacion.md diff --git a/src/cil_ast/cil.py b/src/cil_ast/cil.py new file mode 100755 index 000000000..91d7e9235 --- /dev/null +++ b/src/cil_ast/cil.py @@ -0,0 +1,259 @@ +import visitors.visitor as visitor + + +class Node: + pass + +class ProgramNode(Node): + def __init__(self, dottypes, dotdata, dotcode): + self.dottypes = dottypes + self.dotdata = dotdata + self.dotcode = dotcode + +class TypeNode(Node): + def __init__(self, name): + self.name = name + self.attributes = [] + self.methods = [] + +class DataNode(Node): + def __init__(self, vname, value): + self.name = vname + self.value = value + +class FunctionNode(Node): + def __init__(self, fname, params, localvars, instructions): + self.name = fname + self.params = params + self.localvars = localvars + self.instructions = instructions + +class ParamNode(Node): + def __init__(self, name): + self.name = name + +class LocalNode(Node): + def __init__(self, name): + self.name = name + +class InstructionNode(Node): + pass + +class AssignNode(InstructionNode): + def __init__(self, dest, source): + self.dest = dest + self.source = source + +class ArithmeticNode(InstructionNode): + def __init__(self, dest, left, right): + self.dest = dest + self.left = left + self.right = right + +class PlusNode(ArithmeticNode): + pass + +class MinusNode(ArithmeticNode): + pass + +class StarNode(ArithmeticNode): + pass + +class DivNode(ArithmeticNode): + pass + +class GetAttribNode(InstructionNode): + def __init__(self, inst, attr): + self.inst = inst + self.attr = attr + +class SetAttribNode(InstructionNode): + def __init__(self, inst, attr, dest): + self.inst = inst + self.attr = attr + self.dest = dest + +class GetIndexNode(InstructionNode): + def __init__(self, array, index): + self.array = array + self.index = index + + +class SetIndexNode(InstructionNode): + def __init__(self, array, index, source): + self.array = array + self.index = index + self.source = source + +class AllocateNode(InstructionNode): + def __init__(self, itype, dest): + self.type = itype + self.dest = dest + +class ArrayNode(InstructionNode): + #ask jp + pass + +class TypeOfNode(InstructionNode): + def __init__(self, obj, dest): + self.obj = obj + self.dest = dest + +class LabelNode(InstructionNode): + def __init__(self, name): + self.name = name + +class GotoNode(InstructionNode): + def __init__(self, label): + self.label = label + +class GotoIfNode(InstructionNode): + def __init__(self, name, condition): + self.label = label + self.condition = condition + +class StaticCallNode(InstructionNode): + def __init__(self, function, dest): + self.function = function + self.dest = dest + +class DynamicCallNode(InstructionNode): + def __init__(self, xtype, method, dest): + self.type = xtype + self.method = method + self.dest = dest + +class ArgNode(InstructionNode): + def __init__(self, name): + self.name = name + +class ReturnNode(InstructionNode): + def __init__(self, value=None): + self.value = value + +class LoadNode(InstructionNode): + def __init__(self, dest, msg): + self.dest = dest + self.msg = msg + +class LengthNode(InstructionNode): + def __init__(self, dest, string): + self.dest = dest + self.string = string + +class ConcatNode(InstructionNode): + def __init__(self, dest, prefix, sufix): + self.dest = dest + self.prefix = prefix + self.sufix = sufix + +class PrefixNode(InstructionNode): + def __init__(self, dest, string, n): + self.dest = dest + self.string = string + self.n = n + +class SubstringNode(InstructionNode): + def __init__(self, dest, string, i, n): + self.dest = dest + self.string = string + self.i = i + self.n = n + +class ToStrNode(InstructionNode): + def __init__(self, dest, ivalue): + self.dest = dest + self.ivalue = ivalue + +class ReadNode(InstructionNode): + def __init__(self, dest): + self.dest = dest + +class PrintNode(InstructionNode): + def __init__(self, str_addr): + self.str_addr = str_addr + +def get_formatter(): + + class PrintVisitor(object): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + dottypes = '\n'.join(self.visit(t) for t in node.dottypes) + dotdata = '\n'.join(self.visit(t) for t in node.dotdata) + 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(TypeNode) + def visit(self, node): + attributes = '\n\t'.join(f'attribute {x}' for x in node.attributes) + methods = '\n\t'.join(f'method {x}: {y}' for x,y in node.methods) + + return f'type {node.name} {{\n\t{attributes}\n\n\t{methods}\n}}' + + @visitor.when(FunctionNode) + 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(ParamNode) + def visit(self, node): + return f'PARAM {node.name}' + + @visitor.when(LocalNode) + def visit(self, node): + return f'LOCAL {node.name}' + + @visitor.when(AssignNode) + def visit(self, node): + return f'{node.dest} = {node.source}' + + @visitor.when(PlusNode) + def visit(self, node): + return f'{node.dest} = {node.left} + {node.right}' + + @visitor.when(MinusNode) + def visit(self, node): + return f'{node.dest} = {node.left} - {node.right}' + + @visitor.when(StarNode) + def visit(self, node): + return f'{node.dest} = {node.left} * {node.right}' + + @visitor.when(DivNode) + def visit(self, node): + return f'{node.dest} = {node.left} / {node.right}' + + @visitor.when(AllocateNode) + def visit(self, node): + return f'{node.dest} = ALLOCATE {node.type}' + + @visitor.when(TypeOfNode) + def visit(self, node): + return f'{node.dest} = TYPEOF {node.type}' + + @visitor.when(StaticCallNode) + def visit(self, node): + return f'{node.dest} = CALL {node.function}' + + @visitor.when(DynamicCallNode) + def visit(self, node): + return f'{node.dest} = VCALL {node.type} {node.method}' + + @visitor.when(ArgNode) + def visit(self, node): + return f'ARG {node.name}' + + @visitor.when(ReturnNode) + def visit(self, node): + return f'RETURN {node.value if node.value is not None else ""}' + + printer = PrintVisitor() + return (lambda ast: printer.visit(ast)) \ No newline at end of file diff --git a/src/main.py b/src/main.py index 991b164a0..63457b645 100644 --- a/src/main.py +++ b/src/main.py @@ -4,7 +4,8 @@ from pipeline import Pipeline -with open('/home/regnod/Documents/cmp_compiler 4to/cool-compiler-2021/tests/semantic/self4.cl') as f: +# with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/semantic/self4.cl') as f: +with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/boku/test1.cl') as f: program = f.read() coolLexer = lexer.CoolLexer() diff --git a/src/pipeline.py b/src/pipeline.py index 1aa4f128f..6d298d6c5 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -5,6 +5,7 @@ from visitors.Checker import TypeChecker from visitors.Inferencer import Inferencer from visitors.Executor import Executor, RuntimeException +from visitors.CooltoCil import MiniCOOLToCILVisitor class Pipeline(): def __init__(self, program, lexer, parser, verbose=False): @@ -44,8 +45,11 @@ def __init__(self, program, lexer, parser, verbose=False): self.typeBuilder.visit(self.ast) if len(self.errors) == 0: self.typeChecker = TypeChecker(self.context, self.errors) - self.typeChecker.visit(self.ast, Scope()) - + self.typeChecker.visit( self.ast, Scope()) + self.coolToCil = MiniCOOLToCILVisitor(self.context) + self.coolToCil.visit(self.ast, Scope()) + + if verbose: print('This is after infering types:') print() diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py new file mode 100644 index 000000000..754f6743a --- /dev/null +++ b/src/visitors/CooltoCil.py @@ -0,0 +1,235 @@ +from cool_ast.cool_ast import * +import cil_ast as cil +from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo +import visitors.visitor as visitor +import cil_ast.cil as cil + +class BaseCOOLToCILVisitor: + 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 + + @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 register_local(self, vinfo): + vinfo.name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' + local_node = cil.LocalNode(vinfo.name) + self.localvars.append(local_node) + return vinfo.name + + def define_internal_local(self): + vinfo = VariableInfo('internal', None) + return self.register_local(vinfo) + + def register_instruction(self, instruction): + self.instructions.append(instruction) + return instruction + + def to_function_name(self, method_name, type_name): + return f'function_{method_name}_at_{type_name}' + + def register_function(self, function_name): + function_node = cil.FunctionNode(function_name, [], [], []) + self.dotcode.append(function_node) + return function_node + + def register_type(self, name): + type_node = cil.TypeNode(name) + self.dottypes.append(type_node) + return type_node + + def register_data(self, value): + vname = f'data_{len(self.dotdata)}' + data_node = cil.DataNode(vname, value) + self.dotdata.append(data_node) + return data_node + + +class MiniCOOLToCILVisitor(BaseCOOLToCILVisitor): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node, scope): + ###################################################### + # node.declarations -> [ ClassDeclarationNode ... ] + ###################################################### + + self.current_function = self.register_function('entry') + instance = self.define_internal_local() + result = self.define_internal_local() + main_method_name = self.to_function_name('main', 'Main') + self.register_instruction(cil.AllocateNode('Main', instance)) + self.register_instruction(cil.ArgNode(instance)) + self.register_instruction(cil.StaticCallNode(main_method_name, result)) + self.register_instruction(cil.ReturnNode(0)) + self.current_function = None + + for declaration, child_scope in zip(node.declarations, scope.children): + self.visit(declaration, child_scope) + + return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope): + #################################################################### + # node.id -> str + # node.parent -> str + # node.features -> [ FuncDeclarationNode/AttrDeclarationNode ... ] + #################################################################### + + self.current_type = self.context.get_type(node.id) + + # Your code here!!! (Handle all the .TYPE section) + + func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) + for feature, child_scope in zip(func_declarations, scope.children): + self.visit(feature, child_scope) + + self.current_type = None + + @visitor.when(FuncDeclarationNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.params -> [ (str, str) ... ] + # node.type -> str + # node.body -> [ ExpressionNode ... ] + ############################### + + self.current_method = self.current_type.get_method(node.id) + + # Your code here!!! (Handle PARAMS) + + for instruction, child_scope in zip(node.body, scope.children): + value = self.visit(instruction, child_scope) + # Your code here!!! (Handle RETURN) + + self.current_method = None + + @visitor.when(VarDeclarationNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.type -> str + # node.expr -> ExpressionNode + ############################### + + # Your code here!!! + pass + + @visitor.when(AssignNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.expr -> ExpressionNode + ############################### + + # Your code here!!! + pass + + @visitor.when(CallNode) + def visit(self, node, scope): + ############################### + # node.obj -> AtomicNode + # node.id -> str + # node.args -> [ ExpressionNode ... ] + ############################### + + # Your code here!!! + pass + + @visitor.when(ConstantNumNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + + # Your code here!!! (Pretty easy ;-)) + pass + + @visitor.when(VariableNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + + # Your code here!!! + pass + + @visitor.when(InstantiateNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + + # Your code here!!! + pass + + @visitor.when(PlusNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.PlusNode(dest, left, right)) + return dest + + @visitor.when(MinusNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.MinusNode(dest, left, right)) + return dest + + @visitor.when(StarNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.StarNode(dest, left, right)) + return dest + + @visitor.when(DivNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.DivNode(dest, left, right)) + return dest diff --git a/tests/boku/test1.cl b/tests/boku/test1.cl new file mode 100644 index 000000000..192ab9a07 --- /dev/null +++ b/tests/boku/test1.cl @@ -0,0 +1,16 @@ +class A { + a: Int; +}; + +class B inherits A { + b: Int; +}; + +class C inherits B { + c: Int; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Int <- 1 in x; +}; From 14ee851f5696a4a3a1b380bc171ec27cb14f73e1 Mon Sep 17 00:00:00 2001 From: regnod Date: Sat, 21 Aug 2021 01:00:54 -0400 Subject: [PATCH 12/93] trying to update --- src/cil_ast/cil.py | 259 -------------------------------------- src/cil_ast/cil_ast.py | 84 ++++++++++++- src/main.py | 2 +- src/visitors/CooltoCil.py | 31 +++-- 4 files changed, 105 insertions(+), 271 deletions(-) delete mode 100755 src/cil_ast/cil.py diff --git a/src/cil_ast/cil.py b/src/cil_ast/cil.py deleted file mode 100755 index 91d7e9235..000000000 --- a/src/cil_ast/cil.py +++ /dev/null @@ -1,259 +0,0 @@ -import visitors.visitor as visitor - - -class Node: - pass - -class ProgramNode(Node): - def __init__(self, dottypes, dotdata, dotcode): - self.dottypes = dottypes - self.dotdata = dotdata - self.dotcode = dotcode - -class TypeNode(Node): - def __init__(self, name): - self.name = name - self.attributes = [] - self.methods = [] - -class DataNode(Node): - def __init__(self, vname, value): - self.name = vname - self.value = value - -class FunctionNode(Node): - def __init__(self, fname, params, localvars, instructions): - self.name = fname - self.params = params - self.localvars = localvars - self.instructions = instructions - -class ParamNode(Node): - def __init__(self, name): - self.name = name - -class LocalNode(Node): - def __init__(self, name): - self.name = name - -class InstructionNode(Node): - pass - -class AssignNode(InstructionNode): - def __init__(self, dest, source): - self.dest = dest - self.source = source - -class ArithmeticNode(InstructionNode): - def __init__(self, dest, left, right): - self.dest = dest - self.left = left - self.right = right - -class PlusNode(ArithmeticNode): - pass - -class MinusNode(ArithmeticNode): - pass - -class StarNode(ArithmeticNode): - pass - -class DivNode(ArithmeticNode): - pass - -class GetAttribNode(InstructionNode): - def __init__(self, inst, attr): - self.inst = inst - self.attr = attr - -class SetAttribNode(InstructionNode): - def __init__(self, inst, attr, dest): - self.inst = inst - self.attr = attr - self.dest = dest - -class GetIndexNode(InstructionNode): - def __init__(self, array, index): - self.array = array - self.index = index - - -class SetIndexNode(InstructionNode): - def __init__(self, array, index, source): - self.array = array - self.index = index - self.source = source - -class AllocateNode(InstructionNode): - def __init__(self, itype, dest): - self.type = itype - self.dest = dest - -class ArrayNode(InstructionNode): - #ask jp - pass - -class TypeOfNode(InstructionNode): - def __init__(self, obj, dest): - self.obj = obj - self.dest = dest - -class LabelNode(InstructionNode): - def __init__(self, name): - self.name = name - -class GotoNode(InstructionNode): - def __init__(self, label): - self.label = label - -class GotoIfNode(InstructionNode): - def __init__(self, name, condition): - self.label = label - self.condition = condition - -class StaticCallNode(InstructionNode): - def __init__(self, function, dest): - self.function = function - self.dest = dest - -class DynamicCallNode(InstructionNode): - def __init__(self, xtype, method, dest): - self.type = xtype - self.method = method - self.dest = dest - -class ArgNode(InstructionNode): - def __init__(self, name): - self.name = name - -class ReturnNode(InstructionNode): - def __init__(self, value=None): - self.value = value - -class LoadNode(InstructionNode): - def __init__(self, dest, msg): - self.dest = dest - self.msg = msg - -class LengthNode(InstructionNode): - def __init__(self, dest, string): - self.dest = dest - self.string = string - -class ConcatNode(InstructionNode): - def __init__(self, dest, prefix, sufix): - self.dest = dest - self.prefix = prefix - self.sufix = sufix - -class PrefixNode(InstructionNode): - def __init__(self, dest, string, n): - self.dest = dest - self.string = string - self.n = n - -class SubstringNode(InstructionNode): - def __init__(self, dest, string, i, n): - self.dest = dest - self.string = string - self.i = i - self.n = n - -class ToStrNode(InstructionNode): - def __init__(self, dest, ivalue): - self.dest = dest - self.ivalue = ivalue - -class ReadNode(InstructionNode): - def __init__(self, dest): - self.dest = dest - -class PrintNode(InstructionNode): - def __init__(self, str_addr): - self.str_addr = str_addr - -def get_formatter(): - - class PrintVisitor(object): - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node): - dottypes = '\n'.join(self.visit(t) for t in node.dottypes) - dotdata = '\n'.join(self.visit(t) for t in node.dotdata) - 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(TypeNode) - def visit(self, node): - attributes = '\n\t'.join(f'attribute {x}' for x in node.attributes) - methods = '\n\t'.join(f'method {x}: {y}' for x,y in node.methods) - - return f'type {node.name} {{\n\t{attributes}\n\n\t{methods}\n}}' - - @visitor.when(FunctionNode) - 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(ParamNode) - def visit(self, node): - return f'PARAM {node.name}' - - @visitor.when(LocalNode) - def visit(self, node): - return f'LOCAL {node.name}' - - @visitor.when(AssignNode) - def visit(self, node): - return f'{node.dest} = {node.source}' - - @visitor.when(PlusNode) - def visit(self, node): - return f'{node.dest} = {node.left} + {node.right}' - - @visitor.when(MinusNode) - def visit(self, node): - return f'{node.dest} = {node.left} - {node.right}' - - @visitor.when(StarNode) - def visit(self, node): - return f'{node.dest} = {node.left} * {node.right}' - - @visitor.when(DivNode) - def visit(self, node): - return f'{node.dest} = {node.left} / {node.right}' - - @visitor.when(AllocateNode) - def visit(self, node): - return f'{node.dest} = ALLOCATE {node.type}' - - @visitor.when(TypeOfNode) - def visit(self, node): - return f'{node.dest} = TYPEOF {node.type}' - - @visitor.when(StaticCallNode) - def visit(self, node): - return f'{node.dest} = CALL {node.function}' - - @visitor.when(DynamicCallNode) - def visit(self, node): - return f'{node.dest} = VCALL {node.type} {node.method}' - - @visitor.when(ArgNode) - def visit(self, node): - return f'ARG {node.name}' - - @visitor.when(ReturnNode) - def visit(self, node): - return f'RETURN {node.value if node.value is not None else ""}' - - printer = PrintVisitor() - return (lambda ast: printer.visit(ast)) \ No newline at end of file diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 9513fc626..8e0dad155 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -1,4 +1,3 @@ - class Node: pass @@ -169,3 +168,86 @@ def __init__(self, dest): class PrintNode(InstructionNode): def __init__(self, str_addr): self.str_addr = str_addr +def get_formatter(): + class PrintVisitor(object): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + dottypes = '\n'.join(self.visit(t) for t in node.dottypes) + dotdata = '\n'.join(self.visit(t) for t in node.dotdata) + 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(TypeNode) + def visit(self, node): + attributes = '\n\t'.join(f'attribute {x}' for x in node.attributes) + methods = '\n\t'.join(f'method {x}: {y}' for x,y in node.methods) + + return f'type {node.name} {{\n\t{attributes}\n\n\t{methods}\n}}' + + @visitor.when(FunctionNode) + 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(ParamNode) + def visit(self, node): + return f'PARAM {node.name}' + + @visitor.when(LocalNode) + def visit(self, node): + return f'LOCAL {node.name}' + + @visitor.when(AssignNode) + def visit(self, node): + return f'{node.dest} = {node.source}' + + @visitor.when(PlusNode) + def visit(self, node): + return f'{node.dest} = {node.left} + {node.right}' + + @visitor.when(MinusNode) + def visit(self, node): + return f'{node.dest} = {node.left} - {node.right}' + + @visitor.when(StarNode) + def visit(self, node): + return f'{node.dest} = {node.left} * {node.right}' + + @visitor.when(DivNode) + def visit(self, node): + return f'{node.dest} = {node.left} / {node.right}' + + @visitor.when(AllocateNode) + def visit(self, node): + return f'{node.dest} = ALLOCATE {node.type}' + + @visitor.when(TypeOfNode) + def visit(self, node): + return f'{node.dest} = TYPEOF {node.type}' + + @visitor.when(StaticCallNode) + def visit(self, node): + return f'{node.dest} = CALL {node.function}' + + @visitor.when(DynamicCallNode) + def visit(self, node): + return f'{node.dest} = VCALL {node.type} {node.method}' + + @visitor.when(ArgNode) + def visit(self, node): + return f'ARG {node.name}' + + @visitor.when(ReturnNode) + def visit(self, node): + return f'RETURN {node.value if node.value is not None else ""}' + + printer = PrintVisitor() + return (lambda ast: printer.visit(ast)) \ No newline at end of file diff --git a/src/main.py b/src/main.py index 63457b645..8a413fb24 100644 --- a/src/main.py +++ b/src/main.py @@ -5,7 +5,7 @@ # with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/semantic/self4.cl') as f: -with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/boku/test1.cl') as f: +with open('../tests/boku/test1.cl') as f: program = f.read() coolLexer = lexer.CoolLexer() diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index ce6bc6960..87a8729e2 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -106,13 +106,12 @@ def visit(self, node, scope): attributes = [] methods = [] - current = node current_type = self.current_type - while current.parent is not None: + while current_type.parent is not None: attr_temp = [] method_temp = [] - for attr in current.attributes: - self.attr_set.add(attr.name) + for attr in current_type.attributes: + # self.attr_set.add(attr.name) attr_temp.append(attr.name) for method in current_type.methods: @@ -120,8 +119,9 @@ def visit(self, node, scope): attributes = attr_temp + attributes methods = method_temp + methods - current = current.parent - current_type = self.context.get_type(current.id) + + current_type = current_type.parent + type_node.attributes = attributes type_node.methods = methods @@ -142,14 +142,25 @@ def visit(self, node, scope): # node.body -> [ ExpressionNode ... ] ############################### - self.current_method = self.current_type.get_method(node.id) + self.current_method = self.current_type.get_method(node.id, self.current_type, False) # Your code here!!! (Handle PARAMS) + self.current_function = self.register_function(self.to_function_name(node.id, self.current_type.name)) + + self.params.append(cil.ParamNode('self')) + for arg_name, _ in node.params: + self.params.append(cil.ParamNode(arg_name)) - for instruction, child_scope in zip(node.body, scope.children): - value = self.visit(instruction, child_scope) + return_value = self.visit(node.body, scope.children[0]) + # for instruction, child_scope in zip(node.body, scope.children): + # value = self.visit(instruction, child_scope) + # Your code here!!! (Handle RETURN) - + if node.body and 'Void' != node.type: + self.register_instruction(cil.ReturnNode(return_value)) + else: + self.register_instruction(cil.ReturnNode()) + self.current_method = None @visitor.when(VarDeclarationNode) From 0eba71ffb0fbb7f41be1aa34c4d6379889735144 Mon Sep 17 00:00:00 2001 From: regnod Date: Tue, 14 Sep 2021 15:32:15 -0400 Subject: [PATCH 13/93] merge some advances --- src/cil_ast/cil_ast.py | 4 +- src/pipeline.py | 5 ++- src/visitors/CooltoCil.py | 95 ++++++++++++++++++++++++++++++++------- tests/boku/test1.cl | 4 +- 4 files changed, 88 insertions(+), 20 deletions(-) diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 8e0dad155..63b9aed0d 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -65,10 +65,10 @@ def __init__(self, inst, attr): self.attr = attr class SetAttribNode(InstructionNode): - def __init__(self, inst, attr, dest): + def __init__(self, inst, attr, source): self.inst = inst self.attr = attr - self.dest = dest + self.source = source class GetIndexNode(InstructionNode): def __init__(self, array, index): diff --git a/src/pipeline.py b/src/pipeline.py index 6d298d6c5..f6c84967e 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -43,11 +43,12 @@ def __init__(self, program, lexer, parser, verbose=False): if len(self.errors) == 0: self.typeBuilder = TypeBuilder(self.context, self.errors) self.typeBuilder.visit(self.ast) + scope = Scope() if len(self.errors) == 0: self.typeChecker = TypeChecker(self.context, self.errors) - self.typeChecker.visit( self.ast, Scope()) + self.typeChecker.visit( self.ast, scope) self.coolToCil = MiniCOOLToCILVisitor(self.context) - self.coolToCil.visit(self.ast, Scope()) + self.coolToCil.visit(self.ast, scope) if verbose: diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 87a8729e2..783b06148 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -15,9 +15,10 @@ def __init__(self, context): self.context = context # for faster search - self.locals_dict = {} - self.param_set = set() - self.attr_set = set() + self.locals = {} + self.attrs = set() + self.parameters = set() + self.instances = [] @property def params(self): @@ -77,6 +78,7 @@ def visit(self, node, scope): self.current_function = self.register_function('entry') instance = self.define_internal_local() + self.instances.append(instance) result = self.define_internal_local() main_method_name = self.to_function_name('main', 'Main') self.register_instruction(cil.AllocateNode('Main', instance)) @@ -88,6 +90,7 @@ def visit(self, node, scope): for declaration, child_scope in zip(node.declarations, scope.children): self.visit(declaration, child_scope) + self.instances.pop() return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) @visitor.when(ClassDeclarationNode) @@ -105,13 +108,14 @@ def visit(self, node, scope): attributes = [] methods = [] + self.attrs.clear() current_type = self.current_type while current_type.parent is not None: attr_temp = [] method_temp = [] for attr in current_type.attributes: - # self.attr_set.add(attr.name) + self.attrs.add(attr.name) attr_temp.append(attr.name) for method in current_type.methods: @@ -127,10 +131,13 @@ def visit(self, node, scope): type_node.methods = methods - func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) - for feature, child_scope in zip(func_declarations, scope.children): - self.visit(feature, child_scope) - + # func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) + for feature, child_scope in zip(node.features, scope.children): + if isinstance(feature, FuncDeclarationNode): + self.visit(feature, child_scope) + + #falta visitar los atributos + self.current_type = None @visitor.when(FuncDeclarationNode) @@ -147,10 +154,13 @@ def visit(self, node, scope): # Your code here!!! (Handle PARAMS) self.current_function = self.register_function(self.to_function_name(node.id, self.current_type.name)) + self.parameters.clear() self.params.append(cil.ParamNode('self')) for arg_name, _ in node.params: + self.params.add(arg_name) self.params.append(cil.ParamNode(arg_name)) + self.locals.clear() return_value = self.visit(node.body, scope.children[0]) # for instruction, child_scope in zip(node.body, scope.children): # value = self.visit(instruction, child_scope) @@ -163,7 +173,7 @@ def visit(self, node, scope): self.current_method = None - @visitor.when(VarDeclarationNode) + @visitor.when(VarDeclarationNode) # AssignNode def visit(self, node, scope): ############################### # node.id -> str @@ -172,9 +182,26 @@ def visit(self, node, scope): ############################### # Your code here!!! - pass + var = scope.find_variable(node.id) + dest = self.locals[var.name] = self.register_local(var) + + if node.expr is not None: + source = self.visit(node.expr, scope) + else: + # asignar valor por default + if node.type.lower() == 'int': + source = 0 + elif node.type.lower() == 'string': + source = '' + elif node.type.lower() == 'bool': + source = False + else: + source = None + self.register_instruction(cil.AssignNode(dest, source)) + return dest + - @visitor.when(AssignNode) + @visitor.when(AssignNode) # def visit(self, node, scope): ############################### # node.id -> str @@ -182,18 +209,54 @@ def visit(self, node, scope): ############################### # Your code here!!! - pass + if node.id in self.parameters: + dest = node.id + source = self.visit(node.expr, scope) + self.register_instruction(cil.AssignNode(dest, source)) + elif node.id in self.locals: + dest = self.locals[node.id] + source = self.visit(node.expr, scope) + self.register_instruction(cil.AssignNode(dest, source)) + elif node.id in self.attrs: + source = self.visit(node.expr, scope) + self.register_instruction(cil.SetAttribNode(self.instances[-1], node.id, source)) @visitor.when(CallNode) def visit(self, node, scope): ############################### # node.obj -> AtomicNode - # node.id -> str + # node.method -> str # node.args -> [ ExpressionNode ... ] ############################### # Your code here!!! - pass + if node.obj is not None: # static + obj = self.visit(node.obj, scope) + self.instances.append(obj) + if isinstance(node.obj, InstantiateNode): + obj_type = node.obj.lex + else: + obj_type = scope.find_variable(node.obj.lex).type.name + + local = self.define_internal_local() + self.register_instruction(cil.TypeOfNode(obj, local)) + + self.register_instruction(cil.ArgNode(obj)) + for arg in node.args: + self.register_instruction(cil.ArgNode(self.visit(arg, scope))) + + dest = self.define_internal_local() + obj_type = obj_type if node.parent == None else node.parent + self.register_instruction(cil.DynamicCallNode(local, self.to_function_name(node.method, obj_type), dest)) + else: # dynamic + self.register_instruction(cil.ArgNode(self.instances[-1])) + for arg in node.args: + self.register_instruction(cil.ArgNode(self.visit(arg, scope))) + + dest = self.define_internal_local() + self.register_instruction(cil.StaticCallNode(self.to_function_name(node.method, self.current_type.type.name), dest)) + self.instances.pop() + return dest @visitor.when(ConstantNumNode) def visit(self, node, scope): @@ -220,7 +283,9 @@ def visit(self, node, scope): ############################### # Your code here!!! - pass + dest = self.define_internal_local() + self.register_instruction(cil.AllocateNode(node.lex, dest)) + return dest @visitor.when(PlusNode) def visit(self, node, scope): diff --git a/tests/boku/test1.cl b/tests/boku/test1.cl index 192ab9a07..e3369e67f 100644 --- a/tests/boku/test1.cl +++ b/tests/boku/test1.cl @@ -1,5 +1,6 @@ class A { a: Int; + f1(): Int { a <- 3 }; }; class B inherits A { @@ -11,6 +12,7 @@ class C inherits B { }; class Main inherits IO { - main(): IO { out_string("Hello World!")}; + a: A <- new A; + main(): Int { a.f1() }; test: Int <- let x: Int <- 1 in x; }; From d03bf983ad82ee9ddb46394fd1ebcbfa392dccb6 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Tue, 14 Sep 2021 15:34:03 -0400 Subject: [PATCH 14/93] Merge parcial del codegen --- src/cil_ast/{cil.py => cil_ast.py} | 4 +- src/pipeline.py | 5 +- src/visitors/CooltoCil.py | 129 ++++++++++++++++++++++------- tests/boku/test1.cl | 4 +- 4 files changed, 108 insertions(+), 34 deletions(-) rename src/cil_ast/{cil.py => cil_ast.py} (98%) diff --git a/src/cil_ast/cil.py b/src/cil_ast/cil_ast.py similarity index 98% rename from src/cil_ast/cil.py rename to src/cil_ast/cil_ast.py index 91d7e9235..30ba3abea 100755 --- a/src/cil_ast/cil.py +++ b/src/cil_ast/cil_ast.py @@ -68,10 +68,10 @@ def __init__(self, inst, attr): self.attr = attr class SetAttribNode(InstructionNode): - def __init__(self, inst, attr, dest): + def __init__(self, inst, attr, source): self.inst = inst self.attr = attr - self.dest = dest + self.source = source class GetIndexNode(InstructionNode): def __init__(self, array, index): diff --git a/src/pipeline.py b/src/pipeline.py index 6d298d6c5..f6c84967e 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -43,11 +43,12 @@ def __init__(self, program, lexer, parser, verbose=False): if len(self.errors) == 0: self.typeBuilder = TypeBuilder(self.context, self.errors) self.typeBuilder.visit(self.ast) + scope = Scope() if len(self.errors) == 0: self.typeChecker = TypeChecker(self.context, self.errors) - self.typeChecker.visit( self.ast, Scope()) + self.typeChecker.visit( self.ast, scope) self.coolToCil = MiniCOOLToCILVisitor(self.context) - self.coolToCil.visit(self.ast, Scope()) + self.coolToCil.visit(self.ast, scope) if verbose: diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 754f6743a..bc87fff9e 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -1,8 +1,7 @@ from cool_ast.cool_ast import * -import cil_ast as cil from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo import visitors.visitor as visitor -import cil_ast.cil as cil +import cil_ast.cil_ast as cil class BaseCOOLToCILVisitor: def __init__(self, context): @@ -13,7 +12,12 @@ def __init__(self, context): self.current_method = None self.current_function = None self.context = context - + + self.locals = {} + self.attrs = set() + self.parameters = set() + self.instances = [] + @property def params(self): return self.current_function.params @@ -73,6 +77,7 @@ def visit(self, node, scope): self.current_function = self.register_function('entry') instance = self.define_internal_local() + self.instances.append(instance) result = self.define_internal_local() main_method_name = self.to_function_name('main', 'Main') self.register_instruction(cil.AllocateNode('Main', instance)) @@ -84,6 +89,7 @@ def visit(self, node, scope): for declaration, child_scope in zip(node.declarations, scope.children): self.visit(declaration, child_scope) + self.instances.pop() return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) @visitor.when(ClassDeclarationNode) @@ -97,13 +103,38 @@ def visit(self, node, scope): self.current_type = self.context.get_type(node.id) # Your code here!!! (Handle all the .TYPE section) - - func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) - for feature, child_scope in zip(func_declarations, scope.children): - self.visit(feature, child_scope) - + type_node = self.register_type(node.id) + + attributes = [] + methods = [] + self.attrs.clear() + + current = node + current_type = self.current_type + while current_type.parent is not None: + attr_temp = [] + method_temp = [] + for attr in current_type.attributes: + attr_temp.append(attr.name) + self.attrs.add(attr.name) + + for method in current_type.methods: + method_temp.append((method.name, self.to_function_name(method.name, current_type.name))) + + attributes = attr_temp + attributes + methods = method_temp + methods + current_type = current_type.parent + + type_node.attributes = attributes + type_node.methods = methods + + # func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) + for feature, child_scope in zip(node.features, scope.children): + if isinstance(feature, FuncDeclarationNode): + self.visit(feature, child_scope) self.current_type = None - + + @visitor.when(FuncDeclarationNode) def visit(self, node, scope): ############################### @@ -113,13 +144,23 @@ def visit(self, node, scope): # node.body -> [ ExpressionNode ... ] ############################### - self.current_method = self.current_type.get_method(node.id) - + self.current_method = self.current_type.get_method(node.id, self.current_type, False) + # Your code here!!! (Handle PARAMS) + self.current_function = self.register_function(self.to_function_name(node.id, self.current_type.name)) - for instruction, child_scope in zip(node.body, scope.children): - value = self.visit(instruction, child_scope) + self.parameters.clear() + self.params.append(cil.ParamNode('self')) + for arg_name,_ in node.params: + self.current_function.params.append(cil.ParamNode(arg_name)) + self.parameters.add(arg.name) + + # for instruction, child_scope in zip(node.body, scope.children): + self.locals.clear() + return_value = self.visit(node.body, scope.children[0]) # Your code here!!! (Handle RETURN) + if node.body and node.type != 'Void': + self.register_instruction(cil.ReturnNode(return_value)) self.current_method = None @@ -131,7 +172,7 @@ def visit(self, node, scope): # node.expr -> ExpressionNode ############################### - # Your code here!!! + pass @visitor.when(AssignNode) @@ -140,20 +181,52 @@ def visit(self, node, scope): # node.id -> str # node.expr -> ExpressionNode ############################### - - # Your code here!!! - pass + if node.id in self.parameters: + dest = node.id + source = self.visit(node.expr, scope) + self.register_instruction(cil.AssignNode(dest, source)) + elif node.id in self.locals: + dest = self.locals[node.id] + source = self.visit(node.expr, scope) + self.register_instruction(cil.AssignNode(dest, source)) + elif node.id in self.attrs: + dest = node.id + source = self.visit(node.expr, scope) + self.register_instruction(cil.SetAttribNode(self.instances[-1], node.id, source)) + @visitor.when(CallNode) def visit(self, node, scope): ############################### # node.obj -> AtomicNode - # node.id -> str + # node.method -> str # node.args -> [ ExpressionNode ... ] ############################### - - # Your code here!!! - pass + if node.obj != None: + obj = self.visit(node.obj, scope) + self.instances.append(obj) + local = self.define_internal_local() + self.register_instruction(cil.TypeOfNode(obj, local)) + self.register_instruction(cil.ArgNode(obj)) #equivalent to cil.ArgNode(self.instances[-1]) + for arg in node.args: + self.register_instruction( cil.ArgNode( self.visit(arg, scope) ) ) + dest = self.define_internal_local() + if isinstance(node.obj, InstantiateNode): + obj_type = node.obj.lex + else: + obj_type = scope.find_variable(node.obj.lex).type.name + self.register_instruction(cil.DynamicCallNode(local, self.to_function_name(node.method, obj_type if node.parent == None else node.parent), dest)) + self.instances.pop() + return dest + else: + self.register_instruction(cil.ArgNode(self.instances[-1])) + for arg in node.args: + self.register_instruction( cil.ArgNode( self.visit(arg, scope) ) ) + dest = self.define_internal_local() + self.register_instruction(cil.StaticCallNode(function, dest)) + + return dest + @visitor.when(ConstantNumNode) def visit(self, node, scope): @@ -161,8 +234,7 @@ def visit(self, node, scope): # node.lex -> str ############################### - # Your code here!!! (Pretty easy ;-)) - pass + return node.lex @visitor.when(VariableNode) def visit(self, node, scope): @@ -170,7 +242,6 @@ def visit(self, node, scope): # node.lex -> str ############################### - # Your code here!!! pass @visitor.when(InstantiateNode) @@ -178,9 +249,9 @@ def visit(self, node, scope): ############################### # node.lex -> str ############################### - - # Your code here!!! - pass + dest = self.define_internal_local() + self.register_instruction(cil.AllocateNode(node.lex, dest)) + return dest @visitor.when(PlusNode) def visit(self, node, scope): @@ -188,7 +259,7 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - + dest = self.define_internal_local() left = self.visit(node.left, scope) right = self.visit(node.right, scope) @@ -232,4 +303,4 @@ def visit(self, node, scope): left = self.visit(node.left, scope) right = self.visit(node.right, scope) self.register_instruction(cil.DivNode(dest, left, right)) - return dest + return dest \ No newline at end of file diff --git a/tests/boku/test1.cl b/tests/boku/test1.cl index 192ab9a07..0b46ffc76 100644 --- a/tests/boku/test1.cl +++ b/tests/boku/test1.cl @@ -1,5 +1,6 @@ class A { a: Int; + f1(): Int { a <- 3 }; }; class B inherits A { @@ -11,6 +12,7 @@ class C inherits B { }; class Main inherits IO { - main(): IO { out_string("Hello World!")}; + a: A <- new A; + main(): Int { { a.f1() }; test: Int <- let x: Int <- 1 in x; }; From 549aa205bd7f7e650d2db1df235fd0baeeca8112 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Fri, 17 Sep 2021 17:29:34 -0400 Subject: [PATCH 15/93] Some more nodes of codegen --- src/visitors/Checker.py | 6 +- src/visitors/CooltoCil.py | 119 ++++++++++++++++++++++++++++++++++++-- tests/boku/test1.cl | 2 +- 3 files changed, 119 insertions(+), 8 deletions(-) diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py index 24d4adf98..9da8c3f46 100755 --- a/src/visitors/Checker.py +++ b/src/visitors/Checker.py @@ -91,9 +91,9 @@ def visit(self, node, scope): @visitor.when(ConditionalNode) def visit(self, node, scope): - ifT = self.visit(node.ifChunk, scope) - thenT = self.visit(node.thenChunk, scope) - elseT = self.visit(node.elseChunk, scope) + ifT = self.visit(node.ifChunk, scope.create_child()) + thenT = self.visit(node.thenChunk, scope.create_child()) + elseT = self.visit(node.elseChunk, scope.create_child()) if ifT != self.context.get_type('Bool'): # self.errors.append(f"Can't convert {ifT.name} to Bool.") diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index fdb83c2d6..95aedf756 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -129,7 +129,6 @@ def visit(self, node, scope): type_node.attributes = attributes type_node.methods = methods - # func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) for feature, child_scope in zip(node.features, scope.children): if isinstance(feature, FuncDeclarationNode): @@ -271,8 +270,12 @@ def visit(self, node, scope): ############################### # node.lex -> str ############################### - - pass + + if node.lex in self.locals: + return self.locals[node.lex] + elif node.lex in self.attrs: + self.register_instruction(cil.GetAttribNode(self.instances[-1], node.lex)) + return node.lex @visitor.when(InstantiateNode) def visit(self, node, scope): @@ -336,4 +339,112 @@ def visit(self, node, scope): left = self.visit(node.left, scope) right = self.visit(node.right, scope) self.register_instruction(cil.DivNode(dest, left, right)) - return dest \ No newline at end of file + return dest + + @visitor.when(ChunkNode) + def visit(self, node, scope): + ############################### + # node.chunk -> [ ExpressionNode... ] + ############################### + + for expression in node.chunk: + value = self.visit(expression, scope.children[0]) + return value + + @visitor.when(ConditionalNode) + def visit(self, node, scope): + ############################### + # node.ifChunk -> ExpressionNode + # node.thenChunk -> ExpressionNode + # node.elseChunk -> ExpressionNode + ############################### + + then_label = self.define_internal_local() + else_label = self.define_internal_local() + + ifexpr = self.visit(node.ifChunk, scope.children[0]) + self.register_instruction(cil.GotoIfNode(thenlabel, ifexpr)) + + elseexpr = self.visit(node.elseChunk, scope.children[2]) + self.register_instruction(cil.GotoNode(else_label)) + + self.register_instruction(cil.LabelNode(then_label)) + + thenexpr = self.visit(node.thenChunk, scope.children[1]) + + self.register_instruction(else_label) + + if ifexpr == '1': + return thenexpr + elif ifexpr =='0': + return elseexpr + else: + raise Exception('something went wrong D:') + + @visitor.when(LetInNode) + def visit(self, node, scope): + ############################### + # node.decl_list -> [ DeclarationNode... ] + # node.expression -> ExpressionNode + ############################### + + for decl in node.decl_list: + self.visit(decl, scope) + + value = self.visit(node.expression) + + return value + + @visitor.when(WhileNode) + def visit(self, node, scope): + pass + + + @visitor.when(NotNode) + def visit(self, node, scope): + pass + + + @visitor.when(IsVoidNode) + def visit(self, node, scope): + pass + + + @visitor.when(ComplementNode) + def visit(self, node, scope): + pass + + + + @visitor.when(SwitchCaseNode) + def visit(self, node, scope): + pass + + + @visitor.when(TrueNode) + def visit(self, node, scope): + pass + + + @visitor.when(FalseNode) + def visit(self, node, scope): + pass + + + @visitor.when(StringNode) + def visit(self, node, scope): + pass + + + @visitor.when(LessNode) + def visit(self, node, scope): + pass + + @visitor.when(LeqNode) + def visit(self, node, scope): + pass + + + @visitor.when(EqualNode) + def visit(self, node, scope): + pass \ No newline at end of file diff --git a/tests/boku/test1.cl b/tests/boku/test1.cl index e3369e67f..f1c9d1f1b 100644 --- a/tests/boku/test1.cl +++ b/tests/boku/test1.cl @@ -13,6 +13,6 @@ class C inherits B { class Main inherits IO { a: A <- new A; - main(): Int { a.f1() }; + main(): Int { if true then let x: Int <- 0 in x else x <- x+1 fi }; test: Int <- let x: Int <- 1 in x; }; From b10f93e4259f55121ae0568fe8b47614f74c0b60 Mon Sep 17 00:00:00 2001 From: regnod Date: Sat, 18 Sep 2021 14:16:00 -0400 Subject: [PATCH 16/93] getting some changes --- src/visitors/CooltoCil.py | 67 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index fdb83c2d6..c69396929 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -139,7 +139,6 @@ def visit(self, node, scope): self.current_type = None - @visitor.when(FuncDeclarationNode) def visit(self, node, scope): ############################### @@ -272,7 +271,11 @@ def visit(self, node, scope): # node.lex -> str ############################### - pass + if node.lex in self.locals: + return self.locals[node.lex] + elif node.lex in self.attrs: + self.register_instruction(cil.GetAttribNode(self.instances[-1], node.lex)) + return node.lex @visitor.when(InstantiateNode) def visit(self, node, scope): @@ -336,4 +339,62 @@ def visit(self, node, scope): left = self.visit(node.left, scope) right = self.visit(node.right, scope) self.register_instruction(cil.DivNode(dest, left, right)) - return dest \ No newline at end of file + return dest + + + @visitor.when(ChunkNode) + def visit(self, node, scope): + pass + + @visitor.when(ConditionalNode) + def visit(self, node, scope): + pass + + @visitor.when(LetInNode) + def visit(self, node, scope): + pass + + @visitor.when(WhileNode) + def visit(self, node, scope): + pass + + @visitor.when(NotNode) + def visit(self, node, scope): + pass + + @visitor.when(IsVoidNode) + def visit(self, node, scope): + pass + + @visitor.when(ComplementNode) + def visit(self, node, scope): + pass + + @visitor.when(SwitchCaseNode) + def visit(self, node, scope): + pass + + @visitor.when(TrueNode) + def visit(self, node, scope): + pass + + @visitor.when(FalseNode) + def visit(self, node, scope): + pass + + @visitor.when(StringNode) + def visit(self, node, scope): + pass + + @visitor.when(LessNode) + def visit(self, node, scope): + pass + + @visitor.when(LeqNode) + def visit(self, node, scope): + pass + + @visitor.when(EqualNode) + def visit(self, node, scope): + pass + \ No newline at end of file From 8b8d8e99978154cb1c3c74db250dbf3ada8e52a8 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Wed, 9 Feb 2022 21:09:45 -0500 Subject: [PATCH 17/93] getting back to work --- src/cil_ast/cil_ast.py | 85 +----------------------------------- src/main.py | 2 +- src/visitors/Checker.py | 29 ++++++++----- src/visitors/CilDepicter.py | 86 +++++++++++++++++++++++++++++++++++++ src/visitors/CooltoCil.py | 14 +++--- tests/boku/test1.cl | 4 +- 6 files changed, 115 insertions(+), 105 deletions(-) create mode 100644 src/visitors/CilDepicter.py diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 63b9aed0d..78716ef64 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -167,87 +167,4 @@ def __init__(self, dest): class PrintNode(InstructionNode): def __init__(self, str_addr): - self.str_addr = str_addr -def get_formatter(): - class PrintVisitor(object): - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node): - dottypes = '\n'.join(self.visit(t) for t in node.dottypes) - dotdata = '\n'.join(self.visit(t) for t in node.dotdata) - 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(TypeNode) - def visit(self, node): - attributes = '\n\t'.join(f'attribute {x}' for x in node.attributes) - methods = '\n\t'.join(f'method {x}: {y}' for x,y in node.methods) - - return f'type {node.name} {{\n\t{attributes}\n\n\t{methods}\n}}' - - @visitor.when(FunctionNode) - 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(ParamNode) - def visit(self, node): - return f'PARAM {node.name}' - - @visitor.when(LocalNode) - def visit(self, node): - return f'LOCAL {node.name}' - - @visitor.when(AssignNode) - def visit(self, node): - return f'{node.dest} = {node.source}' - - @visitor.when(PlusNode) - def visit(self, node): - return f'{node.dest} = {node.left} + {node.right}' - - @visitor.when(MinusNode) - def visit(self, node): - return f'{node.dest} = {node.left} - {node.right}' - - @visitor.when(StarNode) - def visit(self, node): - return f'{node.dest} = {node.left} * {node.right}' - - @visitor.when(DivNode) - def visit(self, node): - return f'{node.dest} = {node.left} / {node.right}' - - @visitor.when(AllocateNode) - def visit(self, node): - return f'{node.dest} = ALLOCATE {node.type}' - - @visitor.when(TypeOfNode) - def visit(self, node): - return f'{node.dest} = TYPEOF {node.type}' - - @visitor.when(StaticCallNode) - def visit(self, node): - return f'{node.dest} = CALL {node.function}' - - @visitor.when(DynamicCallNode) - def visit(self, node): - return f'{node.dest} = VCALL {node.type} {node.method}' - - @visitor.when(ArgNode) - def visit(self, node): - return f'ARG {node.name}' - - @visitor.when(ReturnNode) - def visit(self, node): - return f'RETURN {node.value if node.value is not None else ""}' - - printer = PrintVisitor() - return (lambda ast: printer.visit(ast)) \ No newline at end of file + self.str_addr = str_addr \ No newline at end of file diff --git a/src/main.py b/src/main.py index 8a413fb24..1ac7eb435 100644 --- a/src/main.py +++ b/src/main.py @@ -21,4 +21,4 @@ print(lexing_error) for parsing_error in coolParser.errors: print(parsing_error) -a = 0 +a = 0 \ No newline at end of file diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py index 9da8c3f46..e6d71aa2f 100755 --- a/src/visitors/Checker.py +++ b/src/visitors/Checker.py @@ -31,22 +31,29 @@ def visit(self, node, scope): if _char not in ''.join(chr(n) for n in range(ord('A'),ord('Z')+1)): self.errors.append((f'Class names must be capitalized')) - attrs = [] - methods = [] - for feature in node.features: - if isinstance(feature,AttrDeclarationNode): - attrs.append(feature) - else: - methods.append(feature) + # attrs = [] + # methods = [] + # for feature in node.features: + # if isinstance(feature,AttrDeclarationNode): + # attrs.append(feature) + # else: + # methods.append(feature) for attr, owner in self.current_type.all_attributes(): #definir atributos de los ancestros if owner != self.current_type: scope.define_variable(attr.name, attr.type) - for attr in attrs: - self.visit(attr, scope) + # for attr in attrs: + # self.visit(attr, scope) + + # for method in methods: + # self.visit(method, scope.create_child()) + + for feature in node.features: + if isinstance(feature,AttrDeclarationNode): + self.visit(feature, scope) + else: + self.visit(feature, scope.create_child()) - for method in methods: - self.visit(method, scope.create_child()) @visitor.when(FuncDeclarationNode) def visit(self, node, scope): diff --git a/src/visitors/CilDepicter.py b/src/visitors/CilDepicter.py new file mode 100644 index 000000000..5e08d3ff0 --- /dev/null +++ b/src/visitors/CilDepicter.py @@ -0,0 +1,86 @@ +from cil_ast.cil_ast import * +import visitors.visitor as visitor + +def get_formatter(): + class PrintVisitor(object): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + dottypes = '\n'.join(self.visit(t) for t in node.dottypes) + dotdata = '\n'.join(self.visit(t) for t in node.dotdata) + 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(TypeNode) + def visit(self, node): + attributes = '\n\t'.join(f'attribute {x}' for x in node.attributes) + methods = '\n\t'.join(f'method {x}: {y}' for x,y in node.methods) + + return f'type {node.name} {{\n\t{attributes}\n\n\t{methods}\n}}' + + @visitor.when(FunctionNode) + 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(ParamNode) + def visit(self, node): + return f'PARAM {node.name}' + + @visitor.when(LocalNode) + def visit(self, node): + return f'LOCAL {node.name}' + + @visitor.when(AssignNode) + def visit(self, node): + return f'{node.dest} = {node.source}' + + @visitor.when(PlusNode) + def visit(self, node): + return f'{node.dest} = {node.left} + {node.right}' + + @visitor.when(MinusNode) + def visit(self, node): + return f'{node.dest} = {node.left} - {node.right}' + + @visitor.when(StarNode) + def visit(self, node): + return f'{node.dest} = {node.left} * {node.right}' + + @visitor.when(DivNode) + def visit(self, node): + return f'{node.dest} = {node.left} / {node.right}' + + @visitor.when(AllocateNode) + def visit(self, node): + return f'{node.dest} = ALLOCATE {node.type}' + + @visitor.when(TypeOfNode) + def visit(self, node): + return f'{node.dest} = TYPEOF {node.type}' + + @visitor.when(StaticCallNode) + def visit(self, node): + return f'{node.dest} = CALL {node.function}' + + @visitor.when(DynamicCallNode) + def visit(self, node): + return f'{node.dest} = VCALL {node.type} {node.method}' + + @visitor.when(ArgNode) + def visit(self, node): + return f'ARG {node.name}' + + @visitor.when(ReturnNode) + def visit(self, node): + return f'RETURN {node.value if node.value is not None else ""}' + + printer = PrintVisitor() + return (lambda ast: printer.visit(ast)) \ No newline at end of file diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 95aedf756..4db5b21b9 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -160,7 +160,7 @@ def visit(self, node, scope): self.params.append(cil.ParamNode(arg_name)) self.locals.clear() - return_value = self.visit(node.body, scope.children[0]) + return_value = self.visit(node.body, scope) # for instruction, child_scope in zip(node.body, scope.children): # value = self.visit(instruction, child_scope) @@ -363,7 +363,7 @@ def visit(self, node, scope): else_label = self.define_internal_local() ifexpr = self.visit(node.ifChunk, scope.children[0]) - self.register_instruction(cil.GotoIfNode(thenlabel, ifexpr)) + self.register_instruction(cil.GotoIfNode(then_label, ifexpr)) elseexpr = self.visit(node.elseChunk, scope.children[2]) self.register_instruction(cil.GotoNode(else_label)) @@ -389,9 +389,9 @@ def visit(self, node, scope): ############################### for decl in node.decl_list: - self.visit(decl, scope) + var = self.visit(decl, scope) - value = self.visit(node.expression) + value = self.visit(node.expression, scope) return value @@ -423,12 +423,12 @@ def visit(self, node, scope): @visitor.when(TrueNode) def visit(self, node, scope): - pass + return '1' @visitor.when(FalseNode) def visit(self, node, scope): - pass + '0' @visitor.when(StringNode) @@ -439,7 +439,7 @@ def visit(self, node, scope): @visitor.when(LessNode) def visit(self, node, scope): pass - + @visitor.when(LeqNode) def visit(self, node, scope): pass diff --git a/tests/boku/test1.cl b/tests/boku/test1.cl index f1c9d1f1b..2164b8363 100644 --- a/tests/boku/test1.cl +++ b/tests/boku/test1.cl @@ -13,6 +13,6 @@ class C inherits B { class Main inherits IO { a: A <- new A; - main(): Int { if true then let x: Int <- 0 in x else x <- x+1 fi }; - test: Int <- let x: Int <- 1 in x; + main(): Int { { if true then let x: Int <- 0 in x else 1 fi; 0; } }; + test: Int <- let y: Int <- 1 in y; }; From b63f318084040aa0c9f64b3db6fd21ddc53d0859 Mon Sep 17 00:00:00 2001 From: regnod Date: Wed, 9 Feb 2022 21:17:17 -0500 Subject: [PATCH 18/93] ... --- tests/boku/test1.cl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/boku/test1.cl b/tests/boku/test1.cl index f1c9d1f1b..2164b8363 100644 --- a/tests/boku/test1.cl +++ b/tests/boku/test1.cl @@ -13,6 +13,6 @@ class C inherits B { class Main inherits IO { a: A <- new A; - main(): Int { if true then let x: Int <- 0 in x else x <- x+1 fi }; - test: Int <- let x: Int <- 1 in x; + main(): Int { { if true then let x: Int <- 0 in x else 1 fi; 0; } }; + test: Int <- let y: Int <- 1 in y; }; From 423b0792b3d9a32ecb86fd9bfd8c1d173d8874c3 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Wed, 9 Feb 2022 23:03:38 -0500 Subject: [PATCH 19/93] implemented WhileNode, LesNode, LeqNode, EqualNode, StrinNode --- src/main.py | 2 +- src/visitors/CilDepicter.py | 6 +++++- src/visitors/CooltoCil.py | 37 ++++++++++++++++++++++++++++++++----- tests/boku/test1.cl | 3 ++- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/main.py b/src/main.py index 1ac7eb435..0571f3a3a 100644 --- a/src/main.py +++ b/src/main.py @@ -5,7 +5,7 @@ # with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/semantic/self4.cl') as f: -with open('../tests/boku/test1.cl') as f: +with open('./tests/boku/test1.cl') as f: program = f.read() coolLexer = lexer.CoolLexer() diff --git a/src/visitors/CilDepicter.py b/src/visitors/CilDepicter.py index 71a6387c6..4054ed00c 100644 --- a/src/visitors/CilDepicter.py +++ b/src/visitors/CilDepicter.py @@ -64,7 +64,7 @@ def visit(self, node): @visitor.when(TypeOfNode) def visit(self, node): - return f'{node.dest} = TYPEOF {node.type}' + return f'{node.dest} = TYPEOF {node.obj}' @visitor.when(StaticCallNode) def visit(self, node): @@ -102,5 +102,9 @@ def visit(self, node): def visit(self, node): return f'RETURN {node.value if node.value is not None else ""}' + @visitor.when(DataNode) + def visit(self, node): + return f'{node.name} = {node.value};' + printer = PrintVisitor() return (printer.visit(ast)) diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index dc9d15fab..8bfe80f48 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -62,6 +62,7 @@ def register_data(self, value): vname = f'data_{len(self.dotdata)}' data_node = cil.DataNode(vname, value) self.dotdata.append(data_node) + return data_node class MiniCOOLToCILVisitor(BaseCOOLToCILVisitor): @@ -394,7 +395,23 @@ def visit(self, node, scope): @visitor.when(WhileNode) def visit(self, node, scope): - pass + while_label = self.define_internal_local() + loop_label = self.define_internal_local() + end_label = self.define_internal_local() + + self.register_instruction(cil.LabelNode(while_label)) + + while_expr = self.visit(node.condition, scope) + self.register_instruction(cil.GotoIfNode(loop_label, while_expr)) + + + self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(cil.LabelNode(loop_label)) + + chunk_expr = self.visit(node.loopChunk, scope) + self.register_instruction(cil.GotoNode(while_label)) + self.register_instruction(cil.LabelNode(end_label)) + @visitor.when(NotNode) @@ -430,18 +447,28 @@ def visit(self, node, scope): @visitor.when(StringNode) def visit(self, node, scope): - pass + data_node = self.register_data(node.lex) + return data_node.name @visitor.when(LessNode) def visit(self, node, scope): - pass + left = self.visit(node.left,scope) + right = self.visit(node.right,scope) + + return '1' if left < right else '0' @visitor.when(LeqNode) def visit(self, node, scope): - pass + left = self.visit(node.left,scope) + right = self.visit(node.right,scope) + + return '1' if left <= right else '0' @visitor.when(EqualNode) def visit(self, node, scope): - pass + left = self.visit(node.left,scope) + right = self.visit(node.right,scope) + + return '1' if left == right else '0' diff --git a/tests/boku/test1.cl b/tests/boku/test1.cl index 2164b8363..f7e9927a0 100644 --- a/tests/boku/test1.cl +++ b/tests/boku/test1.cl @@ -13,6 +13,7 @@ class C inherits B { class Main inherits IO { a: A <- new A; - main(): Int { { if true then let x: Int <- 0 in x else 1 fi; 0; } }; + main(): Int { { if true then let x: A <- new A in x.f1() else 1 fi; 0; } }; + const(): Int { while 1 loop 0 pool }; test: Int <- let y: Int <- 1 in y; }; From 8ff40379e5fd9dd7f5f6839fe02e1f28426e3d97 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Wed, 9 Feb 2022 23:08:59 -0500 Subject: [PATCH 20/93] res --- tests/boku/test1.cl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/boku/test1.cl b/tests/boku/test1.cl index f7e9927a0..22f339fa2 100644 --- a/tests/boku/test1.cl +++ b/tests/boku/test1.cl @@ -5,6 +5,7 @@ class A { class B inherits A { b: Int; + f1(): Int { a <- 4}; }; class C inherits B { @@ -13,7 +14,7 @@ class C inherits B { class Main inherits IO { a: A <- new A; - main(): Int { { if true then let x: A <- new A in x.f1() else 1 fi; 0; } }; + main(): Int { { if true then let x: B <- new B in x@A.f1() else 1 fi; 0; } }; const(): Int { while 1 loop 0 pool }; test: Int <- let y: Int <- 1 in y; }; From 91975fd3055ce1558f8c36ccb6521b9984c98382 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Sun, 20 Feb 2022 22:04:43 -0500 Subject: [PATCH 21/93] correcting some nodes at cil_ast --- doc/mips_and_spim_manual.pdf | Bin 0 -> 497101 bytes src/cil_ast/cil_ast.py | 54 ++++++++++++++++++++++++++++------- 2 files changed, 44 insertions(+), 10 deletions(-) create mode 100755 doc/mips_and_spim_manual.pdf diff --git a/doc/mips_and_spim_manual.pdf b/doc/mips_and_spim_manual.pdf new file mode 100755 index 0000000000000000000000000000000000000000..5eec47ca042b0c377f15c7ba87be6c8a69a92ace GIT binary patch literal 497101 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 literal 0 HcmV?d00001 diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 693a46688..6dc67f9d8 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -34,7 +34,11 @@ def __init__(self, name): self.name = name class InstructionNode(Node): - pass + def __init__(self, dest, op, second_op): + self.dest = dest + self.op = op + self.second_op = second_op + class AssignNode(InstructionNode): def __init__(self, dest, source): @@ -48,19 +52,24 @@ def __init__(self, dest, left, right): self.right = right class PlusNode(ArithmeticNode): - pass + def __init__(self, dest, left, right): + super().__init__(dest, left, right) class MinusNode(ArithmeticNode): - pass + def __init__(self, dest, left, right): + super().__init__(dest, left, right) class StarNode(ArithmeticNode): - pass + def __init__(self, dest, left, right): + super().__init__(dest, left, right) class DivNode(ArithmeticNode): - pass + def __init__(self, dest, left, right): + super().__init__(dest, left, right) class GetAttribNode(InstructionNode): - def __init__(self, inst, attr): + def __init__(self, dest, inst, attr): + self. dest = dest self.inst = inst self.attr = attr @@ -71,7 +80,8 @@ def __init__(self, inst, attr, source): self.source = source class GetIndexNode(InstructionNode): - def __init__(self, array, index): + def __init__(self, dest, array, index): + self.dest = dest self.array = array self.index = index @@ -87,9 +97,10 @@ def __init__(self, itype, dest): self.dest = dest class ArrayNode(InstructionNode): - def __init__(self, length): - #preguntar a jp - pass + def __init__(self, dest, length): + self.dest = dest + self.length = length + class TypeOfNode(InstructionNode): def __init__(self, obj, dest): self.obj = obj @@ -156,6 +167,17 @@ def __init__(self, dest, string, i, n): self.i = i self.n = n +class ToStr(InstructionNode): + def __init__(self, dest, evalue): + self.dest = dest + self.value = evalue + +class EqualString(InstructionNode): + def __init__(self, dest, string1, string2): + self.dest = dest + self.string1 = string1 + self.string2 = string2 + class ToStrNode(InstructionNode): def __init__(self, dest, ivalue): self.dest = dest @@ -168,3 +190,15 @@ def __init__(self, dest): class PrintNode(InstructionNode): def __init__(self, str_addr): self.str_addr = str_addr + +class StringNode(InstructionNode): + def __init__(self, value, data): + self.value = value + self.data = data + +class IntNode(InstructionNode): + def __init_(self, value): + self.value = value + +# ParentTypeNode +# TypeFunctionNode From bc2fac95d157ed926f75f9a1d61c698643f95fc5 Mon Sep 17 00:00:00 2001 From: regnod Date: Mon, 21 Feb 2022 21:03:49 -0500 Subject: [PATCH 22/93] going to pull changes --- src/.vscode/settings.json | 21 +++++++ src/visitors/CooltoCil.py | 125 +++++++++++++++++++++++++++++++++++--- 2 files changed, 139 insertions(+), 7 deletions(-) create mode 100644 src/.vscode/settings.json diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json new file mode 100644 index 000000000..11db3b6ac --- /dev/null +++ b/src/.vscode/settings.json @@ -0,0 +1,21 @@ +{ + "cSpell.words": [ + "asignar", + "atributos", + "evitar", + "falta", + "generado", + "generar", + "generarlo", + "instanciate", + "instruccion", + "mios", + "necesaria", + "posible", + "principio", + "seria", + "typex", + "veces", + "visitar" + ] +} \ No newline at end of file diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index dc9d15fab..7dda8c03e 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -19,6 +19,9 @@ def __init__(self, context): self.parameters = set() self.instances = [] + def instanciate_builtin(self): + a = 0 + @property def params(self): return self.current_function.params @@ -109,6 +112,7 @@ def visit(self, node, scope): methods = [] self.attrs.clear() + #esto para cuando llega a object i guess current_type = self.current_type while current_type.parent is not None: attr_temp = [] @@ -125,10 +129,18 @@ def visit(self, node, scope): current_type = current_type.parent + # comentar con andy si generar el parent antes de ser posible si no esta genereado + # aqui para evitar generarlo 2 veces seria preguntar si ya esta generado al principio type_node.attributes = attributes type_node.methods = methods + # attributes + for feature, child_scope in zip(node.features, scope.children): + if isinstance(feature, FuncDeclarationNode): + continue + self.visit(feature, child_scope) + # func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) for feature, child_scope in zip(node.features, scope.children): if isinstance(feature, FuncDeclarationNode): @@ -138,6 +150,25 @@ def visit(self, node, scope): self.current_type = None + @visitor.when(AttrDeclarationNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.type -> str + # node.value = ExpressionNode + ############################### + if node.value: + value = self.visit(node.value) + elif node.type in ["Int", "String", "Object", "IO", "Bool"]: + value = self.define_internal_local() + self.register_instruction(cil.AllocateNode(self.type, value)) + else: + value = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Void", value)) + #revisar que poner como el attr del SettAttribnode + self.register_instruction(cil.SetAttribNode(self.instances[-1], node.id, value)) + + @visitor.when(FuncDeclarationNode) def visit(self, node, scope): ############################### @@ -343,7 +374,7 @@ def visit(self, node, scope): ############################### # node.chunk -> [ ExpressionNode... ] ############################### - + value = None for expression in node.chunk: value = self.visit(expression, scope.children[0]) return value @@ -386,7 +417,8 @@ def visit(self, node, scope): ############################### for decl in node.decl_list: - var = self.visit(decl, scope) + # var = self.visit(decl, scope) + self.visit(decl, scope) value = self.visit(node.expression, scope) @@ -394,29 +426,84 @@ def visit(self, node, scope): @visitor.when(WhileNode) def visit(self, node, scope): + ############################### + # node.decl_list -> [ DeclarationNode... ] + # node.expression -> ExpressionNode + ############################### pass @visitor.when(NotNode) def visit(self, node, scope): + ############################### + # node.decl_list -> [ DeclarationNode... ] + # node.expression -> ExpressionNode + ############################### pass @visitor.when(IsVoidNode) def visit(self, node, scope): + ############################### + # node.method -> ExpressionNode + ############################### + method_value = self.visit(node.method, scope) + # revisar que hacer pass @visitor.when(ComplementNode) def visit(self, node, scope): + ############################### + # node.expr -> ExpressionNode + ############################### + value = self.visit(node.expr, scope) pass @visitor.when(SwitchCaseNode) def visit(self, node, scope): - pass - + ############################### + # node.expr -> ExpressionNode + # node.case_list = [ (id, type, expr)... ] + ############################### + start_case_label = self.define_internal_local() + end_case_label = self.define_internal_local() + + obj = self.visit(node.expr, scope) + obj_type = self.define_internal_local() + self.register_instruction(cil.TypeOfNode(obj, obj_type)) + + result = self.define_internal_local() + self.register_instruction(cil.LabelNode(start_case_label)) + for case in node.case_list: + case_id, case_type, case_expr = case + current_label = self.define_internal_local() + next_label = self.define_internal_local() + + condition = self.define_internal_local() + # poner el istype node + self.register_instruction(cil.GotoIfNode(current_label, condition)) + + self.register_instruction(cil.GotoNode(next_label)) + self.register_instruction(cil.LabelNode(current_label)) + + info = VariableInfo(case_id, case_type) + var = self.locals[case_id] = self.register_local(info) + self.register_instruction(cil.AssignNode(var, obj)) + + result_expr = self.visit(case_expr, scope) + self.register_instruction(cil.AssignNode( result, result_expr)) + self.register_instruction(cil.GotoNode(end_case_label)) + + self.register_instruction(next_label) + + + # self.register_instruction(cil.GotoNode(start_case_label)) + + self.register_instruction(cil.GotoNode(end_case_label)) + return result @visitor.when(TrueNode) def visit(self, node, scope): @@ -435,13 +522,37 @@ def visit(self, node, scope): @visitor.when(LessNode) def visit(self, node, scope): - pass + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.LessNode(dest, left, right)) + return dest @visitor.when(LeqNode) def visit(self, node, scope): - pass + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.LeqNode(dest, left, right)) + return dest @visitor.when(EqualNode) def visit(self, node, scope): - pass + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.EqualNode(dest, left, right)) + return dest From 021cace66ddefdff37b1a97eac2bd88904a025bc Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 21 Feb 2022 21:04:42 -0500 Subject: [PATCH 23/93] push antes de los cambios de richard al cool_to_cil con el switch case implementado etc --- src/cool_ast/cool_ast.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cool_ast/cool_ast.py b/src/cool_ast/cool_ast.py index d64871368..aec9927b9 100644 --- a/src/cool_ast/cool_ast.py +++ b/src/cool_ast/cool_ast.py @@ -22,6 +22,7 @@ def __init__(self, idx, params, return_type, body): self.params = params self.type = return_type self.body = body + class AttrDeclarationNode(DeclarationNode): def __init__(self, idx, typex, value = None): From 735a47b22039d9d9ee78d353550da58ecc8e8a3f Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 21 Feb 2022 22:16:14 -0500 Subject: [PATCH 24/93] added an index to the attrs of a type --- src/cil_ast/cil_ast.py | 6 +++++- src/visitors/CooltoCil.py | 9 +++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 6dc67f9d8..1a46baec2 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -10,9 +10,13 @@ def __init__(self, dottypes, dotdata, dotcode): class TypeNode(Node): def __init__(self, name): self.name = name - self.attributes = [] + self.attrs = {} self.methods = [] + @property + def attributes(self): + return self.attrs.keys() + class DataNode(Node): def __init__(self, vname, value): self.name = vname diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 933a2aaab..943a83428 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -18,6 +18,10 @@ def __init__(self, context): self.attrs = set() self.parameters = set() self.instances = [] + + def transform_keys(self, xtype, keys): + for i,key in enumerate(keys): + xtype.attrs[key] = i def instanciate_builtin(self): a = 0 @@ -129,11 +133,8 @@ def visit(self, node, scope): methods = method_temp + methods current_type = current_type.parent - - # comentar con andy si generar el parent antes de ser posible si no esta genereado - # aqui para evitar generarlo 2 veces seria preguntar si ya esta generado al principio - type_node.attributes = attributes + self.transform_keys(type_node, attributes) # type_node.attributes = attributes type_node.methods = methods # attributes From fa2da57b311e4461854f47f8e5eff375b308496c Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 21 Feb 2022 22:50:26 -0500 Subject: [PATCH 25/93] fixed a bug where object functions weren't being added to the user defined types --- src/cil_ast/cil_ast.py | 11 +++++++++++ src/visitors/CooltoCil.py | 27 +++++++++++++++++++++------ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 1a46baec2..10e918134 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -110,6 +110,17 @@ def __init__(self, obj, dest): self.obj = obj self.dest = dest +class IsTypeNode(InstructionNode): + def __init(self, dest, type_obj, type_name): + self.dest = dest + self.type_obj = type_obj + self.type_name = type_name + +class ParentTypeNode(InstructionNode): + def __init__(self, dest, type_obj): + self.dest = dest + self.type_obj = type_obj + class LabelNode(InstructionNode): def __init__(self, name): self.name = name diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 943a83428..a0bd447b8 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -117,9 +117,8 @@ def visit(self, node, scope): methods = [] self.attrs.clear() - #esto para cuando llega a object i guess current_type = self.current_type - while current_type.parent is not None: + while True: attr_temp = [] method_temp = [] for attr in current_type.attributes: @@ -132,8 +131,11 @@ def visit(self, node, scope): attributes = attr_temp + attributes methods = method_temp + methods + if current_type.parent is None: + break + current_type = current_type.parent - + self.transform_keys(type_node, attributes) # type_node.attributes = attributes type_node.methods = methods @@ -484,6 +486,7 @@ def visit(self, node, scope): ############################### start_case_label = self.define_internal_local() end_case_label = self.define_internal_local() + error_label = self.define_internal_local() obj = self.visit(node.expr, scope) obj_type = self.define_internal_local() @@ -491,13 +494,18 @@ def visit(self, node, scope): result = self.define_internal_local() self.register_instruction(cil.LabelNode(start_case_label)) + + condition = self.define_internal_local() + self.register_instruction(cil.IsTypeNode, condition, obj_type, 'Void') + self.register_instruction(cil.GotoIfNode, error_label, condition) + for case in node.case_list: case_id, case_type, case_expr = case current_label = self.define_internal_local() next_label = self.define_internal_local() condition = self.define_internal_local() - # poner el istype node + self.register_instruction(cil.IsTypeNode(condition, obj_type, case_type)) self.register_instruction(cil.GotoIfNode(current_label, condition)) self.register_instruction(cil.GotoNode(next_label)) @@ -513,9 +521,16 @@ def visit(self, node, scope): self.register_instruction(next_label) + var = self.define_internal_local() + self.register_instruction(cil.ParentTypeNode(var, obj_type)) + self.register_instruction(cil.AssignNode(obj_type, var)) + + self.register_instruction(cil.GotoNode(start_case_label)) - # self.register_instruction(cil.GotoNode(start_case_label)) - + self.register_instruction(cil.LabelNode(error_label)) + self.register_instruction(cil.ParamNode(self.instances[-1])) + self.register_instruction(cil.DynamicCallNode()) + self.register_instruction(cil.GotoNode(end_case_label)) return result From 70bc283c4750e1314d6a4d5b020c1563e92623e0 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 21 Feb 2022 23:15:00 -0500 Subject: [PATCH 26/93] added boolean operator nodes to cil ast and added the abort call in case of void type for switch case --- src/cil_ast/cil_ast.py | 25 +++++++++++++++++-------- src/visitors/CooltoCil.py | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 10e918134..86570b312 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -49,25 +49,37 @@ def __init__(self, dest, source): self.dest = dest self.source = source -class ArithmeticNode(InstructionNode): +class BinaryOperatorNode(InstructionNode): def __init__(self, dest, left, right): self.dest = dest self.left = left self.right = right -class PlusNode(ArithmeticNode): +class PlusNode(BinaryOperatorNode): def __init__(self, dest, left, right): super().__init__(dest, left, right) -class MinusNode(ArithmeticNode): +class MinusNode(BinaryOperatorNode): def __init__(self, dest, left, right): super().__init__(dest, left, right) -class StarNode(ArithmeticNode): +class StarNode(BinaryOperatorNode): def __init__(self, dest, left, right): super().__init__(dest, left, right) -class DivNode(ArithmeticNode): +class DivNode(BinaryOperatorNode): + def __init__(self, dest, left, right): + super().__init__(dest, left, right) + +class EqualNode(BinaryOperatorNode): + def __init__(self, dest, left, right): + super().__init__(dest, left, right) + +class LessNode(BinaryOperatorNode): + def __init__(self, dest, left, right): + super().__init__(dest, left, right) + +class LeqNode(BinaryOperatorNode): def __init__(self, dest, left, right): super().__init__(dest, left, right) @@ -214,6 +226,3 @@ def __init__(self, value, data): class IntNode(InstructionNode): def __init_(self, value): self.value = value - -# ParentTypeNode -# TypeFunctionNode diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index a0bd447b8..8aa33102a 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -529,7 +529,7 @@ def visit(self, node, scope): self.register_instruction(cil.LabelNode(error_label)) self.register_instruction(cil.ParamNode(self.instances[-1])) - self.register_instruction(cil.DynamicCallNode()) + self.register_instruction(cil.DynamicCallNode(var, self.to_function_name('abort', self.current_type.name, result))) self.register_instruction(cil.GotoNode(end_case_label)) return result From b54cfbed14fcfae8c44e854de35ba8956c40ea55 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 21 Feb 2022 23:39:47 -0500 Subject: [PATCH 27/93] some changes --- src/cil_ast/cil_ast.py | 5 ----- src/visitors/CooltoCil.py | 10 +++++++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 86570b312..4f51f00c5 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -218,11 +218,6 @@ class PrintNode(InstructionNode): def __init__(self, str_addr): self.str_addr = str_addr -class StringNode(InstructionNode): - def __init__(self, value, data): - self.value = value - self.data = data - class IntNode(InstructionNode): def __init_(self, value): self.value = value diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 8aa33102a..0733c9a6a 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -165,7 +165,7 @@ def visit(self, node, scope): value = self.visit(node.value) elif node.type in ["Int", "String", "Object", "IO", "Bool"]: value = self.define_internal_local() - self.register_instruction(cil.AllocateNode(self.type, value)) + self.register_instruction(cil.AllocateNode(node.type, value)) else: value = self.define_internal_local() self.register_instruction(cil.AllocateNode("Void", value)) @@ -536,7 +536,9 @@ def visit(self, node, scope): @visitor.when(TrueNode) def visit(self, node, scope): - return '1' + value = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Bool', value)) + #setear atributo 0 a True @visitor.when(FalseNode) @@ -547,7 +549,9 @@ def visit(self, node, scope): @visitor.when(StringNode) def visit(self, node, scope): data_node = self.register_data(node.lex) - return data_node.name + var = self.define_internal_local() + self.register_instruction(cil.Load(var, data_node)) + return var @visitor.when(LessNode) From 5195027b8ebff745760628d28b62ed9bc8c6d6dd Mon Sep 17 00:00:00 2001 From: regnod Date: Tue, 22 Feb 2022 04:15:47 -0500 Subject: [PATCH 28/93] i've completed some of the missing ones and fixed some others with the new politics --- src/.vscode/settings.json | 2 + src/cil_ast/cil_ast.py | 32 +++++---- src/visitors/CooltoCil.py | 132 +++++++++++++++++++++++--------------- 3 files changed, 105 insertions(+), 61 deletions(-) diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json index 11db3b6ac..bbf88e782 100644 --- a/src/.vscode/settings.json +++ b/src/.vscode/settings.json @@ -2,6 +2,7 @@ "cSpell.words": [ "asignar", "atributos", + "chequear", "evitar", "falta", "generado", @@ -11,6 +12,7 @@ "instruccion", "mios", "necesaria", + "poner", "posible", "principio", "seria", diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 6dc67f9d8..f218d56aa 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -10,8 +10,12 @@ def __init__(self, dottypes, dotdata, dotcode): class TypeNode(Node): def __init__(self, name): self.name = name - self.attributes = [] + self.attrs = {} self.methods = [] + + @property + def attributes(self): + return self.attrs.keys() class DataNode(Node): def __init__(self, vname, value): @@ -45,25 +49,25 @@ def __init__(self, dest, source): self.dest = dest self.source = source -class ArithmeticNode(InstructionNode): +class BinaryOperatorNode(InstructionNode): def __init__(self, dest, left, right): self.dest = dest self.left = left self.right = right -class PlusNode(ArithmeticNode): +class PlusNode(BinaryOperatorNode): def __init__(self, dest, left, right): super().__init__(dest, left, right) -class MinusNode(ArithmeticNode): +class MinusNode(BinaryOperatorNode): def __init__(self, dest, left, right): super().__init__(dest, left, right) -class StarNode(ArithmeticNode): +class StarNode(BinaryOperatorNode): def __init__(self, dest, left, right): super().__init__(dest, left, right) -class DivNode(ArithmeticNode): +class DivNode(BinaryOperatorNode): def __init__(self, dest, left, right): super().__init__(dest, left, right) @@ -105,6 +109,17 @@ class TypeOfNode(InstructionNode): def __init__(self, obj, dest): self.obj = obj self.dest = dest + +class IsTypeNode(InstructionNode): + def __init__(self, dest, type_obj, type_name): + self.dest = dest + self.type_obj = type_obj + self.type_name = type_name + +class ParentTypeNode(Node): + def __init__(self, dest, type_obj): + self.dest = dest + self.type_obj = type_obj class LabelNode(InstructionNode): def __init__(self, name): @@ -191,11 +206,6 @@ class PrintNode(InstructionNode): def __init__(self, str_addr): self.str_addr = str_addr -class StringNode(InstructionNode): - def __init__(self, value, data): - self.value = value - self.data = data - class IntNode(InstructionNode): def __init_(self, value): self.value = value diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 933a2aaab..6a7a907c9 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -19,6 +19,10 @@ def __init__(self, context): self.parameters = set() self.instances = [] + def transform_to_keys(self, xtype, keys): + for i, key in enumerate(keys): + xtype.attrs[key] = i + def instanciate_builtin(self): a = 0 @@ -113,9 +117,8 @@ def visit(self, node, scope): methods = [] self.attrs.clear() - #esto para cuando llega a object i guess current_type = self.current_type - while current_type.parent is not None: + while True: attr_temp = [] method_temp = [] for attr in current_type.attributes: @@ -128,12 +131,12 @@ def visit(self, node, scope): attributes = attr_temp + attributes methods = method_temp + methods + if current_type.parent is None: + break + current_type = current_type.parent - # comentar con andy si generar el parent antes de ser posible si no esta genereado - # aqui para evitar generarlo 2 veces seria preguntar si ya esta generado al principio - - type_node.attributes = attributes + self.transform_to_keys(type_node, attributes)# type_node.attributes = attributes type_node.methods = methods # attributes @@ -162,7 +165,7 @@ def visit(self, node, scope): value = self.visit(node.value) elif node.type in ["Int", "String", "Object", "IO", "Bool"]: value = self.define_internal_local() - self.register_instruction(cil.AllocateNode(self.type, value)) + self.register_instruction(cil.AllocateNode(node.type, value)) else: value = self.define_internal_local() self.register_instruction(cil.AllocateNode("Void", value)) @@ -236,18 +239,16 @@ def visit(self, node, scope): # node.id -> str # node.expr -> ExpressionNode ############################### + # TODO: arreglar aqui el setattribute + source = self.visit(node.expr, scope) - # Your code here!!! if node.id in self.parameters: dest = node.id - source = self.visit(node.expr, scope) self.register_instruction(cil.AssignNode(dest, source)) elif node.id in self.locals: dest = self.locals[node.id] - source = self.visit(node.expr, scope) self.register_instruction(cil.AssignNode(dest, source)) elif node.id in self.attrs: - source = self.visit(node.expr, scope) self.register_instruction(cil.SetAttribNode(self.instances[-1], node.id, source)) @visitor.when(CallNode) @@ -292,8 +293,10 @@ def visit(self, node, scope): ############################### # node.lex -> str ############################### - - return node.lex + constant = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Int", constant)) + self.register_instruction(cil.SetAttribNode(constant, 0, int(node.lex))) + return constant @visitor.when(VariableNode) def visit(self, node, scope): @@ -333,8 +336,6 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - - # Your code here!!! dest = self.define_internal_local() left = self.visit(node.left, scope) right = self.visit(node.right, scope) @@ -347,8 +348,6 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - - # Your code here!!! dest = self.define_internal_local() left = self.visit(node.left, scope) right = self.visit(node.right, scope) @@ -361,9 +360,6 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - - # Your code here!!! - dest = self.define_internal_local() left = self.visit(node.left, scope) right = self.visit(node.right, scope) @@ -388,27 +384,25 @@ def visit(self, node, scope): # node.elseChunk -> ExpressionNode ############################### + var = self.define_internal_local() then_label = self.define_internal_local() else_label = self.define_internal_local() ifexpr = self.visit(node.ifChunk, scope.children[0]) self.register_instruction(cil.GotoIfNode(then_label, ifexpr)) + # else elseexpr = self.visit(node.elseChunk, scope.children[2]) + self.register_instruction(cil.AssignNode(var, elseexpr)) self.register_instruction(cil.GotoNode(else_label)) + # then self.register_instruction(cil.LabelNode(then_label)) - thenexpr = self.visit(node.thenChunk, scope.children[1]) + self.register_instruction(cil.AssignNode(var, thenexpr)) self.register_instruction(cil.LabelNode(else_label)) - - if ifexpr == '1': - return thenexpr - elif ifexpr =='0': - return elseexpr - else: - raise Exception('something went wrong D:') + return var @visitor.when(LetInNode) def visit(self, node, scope): @@ -435,35 +429,55 @@ def visit(self, node, scope): while_expr = self.visit(node.condition, scope) self.register_instruction(cil.GotoIfNode(loop_label, while_expr)) - - + self.register_instruction(cil.GotoNode(end_label)) self.register_instruction(cil.LabelNode(loop_label)) - chunk_expr = self.visit(node.loopChunk, scope) + self.visit(node.loopChunk, scope) self.register_instruction(cil.GotoNode(while_label)) + self.register_instruction(cil.LabelNode(end_label)) - - + # TODO: chequear + result = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Void", result)) + return result @visitor.when(NotNode) def visit(self, node, scope): ############################### - # node.decl_list -> [ DeclarationNode... ] # node.expression -> ExpressionNode ############################### - pass + bool_instance = self.visit(node.expression, scope) + + one = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Int", one)) + self.register_instruction(cil.SetAttribNode(one, 0, 1)) + + bool_value = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Int", bool_value)) + var = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(var, bool_instance, 0)) + self.register_instruction(cil.SetAttribNode(bool_value, 0, var)) + + new_var = self.define_internal_local() + self.register_instruction(cil.MinusNode(new_var, one, bool_value)) + self.register_instruction(cil.SetAttribNode(bool_instance, 0, new_var)) + + return bool_instance @visitor.when(IsVoidNode) def visit(self, node, scope): ############################### # node.method -> ExpressionNode ############################### - method_value = self.visit(node.method, scope) - # revisar que hacer - pass - + expr_value = self.visit(node.method, scope) + var = self.define_internal_local() + self.register_instruction(cil.IsTypeNode(var, expr_value, "Void")) + result = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Bool", result)) + self.register_instruction(cil.SetAttribNode(result, 0, var)) + return result @visitor.when(ComplementNode) def visit(self, node, scope): @@ -471,9 +485,11 @@ def visit(self, node, scope): # node.expr -> ExpressionNode ############################### value = self.visit(node.expr, scope) - pass - - + var = self.define_internal_local() + zero = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Int", zero)) + self.register_instruction(cil.MinusNode(var, zero, value)) + return var @visitor.when(SwitchCaseNode) def visit(self, node, scope): @@ -483,6 +499,7 @@ def visit(self, node, scope): ############################### start_case_label = self.define_internal_local() end_case_label = self.define_internal_local() + error_label = self.define_internal_local() obj = self.visit(node.expr, scope) obj_type = self.define_internal_local() @@ -490,13 +507,18 @@ def visit(self, node, scope): result = self.define_internal_local() self.register_instruction(cil.LabelNode(start_case_label)) + + condition = self.define_internal_local() + self.register_instruction(cil.IsTypeNode( condition, obj_type, 'Void')) + self.register_instruction(cil.GotoIfNode(error_label, condition)) + for case in node.case_list: case_id, case_type, case_expr = case current_label = self.define_internal_local() next_label = self.define_internal_local() condition = self.define_internal_local() - # poner el istype node + self.register_instruction(cil.IsTypeNode( condition, obj_type, case_type)) self.register_instruction(cil.GotoIfNode(current_label, condition)) self.register_instruction(cil.GotoNode(next_label)) @@ -512,28 +534,39 @@ def visit(self, node, scope): self.register_instruction(next_label) + var = self.define_internal_local() + self.register_instruction(cil.ParentTypeNode( var, obj_type)) + self.register_instruction(cil.AssignNode( obj_type, var)) + + self.register_instruction(cil.GotoNode(start_case_label)) - # self.register_instruction(cil.GotoNode(start_case_label)) + self.register_instruction(cil.LabelNode(error_label)) + self.register_instruction(cil.ParamNode(self.instances[-1])) + self.regster_instruction(cil.DynamicCallNode(var, self.to_function_name("abort", self.current_type.name), result)) self.register_instruction(cil.GotoNode(end_case_label)) return result @visitor.when(TrueNode) def visit(self, node, scope): - return '1' - + var = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Bool", var)) + self.register_instruction(cil.SetAttribNode(var, 0, 1)) + return var @visitor.when(FalseNode) def visit(self, node, scope): - return '0' - + var = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Bool", var)) + return var @visitor.when(StringNode) def visit(self, node, scope): data_node = self.register_data(node.lex) + var = self.define_internal_local() + self.register_instruction(cil.LoadNode(var, data_node)) return data_node.name - @visitor.when(LessNode) def visit(self, node, scope): ############################### @@ -558,7 +591,6 @@ def visit(self, node, scope): self.register_instruction(cil.LeqNode(dest, left, right)) return dest - @visitor.when(EqualNode) def visit(self, node, scope): ############################### From 11bf94b045ee147203ce63abc15fcfd81eeda824 Mon Sep 17 00:00:00 2001 From: regnod Date: Tue, 22 Feb 2022 16:01:36 -0500 Subject: [PATCH 29/93] cool2cil check --- src/.vscode/settings.json | 1 + src/visitors/CooltoCil.py | 83 +++++++++++++++++++++++---------------- 2 files changed, 51 insertions(+), 33 deletions(-) diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json index bbf88e782..ab82b954a 100644 --- a/src/.vscode/settings.json +++ b/src/.vscode/settings.json @@ -15,6 +15,7 @@ "poner", "posible", "principio", + "ptype", "seria", "typex", "veces", diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 6a7a907c9..797cc556a 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -1,3 +1,4 @@ +from distutils.log import error from cool_ast.cool_ast import * import cil_ast.cil_ast as cil from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo @@ -15,13 +16,14 @@ def __init__(self, context): self.context = context self.locals = {} - self.attrs = set() + self.attrs = {}#set() self.parameters = set() self.instances = [] def transform_to_keys(self, xtype, keys): for i, key in enumerate(keys): xtype.attrs[key] = i + return xtype.attrs def instanciate_builtin(self): a = 0 @@ -115,14 +117,16 @@ def visit(self, node, scope): attributes = [] methods = [] - self.attrs.clear() - + # self.attrs.clear() + self.attrs = {} + current_type = self.current_type while True: attr_temp = [] method_temp = [] for attr in current_type.attributes: - self.attrs.add(attr.name) + # self.attrs.add(attr.name) + # self.attrs[attr.name] = [] attr_temp.append(attr.name) for method in current_type.methods: @@ -136,7 +140,7 @@ def visit(self, node, scope): current_type = current_type.parent - self.transform_to_keys(type_node, attributes)# type_node.attributes = attributes + self.attrs = self.transform_to_keys(type_node, attributes)# type_node.attributes = attributes type_node.methods = methods # attributes @@ -170,8 +174,9 @@ def visit(self, node, scope): value = self.define_internal_local() self.register_instruction(cil.AllocateNode("Void", value)) #revisar que poner como el attr del SettAttribnode - self.register_instruction(cil.SetAttribNode(self.instances[-1], node.id, value)) - + + attr = self.attrs[node.id] + self.register_instruction(cil.SetAttribNode(self.instances[-1], attr, value)) @visitor.when(FuncDeclarationNode) def visit(self, node, scope): @@ -189,20 +194,20 @@ def visit(self, node, scope): self.parameters.clear() self.params.append(cil.ParamNode('self')) - for arg_name, _ in node.params: - self.params.add(arg_name) + for arg_name, ptype in node.params: + self.parameters.add((arg_name, ptype)) self.params.append(cil.ParamNode(arg_name)) + self.register_instruction(cil.ParamNode(arg_name)) self.locals.clear() return_value = self.visit(node.body, scope) - # for instruction, child_scope in zip(node.body, scope.children): - # value = self.visit(instruction, child_scope) - - # Your code here!!! (Handle RETURN) + if node.body and 'Void' != node.type: self.register_instruction(cil.ReturnNode(return_value)) else: - self.register_instruction(cil.ReturnNode()) + result = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Void", result)) + self.register_instruction(cil.ReturnNode(result)) self.current_method = None @@ -213,8 +218,6 @@ def visit(self, node, scope): # node.type -> str # node.expr -> ExpressionNode ############################### - - # Your code here!!! var = scope.find_variable(node.id) dest = self.locals[var.name] = self.register_local(var) @@ -239,17 +242,24 @@ def visit(self, node, scope): # node.id -> str # node.expr -> ExpressionNode ############################### - # TODO: arreglar aqui el setattribute source = self.visit(node.expr, scope) - if node.id in self.parameters: - dest = node.id - self.register_instruction(cil.AssignNode(dest, source)) - elif node.id in self.locals: + if node.id in self.locals: dest = self.locals[node.id] self.register_instruction(cil.AssignNode(dest, source)) - elif node.id in self.attrs: - self.register_instruction(cil.SetAttribNode(self.instances[-1], node.id, source)) + return dest + elif node.id in self.attrs.keys(): + attr = self.attrs[node.id] + var = self.define_internal_local() + self.register_instruction(cil.SetAttribNode(self.instances[-1], attr, source)) + self.register_instruction(cil.GetAttribNode(var, self.instances[-1], attr)) + return var + else: + for (p_name, p_type) in self.parameters: + if node.id == p_name: + dest = VariableInfo(p_name, p_type) + self.register_instruction(cil.AssignNode(dest, source)) + return dest @visitor.when(CallNode) def visit(self, node, scope): @@ -258,8 +268,8 @@ def visit(self, node, scope): # node.method -> str # node.args -> [ ExpressionNode ... ] ############################### - - # Your code here!!! + error_label = self.define_internal_local() + dest = self.define_internal_local() if node.obj is not None: # dynamic obj = self.visit(node.obj, scope) self.instances.append(obj) @@ -271,11 +281,14 @@ def visit(self, node, scope): local = self.define_internal_local() self.register_instruction(cil.TypeOfNode(obj, local)) + condition = self.define_internal_local() + self.register_instruction(cil.IsTypeNode(condition, local, "Void")) + self.register_instruction(cil.GotoIfNode(error_label, condition)) + self.register_instruction(cil.ArgNode(obj)) for arg in node.args: self.register_instruction(cil.ArgNode(self.visit(arg, scope))) - dest = self.define_internal_local() obj_type = obj_type if node.parent == None else node.parent self.register_instruction(cil.DynamicCallNode(local, self.to_function_name(node.method, obj_type), dest)) else: # static @@ -283,8 +296,9 @@ def visit(self, node, scope): for arg in node.args: self.register_instruction(cil.ArgNode(self.visit(arg, scope))) - dest = self.define_internal_local() self.register_instruction(cil.StaticCallNode(self.to_function_name(node.method, self.current_type.type.name), dest)) + + self.register_instruction(cil.LabelNode(error_label)) self.instances.pop() return dest @@ -303,11 +317,13 @@ def visit(self, node, scope): ############################### # node.lex -> str ############################### + var = self.define_internal_local() if node.lex in self.locals: - return self.locals[node.lex] - elif node.lex in self.attrs: - self.register_instruction(cil.GetAttribNode(self.instances[-1], node.lex)) - return node.lex + var_aux = self.locals[node.lex].name + self.register_instruction(cil.AssignNode(var, var_aux)) + elif node.lex in self.attrs.keys(): + self.register_instruction(cil.GetAttribNode(var, self.instances[-1], self.attrs[node.lex])) + return var @visitor.when(InstantiateNode) def visit(self, node, scope): @@ -437,7 +453,7 @@ def visit(self, node, scope): self.register_instruction(cil.GotoNode(while_label)) self.register_instruction(cil.LabelNode(end_label)) - # TODO: chequear + result = self.define_internal_local() self.register_instruction(cil.AllocateNode("Void", result)) return result @@ -489,7 +505,8 @@ def visit(self, node, scope): zero = self.define_internal_local() self.register_instruction(cil.AllocateNode("Int", zero)) self.register_instruction(cil.MinusNode(var, zero, value)) - return var + self.regster_instruction(cil.SetAttribNode(value, 0, var)) + return value @visitor.when(SwitchCaseNode) def visit(self, node, scope): From 0576346fc372e828799478a70031c764fb3a49d9 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Tue, 22 Feb 2022 17:17:36 -0500 Subject: [PATCH 30/93] created the built_in functions class nodes --- src/cil_ast/cil_ast.py | 3 ++- src/main.py | 2 +- src/pipeline.py | 4 ++-- src/visitors/Builder.py | 3 +++ src/visitors/CooltoCil.py | 31 +++++++++++++++++++++++++------ 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 4f51f00c5..529d27147 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -23,11 +23,12 @@ def __init__(self, vname, value): self.value = value class FunctionNode(Node): - def __init__(self, fname, params, localvars, instructions): + def __init__(self, fname, params, localvars, instructions, ctor= False): self.name = fname self.params = params self.localvars = localvars self.instructions = instructions + self.ctor = ctor class ParamNode(Node): def __init__(self, name): diff --git a/src/main.py b/src/main.py index 0571f3a3a..404b36cb2 100644 --- a/src/main.py +++ b/src/main.py @@ -5,7 +5,7 @@ # with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/semantic/self4.cl') as f: -with open('./tests/boku/test1.cl') as f: +with open('./tests/codegen/hello_world.cl') as f: program = f.read() coolLexer = lexer.CoolLexer() diff --git a/src/pipeline.py b/src/pipeline.py index eee340ee5..44f2c114b 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -5,7 +5,7 @@ from visitors.Checker import TypeChecker from visitors.Inferencer import Inferencer from visitors.Executor import Executor, RuntimeException -from visitors.CooltoCil import MiniCOOLToCILVisitor +from visitors.CooltoCil import COOLToCILVisitor from visitors.CilDepicter import get_formatter class Pipeline(): @@ -48,7 +48,7 @@ def __init__(self, program, lexer, parser, verbose=False): if len(self.errors) == 0: self.typeChecker = TypeChecker(self.context, self.errors) self.typeChecker.visit( self.ast, scope) - self.coolToCil = MiniCOOLToCILVisitor(self.context) + self.coolToCil = COOLToCILVisitor(self.context) cil_ast = self.coolToCil.visit(self.ast, scope) print(get_formatter(cil_ast)) diff --git a/src/visitors/Builder.py b/src/visitors/Builder.py index bf9c5d303..826f47b68 100755 --- a/src/visitors/Builder.py +++ b/src/visitors/Builder.py @@ -42,6 +42,9 @@ def visit(self, node): _string.define_method('substr', ['index', 'length'], [_int, _int], _string) _string.define_method('concat', ['str'], [_string], _string) + _int.define_attribute('value', _int) + _bool.define_attribute('value', _int) + _string.define_attribute('value', _string) for declaration in node.declarations: self.visit(declaration) diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 0733c9a6a..b017e3d6d 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -72,17 +72,35 @@ def register_data(self, value): return data_node -class MiniCOOLToCILVisitor(BaseCOOLToCILVisitor): +class COOLToCILVisitor(BaseCOOLToCILVisitor): @visitor.on('node') def visit(self, node): pass + def class_node_from_context(self, type): + idx = type.name + features = self.features_from_context(type) + parent = 'Object' if idx not in ['Object', 'Void'] else None + return ClassDeclarationNode(idx, features, parent) + + def features_from_context(self, type): + feats = [AttrDeclarationNode(feat.name, feat.type) for feat in type.attributes] + for func in type.methods: + feats.append(FuncDeclarationNode(func.name, func.param_names, func.return_type, None)) + + return feats + @visitor.when(ProgramNode) def visit(self, node, scope): ###################################################### # node.declarations -> [ ClassDeclarationNode ... ] ###################################################### + # class_nodes = [self.class_node_from_context(c) for c in self.context.types] + built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types] + + + self.current_function = self.register_function('entry') instance = self.define_internal_local() self.instances.append(instance) @@ -190,7 +208,7 @@ def visit(self, node, scope): self.parameters.clear() self.params.append(cil.ParamNode('self')) for arg_name, _ in node.params: - self.params.add(arg_name) + self.parameters.add(arg_name) self.params.append(cil.ParamNode(arg_name)) self.locals.clear() @@ -538,13 +556,14 @@ def visit(self, node, scope): def visit(self, node, scope): value = self.define_internal_local() self.register_instruction(cil.AllocateNode('Bool', value)) - #setear atributo 0 a True - + # setear atributo 0 a True + return value @visitor.when(FalseNode) def visit(self, node, scope): - return '0' - + value = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Bool', value)) + return value @visitor.when(StringNode) def visit(self, node, scope): From 727a8d6de6fa49c061e74003cf194dd550d74f71 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Tue, 22 Feb 2022 17:21:45 -0500 Subject: [PATCH 31/93] merged --- src/visitors/CooltoCil.py | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 679dd56aa..f19e62dea 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -216,13 +216,8 @@ def visit(self, node, scope): self.parameters.clear() self.params.append(cil.ParamNode('self')) -<<<<<<< HEAD - for arg_name, _ in node.params: - self.parameters.add(arg_name) -======= for arg_name, ptype in node.params: self.parameters.add((arg_name, ptype)) ->>>>>>> 36db263c1528b1af4d5f1ef8a5b156973dd4c179 self.params.append(cil.ParamNode(arg_name)) self.register_instruction(cil.ParamNode(arg_name)) @@ -593,18 +588,6 @@ def visit(self, node, scope): @visitor.when(TrueNode) def visit(self, node, scope): -<<<<<<< HEAD - value = self.define_internal_local() - self.register_instruction(cil.AllocateNode('Bool', value)) - # setear atributo 0 a True - return value - - @visitor.when(FalseNode) - def visit(self, node, scope): - value = self.define_internal_local() - self.register_instruction(cil.AllocateNode('Bool', value)) - return value -======= var = self.define_internal_local() self.register_instruction(cil.AllocateNode("Bool", var)) self.register_instruction(cil.SetAttribNode(var, 0, 1)) @@ -615,7 +598,6 @@ def visit(self, node, scope): var = self.define_internal_local() self.register_instruction(cil.AllocateNode("Bool", var)) return var ->>>>>>> 36db263c1528b1af4d5f1ef8a5b156973dd4c179 @visitor.when(StringNode) def visit(self, node, scope): From 156a99c199d7a7431074c28c220e811fae7cae4d Mon Sep 17 00:00:00 2001 From: regnod Date: Tue, 22 Feb 2022 21:13:37 -0500 Subject: [PATCH 32/93] mips visitor --- src/.vscode/settings.json | 50 +++++++++- src/c_parser/parser.py | 2 +- src/cil_ast/cil_ast.py | 21 ----- src/utils/mip_utils.py | 173 +++++++++++++++++++++++++++++++++++ src/visitors/CiltoMips.py | 187 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 410 insertions(+), 23 deletions(-) create mode 100644 src/utils/mip_utils.py create mode 100644 src/visitors/CiltoMips.py diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json index 68cf89ad8..a09e0d1d4 100644 --- a/src/.vscode/settings.json +++ b/src/.vscode/settings.json @@ -1,10 +1,30 @@ { "cSpell.words": [ + "addi", + "addiu", + "addu", + "andi", + "asciiz", "asignar", "atributos", + "bczf", + "bczt", + "beqz", + "bgeu", + "bgez", + "bgezal", + "bgtu", + "bgtz", + "bleu", + "blez", + "bltu", + "bltz", + "bltzal", + "bnez", "ccur", "chequear", "cpar", + "divu", "esac", "evalue", "evitar", @@ -15,9 +35,23 @@ "instanciate", "instruccion", "isvoid", + "jalr", "lneq", + "lwcz", + "mfcz", + "mfhi", + "mflo", "mios", + "mtcz", + "mthi", + "mtlo", + "mulo", + "mulou", + "mult", + "multu", + "mulu", "necesaria", + "negu", "ocur", "opar", "parentesis", @@ -25,9 +59,23 @@ "posible", "principio", "ptype", + "remu", "seria", + "sgeu", + "sgtu", + "sleu", + "sllv", + "slti", + "sltiu", + "sltu", + "srav", + "srlv", + "subu", + "swcz", "typex", + "ulhu", "veces", - "visitar" + "visitar", + "xori" ] } \ No newline at end of file diff --git a/src/c_parser/parser.py b/src/c_parser/parser.py index b96269e47..29c8c7969 100644 --- a/src/c_parser/parser.py +++ b/src/c_parser/parser.py @@ -526,7 +526,7 @@ def find_column(input, token): return (token.lexpos - line_start) + 1 #parentesis? if not p: - errors.append(SyntacticError % (0,0,'EOF')) + errors.append(_SyntacticError % (0,0,'EOF')) return token_column = find_column(p.lexer.lexdata, p) diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 2a678f7e6..c5022e4b5 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -17,10 +17,6 @@ def __init__(self, name): def attributes(self): return self.attrs.keys() - @property - def attributes(self): - return self.attrs.keys() - class DataNode(Node): def __init__(self, vname, value): self.name = vname @@ -125,17 +121,6 @@ class TypeOfNode(InstructionNode): def __init__(self, obj, dest): self.obj = obj self.dest = dest - -class IsTypeNode(InstructionNode): - def __init__(self, dest, type_obj, type_name): - self.dest = dest - self.type_obj = type_obj - self.type_name = type_name - -class ParentTypeNode(Node): - def __init__(self, dest, type_obj): - self.dest = dest - self.type_obj = type_obj class IsTypeNode(InstructionNode): def __init(self, dest, type_obj, type_name): @@ -208,12 +193,6 @@ def __init__(self, dest, string, i, n): self.string = string self.i = i self.n = n - -class ToStr(InstructionNode): - def __init__(self, dest, evalue): - self.dest = dest - self.value = evalue - class EqualString(InstructionNode): def __init__(self, dest, string1, string2): self.dest = dest diff --git a/src/utils/mip_utils.py b/src/utils/mip_utils.py new file mode 100644 index 000000000..3dee0a631 --- /dev/null +++ b/src/utils/mip_utils.py @@ -0,0 +1,173 @@ +#registers +class registers: + + zero = '$zero' + a0 = '$a0' + a1 = '$a1' + a2 = '$a2' + a3 = '$a3' + + v0 = '$v0' + v1 = '$v1' + + s0 = '$s0' + s1 = '$s1' + s2 = '$s2' + s3 = '$s3' + s4 = '$s4' + s5 = '$s5' + s6 = '$s6' + s7 = '$s7' + + t0 = '$t0' + t1 = '$t1' + t2 = '$t2' + t3 = '$t3' + t4 = '$t4' + t5 = '$t5' + t6 = '$t6' + t7 = '$t7' + t8 = '$t8' + t9 = '$t9' + + gp = '$gp' + sp = '$sp' + fp = '$fp' + ra = '$ra' + +#operations +class operations: + + la = 'la' + lb = 'lb' + lbu = 'lbu' + ld = 'ld' + lh = 'lh' + lhu = 'lhu' + lw = 'lw' + lwcz = 'lwcz' + lwl = 'lwl' + lwr = 'lwr' + sb = 'sb' + sd = 'sd' + sh = 'sh' + sw = 'sw' + swcz = 'swcz' + swl = 'swl' + swr = 'swr' + ulh = 'ulh' + ulhu = 'ulhu' + ulw = 'ulw' + ush = 'ush' + usw = 'usw' + + abs = 'abs' + add = 'add' + addi = 'addi' + addu = 'addu' + addiu = 'addiu' + and_bw = 'and' + andi = 'andi' + div = 'div' + divu = 'divu' + div = 'div' + divu = 'divu' + mul = 'mul' + mulu = 'mulu' + mulo = 'mulo' + mulou = 'mulou' + mult = 'mult' + multu = 'multu' + neg = 'neg' + negu = 'negu' + nor = 'nor' + not_bw = 'not' + or_bw = 'or' + ori = 'ori' + rem = 'rem' + remu = 'remu' + rol = 'rol' + ror = 'ror' + sll = 'sll' + sllv = 'sllv' + sra = 'sra' + srav = 'srav' + srl = 'srl' + srlv = 'srlv' + sub = 'sub' + subu = 'subu' + xor = 'xor' + xori = 'xori' + + li = 'li' + lid = 'li.d' + lis = 'li.s' + lui = 'lui' + + seq = 'seq' + sge = 'sge' + sgeu = 'sgeu' + sgt = 'sgt' + sgtu = 'sgtu' + sle = 'sle' + sleu = 'sleu' + slt = 'slt' + slti = 'slti' + sltu = 'sltu' + sltiu = 'sltiu' + sne = 'sne' + + b = 'b' + bczt = 'bczt' + bczf = 'bczf' + beq = 'beq' + beqz = 'beqz' + bge = 'bge' + bgeu = 'bgeu' + bgez = 'bgez' + bgezal = 'bgezal' + bgt = 'bgt' + bgtu = 'bgtu' + bgtz = 'bgtz' + ble = 'ble' + bleu = 'bleu' + blez = 'blez' + bgezal = 'bgezal' + + bltzal = 'bltzal' + blt = 'blt' + bltu = 'bltu' + bltz = 'bltz' + bne = 'bne' + bnez = 'bnez' + j = 'j' + jal = 'jal' + jalr = 'jalr' + jr = 'jr' + + move = 'move' + mfhi = 'mfhi' + mflo = 'mflo' + mthi = 'mthi' + mtlo = 'mtlo' + mfcz = 'mfcz' + mfc1d = 'mfc1.d' + mtcz = 'mtcz' + + rfe = 'rfe' + syscall = 'syscall' + brk = 'break' + nop = 'nop' + +#types +class datatype: + ascii = '.ascii' + asciiz = '.asciiz' + space = '.space' + align = '.align' + byte = '.byte' + word = '.word' + half = '.half' + double = '.double' + floatt = '.float' + \ No newline at end of file diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py new file mode 100644 index 000000000..2e1d30027 --- /dev/null +++ b/src/visitors/CiltoMips.py @@ -0,0 +1,187 @@ +from utils.mip_utils import registers, operations, datatype +import visitors.visitor as visitor +from cil_ast.cil_ast import * + +class BaseCiltoMipsVisitor: + def __init__(self, context): + self.dotdata =[] + self.dotcode =[] + self.context = context + + + + + + # ====================================================================== + # =[ VISIT ]============================================================ + # ====================================================================== + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + pass + + @visitor.when(TypeNode) + def visit(self, node): + pass + + @visitor.when(DataNode) + def visit(self, node): + pass + + @visitor.when(FunctionNode) + def visit(self, node): + methods = [ + 'Object_abort', + 'Object_type_name', + 'Object_copy', + 'String_concat', + 'String_substr', + 'String_length', + 'IO_in_int', + 'IO_out_int', + 'IO_in_string', + 'IO_out_string', + ] + if node.fname in methods: + return + pass + + @visitor.when(ParamNode) + def visit(self, node): + pass + + @visitor.when(LocalNode) + def visit(self, node): + pass + + @visitor.when(AssignNode) + def visit(self, node): + pass + + @visitor.when(PlusNode) + def visit(self, node): + pass + + @visitor.when(MinusNode) + def visit(self, node): + pass + + @visitor.when(StarNode) + def visit(self, node): + pass + + @visitor.when(DivNode) + def visit(self, node): + pass + + @visitor.when(EqualNode) + def visit(self, node): + pass + + @visitor.when(LessNode) + def visit(self, node): + pass + + @visitor.when(LeqNode) + def visit(self, node): + pass + + @visitor.when(GotoNode) + def visit(self, node): + pass + + @visitor.when(GotoIfNode) + def visit(self, node): + pass + + @visitor.when(GetAttribNode) + def visit(self, node): + pass + + @visitor.when(SetAttribNode) + def visit(self, node): + pass + + @visitor.when(AllocateNode) + def visit(self, node): + pass + + @visitor.when(TypeOfNode) + def visit(self, node): + pass + + @visitor.when(LabelNode) + def visit(self, node): + pass + + @visitor.when(IsTypeNode) + def visit(self, node): + pass + + @visitor.when(ParentTypeNode) + def visit(self, node): + pass + + @visitor.when(StaticCallNode) + def visit(self, node): + pass + + @visitor.when(DynamicCallNode) + def visit(self, node): + pass + + @visitor.when(ArgNode) + def visit(self, node): + pass + + @visitor.when(ReturnNode) + def visit(self, node): + pass + + @visitor.when(LoadNode) + def visit(self, node): + pass + + @visitor.when(LengthNode) + def visit(self, node): + pass + + @visitor.when(ConcatNode) + def visit(self, node): + pass + + @visitor.when(PrefixNode) + def visit(self, node): + pass + + @visitor.when(SubstringNode) + def visit(self, node): + pass + + @visitor.when(PrintNode) + def visit(self, node): + pass + + @visitor.when(ReadNode) + def visit(self, node): + pass + + @visitor.when(ToStrNode) + def visit(self, node): + pass + + @visitor.when(EqualString) + def visit(self, node): + pass + + @visitor.when(SubstringNode) + def visit(self, node): + pass + + @visitor.when(SubstringNode) + def visit(self, node): + pass From 85d0f7ff552d62ea1ce8304a2655b445a97c3e24 Mon Sep 17 00:00:00 2001 From: regnod Date: Tue, 22 Feb 2022 21:15:00 -0500 Subject: [PATCH 33/93] mips visitor --- src/visitors/CiltoMips.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 2e1d30027..972a3bc38 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -174,7 +174,7 @@ def visit(self, node): def visit(self, node): pass - @visitor.when(EqualString) + @visitor.when(SubstringNode) def visit(self, node): pass From 07c2885c045b0de798f3a7a88aea6ba7e4cb8bd6 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Wed, 23 Feb 2022 01:25:28 -0500 Subject: [PATCH 34/93] before editing the cool2cil attrNode --- src/pipeline.py | 2 +- src/visitors/CiltoMips.py | 6 +----- src/visitors/CooltoCil.py | 8 ++++---- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/pipeline.py b/src/pipeline.py index 44f2c114b..0aad74ce4 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -50,7 +50,7 @@ def __init__(self, program, lexer, parser, verbose=False): self.typeChecker.visit( self.ast, scope) self.coolToCil = COOLToCILVisitor(self.context) cil_ast = self.coolToCil.visit(self.ast, scope) - print(get_formatter(cil_ast)) + # print(get_formatter(cil_ast)) if verbose: print('This is after infering types:') diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 972a3bc38..7ba5eb244 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -11,17 +11,13 @@ def __init__(self, context): - - # ====================================================================== - # =[ VISIT ]============================================================ - # ====================================================================== - @visitor.on('node') def visit(self, node): pass @visitor.when(ProgramNode) def visit(self, node): + pass @visitor.when(TypeNode) diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index f19e62dea..50aac0ed5 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -29,9 +29,6 @@ def transform_to_keys(self, xtype, keys): xtype.attrs[key] = i return xtype.attrs - def instanciate_builtin(self): - a = 0 - @property def params(self): return self.current_function.params @@ -77,7 +74,10 @@ def register_data(self, value): self.dotdata.append(data_node) return data_node - + def create_ctr(self, type): + self.current_function = self.register_function(self.to_function_name('ctor', self.current_type.name)) + self.register_instruction(cil.ParamNode('self')) + class COOLToCILVisitor(BaseCOOLToCILVisitor): @visitor.on('node') def visit(self, node): From f9fc6d7149fef37f0f4d45d770561bd0ddee1de5 Mon Sep 17 00:00:00 2001 From: regnod Date: Wed, 23 Feb 2022 03:01:18 -0500 Subject: [PATCH 35/93] commenting mips_utils :) --- src/.vscode/settings.json | 4 + src/cil_ast/cil_ast.py | 19 +-- src/utils/mip_utils.py | 245 +++++++++++++++++++------------------- src/visitors/CiltoMips.py | 87 ++++++++++++-- src/visitors/CooltoCil.py | 4 - 5 files changed, 208 insertions(+), 151 deletions(-) diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json index a09e0d1d4..82dd8680a 100644 --- a/src/.vscode/settings.json +++ b/src/.vscode/settings.json @@ -29,6 +29,7 @@ "evalue", "evitar", "falta", + "frsrc", "generado", "generar", "generarlo", @@ -59,10 +60,13 @@ "posible", "principio", "ptype", + "rdest", "remu", + "rsrc", "seria", "sgeu", "sgtu", + "shamt", "sleu", "sllv", "slti", diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index f2c388200..9d50609ee 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -194,25 +194,8 @@ def __init__(self, dest, string, i, n): self.string = string self.i = i self.n = n -class EqualString(InstructionNode): - def __init__(self, dest, string1, string2): - self.dest = dest - self.string1 = string1 - self.string2 = string2 class ToStrNode(InstructionNode): def __init__(self, dest, ivalue): self.dest = dest - self.ivalue = ivalue - -class ReadNode(InstructionNode): - def __init__(self, dest): - self.dest = dest - -class PrintNode(InstructionNode): - def __init__(self, str_addr): - self.str_addr = str_addr - -class IntNode(InstructionNode): - def __init_(self, value): - self.value = value + self.ivalue = ivalue \ No newline at end of file diff --git a/src/utils/mip_utils.py b/src/utils/mip_utils.py index 3dee0a631..7d478de28 100644 --- a/src/utils/mip_utils.py +++ b/src/utils/mip_utils.py @@ -1,15 +1,19 @@ #registers class registers: - zero = '$zero' + zero = '$zero' # constant 0 + + # arguments 1, 2, 3, 4 a0 = '$a0' a1 = '$a1' a2 = '$a2' a3 = '$a3' - - v0 = '$v0' + + # expression evaluation and result of a function + v0 = '$v0' v1 = '$v1' - + + # saved temporary (preserved across call) s0 = '$s0' s1 = '$s1' s2 = '$s2' @@ -18,7 +22,8 @@ class registers: s5 = '$s5' s6 = '$s6' s7 = '$s7' - + + # temporary (not preserved across call) t0 = '$t0' t1 = '$t1' t2 = '$t2' @@ -30,134 +35,132 @@ class registers: t8 = '$t8' t9 = '$t9' - gp = '$gp' - sp = '$sp' - fp = '$fp' - ra = '$ra' + gp = '$gp' # pointer to global area + sp = '$sp' # stack pointer + fp = '$fp' # frame pointer + ra = '$ra' # return address -#operations +#operations class operations: - la = 'la' - lb = 'lb' - lbu = 'lbu' - ld = 'ld' - lh = 'lh' - lhu = 'lhu' - lw = 'lw' - lwcz = 'lwcz' - lwl = 'lwl' - lwr = 'lwr' - sb = 'sb' - sd = 'sd' - sh = 'sh' - sw = 'sw' - swcz = 'swcz' - swl = 'swl' - swr = 'swr' - ulh = 'ulh' - ulhu = 'ulhu' - ulw = 'ulw' - ush = 'ush' - usw = 'usw' + la = 'la' # la rdest, address -> load computed address (not the content of the location) into rdest + lb = 'lb' # lb rt, address -> load the byte at address into rt + lbu = 'lbu' # lbu rt, address -> lb unsigned + lh = 'lh' # lh rt, address -> load the 16-bit quantity (halfword) at address into rt + lhu = 'lhu' # lhu rt, address -> lh unsigned + lw = 'lw' # lw rt, address -> load the word at address into rt + lwcz = 'lwcz' # lwcz rt, address -> load the word at address into rt of coprocessor z (0-3) + lwl = 'lwl' # lwl rt, address -> load the left bytes from the word at the possibly unaligned address into rt + lwr = 'lwr' # lwr rt, address -> load the right bytes from the word at the possibly unaligned address into rt + ld = 'ld' # ld rdest, address -> load the 64-bit quantity at address into rdest and rdest + 1 + ulh = 'ulh' # ulh rdest, address -> load the 16-bit quantity (halfword) at the possibly unaligned address into rdest + ulhu = 'ulhu' # ulhu rdest, address -> ulh unsigned + ulw = 'ulw' # ulw rdest, address -> load the 32-bit quantity (word) at the possibly unaligned address into rdest + sb = 'sb' # sb rt, address -> store the low byte from rt at address + sh = 'sh' # sh rt, address -> store the low halfword from rt at address + sw = 'sw' # sw rt, address -> store the word from rt at address + swcz = 'swcz' # swcz rt, address -> store the word from rt of coprocessor z at address + swl = 'swl' # swl rt, address -> store the left bytes from rt at the possibly unaligned address + swr = 'swr' # swr rt, address -> store the right bytes from rt at the possibly unaligned address + sd = 'sd' # sd rsrc, address -> store the 64-bit quantity in registers rsrc and rsrc + 1 at address + ush = 'ush' # ush rsrc, address -> stores the low halfword from rsrc at the possibly unaligned address + usw = 'usw' # usw rsrc, address -> stores the word from rsrc at the possibly unaligned address - abs = 'abs' - add = 'add' - addi = 'addi' - addu = 'addu' - addiu = 'addiu' - and_bw = 'and' - andi = 'andi' - div = 'div' - divu = 'divu' - div = 'div' - divu = 'divu' - mul = 'mul' - mulu = 'mulu' - mulo = 'mulo' - mulou = 'mulou' - mult = 'mult' - multu = 'multu' - neg = 'neg' - negu = 'negu' - nor = 'nor' - not_bw = 'not' - or_bw = 'or' - ori = 'ori' - rem = 'rem' - remu = 'remu' - rol = 'rol' - ror = 'ror' - sll = 'sll' - sllv = 'sllv' - sra = 'sra' - srav = 'srav' - srl = 'srl' - srlv = 'srlv' - sub = 'sub' - subu = 'subu' - xor = 'xor' - xori = 'xori' + abs = 'abs' # abs rdest, rsrc -> put absolute value of rsrc into rdest + add = 'add' # add rd, rs, rt -> put sum of rs and rt into rd (with overflow) + addu = 'addu' # addu rd, rs, rt -> add without overflow + addi = 'addi' # add rt, rs, imm -> put the sum of rs and sign-extended imm into rt (with overflow) + addiu = 'addiu' # add rt, rs, imm -> addi without overflow + and_bw = 'and' # and rd, rs, rt -> put the logical AND of rs and rt into rd + andi = 'andi' # andi rt, rs, imm -> put the logical AND of rs and the zero-extended imm into rt + div = 'div' # div rs, rt -> divide rs by rt. leaves quotient in register lo and reminder in register hi (with overflow) + divu = 'divu' # divu rdest, rsrc1, src2 -> put the quotient of register rsrc1 and src2 into rdest (without overflow) + mult = 'mult' # mult rs, rt -> multiply rs and rt. leaves the low-order word in lo and high-order word in hi + multu = 'multu' # multu rs, rt -> multiply rs and rt. leaves the low-order word in lo and high-order word in hi (unsigned) + mul = 'mul' # mul rdest, rsrc1, src2 -> put the product of the register rsrc1 and src2 into rdest (without overflow) + mulo = 'mulo' # mul rdest, rsrc1, src2 -> mul with overflow + mulou = 'mulou' # mul rdest, rsrc1, src2 -> mulo unsigned + mulu = 'mulu' # + neg = 'neg' # neg rdest, rsrc -> put the negative of register rsrc into rdest (with overflow) + negu = 'negu' # negu rdest, rsrc -> neg without overflow + nor = 'nor' # nor rd, rs, rt -> put the logical NOR of registers rs and rt into register rd + not_bw = 'not' # not rdest, rsrc -> put the bitwise logical negation of the register rsrc into register rdest + or_bw = 'or' # or rd, rs, rt -> put the logical OR of registers rs and rt into register rd revisar + ori = 'ori' # ori rt, rs, imm -> put the logical OR of register rs and the zero-extended imm into register rt + rem = 'rem' # rem rdest, rsrc1, rsrc2 -> put the reminder of divide rsrc1 and rsrc2 into rdest + remu = 'remu' # remu rdest, rsrc1, rsrc2 -> put the reminder of divide rsrc1 and rsrc2 int rdest (unsigned) + sll = 'sll' # sll rd, rt, shamt -> shift register rt left by the distance indicated by shamt and put result in rd + sllv = 'sllv' # sllv rd, rt, rs -> shift register rt left by the distance indicated by rs and put result in rd + sra = 'sra' # sra rd, rt, shamt -> shift register rt right by the distance indicated by shamt and put result in rd + srav = 'srav' # srav rd, rt, rs -> shift register rt right by the distance indicated by rs and put result in rd + srl = 'srl' # srl rd, rt, shamt -> shift register rt right by the distance indicated by shamt and put result in rd + srlv = 'srlv' # srlv rd, rt, rs -> shift register rt right by the distance indicated by rs and put result in rd + rol = 'rol' # rol rdest, rsrc1, rsrc2 -> rotate register rsrc1 left by the distance rsrc2 and put the result in rdest + ror = 'ror' # ror rdest, rsrc1, rsrc2 -> rotate register rsrc1 right by the distance rsrc2 and put the result in rdest + sub = 'sub' # sub rd, rs, rt -> put the difference of registers rs and rt into register rd (with overflow) + subu = 'subu' # subu rd, rs, rt -> sub without overflow + xor = 'xor' # xor rd, rs, rt -> put the logical XOR of registers rs and rt into register rd + xori = 'xori' # xor rt, rs, imm -> put the logical XOR of register rs and the zero-extended imm into register rt - li = 'li' + lui = 'lui' # lui rt, imm -> load the lower halfword of imm into the upper halfword of rt, the lower bits of rt are set to 0 + li = 'li' # li rdest, imm -> move the imm into the register rdest lid = 'li.d' lis = 'li.s' - lui = 'lui' - seq = 'seq' - sge = 'sge' - sgeu = 'sgeu' - sgt = 'sgt' - sgtu = 'sgtu' - sle = 'sle' - sleu = 'sleu' - slt = 'slt' - slti = 'slti' - sltu = 'sltu' - sltiu = 'sltiu' - sne = 'sne' + slt = 'slt' # slt rd, rs, rt -> set rd to 1 if rs is less than rt, and to 0 otherwise + sltu = 'sltu' # sltu rd, rs, rt -> slt unsigned + slti = 'slti' # slt rd, rs, imm -> set rd to 1 if rs is less than the signed-extended imm, and to 0 otherwise + sltiu = 'sltiu' # sltiu rd, rs, imm -> slti unsigned + seq = 'seq' # seq rdest, rsrc1, rsrc2 -> set rdest to 1 if rsrc1 equals to rsrc2, 0 otherwise + sge = 'sge' # sge rdest, rsrc1, rsrc2 -> set rdest to 1 if rsrc1 greater than or equals to rsrc2, 0 otherwise + sgeu = 'sgeu' # sgeu rdest, rsrc1, rsrc2 -> sge unsigned + sgt = 'sgt' # sgt rdest, rsrc1, rsrc2 -> set rdest to 1 if rsrc1 greater than to rsrc2, 0 otherwise + sgtu = 'sgtu' # sgtu rdest, rsrc1, rsrc2 -> sgt unsigned + sle = 'sle' # sle rdest, rsrc1, rsrc2 -> set rdest to 1 if rsrc1 less than or equal to rsrc2, 0 otherwise + sleu = 'sleu' # sleu rdest, rsrc1, rsrc2 -> sle unsigned + sne = 'sne' # sne rdest, rsrc1, rsrc2 -> set rdest to 1 if rsrc1 not equal to rsrc2, 0 otherwise + + b = 'b' # b label -> unconditionally branch to the instruction at the label + bczt = 'bczt' # bczt offset -> conditionally branch the number of instructions specified by the offset if z's condition flag is true. z is 0, 1, 2, or 3. + bczf = 'bczf' # bczf offset -> conditionally branch the number of instructions specified by the offset if z's condition flag is false. z is 0, 1, 2, or 3. + beq = 'beq' # beq rs, rt, offset -> conditionally branch the number of instructions specified by the offset if rs is equal rt + bgez = 'bgez' # bgez rs, offset -> conditionally branch the number of instructions specified by the offset if rs is greater than or equal to 0 + bgezal = 'bgezal' # bgezal rs, offset -> conditionally branch the number of instructions specified by the offset if rs is greater than or equal to 0. save the address of next instruction in register 31 + bgtz = 'bgtz' # bgtz rs, offset -> conditionally branch the number of instructions specified by the offset if rs is greater than 0 + blez = 'blez' # blez rs, offset -> conditionally branch the number of instructions specified by the offset if rs is less than or equal to 0 + bltzal = 'bltzal' # bltzal rs, offset -> conditionally branch the number of instructions specified by the offset if rs is less than 0. save the address of next instruction in register 31 + bltz = 'bltz' # bltz rs, offset -> conditionally branch the number of instructions specified by the offset if rs is less than 0 + bne = 'bne' # bne rs, rt, offset -> conditionally branch the number of instructions specified by the offset if rs is not equal to rt - b = 'b' - bczt = 'bczt' - bczf = 'bczf' - beq = 'beq' - beqz = 'beqz' - bge = 'bge' - bgeu = 'bgeu' - bgez = 'bgez' - bgezal = 'bgezal' - bgt = 'bgt' - bgtu = 'bgtu' - bgtz = 'bgtz' - ble = 'ble' - bleu = 'bleu' - blez = 'blez' - bgezal = 'bgezal' + beqz = 'beqz' # beqz rsrc, label -> conditionally branch to the label if rsrc equals to 0 + bge = 'bge' # bge rsrc1, rsrc2, label -> conditionally branch to the label if rsrc1 is greater than or equal to rsrc2 + bgeu = 'bgeu' # bgeu rsrc1, rsrc2, label -> bge unsigned + bgt = 'bgt' # bgt rsrc1, rsrc2, label -> conditionally branch to the label if rsrc1 is greater than rsrc2 + bgtu = 'bgtu' # bgtu rsrc1, rsrc2, label -> bgt unsigned + ble = 'ble' # ble rsrc1, rsrc2, label -> conditionally branch to the label if rsrc1 is less than or equal to rsrc2 + bleu = 'bleu' # bleu rsrc1, rsrc2, label -> ble unsigned + blt = 'blt' # blt rsrc1, rsrc2, label -> conditionally branch to the label if rsrc1 is less than rsrc2 + bltu = 'bltu' # bltu rsrc1, rsrc2, label -> blt unsigned + bnez = 'bnez' # bnez rsrc, label -> conditionally branch to the label if rsrc1 is not equal to 0 - bltzal = 'bltzal' - blt = 'blt' - bltu = 'bltu' - bltz = 'bltz' - bne = 'bne' - bnez = 'bnez' - j = 'j' - jal = 'jal' - jalr = 'jalr' - jr = 'jr' + j = 'j' # j target -> unconditionally jumps to target + jal = 'jal' # jal target, rd -> unconditionally jumps to target. Save the address of next instruction in rd + jalr = 'jalr' # jalr rs, rd -> unconditionally jumps to the instruction whose address is in rs. save the address of next instruction in rd (defaults is 31) + jr = 'jr' # jr rs-> unconditionally jumps to the instruction whose address is in rs. - move = 'move' - mfhi = 'mfhi' - mflo = 'mflo' - mthi = 'mthi' - mtlo = 'mtlo' - mfcz = 'mfcz' - mfc1d = 'mfc1.d' - mtcz = 'mtcz' + move = 'move' # move rdest, rsrc -> move rsrc to rdest + mfhi = 'mfhi' # mfhi rd -> move the hi register to rd + mflo = 'mflo' # mflo rd -> move the lo register to rd + mthi = 'mthi' # mthi rs -> move the rs register to hi + mtlo = 'mtlo' # mtlo rs -> move the rs register to lo + mfcz = 'mfcz' # mfcz rt, rd -> move coprocessor z's register rt to CPU register rt + mfc1d = 'mfc1.d' # mfc1.d rdest, frsrc1 -> move floating-point registers frsrc1 and frsrc1 + 1 to CPU registers rdest and rdest + 1 + mtcz = 'mtcz' # mtcz rd, rt -> move CPU register rt to coprocessor z's register rd - rfe = 'rfe' - syscall = 'syscall' - brk = 'break' - nop = 'nop' + rfe = 'rfe' # rfe -> restore the status register + syscall = 'syscall' # register $v0 contains the number of the system call provided by spim + brk = 'break' # break cause exception code. Exception 1 is reserved for the debugger + nop = 'nop' # nop -> do nothing :) #types class datatype: diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 972a3bc38..647ecdbfe 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -162,14 +162,6 @@ def visit(self, node): def visit(self, node): pass - @visitor.when(PrintNode) - def visit(self, node): - pass - - @visitor.when(ReadNode) - def visit(self, node): - pass - @visitor.when(ToStrNode) def visit(self, node): pass @@ -185,3 +177,82 @@ def visit(self, node): @visitor.when(SubstringNode) def visit(self, node): pass + + # Input espacio a reservar en $a0 +# Output direccion de memoria reservada en $a0 + def mem_alloc(self):# OK + self.write_to_text(f"# DECLARATION OF THE MEM-ALLOC BODY") + + self.write_to_text(f"mem_alloc:") + self.write_to_text(f"add $gp $gp $a0") + self.write_to_text(f"blt $gp $s7 mem_alloc_end")# si se pasa del limite de memoria error + self.write_to_text(f"j mem_error") + self.write_to_text(f"mem_alloc_end:") + self.write_to_text(f"sub $a0 $gp $a0") + self.write_to_text(f"jr $ra") + self.write_to_text(f"") + +# en a0 tengo el la instancia + def get_parent_prot(self): + self.write_to_text(f"# GET PARENT PROTOTYPE") # + self.write_to_text(f"get_parent_prot:") + self.write_to_text(f"lw $t0 ($a0)") + self.write_to_text(f"sll $t0 $t0 2")# mult por 4 pa tener el offset + self.write_to_text(f"lw $t0 ($s4)") + self.write_to_text(f"move $a0 $t0") + self.write_to_text(f"jr $ra") + self.write_to_text(f"") + + + +# funciones para errores en runtime + def zero_error(self): # error al dividir por 0 + self.write_to_text(f"# Declartation of the ZERO-DIV Runtime Error") + + self.write_to_text(f"zero_error:") + self.write_to_text(f"la $a0 _zero") + self.write_to_text(f"") + + self.write_to_text(f"li $v0 4") + self.write_to_text(f"syscall") + self.write_to_text(f"li $v0 10") + self.write_to_text(f"syscall") + self.write_to_text(f"") + + def substr_error(self): + self.write_to_text(f"# DECLARATION OF THE SUBSTR-IND.OUT.OF.RANGE RE BODY") + + self.write_to_text(f"substr_error:") + self.write_to_text(f"la $a0 _substr") + self.write_to_text(f"") + + self.write_to_text(f"li $v0 4") + self.write_to_text(f"syscall") + self.write_to_text(f"li $v0 10") + self.write_to_text(f"syscall") + self.write_to_text(f"") + + def mem_error(self): + self.write_to_text(f"# DECLARATION OF THE MEMORY-OVERFLOW RE BODY") + self.write_to_text(f"mem_error:") + self.write_to_text(f"la $a0 _mem") + self.write_to_text(f"") + + self.write_to_text(f"li $v0 4") + self.write_to_text(f"syscall") + self.write_to_text(f"li $v0 10") + self.write_to_text(f"syscall") + self.write_to_text(f"") + + + def utils_functs(self): + self.mem_alloc() + self.get_parent_prot() + self.object_copy() + self.str_eq() + self.str_concat() + self.str_substr() + self.length() + self.zero_error() + self.mem_error() + self.substr_error() \ No newline at end of file diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index f19e62dea..379bf3e2b 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -19,10 +19,6 @@ def __init__(self, context): self.attrs = {}#set() self.parameters = set() self.instances = [] - - def transform_keys(self, xtype, keys): - for i,key in enumerate(keys): - xtype.attrs[key] = i def transform_to_keys(self, xtype, keys): for i, key in enumerate(keys): From c8f25c4f3b7173db6d8316aac46fc358de29355d Mon Sep 17 00:00:00 2001 From: Yumenio Date: Wed, 23 Feb 2022 03:23:35 -0500 Subject: [PATCH 36/93] added the constructor and the initialization of the class attributes, but not of those inherited attributes --- src/cool_ast/cool_ast.py | 2 ++ src/visitors/CooltoCil.py | 63 +++++++++++++++++++++++++++--------- tests/codegen/hello_world.cl | 14 ++++++++ 3 files changed, 64 insertions(+), 15 deletions(-) diff --git a/src/cool_ast/cool_ast.py b/src/cool_ast/cool_ast.py index aec9927b9..7e52fbcc9 100644 --- a/src/cool_ast/cool_ast.py +++ b/src/cool_ast/cool_ast.py @@ -116,6 +116,8 @@ class FalseNode(AtomicNode): pass class StringNode(AtomicNode): pass +class VoidNode(AtomicNode): + pass class AutoTypeNode(AtomicNode): pass diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 50aac0ed5..7970b2cf7 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -74,9 +74,19 @@ def register_data(self, value): self.dotdata.append(data_node) return data_node - def create_ctr(self, type): + def create_ctr(self, class_node, scope): + attrs = [att for att in class_node.features if isinstance(att, AttrDeclarationNode)] + while True: + break self.current_function = self.register_function(self.to_function_name('ctor', self.current_type.name)) self.register_instruction(cil.ParamNode('self')) + + for i, attr in enumerate(attrs): + set_attr_node = self.visit(attr, scope) + set_attr_node.index = i + self.register_instruction(set_attr_node) + self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) + class COOLToCILVisitor(BaseCOOLToCILVisitor): @visitor.on('node') @@ -164,12 +174,13 @@ def visit(self, node, scope): self.attrs = self.transform_to_keys(type_node, attributes)# type_node.attributes = attributes type_node.methods = methods + self.create_ctr(node, scope) # attributes - for feature, child_scope in zip(node.features, scope.children): - if isinstance(feature, FuncDeclarationNode): - continue - self.visit(feature, child_scope) + # for feature, child_scope in zip(node.features, scope.children): + # if isinstance(feature, FuncDeclarationNode): + # continue + # self.visit(feature, child_scope) # func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) for feature, child_scope in zip(node.features, scope.children): @@ -187,18 +198,40 @@ def visit(self, node, scope): # node.type -> str # node.value = ExpressionNode ############################### + # local function to determine the default value of an attribute given its type + def default_value_init(type): + if type == 'Int': + return ConstantNumNode(0) + elif type == 'Bool': + return FalseNode() + elif type == 'String': + return StringNode("") + else: + return VoidNode() if node.value: - value = self.visit(node.value) - elif node.type in ["Int", "String", "Object", "IO", "Bool"]: - value = self.define_internal_local() - self.register_instruction(cil.AllocateNode(node.type, value)) + value = self.visit(node.value, scope) + else: - value = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Void", value)) - #revisar que poner como el attr del SettAttribnode - - attr = self.attrs[node.id] - self.register_instruction(cil.SetAttribNode(self.instances[-1], attr, value)) + default_value = default_value_init(node.type) + if isinstance(default_value, VoidNode): + value = 'void' + else: + value = self.visit(default_value, scope) + self_ref = VariableInfo('self', self.current_type) + self_ref.index = 0 + return cil.SetAttribNode(self_ref, node.id, value) + + ## old code + # elif node.type in ["Int", "String", "Object", "IO", "Bool"]: + # value = self.define_internal_local() + # self.register_instruction(cil.AllocateNode(node.type, value)) + # else: + # value = self.define_internal_local() + # self.register_instruction(cil.AllocateNode("Void", value)) + # #revisar que poner como el attr del SettAttribnode + + # attr = self.attrs[node.id] + # self.register_instruction(cil.SetAttribNode(self.instances[-1], attr, value)) @visitor.when(FuncDeclarationNode) def visit(self, node, scope): diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index b0a180a2e..49a835418 100644 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -3,3 +3,17 @@ class Main inherits IO { out_string("Hello, World.\n") }; }; + +class A { + aa : Int; + a(): Int { + 1 + }; +}; + +class B inherits A{ + bb : Int; + b(): Int { + 2 + }; +}; \ No newline at end of file From 778d5b7ac2a45385a21a63c3be9b56ea3dcbf3fc Mon Sep 17 00:00:00 2001 From: regnod Date: Wed, 23 Feb 2022 03:23:48 -0500 Subject: [PATCH 37/93] some ciltomips code --- src/.vscode/settings.json | 8 +++++ src/visitors/CiltoMips.py | 66 +++++++++++++++++++-------------------- 2 files changed, 40 insertions(+), 34 deletions(-) diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json index 82dd8680a..04a8a4af0 100644 --- a/src/.vscode/settings.json +++ b/src/.vscode/settings.json @@ -3,6 +3,8 @@ "addi", "addiu", "addu", + "alloc", + "ALLOC", "andi", "asciiz", "asignar", @@ -24,12 +26,15 @@ "ccur", "chequear", "cpar", + "direccion", + "dividir", "divu", "esac", "evalue", "evitar", "falta", "frsrc", + "funciones", "generado", "generar", "generarlo", @@ -37,6 +42,7 @@ "instruccion", "isvoid", "jalr", + "límite", "lneq", "lwcz", "mfcz", @@ -62,6 +68,8 @@ "ptype", "rdest", "remu", + "reservada", + "reservar", "rsrc", "seria", "sgeu", diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 647ecdbfe..4363833d8 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -178,70 +178,68 @@ def visit(self, node): def visit(self, node): pass - # Input espacio a reservar en $a0 +# Input espacio a reservar en $a0 # Output direccion de memoria reservada en $a0 - def mem_alloc(self):# OK - self.write_to_text(f"# DECLARATION OF THE MEM-ALLOC BODY") + def mem_alloc(self): + self.write_to_text(f"# Declartation of the mem_alloc") self.write_to_text(f"mem_alloc:") - self.write_to_text(f"add $gp $gp $a0") - self.write_to_text(f"blt $gp $s7 mem_alloc_end")# si se pasa del limite de memoria error - self.write_to_text(f"j mem_error") + self.write_to_text(f"{operations.add} {registers.gp} {registers.gp} {registers.a0}") + self.write_to_text(f"{operations.blt} {registers.gp} {registers.s7} mem_alloc_end")# si se pasa del límite de memoria dar error + self.write_to_text(f"{operations.j} mem_error") self.write_to_text(f"mem_alloc_end:") - self.write_to_text(f"sub $a0 $gp $a0") - self.write_to_text(f"jr $ra") + self.write_to_text(f"{operations.sub} {registers.a0} {registers.gp} {registers.a0}") + self.write_to_text(f"{operations.jr} {registers.ra}") self.write_to_text(f"") # en a0 tengo el la instancia def get_parent_prot(self): - self.write_to_text(f"# GET PARENT PROTOTYPE") # + self.write_to_text(f"# get parent prototype") # self.write_to_text(f"get_parent_prot:") - self.write_to_text(f"lw $t0 ($a0)") - self.write_to_text(f"sll $t0 $t0 2")# mult por 4 pa tener el offset - self.write_to_text(f"lw $t0 ($s4)") - self.write_to_text(f"move $a0 $t0") - self.write_to_text(f"jr $ra") + self.write_to_text(f"{operations.lw} {registers.t0} ({registers.a0})") + self.write_to_text(f"{operations.sll} {registers.t0} {registers.t0} 2")# mult por 4 pa tener el offset + self.write_to_text(f"{operations.lw} {registers.t0} ({registers.s4})") + self.write_to_text(f"{operations.move} {registers.a0} {registers.t0}") + self.write_to_text(f"{operations.jr} {registers.ra}") self.write_to_text(f"") - - # funciones para errores en runtime def zero_error(self): # error al dividir por 0 - self.write_to_text(f"# Declartation of the ZERO-DIV Runtime Error") + self.write_to_text(f"# Declartation of the zero-div runtime error") self.write_to_text(f"zero_error:") - self.write_to_text(f"la $a0 _zero") + self.write_to_text(f"{operations.la} {registers.a0} _zero") self.write_to_text(f"") - self.write_to_text(f"li $v0 4") - self.write_to_text(f"syscall") - self.write_to_text(f"li $v0 10") - self.write_to_text(f"syscall") + self.write_to_text(f"{operations.li} {registers.v0} 4") + self.write_to_text(f"{operations.syscall}") + self.write_to_text(f"{operations.li} {registers.v0} 10") + self.write_to_text(f"{operations.syscall}") self.write_to_text(f"") def substr_error(self): - self.write_to_text(f"# DECLARATION OF THE SUBSTR-IND.OUT.OF.RANGE RE BODY") + self.write_to_text(f"# Declartation of the substr-index.out.of.range runtime error") self.write_to_text(f"substr_error:") - self.write_to_text(f"la $a0 _substr") + self.write_to_text(f"{operations.la} {registers.a0} _substr") self.write_to_text(f"") - self.write_to_text(f"li $v0 4") - self.write_to_text(f"syscall") - self.write_to_text(f"li $v0 10") - self.write_to_text(f"syscall") + self.write_to_text(f"{operations.li} {registers.v0} 4") + self.write_to_text(f"{operations.syscall}") + self.write_to_text(f"{operations.li} {registers.v0} 10") + self.write_to_text(f"{operations.syscall}") self.write_to_text(f"") def mem_error(self): - self.write_to_text(f"# DECLARATION OF THE MEMORY-OVERFLOW RE BODY") + self.write_to_text(f"# Declartation of the memory-overflow runtime error") self.write_to_text(f"mem_error:") - self.write_to_text(f"la $a0 _mem") + self.write_to_text(f"{operations.la} {registers.a0} _mem") self.write_to_text(f"") - self.write_to_text(f"li $v0 4") - self.write_to_text(f"syscall") - self.write_to_text(f"li $v0 10") - self.write_to_text(f"syscall") + self.write_to_text(f"{operations.li} {registers.v0} 4") + self.write_to_text(f"{operations.syscall}") + self.write_to_text(f"{operations.li} {registers.v0} 10") + self.write_to_text(f"{operations.syscall}") self.write_to_text(f"") From 5d319e21bab6d1ef423c5ef0460adcd7caa9538c Mon Sep 17 00:00:00 2001 From: regnod Date: Wed, 23 Feb 2022 14:47:23 -0500 Subject: [PATCH 38/93] merge --- doc/mips tips | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 doc/mips tips diff --git a/doc/mips tips b/doc/mips tips new file mode 100644 index 000000000..92c192852 --- /dev/null +++ b/doc/mips tips @@ -0,0 +1,23 @@ +-------------------------------------------------------- +■ Registers $at (1), $k0 (26), and $k1 (27) are reserved for the assembler +and operating system and should not be used by user programs or com- +pilers. +-------------------------------------------------------- +■ Registers $a0 – $a3 (4–7) are used to pass the first four arguments to rou- +tines (remaining arguments are passed on the stack). Registers $v0 and +$v1 (2, 3) are used to return values from functions. +-------------------------------------------------------- +■ Registers $t0 – $t9 (8–15, 24, 25) are caller-saved registers that are used +to hold temporary quantities that need not be preserved across calls (see +section 3.6 in Chapter 3). +-------------------------------------------------------- +■ Registers $s0 – $s7 (16–23) are callee-saved registers that hold long- +lived values that should be preserved across calls. +-------------------------------------------------------- +■ Register $gp (28) is a global pointer that points to the middle of a 64K +block of memory in the static data segment. +-------------------------------------------------------- +■ Register $sp (29) is the stack pointer, which points to the first free loca- +tion on the stack. Register $fp (30) is the frame pointer. The jal instruc- +tion writes register $ra (31), the return address from a procedure call. +These two registers are explained in the next section. From c8316704202a347995951aac902400084c86d00d Mon Sep 17 00:00:00 2001 From: regnod Date: Wed, 23 Feb 2022 15:55:38 -0500 Subject: [PATCH 39/93] main test --- src/coolc.sh | 5 +- src/main.py | 48 ++++++++++++++- src/visitors/CiltoMips.py | 123 ++++++++++++++++++++------------------ 3 files changed, 114 insertions(+), 62 deletions(-) diff --git a/src/coolc.sh b/src/coolc.sh index c685089bd..64f754492 100644 --- a/src/coolc.sh +++ b/src/coolc.sh @@ -4,8 +4,9 @@ INPUT_FILE=$1 OUTPUT_FILE=${INPUT_FILE:0: -2}mips # Si su compilador no lo hace ya, aquí puede imprimir la información de contacto -echo "LINEA_CON_NOMBRE_Y_VERSION_DEL_COMPILADOR" # TODO: Recuerde cambiar estas -echo "Copyright (c) 2019: Nombre1, Nombre2, Nombre3" # TODO: líneas a los valores correctos +echo "Cool Compiler v1.0" +echo "Copyright (c) 2019: Richard García De la Osa, Andy A. Castañeda Guerra" # Llamar al compilador echo "Compiling $INPUT_FILE into $OUTPUT_FILE" +exec python3 main.py $INPUT_FILE $OUTPUT_FILE \ No newline at end of file diff --git a/src/main.py b/src/main.py index 404b36cb2..7208a75cd 100644 --- a/src/main.py +++ b/src/main.py @@ -2,6 +2,7 @@ import lexer.lexer as lexer import c_parser.parser as parser from pipeline import Pipeline +from sys import argv # with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/semantic/self4.cl') as f: @@ -21,4 +22,49 @@ print(lexing_error) for parsing_error in coolParser.errors: print(parsing_error) -a = 0 \ No newline at end of file +a = 0 + +if __name__ == '__main__': + # with open('examles/hello_world.cl', 'r') as fd: + with open(f'{argv[1]}', 'r') as fd: + program = '' + temp = fd.read() + while temp: + program += temp + temp = fd.read() + coolLexer = lexer.CoolLexer() + coolLexer.build() + tokens = coolLexer.input(program) + # for error in coolLexer.errors: + # print(error) + Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) + coolParser = parser.CoolParser() + + ast = coolParser.parse(lexer.CoolLexer(), program) + for lexing_error in coolParser.lexer.errors: + print(lexing_error) + for parsing_error in coolParser.errors: + print(parsing_error) + a = 0 + + # parser_object = parser.make_parser() + # ast = parser_object.parse(inp) + # semantic_object = check_semantic.CheckSemantic() + # cil_object = cil.Cool2cil() + # scope_root = semantic_object.visit(ast, None) + # cil_object.visit(ast, scope_root) + # mips_object = MIPS(cil_object) + # mips_object.generate_mips() + # inp = '' + # with open('src/staticMipsCode.asm', 'r') as fd: + # temp = fd.read() + # while temp: + # inp += temp + # temp = fd.read() + # with open(f'{argv[2]}', 'w') as fd: + # fd.write(inp) + # fd.write("\n") + # fd.write("# Start Mips Generated Code") + # fd.write("\n") + # for line in mips_object.mips_code: + # fd.write("\n" + line) diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 1dbded7bf..efca2c754 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -7,7 +7,13 @@ def __init__(self, context): self.dotdata =[] self.dotcode =[] self.context = context - + self.code = [] + self.data = [] + def write_data(self, instruction): + self.data.append(instruction) + + def write_code(self, instruction): + self.code.append(instruction) @@ -17,8 +23,19 @@ def visit(self, node): @visitor.when(ProgramNode) def visit(self, node): - - pass + self.write_data('.data') + self.write_code('.text') + + self.write_code("main:") + self.write_code(f'{operations.move} {registers.s7} {registers.gp}') + self.write_code(f'{operations.addi} {registers.s7} {registers.s7} 300000') + self.write_code(f"") + + self.write_data(f"_abort: {datatype.asciiz} \"Program Aborted\"") + self.write_data(f"_zero: .asciiz \"0 Division Error\"") + self.write_data(f"_substr: .asciiz \"Substr Length Error\"") + self.write_data(f"_mem: .asciiz \"Memory Error\"") + self.write_data(f"") @visitor.when(TypeNode) def visit(self, node): @@ -162,81 +179,69 @@ def visit(self, node): def visit(self, node): pass - @visitor.when(SubstringNode) - def visit(self, node): - pass - - @visitor.when(SubstringNode) - def visit(self, node): - pass - - @visitor.when(SubstringNode) - def visit(self, node): - pass - # Input espacio a reservar en $a0 # Output direccion de memoria reservada en $a0 def mem_alloc(self): - self.write_to_text(f"# Declartation of the mem_alloc") + self.write_code(f"# Declartation of the mem_alloc") - self.write_to_text(f"mem_alloc:") - self.write_to_text(f"{operations.add} {registers.gp} {registers.gp} {registers.a0}") - self.write_to_text(f"{operations.blt} {registers.gp} {registers.s7} mem_alloc_end")# si se pasa del límite de memoria dar error - self.write_to_text(f"{operations.j} mem_error") - self.write_to_text(f"mem_alloc_end:") - self.write_to_text(f"{operations.sub} {registers.a0} {registers.gp} {registers.a0}") - self.write_to_text(f"{operations.jr} {registers.ra}") - self.write_to_text(f"") + self.write_code(f"mem_alloc:") + self.write_code(f"{operations.add} {registers.gp} {registers.gp} {registers.a0}") + self.write_code(f"{operations.blt} {registers.gp} {registers.s7} mem_alloc_end")# si se pasa del límite de memoria dar error + self.write_code(f"{operations.j} mem_error") + self.write_code(f"mem_alloc_end:") + self.write_code(f"{operations.sub} {registers.a0} {registers.gp} {registers.a0}") + self.write_code(f"{operations.jr} {registers.ra}") + self.write_code(f"") # en a0 tengo el la instancia def get_parent_prot(self): - self.write_to_text(f"# get parent prototype") # - self.write_to_text(f"get_parent_prot:") - self.write_to_text(f"{operations.lw} {registers.t0} ({registers.a0})") - self.write_to_text(f"{operations.sll} {registers.t0} {registers.t0} 2")# mult por 4 pa tener el offset - self.write_to_text(f"{operations.lw} {registers.t0} ({registers.s4})") - self.write_to_text(f"{operations.move} {registers.a0} {registers.t0}") - self.write_to_text(f"{operations.jr} {registers.ra}") - self.write_to_text(f"") + self.write_code(f"# get parent prototype") # + self.write_code(f"get_parent_prot:") + self.write_code(f"{operations.lw} {registers.t0} ({registers.a0})") + self.write_code(f"{operations.sll} {registers.t0} {registers.t0} 2")# mult por 4 pa tener el offset + self.write_code(f"{operations.lw} {registers.t0} ({registers.s4})") + self.write_code(f"{operations.move} {registers.a0} {registers.t0}") + self.write_code(f"{operations.jr} {registers.ra}") + self.write_code(f"") # funciones para errores en runtime def zero_error(self): # error al dividir por 0 - self.write_to_text(f"# Declartation of the zero-div runtime error") + self.write_code(f"# Declartation of the zero-div runtime error") - self.write_to_text(f"zero_error:") - self.write_to_text(f"{operations.la} {registers.a0} _zero") - self.write_to_text(f"") + self.write_code(f"zero_error:") + self.write_code(f"{operations.la} {registers.a0} _zero") + self.write_code(f"") - self.write_to_text(f"{operations.li} {registers.v0} 4") - self.write_to_text(f"{operations.syscall}") - self.write_to_text(f"{operations.li} {registers.v0} 10") - self.write_to_text(f"{operations.syscall}") - self.write_to_text(f"") + self.write_code(f"{operations.li} {registers.v0} 4") + self.write_code(f"{operations.syscall}") + self.write_code(f"{operations.li} {registers.v0} 10") + self.write_code(f"{operations.syscall}") + self.write_code(f"") def substr_error(self): - self.write_to_text(f"# Declartation of the substr-index.out.of.range runtime error") + self.write_code(f"# Declartation of the substr-index.out.of.range runtime error") - self.write_to_text(f"substr_error:") - self.write_to_text(f"{operations.la} {registers.a0} _substr") - self.write_to_text(f"") + self.write_code(f"substr_error:") + self.write_code(f"{operations.la} {registers.a0} _substr") + self.write_code(f"") - self.write_to_text(f"{operations.li} {registers.v0} 4") - self.write_to_text(f"{operations.syscall}") - self.write_to_text(f"{operations.li} {registers.v0} 10") - self.write_to_text(f"{operations.syscall}") - self.write_to_text(f"") + self.write_code(f"{operations.li} {registers.v0} 4") + self.write_code(f"{operations.syscall}") + self.write_code(f"{operations.li} {registers.v0} 10") + self.write_code(f"{operations.syscall}") + self.write_code(f"") def mem_error(self): - self.write_to_text(f"# Declartation of the memory-overflow runtime error") - self.write_to_text(f"mem_error:") - self.write_to_text(f"{operations.la} {registers.a0} _mem") - self.write_to_text(f"") + self.write_code(f"# Declartation of the memory-overflow runtime error") + self.write_code(f"mem_error:") + self.write_code(f"{operations.la} {registers.a0} _mem") + self.write_code(f"") - self.write_to_text(f"{operations.li} {registers.v0} 4") - self.write_to_text(f"{operations.syscall}") - self.write_to_text(f"{operations.li} {registers.v0} 10") - self.write_to_text(f"{operations.syscall}") - self.write_to_text(f"") + self.write_code(f"{operations.li} {registers.v0} 4") + self.write_code(f"{operations.syscall}") + self.write_code(f"{operations.li} {registers.v0} 10") + self.write_code(f"{operations.syscall}") + self.write_code(f"") def utils_functs(self): From 73faaefaf2e66d8218defaa1741697f309b8146b Mon Sep 17 00:00:00 2001 From: regnod Date: Wed, 23 Feb 2022 15:55:58 -0500 Subject: [PATCH 40/93] main test --- src/main.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main.py b/src/main.py index 7208a75cd..3a9847bc9 100644 --- a/src/main.py +++ b/src/main.py @@ -6,23 +6,23 @@ # with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/semantic/self4.cl') as f: -with open('./tests/codegen/hello_world.cl') as f: - program = f.read() +# with open('./tests/codegen/hello_world.cl') as f: +# program = f.read() -coolLexer = lexer.CoolLexer() -coolLexer.build() -tokens = coolLexer.input(program) -# for error in coolLexer.errors: -# print(error) -Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) -coolParser = parser.CoolParser() +# coolLexer = lexer.CoolLexer() +# coolLexer.build() +# tokens = coolLexer.input(program) +# # for error in coolLexer.errors: +# # print(error) +# Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) +# coolParser = parser.CoolParser() -ast = coolParser.parse(lexer.CoolLexer(), program) -for lexing_error in coolParser.lexer.errors: - print(lexing_error) -for parsing_error in coolParser.errors: - print(parsing_error) -a = 0 +# ast = coolParser.parse(lexer.CoolLexer(), program) +# for lexing_error in coolParser.lexer.errors: +# print(lexing_error) +# for parsing_error in coolParser.errors: +# print(parsing_error) +# a = 0 if __name__ == '__main__': # with open('examles/hello_world.cl', 'r') as fd: From fa9ed19ebb4f2d5cdca421b81803b917c55f62fa Mon Sep 17 00:00:00 2001 From: Yumenio Date: Wed, 23 Feb 2022 17:55:06 -0500 Subject: [PATCH 41/93] some more changes to how the constructor is generated, aligning the structure with the 3rd example --- src/visitors/Builder.py | 10 +++++----- src/visitors/CooltoCil.py | 17 ++++++++++------- tests/codegen/hello_world.cl | 9 +++++---- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/visitors/Builder.py b/src/visitors/Builder.py index 826f47b68..89906d973 100755 --- a/src/visitors/Builder.py +++ b/src/visitors/Builder.py @@ -34,13 +34,13 @@ def visit(self, node): _bool.set_parent(_object) _io.define_method('in_string', [], [], _string) - _io.define_method('out_string', ['x'], [_string], _self) - _io.define_method('in_int', [], [], _int) - _io.define_method('out_int', ['x'], [_int], _self) + _io.define_method('out_string', [('x', 'String')], [_string], _self) + _io.define_method('in_int', [], [], 'Int') + _io.define_method('out_int', [('x', 'Int')], [_int], _self) _string.define_method('length', [], [], _int) - _string.define_method('substr', ['index', 'length'], [_int, _int], _string) - _string.define_method('concat', ['str'], [_string], _string) + _string.define_method('substr', [('index', 'Int'), ('length', 'Int')], [_int, _int], _string) + _string.define_method('concat', [('str', 'String')], [_string], _string) _int.define_attribute('value', _int) _bool.define_attribute('value', _int) diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 6e5033f84..fb1501c8a 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -20,6 +20,8 @@ def __init__(self, context): self.parameters = set() self.instances = [] + self.ctrs = {} + def transform_to_keys(self, xtype, keys): for i, key in enumerate(keys): xtype.attrs[key] = i @@ -83,7 +85,6 @@ def create_ctr(self, class_node, scope): self.register_instruction(set_attr_node) self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) - class COOLToCILVisitor(BaseCOOLToCILVisitor): @visitor.on('node') def visit(self, node): @@ -109,8 +110,10 @@ def visit(self, node, scope): ###################################################### # class_nodes = [self.class_node_from_context(c) for c in self.context.types] - built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types] - + builtin_types = ['Object', 'IO', 'Int', 'Bool', 'String'] + built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types if c in builtin_types] + for built_in_class in built_in_classes: + self.visit(built_in_class, scope) self.current_function = self.register_function('entry') @@ -203,7 +206,7 @@ def default_value_init(type): elif type == 'String': return StringNode("") else: - return VoidNode() + return VoidNode('void') if node.value: value = self.visit(node.value, scope) @@ -213,9 +216,9 @@ def default_value_init(type): value = 'void' else: value = self.visit(default_value, scope) - self_ref = VariableInfo('self', self.current_type) - self_ref.index = 0 - return cil.SetAttribNode(self_ref, node.id, value) + self_ref = VariableInfo('self', self.current_type) + self_ref.index = 0 + return cil.SetAttribNode(self_ref, node.id, value) ## old code # elif node.type in ["Int", "String", "Object", "IO", "Bool"]: diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index 49a835418..e06954b10 100644 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,19 +1,20 @@ class Main inherits IO { - main(): IO { - out_string("Hello, World.\n") + b : B <- new B; + main(x: Int): IO { + out_int(b.a()) }; }; class A { aa : Int; a(): Int { - 1 + aa }; }; class B inherits A{ bb : Int; b(): Int { - 2 + bb }; }; \ No newline at end of file From e64247450181730fbb066703c17e7468819fbcf3 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Wed, 23 Feb 2022 18:10:17 -0500 Subject: [PATCH 42/93] added some missing properties to cil2mips object and initialized them, also added cil2mips visitor to the pipeline --- src/main.py | 4 ++-- src/pipeline.py | 3 +++ src/visitors/CiltoMips.py | 7 ++++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main.py b/src/main.py index 3a9847bc9..624342f9d 100644 --- a/src/main.py +++ b/src/main.py @@ -25,8 +25,8 @@ # a = 0 if __name__ == '__main__': - # with open('examles/hello_world.cl', 'r') as fd: - with open(f'{argv[1]}', 'r') as fd: + with open('tests/codegen/hello_world.cl', 'r') as fd: + # with open(f'{argv[1]}', 'r') as fd: program = '' temp = fd.read() while temp: diff --git a/src/pipeline.py b/src/pipeline.py index 0aad74ce4..10487ee4b 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -6,6 +6,7 @@ from visitors.Inferencer import Inferencer from visitors.Executor import Executor, RuntimeException from visitors.CooltoCil import COOLToCILVisitor +from visitors.CiltoMips import CiltoMipsVisitor from visitors.CilDepicter import get_formatter class Pipeline(): @@ -51,6 +52,8 @@ def __init__(self, program, lexer, parser, verbose=False): self.coolToCil = COOLToCILVisitor(self.context) cil_ast = self.coolToCil.visit(self.ast, scope) # print(get_formatter(cil_ast)) + self.cilToMips = CiltoMipsVisitor(self.context) + mips_code = self.cilToMips.visit(cil_ast) if verbose: print('This is after infering types:') diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index efca2c754..ce1b86cc4 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -2,8 +2,9 @@ import visitors.visitor as visitor from cil_ast.cil_ast import * -class BaseCiltoMipsVisitor: +class CiltoMipsVisitor: def __init__(self, context): + self.dottypes = [] self.dotdata =[] self.dotcode =[] self.context = context @@ -23,6 +24,10 @@ def visit(self, node): @visitor.when(ProgramNode) def visit(self, node): + self.dottypes = node.dottypes + self.dotdata = node.dotdata + self.dotcode = node.dotcode + self.write_data('.data') self.write_code('.text') From 2489ab2a1c285301b1444e2c236f8c1976571e01 Mon Sep 17 00:00:00 2001 From: regnod Date: Wed, 23 Feb 2022 23:38:41 -0500 Subject: [PATCH 43/93] ejasi --- src/__main__.py | 119 ++++++++++++++++++++++++++++++++++++++++++++++++ src/coolc.sh | 25 +++++----- src/main.py | 70 ---------------------------- src/makefile | 25 +++++----- src/pipeline.py | 38 ++++++++-------- 5 files changed, 163 insertions(+), 114 deletions(-) create mode 100644 src/__main__.py mode change 100644 => 100755 src/coolc.sh delete mode 100644 src/main.py diff --git a/src/__main__.py b/src/__main__.py new file mode 100644 index 000000000..5e893800b --- /dev/null +++ b/src/__main__.py @@ -0,0 +1,119 @@ +import sys +import lexer.lexer as lexer +import c_parser.parser as parser +from pipeline import Pipeline + +# with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/semantic/self4.cl') as f: +# with open('./tests/codegen/hello_world.cl') as f: +# program = f.read() + +# coolLexer = lexer.CoolLexer() +# coolLexer.build() +# tokens = coolLexer.input(program) +# # for error in coolLexer.errors: +# # print(error) +# Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) +# coolParser = parser.CoolParser() + +# ast = coolParser.parse(lexer.CoolLexer(), program) +# for lexing_error in coolParser.lexer.errors: +# print(lexing_error) +# for parsing_error in coolParser.errors: +# print(parsing_error) +# a = 0 + +# if __name__ == '__main__': +# # with open('examles/hello_world.cl', 'r') as fd: +# with open(f'{sys.argv[1]}', 'r') as fd: +# program = '' +# temp = fd.read() +# while temp: +# program += temp +# temp = fd.read() +# coolLexer = lexer.CoolLexer() +# coolLexer.build() +# tokens = coolLexer.input(program) +# # for error in coolLexer.errors: +# # print(error) +# Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) +# coolParser = parser.CoolParser() + +# ast = coolParser.parse(lexer.CoolLexer(), program) +# if len(coolParser.lexer.errors) == 0 and len(coolParser.errors) == 0: +# exit(0) +# else: +# for lexing_error in coolParser.lexer.errors: +# print(lexing_error) +# for parsing_error in coolParser.errors: +# print(parsing_error) +# exit(1) + + # parser_object = parser.make_parser() + # ast = parser_object.parse(inp) + # semantic_object = check_semantic.CheckSemantic() + # cil_object = cil.Cool2cil() + # scope_root = semantic_object.visit(ast, None) + # cil_object.visit(ast, scope_root) + # mips_object = MIPS(cil_object) + # mips_object.generate_mips() + # inp = '' + # with open('src/staticMipsCode.asm', 'r') as fd: + # temp = fd.read() + # while temp: + # inp += temp + # temp = fd.read() + # with open(f'{argv[2]}', 'w') as fd: + # fd.write(inp) + # fd.write("\n") + # fd.write("# Start Mips Generated Code") + # fd.write("\n") + # for line in mips_object.mips_code: + # fd.write("\n" + line) + + +def main(): + if len(sys.argv) > 1: + input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] + else: + input_file = "../tests/semantic/eq2.cl"#"debbuging/tests/Auto/call1.cl" + # raise Exception("Incorrect number of arguments") + + program_file = open(input_file) + program = program_file.read() + program_file.close() + + # coolLexer = lexer.CoolLexer() + # coolLexer.build() + # tokens = coolLexer.input(program) + # if coolLexer.errors: + # for error in coolLexer.errors: + # print(error.__str__()) + # exit(1) + + pipe = Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) + if pipe.errors: + for error in pipe.errors: + print(error) + exit(1) + coolParser = parser.CoolParser() + + ast = coolParser.parse(lexer.CoolLexer(), program) + if coolParser.lexer.errors: + for lexing_error in coolParser.lexer.errors: + print(lexing_error.__str__()) + exit(1) + if coolParser.errors: + for parsing_error in coolParser.errors: + print(parsing_error) + exit(1) + # parser = Parser(Lexer()) + # ast = parser.parse(program) + # if parser.errors: + # for error in parser.errors: + # print(error) + # exit(1) + + # run_pipeline(ast) + + +main() diff --git a/src/coolc.sh b/src/coolc.sh old mode 100644 new mode 100755 index 64f754492..7164e6b2c --- a/src/coolc.sh +++ b/src/coolc.sh @@ -1,12 +1,13 @@ -# Incluya aquí las instrucciones necesarias para ejecutar su compilador - -INPUT_FILE=$1 -OUTPUT_FILE=${INPUT_FILE:0: -2}mips - -# Si su compilador no lo hace ya, aquí puede imprimir la información de contacto -echo "Cool Compiler v1.0" -echo "Copyright (c) 2019: Richard García De la Osa, Andy A. Castañeda Guerra" - -# Llamar al compilador -echo "Compiling $INPUT_FILE into $OUTPUT_FILE" -exec python3 main.py $INPUT_FILE $OUTPUT_FILE \ No newline at end of file +# Incluya aquí las instrucciones necesarias para ejecutar su compilador + +INPUT_FILE=$1 +OUTPUT_FILE=${INPUT_FILE:0: -2}mips + +# Si su compilador no lo hace ya, aquí puede imprimir la información de contacto +echo "Cool Compiler v0.1" # TODO: Recuerde cambiar estas +echo "Copyright (c) 2021: Richard García De la Osa, Andy A. Castañeda Guerra." # TODO: líneas a los valores correctos + +# Llamar al compilador +# echo "Compiling $INPUT_FILE into $OUTPUT_FILE" + +exec python3 __main__.py $INPUT_FILE \ No newline at end of file diff --git a/src/main.py b/src/main.py deleted file mode 100644 index 624342f9d..000000000 --- a/src/main.py +++ /dev/null @@ -1,70 +0,0 @@ - -import lexer.lexer as lexer -import c_parser.parser as parser -from pipeline import Pipeline -from sys import argv - - -# with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/semantic/self4.cl') as f: -# with open('./tests/codegen/hello_world.cl') as f: -# program = f.read() - -# coolLexer = lexer.CoolLexer() -# coolLexer.build() -# tokens = coolLexer.input(program) -# # for error in coolLexer.errors: -# # print(error) -# Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) -# coolParser = parser.CoolParser() - -# ast = coolParser.parse(lexer.CoolLexer(), program) -# for lexing_error in coolParser.lexer.errors: -# print(lexing_error) -# for parsing_error in coolParser.errors: -# print(parsing_error) -# a = 0 - -if __name__ == '__main__': - with open('tests/codegen/hello_world.cl', 'r') as fd: - # with open(f'{argv[1]}', 'r') as fd: - program = '' - temp = fd.read() - while temp: - program += temp - temp = fd.read() - coolLexer = lexer.CoolLexer() - coolLexer.build() - tokens = coolLexer.input(program) - # for error in coolLexer.errors: - # print(error) - Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) - coolParser = parser.CoolParser() - - ast = coolParser.parse(lexer.CoolLexer(), program) - for lexing_error in coolParser.lexer.errors: - print(lexing_error) - for parsing_error in coolParser.errors: - print(parsing_error) - a = 0 - - # parser_object = parser.make_parser() - # ast = parser_object.parse(inp) - # semantic_object = check_semantic.CheckSemantic() - # cil_object = cil.Cool2cil() - # scope_root = semantic_object.visit(ast, None) - # cil_object.visit(ast, scope_root) - # mips_object = MIPS(cil_object) - # mips_object.generate_mips() - # inp = '' - # with open('src/staticMipsCode.asm', 'r') as fd: - # temp = fd.read() - # while temp: - # inp += temp - # temp = fd.read() - # with open(f'{argv[2]}', 'w') as fd: - # fd.write(inp) - # fd.write("\n") - # fd.write("# Start Mips Generated Code") - # fd.write("\n") - # for line in mips_object.mips_code: - # fd.write("\n" + line) diff --git a/src/makefile b/src/makefile index cd83fb352..04aa1cf42 100644 --- a/src/makefile +++ b/src/makefile @@ -1,12 +1,13 @@ -.PHONY: clean - -main: - # Compiling the compiler :) - -clean: - rm -rf build/* - rm -rf ../tests/*/*.mips - -test: - pytest ../tests -v --tb=short -m=${TAG} - +.PHONY: clean + +main: + # Compiling the compiler :) + +clean: + rm -rf build/* + rm -rf ../tests/*/*.mips + +test: + pytest ../tests -v --tb=short -m=${TAG} + + diff --git a/src/pipeline.py b/src/pipeline.py index 10487ee4b..921ca4f3b 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -6,7 +6,6 @@ from visitors.Inferencer import Inferencer from visitors.Executor import Executor, RuntimeException from visitors.CooltoCil import COOLToCILVisitor -from visitors.CiltoMips import CiltoMipsVisitor from visitors.CilDepicter import get_formatter class Pipeline(): @@ -30,10 +29,10 @@ def __init__(self, program, lexer, parser, verbose=False): self.ast = parser.parse(lexer, program)#= evaluate_reverse_parse(derivations, operations, self.tokens) if len(parser.errors) != 0: - return -1 + return if self.ast is None: - return -1 + return self.depicter = Depicter() if verbose: @@ -49,27 +48,26 @@ def __init__(self, program, lexer, parser, verbose=False): if len(self.errors) == 0: self.typeChecker = TypeChecker(self.context, self.errors) self.typeChecker.visit( self.ast, scope) - self.coolToCil = COOLToCILVisitor(self.context) - cil_ast = self.coolToCil.visit(self.ast, scope) + + # self.coolToCil = COOLToCILVisitor(self.context) + # cil_ast = self.coolToCil.visit(self.ast, scope) # print(get_formatter(cil_ast)) - self.cilToMips = CiltoMipsVisitor(self.context) - mips_code = self.cilToMips.visit(cil_ast) - + # return self.lexer.errors + self.errors if verbose: print('This is after infering types:') print() print(self.depicter.visit(self.ast,0)) print() - self.executor = Executor(self.context) + # self.executor = Executor(self.context) - if len(self.errors) == 0: - try: - executorScope = Scope() - self.executor.visit(self.ast,executorScope) - print() - print('Done!!') - except RuntimeException as e: - print(e) - print() - for error in self.errors: - print(error) \ No newline at end of file + # if len(self.errors) == 0: + # try: + # executorScope = Scope() + # self.executor.visit(self.ast,executorScope) + # print() + # print('Done!!') + # except RuntimeException as e: + # print(e) + # print() + # for error in self.errors: + # print(error) \ No newline at end of file From 79c9437d799356f5f836684881ecc42163232c6d Mon Sep 17 00:00:00 2001 From: regnod Date: Wed, 23 Feb 2022 23:50:40 -0500 Subject: [PATCH 44/93] ... --- src/.vscode/settings.json | 93 -------- src/Readme.md | 156 ++++++------- src/__init__.py | 0 src/__main__.py | 2 +- src/docs/codegen.md | 465 ++++++++++++++++++++++++++++++++++++++ src/docs/inference.md | 48 ++++ src/docs/lexing.md | 2 + src/docs/parsing.md | 2 + src/docs/semantics.md | 2 + src/lexer/lexer.py | 6 +- src/makefile | 3 +- src/test.cl | 13 ++ src/utils/errors.py | 4 +- src/visitors/Builder.py | 10 +- src/visitors/Checker.py | 7 +- src/visitors/CiltoMips.py | 16 +- src/visitors/CooltoCil.py | 17 +- 17 files changed, 639 insertions(+), 207 deletions(-) delete mode 100644 src/.vscode/settings.json delete mode 100644 src/__init__.py create mode 100644 src/docs/codegen.md create mode 100644 src/docs/inference.md create mode 100644 src/docs/lexing.md create mode 100644 src/docs/parsing.md create mode 100644 src/docs/semantics.md create mode 100644 src/test.cl diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json deleted file mode 100644 index 04a8a4af0..000000000 --- a/src/.vscode/settings.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "cSpell.words": [ - "addi", - "addiu", - "addu", - "alloc", - "ALLOC", - "andi", - "asciiz", - "asignar", - "atributos", - "bczf", - "bczt", - "beqz", - "bgeu", - "bgez", - "bgezal", - "bgtu", - "bgtz", - "bleu", - "blez", - "bltu", - "bltz", - "bltzal", - "bnez", - "ccur", - "chequear", - "cpar", - "direccion", - "dividir", - "divu", - "esac", - "evalue", - "evitar", - "falta", - "frsrc", - "funciones", - "generado", - "generar", - "generarlo", - "instanciate", - "instruccion", - "isvoid", - "jalr", - "límite", - "lneq", - "lwcz", - "mfcz", - "mfhi", - "mflo", - "mios", - "mtcz", - "mthi", - "mtlo", - "mulo", - "mulou", - "mult", - "multu", - "mulu", - "necesaria", - "negu", - "ocur", - "opar", - "parentesis", - "poner", - "posible", - "principio", - "ptype", - "rdest", - "remu", - "reservada", - "reservar", - "rsrc", - "seria", - "sgeu", - "sgtu", - "shamt", - "sleu", - "sllv", - "slti", - "sltiu", - "sltu", - "srav", - "srlv", - "subu", - "swcz", - "typex", - "ulhu", - "veces", - "visitar", - "xori" - ] -} \ No newline at end of file diff --git a/src/Readme.md b/src/Readme.md index cdca282ec..1200371b5 100644 --- a/src/Readme.md +++ b/src/Readme.md @@ -1,78 +1,78 @@ -# COOL: Proyecto de Compilación - -La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la -Universidad de La Habana, consiste este curso en la implementación de un compilador completamente -funcional para el lenguaje _COOL_. - -_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. - -### Sobre el Lenguaje COOL - -Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento _"COOL Language Reference Manual"_, que se distribuye junto con el presente texto. - -## Código Fuente - -### Compilando su proyecto - -Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en un archivo [`/src/makefile`](/src/makefile). -Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: - -```bash -$ cd source -$ make clean -$ make -``` - -### Ejecutando su proyecto - -Incluya en un archivo [`/src/coolc.sh`](/src/coolc.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. - -Para lanzar el compilador, se ejecutará la siguiente instrucción: - -```bash -$ cd source -$ ./coolc.sh -``` - -### Sobre el Compilador de COOL - -El compilador de COOL se ejecutará como se ha definido anteriormente. -En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: - - - - -En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código -de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... - - - - _1 - ... - _n - -... donde `_i` tiene el siguiente formato: - - (,) - : - -Los campos `` y `` indican la ubicación del error en el fichero **.cl** procesado. En caso -de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de -código fuente, el valor de dichos campos debe ser 0. - -El campo `` será alguno entre: - -- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. -- `LexicographicError`: errores detectados por el lexer. -- `SyntacticError`: errores detectados por el parser. -- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. -- `TypeError`: se reporta al detectar un problema de tipos. Incluye: - - incompatibilidad de tipos entre `rvalue` y `lvalue`, - - operación no definida entre objetos de ciertos tipos, y - - tipo referenciado pero no definido. -- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. -- `SemanticError`: cualquier otro error semántico. - -### Sobre la Implementación del Compilador de COOL - -El compilador debe estar implementado en `python`. Usted debe utilizar una herramienta generadora de analizadores -lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. +# COOL: Proyecto de Compilación + +La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la +Universidad de La Habana, consiste este curso en la implementación de un compilador completamente +funcional para el lenguaje _COOL_. + +_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. + +### Sobre el Lenguaje COOL + +Ud. podrá encontrar la especificación formal del lenguaje COOL en el documento _"COOL Language Reference Manual"_, que se distribuye junto con el presente texto. + +## Código Fuente + +### Compilando su proyecto + +Si es necesario compilar su proyecto, incluya todas las instrucciones necesarias en un archivo [`/src/makefile`](/src/makefile). +Durante la evaluación su proyecto se compilará ejecutando la siguiente secuencia: + +```bash +$ cd source +$ make clean +$ make +``` + +### Ejecutando su proyecto + +Incluya en un archivo [`/src/coolc.sh`](/src/coolc.sh) todas las instrucciones que hacen falta para lanzar su compilador. Recibirá como entrada un archivo con extensión `.cl` y debe generar como salida un archivo `.mips` cuyo nombre será el mismo que la entrada. + +Para lanzar el compilador, se ejecutará la siguiente instrucción: + +```bash +$ cd source +$ ./coolc.sh +``` + +### Sobre el Compilador de COOL + +El compilador de COOL se ejecutará como se ha definido anteriormente. +En caso de que no ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código de salida 0, generar (o sobrescribir si ya existe) en la misma carpeta del archivo **.cl** procesado, y con el mismo nombre que éste, un archivo con extension **.mips** que pueda ser ejecutado con **spim**. Además, reportar a la salida estándar solamente lo siguiente: + + + + +En caso de que ocurran errores durante la operación del compilador, **coolc.sh** deberá terminar con código +de salida (exit code) 1 y reportar a la salida estándar (standard output stream) lo que sigue... + + + + _1 + ... + _n + +... donde `_i` tiene el siguiente formato: + + (,) - : + +Los campos `` y `` indican la ubicación del error en el fichero **.cl** procesado. En caso +de que la naturaleza del error sea tal que no pueda asociárselo a una línea y columna en el archivo de +código fuente, el valor de dichos campos debe ser 0. + +El campo `` será alguno entre: + +- `CompilerError`: se reporta al detectar alguna anomalía con la entrada del compilador. Por ejemplo, si el fichero a compilar no existe. +- `LexicographicError`: errores detectados por el lexer. +- `SyntacticError`: errores detectados por el parser. +- `NameError`: se reporta al referenciar un `identificador` en un ámbito en el que no es visible. +- `TypeError`: se reporta al detectar un problema de tipos. Incluye: + - incompatibilidad de tipos entre `rvalue` y `lvalue`, + - operación no definida entre objetos de ciertos tipos, y + - tipo referenciado pero no definido. +- `AttributeError`: se reporta cuando un atributo o método se referencia pero no está definido. +- `SemanticError`: cualquier otro error semántico. + +### Sobre la Implementación del Compilador de COOL + +El compilador debe estar implementado en `python`. Usted debe utilizar una herramienta generadora de analizadores +lexicográficos y sintácticos. Puede utilizar la que sea de su preferencia. diff --git a/src/__init__.py b/src/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/__main__.py b/src/__main__.py index 5e893800b..f30fd37ed 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -75,7 +75,7 @@ def main(): if len(sys.argv) > 1: input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] else: - input_file = "../tests/semantic/eq2.cl"#"debbuging/tests/Auto/call1.cl" + input_file = "../tests/lexer/mixed2.cl"#"debbuging/tests/Auto/call1.cl" # raise Exception("Incorrect number of arguments") program_file = open(input_file) diff --git a/src/docs/codegen.md b/src/docs/codegen.md new file mode 100644 index 000000000..7683f66b0 --- /dev/null +++ b/src/docs/codegen.md @@ -0,0 +1,465 @@ +# Generacion de Codigo Intermedio + +Despues de realizado el chequeo semantico se procede a realizar la generacion de codigo con el ast obtenido como resultado. + +Se utiliza un nuevo ast para esta parte del compilador _codegen_ast.py_. + +Cada nodo de este nuevo AST se representa a si mismo en ccil (cool cows intermediate language). +$$ +\begin{array}{rcl} +\text{Program} &\rarr& \text{.type TypeList .code CodeList}\\ +\text{TypeList} &\rarr& \text{Type } | \text{ Type TypeList}\\ +\text{Type} &\rarr& \text{FeatureList}\\ +\text{FeatureList} &\rarr& \text{Attribute } | \text{ Function } | \text{ FeatureList } | \space\epsilon\\ +&|& \text{ Attribute; FeatureList } | \text{ Function; FeatureList}\\ +\\ +\text{CodeList} &\rarr& \text{AttrCode }|\text{ FuncCode }|\text{ CodeList }| \space\epsilon\\ +&|& \text{ AttrCode; CodeList } | \text{ FuncCode; CodeList}\\ +\text{AttrCode} &\rarr& \text{id }\{ \text{LocalList Expression} \}\\ +\text{FuncCode} &\rarr& \text{id }\{\\ +&&\text{ParamList}\\ +&&\text{LocalList}\\ +&&\text{Expression}\\ +&&\text{\}}\\ +\\ +\text{Expression} &\rarr& \text{id = ReturnOp}\\ +&|& \text{goto id}\\ +&|& \text{label id}\\ +&|& \text{return Atom}\\ +&|& \text{setattr id id Atom}\\ +&|& \text{if Atom goto id}\\ +&|& \text{ifFalse Atom goto id}\\ +&|& \text{ArgList id = call id integer}\\ +&|& \text{ArgList id = vcall id id integer }\\ +&|& \text{ExpressionList}\\ +\text{ExpressionList} &\rarr& \text{Expression; ExpressionList } | \text{ Expression} \\ +\text{ArgList} &\rarr& \text{arg id; ArgList } | \space\epsilon \\ + +\text{ReturnOp} &\rarr& \text{Atom + Atom}\\ +&|& \text{Atom - Atom}\\ +&|& \text{Atom * Atom}\\ +&|& \text{Atom / Atom}\\ +&|& \text{not Atom}\\ +&|& \text{neg Atom}\\ +&|& \text{typeOf id}\\ +&|& \text{allocate typeId}\\ +&|& \text{Atom < Atom}\\ +&|& \text{Atom <= Atom}\\ +&|& \text{Atom = Atom}\\ +&|& \text{allocate id}\\ +&|& \text{getattr id id}\\ +&|& \text{Atom}\\ +\text{Atom} &\rarr& \text{Constant } | \text{ id}\\ +\text{Constant} &\rarr& \text{ integer } | \text{ string } | \text{ boolean } +\end{array} +$$ + +## Transformaciones + +#### Program Declaration + +**Cool Input** + +```haskell +class A1 { ... } +class A2 { ... } +... +class AN { ... } +``` + +**CCIL Output** + +```assembly + +... + + +# Pending, should string literals be added here? + + + +... + <- ; + a2: <- ; + ... + am: <- ; + -- Uninitialized attributes + aq: ; + ... + ak: ; + + -- Functions + f1() { } + f2() { } + ... + fn() { } + +} +``` + +**CCIL Output** + +```assembly +type C { + # Initialized and uninitialized attributes together + attribute a1; + ... + attribute am; + attribute aq; + ... + attribute ak; + + method f1 : ; + ... + method fn : ; +} +``` + +#### Class Inheritance + +Se annade sobre la que ya tiene A, como se maneja la memoria, se annaden los atributos de B, despues de las funciones de A, o despues de los atributos de A + +**Cool Input** + +```haskell +class A { + +} + +class B inherits A { + +} +``` + +**CCIL Output** + +``` +``` + + + +#### While Loop + +**Cool Input** + +```assembly +while () loop pool +``` + +**CCIL Output** + +```assembly +label while_init +x = +ifFalse x goto while_end + + + +goto while_init +label while_end +``` + +#### If Then Else + +**Cool Input** + +``` +if then else fi +``` + +**CCIL Output** + +```assembly +LOCAL f # Init var which will store if result + # Init all local vars from the condition expression + # Execute the condition +x = # And store it in a local var! +ifFalse x goto else_expr # 0 means True, otherwise False + +label then_expr # Not really needed! + +f = +goto endif + +label else_expr + +f = + +label endif +``` + +#### Let In + +**Cool Input** + +``` +let :, ... : in +``` + +**CCIL Output** + +```assembly + + +... + + +# Execute expressions of let vars + + + + + +... + + + + + +``` + +#### Case Of + +**Cool Input** + +``` +case of + : => + : => + ... + : => +esac +``` + +**CCIL Output** + +```assembly + + +... + + + +x = + +# Pattern Match Logic! +t = typeof x +label init_case # This is not really needed +t1 = typeof +b1 = t1 == t # Comparing types, they must be all equal +if b1 goto branch1: + +t2 = typeof +b2 = t2 == t +if b2 goto branch2 + +... + +tn = typeof +bn = tn == t +if bn goto brannch +# It is not possible to avoid pattern matching + +# Branch Logic +label branch1 + +goto end_case + +label branch2 + +goto end_case + +... + +label branchn + +goto end_case + +label end_case +``` + +El typeof tambien se conforma con un ancestro. Que evaluaria la operacion de igualdad para escoger la rama adecuada? Lanzar un runtime error si no se escoge ninguna rama(eso puede pasar despues del cheque semantico?) + +#### Function Static Call + +**Cool Input** + +``` +(, , ..., ); +``` + +**CCIL Output** + +```assembly + + +... + +r = call n +``` + +#### Function Dynamic Call + +**Cool Input** + +``` +@.(, , ..., ); +``` + +**CCIL Output** + +```assembly + + +... + +t = allocate # It needs to give the same attributes that type one has +r = vcall t n +``` + +#### Method Declaration + +**Cool Input** + +``` +(:, ..., :) : +{ + +} +``` + +**CCIL Output** + +```assembly +function { + param + param + ... + param + local + local + ... + local + + r = + return r +} +``` + +#### Expression Block + +**Cool Input** + +``` +{ + ; + ; + ... + ; +} +``` + +**CCIL Output** + +``` + + +... + + + + +... + +``` + +#### Arithmetic Expression + +###### Simple + +**Cool Input** + +```c# +3 + 5 +``` + +**CCIL Output** + +``` +t = 3 + 5 +``` + +---- + +###### More than one + +**Cool Input** + +``` +3 + 5 + 7 +``` + +**CCIL Output** + +```assembly +# Naive +t1 = 5 + 7 +t2 = 3 + t1 +# A little better +t1 = 5 + 7 +t1 = 3 + t1 +``` + + + +---- + +###### Using non commutative operations + +```python +3 - 5 - 7 +# -2 -7 +# -9 +``` + +```assembly +t = 3 - 5 +t = t - 7 +``` + +---- + +**Cool Input** + +``` +100 / 20 / 5 / 2 +``` + +**CCIL Output** + +``` +t = 100 / 20 +t = t / 5 +t = t / 2 +``` + + + +## Convenciones de variables en Cool + +Si es una variable definida por el usuario se le agrega el prefijo _user_. Se aplica tanto a variables definidas en un _let in_ como en _atributos_. + +Si es una variable creada cuando se analiza una expresion en particular se convierte en: _\__\___ + diff --git a/src/docs/inference.md b/src/docs/inference.md new file mode 100644 index 000000000..191039c0a --- /dev/null +++ b/src/docs/inference.md @@ -0,0 +1,48 @@ +# Inferencia + +Se infieren los tipos lo mas posbile aplicando las reglas de la semantica de cool. Cuando el inferenciador debe elegir entre varios tipos a asignar a una variable, escoge el mas general. El inferenciador da errores si entre los tipos que tiene a esocoger existe alguno que no tiene un ancestro comun mas general con los demas. + +## Funcionamiento + +El inferenciador se ejecuta varias veces, en cada una realizando un chequeo distinto. + +### Soft Inferencer + +Infiere el tipo de la expresion a base del tipo de la variable a la que esta asignada. Ya sea como asignacion o el valor de retorno esperado de una funcion. + +Aplica las reglas de cool para realizar la infererencia. Este permite que haya ambiguedad y que un tipo por determinar puede tener varios ancestros sin nada en comun. + +En el lenguage cool esto se evidencia cuando se hace un llamado a una funcion del estilo + +``` +a.func(); +``` + +donde el tipo de _a_ no es definido. El inferenciador buscara todas las clases con un metodo de nombre func y cantidad de parametro determinad y los tendra como posibles tipos para _a_. En estos casos _a_ puede ser de varios tipos no relacionados por ejemplo cuando: + +``` +class A { + method func():Int{ + 3 + 3 + } +}; +class B { + method func():String{ + "3 + 3" + } +}; +``` + +$a \in \{A, B\}$ donde A hereda de B y viceversa $a \notin \text{Object}$. pues Object no tiene un metodo func que recibe 0 argumentos. + +Debido a que las variables pueden tener varios tipos no relacionados tampoco se revisa las comparaciones de igual. + +### Hard Inferenecer + +Infiere el tipo de la expresion a base del tipo de la variable a la que esta asignada. Ya sea como asignacion o el valor de retorno esperado de una funcion. + +En esta parte el inferenicador realiza las misma acciones que en el Soft Inferencer, excepto que ya una variable $a$ no puede tener tipos de datos no relacionados. Se revisa que las comparaciones de igualdad que ambos miembros sean del mismo tipo. + +### Back Inferencer + +Este se encarga de inferir el tipo de una variable a base del valor de la expresion. diff --git a/src/docs/lexing.md b/src/docs/lexing.md new file mode 100644 index 000000000..9c8ac14ce --- /dev/null +++ b/src/docs/lexing.md @@ -0,0 +1,2 @@ +# Lexer + diff --git a/src/docs/parsing.md b/src/docs/parsing.md new file mode 100644 index 000000000..918acad19 --- /dev/null +++ b/src/docs/parsing.md @@ -0,0 +1,2 @@ +# Parser + diff --git a/src/docs/semantics.md b/src/docs/semantics.md new file mode 100644 index 000000000..2b9137abb --- /dev/null +++ b/src/docs/semantics.md @@ -0,0 +1,2 @@ +# Semantica + diff --git a/src/lexer/lexer.py b/src/lexer/lexer.py index e0e2699b3..0b35a4c48 100755 --- a/src/lexer/lexer.py +++ b/src/lexer/lexer.py @@ -162,7 +162,7 @@ def t_chunkComment_comment(self, t): def t_chunkComment_eof(self, t): if t.lexer.level > 0: self.errors.append(_LexicographicError % (t.lexer.lineno, self.find_column(t.lexer.lexdata,t), 'EOF in comment')) - print(_LexicographicError % (t.lexer.lineno, self.find_column(t.lexer.lexdata,t), 'EOF in comment')) + # print(_LexicographicError % (t.lexer.lineno, self.find_column(t.lexer.lexdata,t), 'EOF in comment')) return None # t_assignArrow = r'<\-' @@ -296,11 +296,11 @@ def t_string_error(self, t): a = self.find_column(t.lexer.lexdata,t) row, col, eof = find_last(t.value, t.lexer.lineno, self.find_column(t.lexer.lexdata,t)) if eof: - self.errors.append(LexicographicError % (row, col, f'EOF in string constant')) + self.errors.append(_LexicographicError % (row, col, f'EOF in string constant')) # print(LexicographicError % (row, col, f'EOF in string constant')) t.lexer.skip(len(t.value)) else: - self.errors.append(LexicographicError % (row, col, f'Unterminated string constant')) + self.errors.append(_LexicographicError % (row, col, f'Unterminated string constant')) # print(LexicographicError % (row, col, f'Unterminated string constant')) t.lexer.skip(1) diff --git a/src/makefile b/src/makefile index 04aa1cf42..6f531b553 100644 --- a/src/makefile +++ b/src/makefile @@ -10,4 +10,5 @@ clean: test: pytest ../tests -v --tb=short -m=${TAG} - +poetest: + poetry run make test diff --git a/src/test.cl b/src/test.cl new file mode 100644 index 000000000..febe48b82 --- /dev/null +++ b/src/test.cl @@ -0,0 +1,13 @@ +class Main { + -- main () : AUTO_TYPE { method(1,2,3,4,5,6) }; + main(): Int {0}; + + method(a : AUTO_TYPE, b: AUTO_TYPE, c: AUTO_TYPE, d : AUTO_TYPE, e: AUTO_TYPE, f: AUTO_TYPE): AUTO_TYPE{{ + a <- e; + b <- a; + c <- b; + d <- c; + e <- f; + f + 12; + }}; +}; \ No newline at end of file diff --git a/src/utils/errors.py b/src/utils/errors.py index c130766ee..a2bffc937 100644 --- a/src/utils/errors.py +++ b/src/utils/errors.py @@ -1,6 +1,6 @@ -_LexicographicError = "(%d, %d) - LexicographicError: %s" +_LexicographicError = '(%d,%d) - LexicographicError: ERROR "%s"' _SyntacticError = '(%d, %d) - SyntacticError: ERROR at or near "%s"' _TypeError = '(%d, %d) - TypeError: %s' _NameError = '(%d, %d) - NameError: %s' _SemanticError = '(%d, %d) - SemanticError: %s' -_AtributeError = '(%d, %d) - AtributeError: %s' \ No newline at end of file +_AtributeError = '(%d, %d) - AttributeError: %s' \ No newline at end of file diff --git a/src/visitors/Builder.py b/src/visitors/Builder.py index 89906d973..826f47b68 100755 --- a/src/visitors/Builder.py +++ b/src/visitors/Builder.py @@ -34,13 +34,13 @@ def visit(self, node): _bool.set_parent(_object) _io.define_method('in_string', [], [], _string) - _io.define_method('out_string', [('x', 'String')], [_string], _self) - _io.define_method('in_int', [], [], 'Int') - _io.define_method('out_int', [('x', 'Int')], [_int], _self) + _io.define_method('out_string', ['x'], [_string], _self) + _io.define_method('in_int', [], [], _int) + _io.define_method('out_int', ['x'], [_int], _self) _string.define_method('length', [], [], _int) - _string.define_method('substr', [('index', 'Int'), ('length', 'Int')], [_int, _int], _string) - _string.define_method('concat', [('str', 'String')], [_string], _string) + _string.define_method('substr', ['index', 'length'], [_int, _int], _string) + _string.define_method('concat', ['str'], [_string], _string) _int.define_attribute('value', _int) _bool.define_attribute('value', _int) diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py index 20ed07adf..94868b68e 100755 --- a/src/visitors/Checker.py +++ b/src/visitors/Checker.py @@ -302,7 +302,7 @@ def visit(self, node, scope): ancestor_type = self.context.get_type(node.parent) except SemanticError as e: ancestor_type = ErrorType() - self.errors.append(e.text) + # self.errors.append(e.text) if not obj_type.conforms_to(ancestor_type): self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f'Expression type {obj_type.name} does not conform to declared static dispatch type {ancestor_type.name}.')) @@ -319,8 +319,8 @@ def visit(self, node, scope): self.visit(arg, scope) return ErrorType() - if len(node.args) != len(method.param_names): - self.errors.append(f'Function {method.name} is already defined in {obj_type.name}.') + # if len(node.args) != len(method.param_names): + # self.errors.append(f'Function {method.name} is already defined in {obj_type.name}.') if len(node.args) != len(method.param_types): self.errors.append(_SemanticError %(node.token_list[1].lineno, node.token_list[1].col, f"Method {method.name} called with wrong number of arguments")) @@ -363,7 +363,6 @@ def visit(self, node, scope): _var = self.current_type.get_attribute(node.lex, self.current_type, False) variable = VariableInfo(_var.name, _var.type) except SemanticError as e: - print(e.text) pass if variable is None: # self.errors.append(f'Variable {node.lex} is not defined in {self.current_method.name}.') diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index ce1b86cc4..8ae76465e 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -2,12 +2,12 @@ import visitors.visitor as visitor from cil_ast.cil_ast import * -class CiltoMipsVisitor: - def __init__(self, context): - self.dottypes = [] - self.dotdata =[] - self.dotcode =[] - self.context = context +class BaseCiltoMipsVisitor: + def __init__(self, programNode): + self.dotdata =programNode.dotdata + self.dotcode =programNode.dotcode + self.dottype =programNode.dottype + # self.context = context self.code = [] self.data = [] def write_data(self, instruction): @@ -24,10 +24,6 @@ def visit(self, node): @visitor.when(ProgramNode) def visit(self, node): - self.dottypes = node.dottypes - self.dotdata = node.dotdata - self.dotcode = node.dotcode - self.write_data('.data') self.write_code('.text') diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index fb1501c8a..6e5033f84 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -20,8 +20,6 @@ def __init__(self, context): self.parameters = set() self.instances = [] - self.ctrs = {} - def transform_to_keys(self, xtype, keys): for i, key in enumerate(keys): xtype.attrs[key] = i @@ -85,6 +83,7 @@ def create_ctr(self, class_node, scope): self.register_instruction(set_attr_node) self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) + class COOLToCILVisitor(BaseCOOLToCILVisitor): @visitor.on('node') def visit(self, node): @@ -110,10 +109,8 @@ def visit(self, node, scope): ###################################################### # class_nodes = [self.class_node_from_context(c) for c in self.context.types] - builtin_types = ['Object', 'IO', 'Int', 'Bool', 'String'] - built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types if c in builtin_types] - for built_in_class in built_in_classes: - self.visit(built_in_class, scope) + built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types] + self.current_function = self.register_function('entry') @@ -206,7 +203,7 @@ def default_value_init(type): elif type == 'String': return StringNode("") else: - return VoidNode('void') + return VoidNode() if node.value: value = self.visit(node.value, scope) @@ -216,9 +213,9 @@ def default_value_init(type): value = 'void' else: value = self.visit(default_value, scope) - self_ref = VariableInfo('self', self.current_type) - self_ref.index = 0 - return cil.SetAttribNode(self_ref, node.id, value) + self_ref = VariableInfo('self', self.current_type) + self_ref.index = 0 + return cil.SetAttribNode(self_ref, node.id, value) ## old code # elif node.type in ["Int", "String", "Object", "IO", "Bool"]: From 8d2252a5b1691d70a747a713ba703ebac29fa2af Mon Sep 17 00:00:00 2001 From: regnod Date: Wed, 23 Feb 2022 23:53:13 -0500 Subject: [PATCH 45/93] /// --- 1st.txt | 1 - LICENSE | 42 +- orientacion.md => Readme.md | 344 +++--- doc/Readme.md | 66 +- doc/mips tips | 23 - doc/mips_and_spim_manual.pdf | Bin 497101 -> 0 bytes doc/team.yml | 14 +- poetry.lock | 167 +++ pyproject.toml | 17 + requirements.txt | 4 +- setup.cfg | 2 + tests/boku/test1.cl | 20 - tests/codegen/arith.cl | 860 ++++++------- tests/codegen/arith_input.txt | 26 +- tests/codegen/arith_output.txt | 316 ++--- tests/codegen/atoi_output.txt | 2 +- tests/codegen/book_list.cl | 264 ++-- tests/codegen/book_list_output.txt | 14 +- tests/codegen/cells.cl | 194 +-- tests/codegen/cells_output.txt | 42 +- tests/codegen/complex.cl | 104 +- tests/codegen/complex_output.txt | 2 +- tests/codegen/fib.cl | 58 +- tests/codegen/fib_input.txt | 2 +- tests/codegen/fib_output.txt | 4 +- tests/codegen/graph.cl | 762 ++++++------ tests/codegen/graph_input.txt | 10 +- tests/codegen/graph_output.txt | 14 +- tests/codegen/hairyscary.cl | 134 +- tests/codegen/hello_world.cl | 25 +- tests/codegen/hello_world_output.txt | 2 +- tests/codegen/io.cl | 206 ++-- tests/codegen/io_output.txt | 10 +- tests/codegen/life.cl | 872 ++++++------- tests/codegen/life_input.txt | 130 +- tests/codegen/life_output.txt | 1554 ++++++++++++------------ tests/codegen/list_output.txt | 10 +- tests/codegen/new_complex.cl | 158 +-- tests/codegen/new_complex_output.txt | 4 +- tests/codegen/palindrome.cl | 50 +- tests/codegen/palindrome_input.txt | 2 +- tests/codegen/palindrome_output.txt | 4 +- tests/codegen/primes_output.txt | 192 +-- tests/codegen/print-cool_output.txt | 2 +- tests/codegen/sort-list_input.txt | 2 +- tests/codegen/sort-list_output.txt | 20 +- tests/codegen_test.py | 34 +- tests/conftest.py | 10 +- tests/lexer/comment1.cl | 108 +- tests/lexer/comment1_error.txt | 2 +- tests/lexer/iis1.cl | 220 ++-- tests/lexer/iis1_error.txt | 2 +- tests/lexer/iis2.cl | 238 ++-- tests/lexer/iis2_error.txt | 2 +- tests/lexer/iis3.cl | 240 ++-- tests/lexer/iis3_error.txt | 2 +- tests/lexer/iis4.cl | 238 ++-- tests/lexer/iis4_error.txt | 2 +- tests/lexer/iis5.cl | 242 ++-- tests/lexer/iis5_error.txt | 4 +- tests/lexer/iis6.cl | 248 ++-- tests/lexer/iis6_error.txt | 2 +- tests/lexer/mixed1.cl | 26 +- tests/lexer/mixed1_error.txt | 2 +- tests/lexer/mixed2.cl | 41 +- tests/lexer/mixed2_error.txt | 6 +- tests/lexer/string1.cl | 12 +- tests/lexer/string1_error.txt | 2 +- tests/lexer/string2.cl | 36 +- tests/lexer/string4.cl | 74 +- tests/lexer/string4_error.txt | 4 +- tests/lexer_test.py | 29 +- tests/parser/assignment1.cl | 72 +- tests/parser/assignment2.cl | 72 +- tests/parser/assignment3.cl | 72 +- tests/parser/attribute1.cl | 66 +- tests/parser/attribute2.cl | 66 +- tests/parser/attribute3.cl | 66 +- tests/parser/block1.cl | 172 +-- tests/parser/block2.cl | 172 +-- tests/parser/block3.cl | 172 +-- tests/parser/block4.cl | 174 +-- tests/parser/case1.cl | 180 +-- tests/parser/case2.cl | 184 +-- tests/parser/case3.cl | 184 +-- tests/parser/case4.cl | 184 +-- tests/parser/case5.cl | 184 +-- tests/parser/case6.cl | 184 +-- tests/parser/class1.cl | 40 +- tests/parser/class2.cl | 40 +- tests/parser/class3.cl | 68 +- tests/parser/class4.cl | 72 +- tests/parser/class5.cl | 68 +- tests/parser/class6.cl | 68 +- tests/parser/conditional1.cl | 136 +-- tests/parser/conditional2.cl | 136 +-- tests/parser/conditional3.cl | 136 +-- tests/parser/conditional4.cl | 144 +-- tests/parser/conditional5.cl | 144 +-- tests/parser/conditional6.cl | 144 +-- tests/parser/dispatch1.cl | 88 +- tests/parser/dispatch2.cl | 88 +- tests/parser/dispatch3.cl | 88 +- tests/parser/dispatch4.cl | 104 +- tests/parser/dispatch5.cl | 104 +- tests/parser/dispatch6.cl | 112 +- tests/parser/dispatch7.cl | 112 +- tests/parser/dispatch8.cl | 112 +- tests/parser/dispatch9.cl | 120 +- tests/parser/let1.cl | 168 +-- tests/parser/let2.cl | 168 +-- tests/parser/let3.cl | 168 +-- tests/parser/let4.cl | 168 +-- tests/parser/let5.cl | 168 +-- tests/parser/let6.cl | 146 +-- tests/parser/let7.cl | 168 +-- tests/parser/loop1.cl | 154 +-- tests/parser/loop2.cl | 154 +-- tests/parser/loop3.cl | 154 +-- tests/parser/loop4.cl | 154 +-- tests/parser/method1.cl | 66 +- tests/parser/method2.cl | 66 +- tests/parser/method3.cl | 66 +- tests/parser/method4.cl | 66 +- tests/parser/method5.cl | 66 +- tests/parser/method6.cl | 64 +- tests/parser/mixed1.cl | 198 +-- tests/parser/mixed2.cl | 28 +- tests/parser/mixed3.cl | 80 +- tests/parser/mixed4.cl | 42 +- tests/parser/mixed5.cl | 40 +- tests/parser/mixed6.cl | 10 +- tests/parser/operation1.cl | 200 +-- tests/parser/operation2.cl | 200 +-- tests/parser/operation3.cl | 200 +-- tests/parser/operation4.cl | 200 +-- tests/parser/program1.cl | 2 +- tests/parser/program2.cl | 40 +- tests/parser/program3.cl | 48 +- tests/parser_test.py | 27 +- tests/semantic/arithmetic1.cl | 20 +- tests/semantic/arithmetic10.cl | 28 +- tests/semantic/arithmetic11.cl | 26 +- tests/semantic/arithmetic12.cl | 26 +- tests/semantic/arithmetic1_error.txt | 2 +- tests/semantic/arithmetic2.cl | 20 +- tests/semantic/arithmetic2_error.txt | 2 +- tests/semantic/arithmetic3.cl | 20 +- tests/semantic/arithmetic3_error.txt | 2 +- tests/semantic/arithmetic4.cl | 20 +- tests/semantic/arithmetic5.cl | 22 +- tests/semantic/arithmetic5_error.txt | 2 +- tests/semantic/arithmetic6.cl | 22 +- tests/semantic/arithmetic6_error.txt | 2 +- tests/semantic/arithmetic7.cl | 24 +- tests/semantic/arithmetic7_error.txt | 2 +- tests/semantic/arithmetic8.cl | 26 +- tests/semantic/arithmetic8_error.txt | 2 +- tests/semantic/arithmetic9.cl | 30 +- tests/semantic/assignment1.cl | 14 +- tests/semantic/assignment1_error.txt | 2 +- tests/semantic/assignment2.cl | 26 +- tests/semantic/assignment2_error.txt | 2 +- tests/semantic/assignment3.cl | 28 +- tests/semantic/attributes1.cl | 24 +- tests/semantic/attributes1_error.txt | 2 +- tests/semantic/attributes2.cl | 24 +- tests/semantic/attributes2_error.txt | 2 +- tests/semantic/attributes3.cl | 48 +- tests/semantic/attributes3_error.txt | 2 +- tests/semantic/attributes4.cl | 76 +- tests/semantic/basics1.cl | 18 +- tests/semantic/basics1_error.txt | 2 +- tests/semantic/basics2.cl | 18 +- tests/semantic/basics2_error.txt | 2 +- tests/semantic/basics3.cl | 16 +- tests/semantic/basics3_error.txt | 2 +- tests/semantic/basics4.cl | 16 +- tests/semantic/basics4_error.txt | 2 +- tests/semantic/basics5.cl | 16 +- tests/semantic/basics5_error.txt | 2 +- tests/semantic/basics6.cl | 16 +- tests/semantic/basics6_error.txt | 2 +- tests/semantic/basics7.cl | 16 +- tests/semantic/basics7_error.txt | 2 +- tests/semantic/basics8.cl | 16 +- tests/semantic/basics8_error.txt | 2 +- tests/semantic/blocks1.cl | 60 +- tests/semantic/blocks1_error.txt | 2 +- tests/semantic/case1.cl | 46 +- tests/semantic/case1_error.txt | 2 +- tests/semantic/case2.cl | 44 +- tests/semantic/case3.cl | 44 +- tests/semantic/class1.cl | 16 +- tests/semantic/class1_error.txt | 4 +- tests/semantic/conditionals1.cl | 26 +- tests/semantic/conditionals1_error.txt | 2 +- tests/semantic/conditionals2.cl | 48 +- tests/semantic/conditionals2_error.txt | 4 +- tests/semantic/dispatch1.cl | 64 +- tests/semantic/dispatch1_error.txt | 2 +- tests/semantic/dispatch2.cl | 66 +- tests/semantic/dispatch2_error.txt | 2 +- tests/semantic/dispatch3.cl | 70 +- tests/semantic/dispatch3_error.txt | 2 +- tests/semantic/dispatch4.cl | 70 +- tests/semantic/dispatch5.cl | 60 +- tests/semantic/dispatch5_error.txt | 2 +- tests/semantic/dispatch6.cl | 64 +- tests/semantic/dispatch6_error.txt | 2 +- tests/semantic/eq1.cl | 32 +- tests/semantic/eq1_error.txt | 2 +- tests/semantic/eq2.cl | 34 +- tests/semantic/eq2_error.txt | 2 +- tests/semantic/eq3.cl | 34 +- tests/semantic/eq3_error.txt | 2 +- tests/semantic/eq4.cl | 34 +- tests/semantic/eq4_error.txt | 2 +- tests/semantic/features1.cl | 0 tests/semantic/features1_error.txt | 0 tests/semantic/features2.cl | 0 tests/semantic/features2_error.txt | 0 tests/semantic/features3.cl | 0 tests/semantic/features3_error.txt | 0 tests/semantic/inheritance1.cl | 0 tests/semantic/inheritance1_error.txt | 0 tests/semantic/inheritance2.cl | 0 tests/semantic/inheritance2_error.txt | 0 tests/semantic/inheritance3.cl | 0 tests/semantic/inheritance4.cl | 0 tests/semantic/inheritance5.cl | 0 tests/semantic/isvoid1.cl | 50 +- tests/semantic/isvoid1_error.txt | 2 +- tests/semantic/let1.cl | 30 +- tests/semantic/let1_error.txt | 2 +- tests/semantic/let2.cl | 30 +- tests/semantic/let2_error.txt | 2 +- tests/semantic/let3.cl | 30 +- tests/semantic/loops1.cl | 14 +- tests/semantic/loops2.cl | 18 +- tests/semantic/loops2_error.txt | 2 +- tests/semantic/methods1.cl | 22 +- tests/semantic/methods1_error.txt | 2 +- tests/semantic/methods2.cl | 22 +- tests/semantic/methods2_error.txt | 2 +- tests/semantic/methods3.cl | 26 +- tests/semantic/methods3_error.txt | 2 +- tests/semantic/methods4.cl | 38 +- tests/semantic/methods4_error.txt | 2 +- tests/semantic/methods5.cl | 40 +- tests/semantic/methods5_error.txt | 2 +- tests/semantic/methods6.cl | 52 +- tests/semantic/methods6_error.txt | 2 +- tests/semantic/methods7.cl | 22 +- tests/semantic/methods8.cl | 22 +- tests/semantic/new1.cl | 60 +- tests/semantic/self1.cl | 22 +- tests/semantic/self1_error.txt | 2 +- tests/semantic/self2.cl | 20 +- tests/semantic/self2_error.txt | 2 +- tests/semantic/self3.cl | 20 +- tests/semantic/self3_error.txt | 2 +- tests/semantic/self4.cl | 18 +- tests/semantic/self4_error.txt | 2 +- tests/semantic_test.py | 29 +- tests/utils/utils.py | 188 +-- 266 files changed, 9431 insertions(+), 9294 deletions(-) delete mode 100644 1st.txt rename orientacion.md => Readme.md (97%) delete mode 100644 doc/mips tips delete mode 100755 doc/mips_and_spim_manual.pdf create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 setup.cfg delete mode 100644 tests/boku/test1.cl mode change 100644 => 100755 tests/codegen/arith.cl mode change 100644 => 100755 tests/codegen/book_list.cl mode change 100644 => 100755 tests/codegen/cells.cl mode change 100644 => 100755 tests/codegen/complex.cl mode change 100644 => 100755 tests/codegen/graph.cl mode change 100644 => 100755 tests/codegen/hairyscary.cl mode change 100644 => 100755 tests/codegen/hello_world.cl mode change 100644 => 100755 tests/codegen/io.cl mode change 100644 => 100755 tests/codegen/life.cl mode change 100644 => 100755 tests/codegen/new_complex.cl mode change 100644 => 100755 tests/codegen/palindrome.cl mode change 100644 => 100755 tests/semantic/features1.cl mode change 100644 => 100755 tests/semantic/features1_error.txt mode change 100644 => 100755 tests/semantic/features2.cl mode change 100644 => 100755 tests/semantic/features2_error.txt mode change 100644 => 100755 tests/semantic/features3.cl mode change 100644 => 100755 tests/semantic/features3_error.txt mode change 100644 => 100755 tests/semantic/inheritance1.cl mode change 100644 => 100755 tests/semantic/inheritance1_error.txt mode change 100644 => 100755 tests/semantic/inheritance2.cl mode change 100644 => 100755 tests/semantic/inheritance2_error.txt mode change 100644 => 100755 tests/semantic/inheritance3.cl mode change 100644 => 100755 tests/semantic/inheritance4.cl mode change 100644 => 100755 tests/semantic/inheritance5.cl diff --git a/1st.txt b/1st.txt deleted file mode 100644 index a8a0aa5ce..000000000 --- a/1st.txt +++ /dev/null @@ -1 +0,0 @@ -First commit test \ No newline at end of file diff --git a/LICENSE b/LICENSE index 7f19c2d8c..718bd210a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2021 School of Math and Computer Science, University of Havana - -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. +MIT License + +Copyright (c) 2021 School of Math and Computer Science, University of Havana + +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. diff --git a/orientacion.md b/Readme.md similarity index 97% rename from orientacion.md rename to Readme.md index 0e33ddb08..a47d48b9e 100644 --- a/orientacion.md +++ b/Readme.md @@ -1,172 +1,172 @@ -# COOL: Proyecto de Compilación - -> Proyecto base para el compilador de 4to año en Ciencia de la Computación. - -## Generalidades - -La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la -Universidad de La Habana, consiste este curso en la implementación de un compilador completamente -funcional para el lenguaje _COOL_. - -_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. - -## Cómo comenzar (o terminar) - -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. A continuación le damos las instrucciones mínimas necesarias para ello: - -### 1. Si no lo han hecho ya, regístrense en [Github](https://github.com) todos los miembros del equipo (es gratis). - -![](img/img1.png) - -### 2. Haga click en el botón **Fork** para hacer una copia del proyecto en el perfil de Github de uno de los miembros. - -Opcionalmente pueden [crear una organización](https://github.com/organizations/new) y copiar el proyecto en el perfil de la misma. - -![](img/img2.png) - -### 3. Una vez hecho esto, tendrá un nuevo repositorio en `github/`. - -Revise que el repositorio de su equipo está en su perfil. -En este ejemplo se ha copiado a la cuenta de `github.com/apiad`. - -Debe indicar bajo el nombre del repositorio: `"forked from matcom/cool-compiler-2021"`. - -![](img/img3.png) - -### 4. Clone este proyecto en un repositorio local. - -Busque la URL de su proyecto en la interfaz web de Github. - -Asegúrese de clonar **su copia** y no el proyecto original en `matcom/cool-compiler-2021`. - -![](img/img4.png) - -```bash -$ git clone git@github.com:/cool-compiler-2021.git -``` - -> Donde `` es posiblemente el nombre de su equipo o del miembro donde se hizo el _fork_. - -A partir de este punto debe tener un proyecto `cool-compiler-2021` local. -El siguiente paso depende de si usted ya tiene su código versionado con `git` o no. - -### 5.A. Si tiene su proyecto en git (y no quiere perder la historia): - -#### 5.1. Mezcle hacia el nuevo respositorio su repositorio anterior: - -```bash -$ cd cool-compiler-2021 -$ git pull --allow-unrelated-histories master -``` - -#### 5.2. Organice su proyecto, código fuente y documentación, de acuerdo a las instrucciones de este documento, y vuelva a hacer `commit`. - -```bash -$ mv src/ -$ git add . -$ git commit -a -m "Mezclado con el proyecto base" -``` - -#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. - -```bash -$ git push origin master -``` - -### 5.B Si aún no tiene su proyecto en git (o no le importa la historia): - -#### 5.1. Simplemente copie el código de su proyecto en la carpeta correspondiente `src` y haga su primer commit. - -```bash -$ mv src/ -$ git commit -a -m "Hello Git!" -``` - -#### 5.2. A partir de este punto asegúrese de hacer `commit` de forma regular para mantener su repositorio actualizado. - -Si necesita saber más sobre `git`, todo lo imprescindible está en [esta guía](doc/github-git-cheat-sheet.pdf). - -#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. - -```bash -$ git push origin master -``` - -## Entregas - -En este proyecto se realizarán entregas parciales a lo largo del curso. Para realizar una entrega, siga los siguientes pasos. - -### 1. Cree un pull request al proyecto original desde su copia. - -![](img/img5.png) - -### 2. Asegúrese de tener la siguiente configuración antes de hacer click en **Create pull request**. - -- **base repository**: `matcom/cool-compiler-2021` (repositorio original) - - **branch**: `master` -- **head repository**: `/cool-compiler-2021` (repositorio propio) - - **branch**: `master` (o la que corresponda) - -> Asegúrese que se indica **Able to merge**. De lo contrario, existen cambios en el repositorio original que usted no tiene, y debe actualizarlos. - -> **NOTA**: Asegúrese que el _pull request_ se hace a la rama `master`. - -![](img/img6.png) - -### 3. Introduzca un título y descripción adecuados, y haga click en **Create pull request**. - -![](img/img7.png) - -### 4. Espere mientras se ejecutan las pruebas. - -Verá la indicación **Some checks haven't completed yet**. - -![](img/img8.png) - -Es posible que tenga que actualizar los cambios que se hayan hecho en el repositorio original, por ejemplo, si se han agregado nuevos tests. En este caso obtendrá el siguiente mensaje: - -> **This branch is out-of-date with base branch** - -Haga click en **Update branch** y siga las instrucciones. -### 5. Verifique que no hubo errores en las pruebas. - -Si ve el mensaje **(All | Some) checks have failed**, significa que su código no pasó las pruebas. - -![](img/img9.png) - -Para ver los resultados de las pruebas haga click en el link **Details**. - -![](img/img10.png) - - -### 6. Arregle los errores y repita el paso 5 hasta que todas las pruebas pasen. - -Para cualquier modificación que haga a su proyecto, haga _commit_ y _push_ para **su repositorio personal** y automáticamente se actualizará el estado del _pull request_ y se volverán a ejecutar las pruebas. **No es necesario** abrir un _pull request_ nuevo por cada entrega, sino actualizar el anterior. - -> **Por favor asegúrese de mantener un solo _pull request_ activo por equipo**. En caso de abrir uno nuevo, cerrar el anterior. - -## Sobre la implementación - -Ponga todo su código e instrucciones necesarias en la carpeta `src`. Más información en [`src/Readme.md`](src/Readme.md). - -## Sobre la documentación - -Usted debe presentar un reporte escrito documentando el proceso de construcción de su compilador y los detalles más importantes de su funcionamiento. Más información en [`doc/Readme.md`](doc/Readme.md). - -## Sobre los equipos de desarrollo - -Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. - -## Sobre los casos de prueba - -La carpeta `tests` contiene todos los casos de prueba que son obligatorios de pasar para que su proyecto tenga derecho a ser evaluado. - -Estos tests se ejecutan automáticamente cada vez que hace un _pull request_ al repositorio `matcom/cool-compiler-2021`. Solo aquellos proyectos que pasen todas las pruebas con éxito serán evaluados. - -Para ejecutar las pruebas localmente, debe tener instalado `Python 3.7`, `pip` y `make` (normalmente viene con Linux). Ejecute: - -```bash -$ pip install -r requirements.txt -$ cd src -$ make test -``` +# COOL: Proyecto de Compilación + +> Proyecto base para el compilador de 4to año en Ciencia de la Computación. + +## Generalidades + +La evaluación de la asignatura Complementos de Compilación, inscrita en el programa del 4to año de la Licenciatura en Ciencia de la Computación de la Facultad de Matemática y Computación de la +Universidad de La Habana, consiste este curso en la implementación de un compilador completamente +funcional para el lenguaje _COOL_. + +_COOL (Classroom Object-Oriented Language)_ es un pequeño lenguaje que puede ser implementado con un esfuerzo razonable en un semestre del curso. Aun así, _COOL_ mantiene muchas de las características de los lenguajes de programación modernos, incluyendo orientación a objetos, tipado estático y manejo automático de memoria. + +## Cómo comenzar (o terminar) + +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. A continuación le damos las instrucciones mínimas necesarias para ello: + +### 1. Si no lo han hecho ya, regístrense en [Github](https://github.com) todos los miembros del equipo (es gratis). + +![](img/img1.png) + +### 2. Haga click en el botón **Fork** para hacer una copia del proyecto en el perfil de Github de uno de los miembros. + +Opcionalmente pueden [crear una organización](https://github.com/organizations/new) y copiar el proyecto en el perfil de la misma. + +![](img/img2.png) + +### 3. Una vez hecho esto, tendrá un nuevo repositorio en `github/`. + +Revise que el repositorio de su equipo está en su perfil. +En este ejemplo se ha copiado a la cuenta de `github.com/apiad`. + +Debe indicar bajo el nombre del repositorio: `"forked from matcom/cool-compiler-2021"`. + +![](img/img3.png) + +### 4. Clone este proyecto en un repositorio local. + +Busque la URL de su proyecto en la interfaz web de Github. + +Asegúrese de clonar **su copia** y no el proyecto original en `matcom/cool-compiler-2021`. + +![](img/img4.png) + +```bash +$ git clone git@github.com:/cool-compiler-2021.git +``` + +> Donde `` es posiblemente el nombre de su equipo o del miembro donde se hizo el _fork_. + +A partir de este punto debe tener un proyecto `cool-compiler-2021` local. +El siguiente paso depende de si usted ya tiene su código versionado con `git` o no. + +### 5.A. Si tiene su proyecto en git (y no quiere perder la historia): + +#### 5.1. Mezcle hacia el nuevo respositorio su repositorio anterior: + +```bash +$ cd cool-compiler-2021 +$ git pull --allow-unrelated-histories master +``` + +#### 5.2. Organice su proyecto, código fuente y documentación, de acuerdo a las instrucciones de este documento, y vuelva a hacer `commit`. + +```bash +$ mv src/ +$ git add . +$ git commit -a -m "Mezclado con el proyecto base" +``` + +#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. + +```bash +$ git push origin master +``` + +### 5.B Si aún no tiene su proyecto en git (o no le importa la historia): + +#### 5.1. Simplemente copie el código de su proyecto en la carpeta correspondiente `src` y haga su primer commit. + +```bash +$ mv src/ +$ git commit -a -m "Hello Git!" +``` + +#### 5.2. A partir de este punto asegúrese de hacer `commit` de forma regular para mantener su repositorio actualizado. + +Si necesita saber más sobre `git`, todo lo imprescindible está en [esta guía](doc/github-git-cheat-sheet.pdf). + +#### 5.3. A partir de este punto puede hacer `push` cada vez que tenga cambios que subir. + +```bash +$ git push origin master +``` + +## Entregas + +En este proyecto se realizarán entregas parciales a lo largo del curso. Para realizar una entrega, siga los siguientes pasos. + +### 1. Cree un pull request al proyecto original desde su copia. + +![](img/img5.png) + +### 2. Asegúrese de tener la siguiente configuración antes de hacer click en **Create pull request**. + +- **base repository**: `matcom/cool-compiler-2021` (repositorio original) + - **branch**: `master` +- **head repository**: `/cool-compiler-2021` (repositorio propio) + - **branch**: `master` (o la que corresponda) + +> Asegúrese que se indica **Able to merge**. De lo contrario, existen cambios en el repositorio original que usted no tiene, y debe actualizarlos. + +> **NOTA**: Asegúrese que el _pull request_ se hace a la rama `master`. + +![](img/img6.png) + +### 3. Introduzca un título y descripción adecuados, y haga click en **Create pull request**. + +![](img/img7.png) + +### 4. Espere mientras se ejecutan las pruebas. + +Verá la indicación **Some checks haven't completed yet**. + +![](img/img8.png) + +Es posible que tenga que actualizar los cambios que se hayan hecho en el repositorio original, por ejemplo, si se han agregado nuevos tests. En este caso obtendrá el siguiente mensaje: + +> **This branch is out-of-date with base branch** + +Haga click en **Update branch** y siga las instrucciones. +### 5. Verifique que no hubo errores en las pruebas. + +Si ve el mensaje **(All | Some) checks have failed**, significa que su código no pasó las pruebas. + +![](img/img9.png) + +Para ver los resultados de las pruebas haga click en el link **Details**. + +![](img/img10.png) + + +### 6. Arregle los errores y repita el paso 5 hasta que todas las pruebas pasen. + +Para cualquier modificación que haga a su proyecto, haga _commit_ y _push_ para **su repositorio personal** y automáticamente se actualizará el estado del _pull request_ y se volverán a ejecutar las pruebas. **No es necesario** abrir un _pull request_ nuevo por cada entrega, sino actualizar el anterior. + +> **Por favor asegúrese de mantener un solo _pull request_ activo por equipo**. En caso de abrir uno nuevo, cerrar el anterior. + +## Sobre la implementación + +Ponga todo su código e instrucciones necesarias en la carpeta `src`. Más información en [`src/Readme.md`](src/Readme.md). + +## Sobre la documentación + +Usted debe presentar un reporte escrito documentando el proceso de construcción de su compilador y los detalles más importantes de su funcionamiento. Más información en [`doc/Readme.md`](doc/Readme.md). + +## Sobre los equipos de desarrollo + +Para desarrollar el compilador del lenguaje COOL se trabajará en equipos de 2 o 3 integrantes. + +## Sobre los casos de prueba + +La carpeta `tests` contiene todos los casos de prueba que son obligatorios de pasar para que su proyecto tenga derecho a ser evaluado. + +Estos tests se ejecutan automáticamente cada vez que hace un _pull request_ al repositorio `matcom/cool-compiler-2021`. Solo aquellos proyectos que pasen todas las pruebas con éxito serán evaluados. + +Para ejecutar las pruebas localmente, debe tener instalado `Python 3.7`, `pip` y `make` (normalmente viene con Linux). Ejecute: + +```bash +$ pip install -r requirements.txt +$ cd src +$ make test +``` diff --git a/doc/Readme.md b/doc/Readme.md index a7ed0e32d..3b2569f5c 100644 --- a/doc/Readme.md +++ b/doc/Readme.md @@ -1,33 +1,33 @@ -# Documentación - -## Readme - -Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: - -- Cómo ejecutar (y compilar si es necesario) su compilador. -- Requisitos adicionales, dependencias, configuración, etc. -- Opciones adicionales que tenga su compilador. - -## Sobre los Equipos de Desarrollo - -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. - -**⚠️ NOTA**: Debe completar el archivo `team.yml` con los datos correctos de cada miembro de su equipo. - -## Sobre los Materiales a Entregar - -Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) en esta carpeta, que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. -El documento no tiene límite de extensión. -En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. - -## Estructura del reporte - -Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: - -- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. -- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. -- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. - -## Sobre la Fecha de Entrega - -Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram se anunciará la fecha y requisitos de cada entrega. +# Documentación + +## Readme + +Modifique el contenido de este documento para documentar de forma clara y concisa los siguientes aspectos: + +- Cómo ejecutar (y compilar si es necesario) su compilador. +- Requisitos adicionales, dependencias, configuración, etc. +- Opciones adicionales que tenga su compilador. + +## Sobre los Equipos de Desarrollo + +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. + +**⚠️ NOTA**: Debe completar el archivo `team.yml` con los datos correctos de cada miembro de su equipo. + +## Sobre los Materiales a Entregar + +Para la evaluación del proyecto Ud. debe entregar un informe en formato PDF (`report.pdf`) en esta carpeta, que resuma de manera organizada y comprensible la arquitectura e implementación de su compilador. +El documento no tiene límite de extensión. +En él explicará en más detalle su solución a los problemas que, durante la implementación de cada una de las fases del proceso de compilación, hayan requerido de Ud. especial atención. + +## Estructura del reporte + +Usted es libre de estructurar su reporte escrito como más conveniente le parezca. A continuación le sugerimos algunas secciones que no deberían faltar, aunque puede mezclar, renombrar y organizarlas de la manera que mejor le parezca: + +- **Uso del compilador**: detalles sobre las opciones de líneas de comando, si tiene opciones adicionales (e.j., `--ast` genera un AST en JSON, etc.). Básicamente lo mismo que pondrá en este Readme. +- **Arquitectura del compilador**: una explicación general de la arquitectura, en cuántos módulos se divide el proyecto, cuantas fases tiene, qué tipo de gramática se utiliza, y en general, como se organiza el proyecto. Una buena imagen siempre ayuda. +- **Problemas técnicos**: detalles sobre cualquier problema teórico o técnico interesante que haya necesitado resolver de forma particular. + +## Sobre la Fecha de Entrega + +Se realizarán recogidas parciales del proyecto a lo largo del curso. En el Canal de Telegram se anunciará la fecha y requisitos de cada entrega. diff --git a/doc/mips tips b/doc/mips tips deleted file mode 100644 index 92c192852..000000000 --- a/doc/mips tips +++ /dev/null @@ -1,23 +0,0 @@ --------------------------------------------------------- -■ Registers $at (1), $k0 (26), and $k1 (27) are reserved for the assembler -and operating system and should not be used by user programs or com- -pilers. --------------------------------------------------------- -■ Registers $a0 – $a3 (4–7) are used to pass the first four arguments to rou- -tines (remaining arguments are passed on the stack). Registers $v0 and -$v1 (2, 3) are used to return values from functions. --------------------------------------------------------- -■ Registers $t0 – $t9 (8–15, 24, 25) are caller-saved registers that are used -to hold temporary quantities that need not be preserved across calls (see -section 3.6 in Chapter 3). --------------------------------------------------------- -■ Registers $s0 – $s7 (16–23) are callee-saved registers that hold long- -lived values that should be preserved across calls. --------------------------------------------------------- -■ Register $gp (28) is a global pointer that points to the middle of a 64K -block of memory in the static data segment. --------------------------------------------------------- -■ Register $sp (29) is the stack pointer, which points to the first free loca- -tion on the stack. Register $fp (30) is the frame pointer. The jal instruc- -tion writes register $ra (31), the return address from a procedure call. -These two registers are explained in the next section. diff --git a/doc/mips_and_spim_manual.pdf b/doc/mips_and_spim_manual.pdf deleted file mode 100755 index 5eec47ca042b0c377f15c7ba87be6c8a69a92ace..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 497101 zcmeFZ1yE&8vMvgZd*copcXw^H8+W(HT{rFyjXN~%?(Wc7V6G_IHaXZ|z)i8JS( zc@Z~W#Jg{H#NLs$N>T> zxrdhGn`nQMO}&CZJ~9M+U5 z20jnG971hVSDiw2f~*y4O>o!Ozw+YnSmZ}LQnm{0$2kFVY`8AzD-ykrUU(gwXK2nW zx=KB$wvhX_o;@39=z2S719{1QqAM^I#q3-oapE;!Nn86rbcK>{He*HGAkI$vtlz$lNba?3x-*QLvHN{g3p2#KwB$#Be$y*O zhd%o#9hog$js(LMIij@tc@vr0D4ZEXtWOt0X_zs27Tn<$D0r#r-?}6ezGr-Yv94S^UYe%l=ik4x^9Bn9D*DIY5dXgSkF78*YS8A z8|Md_qv@k@H@oq-fwBTFjy-?P)QHxUhEh2UiiHDRkS}0fg((J^rbA@);D|%6%hz3m zzFv-2To`3*Xl6szK?p70^EAa(E0$)c&2UtPP(Qg8rQq!`vZ2>tao6zB-(1rJLgSlu zoZPS0udzz%;yBe7#8MQO zkYiHp$I#))EcLnRR8&Px%J8j?UykLPmK~rbFFc8*QORJl(=T~x(3>MAp^Xjgx}~B1 z+LK@m=aO0)S^OD6lq_UlkJ~}CZ&iQdxn8zWbL)~>dKeurn`?CIIU?|+_sC_EsT`+H zsuW)=h^CWkdbQTqH+k0+mzg{14UPqJN-r9RU}SCh_eK3q{gwolzet1}(8fT~$N`|q z@Gdq01|=gG2Y~jwaM)No0Deo%XC?sadvk?%iW$K6cZvnT{&$KM!0~sA4Z!(#iXFi9 z2lXyY45BU$UlbkQ1?-Q(z9=#Sm>B<~QrO1Q2B>JOXYjXLVS7#h6Vsoy@4f%dF4JH6 z{p@IM;9zEBt>kKJ1Yks95V5h+GqVP0G6I<1*;dfAHZl66@IK7%q5k;3R|uIo*vlCK z74@uaEsX%22n>p5Zto45+1TDI|J)VWnEr)b0lo)92^AJ3Xfi6os!HF#+K0?wP~b#` zmiGON2FD{GPl3@;+4|?_)qMM9F2VrNobWkiqo$g@=-837S|UzzGgAm>Z4} zqqy{A?s90gnxrKbAN!T$>5lvCK485Pl%k-9SZWu?K@Zk!A%be_Cm!8TJen@8Y&)bq z38X|3s>Hm4HnpjgOTEEIs-h_^A3yVQs@$xwxkSYUHZeVpQ-YkT;9Gcu)BJW4wI|bc z$~iBlvKNB|NF`m|BLA%gNDFPUTOybfVMjHTCtLiOZk^0-Cguo(_{gyhthhcV_ORM) z*nLj?%pNX53YG0NCE-cK^r^s{V(#+9oWuGiV~0LAMH9y!wpN}BuB8RAJFWD2)H@ID z3AnrNH8hUH9DX#0xxEfFhROUFO7()_C&e0l5Hh+JARt4z#qDDTTZBkTZQJta4Xf$X8yDx9Z41H>n?k4X?nVpNj@1?u_}BIp8`@Wy z)pegY0We?xZD>3k*^MfKWPyz$f>g1^OSf*)A(=F(MRB()v?19^#X<$IlnnleE0*h# zL-6qw!3#@16Y?(mn>O`;v3WRS)D~OB?6B*t&q7J8C>;*;o5R;vt^t)3H2bK{=Abd9 zHz|Q46|=`F-?Y|6u7gBHY_z1V$=jQg59mgFt+j_KVFz`MIGc?6nRJyewExseca)u&eV|IGV?SB3o*HAjv&pL z$7GN3uwxlay56ND{W__tDc&(BadcCjw>H7i7~@tNF|%xyx4tOzsO@P3b$EB|A?M+bdSV^MvR{n;UzxVa!9E3=7SbWHDZ_xtA`68ZPie%6?2$Ubqc*3plWY4rYzWS0IGG5@)0cn|H&ii zxueCb7j>IjcX2_yivZjPBF<%0ciPAWU5+j!5#Q@2E4Aq7*!iI{+^!cQ84b@$Qu>{K zlGWsz#LfZ0XA_8reGi2~%OGp`gzbkScwC2|^pe6~QM87K3ffwkZ)Z@=id2mh%g5U- z>2<>ikseKN>GS&Sy)%$QhhEDJ_r%k&Gs7=A5_AOv47ZI>;@C6aU1BqfgJ0az3Q&q) zfzB&*PsQK~1eJGCjz1~3i;@mxcKhzxHUz7`b0+QU!wd8I&R+^;IKeQ$s;?q9^b~^0 zgkj&xuTXq>(5>ym7W;+IzSSV)gZz^vfq1w202CF4UI|vO7yN*ZphRtOqY8Nf+tRCL zgj9~@0-QVK**(M7Pu2%pn$c*VZ z%@teX8w38{kPhhFLopY@^luDvN#w$a&RpLpX{a?883nnf`KrS`ANm_`tEQUD2;xnd1KRv2#4?N&dC0t+8-hhJ-JB-jK1(nr#qD_beYLt|%b;43H4oW(QHF+jaV;WAnmUVTePP6ca@b!JEZ+OC! z|C6QuTX+0k>Y5CSMz(rDz29mFz#ymR@P2Hxx3Q*Uwl*YTW;FP%!~hH;Mowl1M#9qS zl7K(-m4fzvsIT9;@=uZZyQ*PkWBgZiO}y$daQQRJ%ZJw@ARowLjfXJTd=B{wTV)B`nh#i<>_)*`JMQ&j zs?OEAUv-1{m}9DFZZGcw$}wzS9m^NAJH_+|%^L>5rOg(~tWe9pO%+Oi-9?s6tkaQrzh= zqMzIwGGaf30z-@ZDayV=XaMZsO7%eJ1L}qel>@EGj~(z6t98}XWyjf@FM8sx1hlyO z$;K*%m3o(r^o0ws!u!N<9cVC~&d~8Qm0)9+&>KwE8JqH`8Ry4)zr-02)pY|RL=%}( z7g)Ls`+pSepkW1oVc{-gW4*u^(5X1uJEMgw?E4PtgE5lNoA?bz`7u#+fk@z(uuvNN z0hO(m&O%;RFr8=Zco)@O!UYOpjG0|gqVO&Ua?=a?sCcnHs3eP9bn$Ihr zpEmSdZcaV8-bMZffI(?IZY@3nnL*#mg~L zH0{TvEJldW=q`|bn`P*ebIS_m4tfl$M%&r)Y&+@|D;`@_RhY4GCu-lwLq>dCMpuT` zGM)vuYlfUWls_sT4y9xfB;N;%g%I*BjWHC4#4uOuTx@SqcDCSvpOCQf+D8MwNGGMA zI?w|;HtOVffY}aS-3^EgrjBTsxU-F&oEF{wrr>C_s!9Qp-WYBK+hh2Btd<3oi;r|% z*uv(}$<_Lhqed0xF;NN-s%sDQBYb!&2oLDJsH;G9oJN{NalWM2C~#R6ZIZuY{-!r> zeO&OvhIv=EETpRA!P*{fx$7u{t*@%b2Ag3{M!Q7TJAn-Y>}kenq>rgBV&cI=xFl|K z50+4I?WWowbk3Bv&Hbeq5(|1Nsl@9d|A-e%`$=Rc zhl*!#`Lso!zI3FJ#-$o~NkF3NK~3U?-bUVHhkTq_B>Aw{pnZ435lvF0w`@C5@ zFS+f*&BkVan)V8&CTvVA&TgAQ%%EV2;Y(XqBuE*4M-DF}yH~I|t8%@*G*8u3{XSoZ zg=TcfN{_N~?R<;DYmt+L@Mm>*L~UUCxIeTIr<8y)22a{P4mZN5;GkP|lYu2!lpBpN zUVl2Yj?M%Gl_+7-&~vGZ`5VYFAk_ zm0#&Hn>%!kLHq^(#^q};lMmL40e6{!9T!lk43_uHS(I;q)atUL{ENN(d&^=NM%4y3cK#Q5Ge7I!v;7W8K>!sn;U;dL~-l zwh--Yz%I5!&#!Ud<}z;hG1T?xh0Q>>6EW6W_Os+#3w|f=pNT8y-4QmTq))$)k~&)` z<)*|Yx;jM|QxfM#hc+d%trni!GJ&ATs&$d93}P3Ox7%z_jye#@JL5PPa<0e&4h<9^ zxWlDm1B4vgQHeW$P_p5G^#^=F&G13)Ai57cb`;(cAkNbcmdl;9IP$bTj%>Oo=OnmU zx;)_{8Vxu;s6{ySl(^-c05bG^YrK>o1?rYyt+AF<9V zR2TlJfIGM5aJ`haz7*L!WA3Ec7n1!BA1j#p7#wnS`EGK8h9z@NB;un83adr@6qCCK zAl0d(2HoU|@Fnu9V3Z{bAFLy7f-Z*YVadw?yp|D0v1$@z7OY3|tsC2Af7=1Mf~biP zt95yD$EYr@bl#cI23kbp%qm4hMp;UToj;*q0i2}ZCql8tc>mHLVl1Y{te8b0Sih(&#mK}sw_R;ymQvh<0`#n#!F&Uo z-hm>^7VP>-0;ALYC{Y?n7^OC$EGAgAUxX6oL7-wvh>)9>`fxI4(4^N}fuTVJ8JcfT zxLt$Y;#6<{Ih{U}v@260_)O3xxvA^kd;lcFVr5%|`wai3Ue{Q5Nj30NaAH9Li0Yq+jRqHiI;?#DD(=fdz8Fsipo;j+MUwlRuAx|0DYHzsFoS z08D=aUH%!=!UACW2M+TuLM_a{!I?jq`?q=bZ}aZ|Uh|ImPxJ1tegRI_zq$Z;Ke@bv zlNRsjsJ@YjnKd5;1;EUZk3yAAno-(T*vQmO%nfLy=q96N;AUaKWk>auGS8EE_BxRBou$|XQuWa-K_2D_1*zoBYFcHD+V()1}1t&28zGkN5sh90BC0W zhl#4EZ{z6jo7q2Z{Lg#a8XCWMXJPpBF7M_4so{GQZb3%}QyU;3#rtCcSm{|)0DfN- zes`ES{Jtvqn>m2ErKRIL-u(L#r2-Xzlb-Q!&6La>ERFamHqyHy_f$v|9@$yXZv6H=jVN|=l+AUzdc7mONYM^mS(?4=C*tX zl=&!J=nRdF^&Bl7DER*q`@9Ul-?60`|KEr|Iy3xb#6PP4GPQqwvbK&u%RknKp#g)D zrID49wS)cpgqi;1g&7+B$9(@cZ4C{$4gP#P|MAY=FFO2p@8S=R-xn?aKi2*`3eQIY zd|%N2RhKdU6%G75w86&C&h;;#cX_H^z+AC+XyZi~KMWzPAk@z<*TmV~z_^iwyt~73 z1XO&X0N3|(meUi^amuj1EggbuEW5IPR z3E=!3o+*IvlVRMYuftK6CBgj8VebW|tyFsPdbS77zKE(Je*qmtT^{z)9D)3_uVKYc zTGDDaEclU2U`9+bs|TJ-(7bG=$ppVpw^-`?7Zu;JY-Z>WM7H4O-+UOT{9cO>`V=*7 zL}nd4tE9Tqrqc8Wg?%)lk2}m$W$N6ksUC^px5Qd_pYjJ(u z*I()8M75J}@!WL7+s9Um)r1kWgwxfZBUs38ZS3OHW@>qd*2hSo<*k2RcFgmJO6TD*eBYg$G(9IM!1lq7A-{E@HYMIxXT=96ANb)@ zgUWx8DUUh2o$W#!^X2PzePy;llgM%FqtFFEs^FU`douEz6g%S8vAI(`?9;^|DQGY} zx_)^j#K;wW8nUR812SQvc@WaX^&h+7)js<&0hyHdMR{xu+J?}N>*qX2`B`?x9?=gMY87Z{6@ z!8P~M**7OgIAXh8%Uab+yIdWW`_kvgqMd!e#ui=O1^)caj*Nkl07|=+KxgmU53EV{ zd>6{OctS}~g$B1t{teiK)lbUl7qLRRnn(@!zN5$#6p(TY(qV{AnQBdsdbmVd7t+eA z!@p`>4kBcr4rn%h+^ded$(pIu&~oR@vQ>r0_ITl9g|&0tVFNoW!W3IHV04c<$omS_@YLCi=VfKkd~p^~a5 z>~<=-QC_viKEZS5qsw(7+(ekDFQP>!8l;%43+pWmUgHIwHE7Lj(L3XB45*Z%ny8GrzEq!rfD{8&Bm@Sp?4|xbq!p>}w(VLd-o0 z_$vVMNoff**|+y72o2S-+3!okj}LH6{14s+_~c z!}F+5ijSuv*e)%I&QwfH?qZrBbHxaN4U_pUPS?AX?<0p-mS0AlqJ<)tyD~SB_=qz% zv@R`f*EjaNrX7;BnSXT2N2vrcrAJRl^XaJG;#Zb-WzApAqsosjTe>|~Rj~Y6urm2U z`PanNGIkx%7OMUDMn-#l7+A$2Yt(+676`a0e681(|EPVa^7NSw$BN>ccAVf_g=p*J zhg0Gz9-H=yOZf^Qg=!2BhjfFiJ zBg2bdwUm&)+@mCh>EVrQ^pHG6$umi+!6j$Gy8IAJ6RFw^W1ZZd(-Ei25)7FCPC#i-Qlh>K;)1lE5yAU|!vE*09u&!_e2$KBvF=)Nwq3WE&VgkMgXjaJzFGqQaW6_G zKDd%o*_BULg$e;-M&7pW(D@EHSa(jJyhVWDo&`qOPmJ{UQeKX zgQbbUjMf=-JigWsx9?*IHrr4F+zFz!1i#{Y$VJZrN)tocw2}@i?*NNFjx$aL^;G;r zCd~}V!o?oClRI2~^`_?<*mcZNv(O(J3~SWKG3#C3<&VK{z?CR^@LJNyufDqIEoT6|JzZWIaj)h%a$E7_2q#5@tyc5K=lD#h&dAxuu8R6hNTU&13T_fY0H zVV9=;ZG6I!WtR@Tpd=e?r3aHRbv@QNQ~FS1I?i0173)`TiJ^OXkB-IB!0w}fBO+7{ z^0+MJZ3*G!$jyzlm%h;3TXP6i&ySC}E7Qp#W}NIZC5ykRG@R)0$m^+l%FV?|`hQ}A zJz6DdX#`M8L;CT@Kh>z$>Rd#p4m>c?He&>+pY=iNppxkq;Dl13whX$wDkQD6Vv&yN zsP;_cDS#=8WboUB-~L$)sWa(h=t1{K`q zX7@1rb0(e-`=HjX;t8J4p1*V~$N8i}+4qnecxV7+ls_10eVf;*e;(8>jLKZ(bva2c$=xw3 z6WnA%K#5~duYtP7f?7@`U1lRq77m^wR4wRPc%=zSCnsky-`P`1>((%Xu)korWu~gx@x{fN^;mj+QvHiHSMBA* zabxZe=;*WYp2<7sToWa}wnu~J^WGla%tkRxY2PI-vw)JEZ*}*aQY|pV1K&tlWz4w= ziL7^6`XLl$ZLuB#{L`hQLKp}pOiYpJOV92D@2`)~oe?31DM`U#gZkUS(Oy!YsMW1W zxN^Swcps2#K>O4?&&rd?!$y@~5OeQsT!31#lZNB^6yScxel6?lW3cEa4*L@14^>rC zTEqNxZ#WPK3>yb51_w+EGF#_Dj$!4w5F!+Rl+A>Gl1ZVcQ1Dzj@026;01rJacYke= z@j3Z3ssM1P%LylA?4-JQh0NVljR+hOPLz%b-G*uWmNvxjz(vTJ4c|=6F@9<3Atd9c zd?s@HXJ``1ClW@`O#n3J(7ZU*|n-{UWn z_#QB64^V2#yaPWxaNQ2I_V-ksZt3oKEA`~i-FGRmSUE52@foA5M-mE78c^cOUk^;- zS{Leac`i)`s$rk-9(&*E1gw~QGS>~1&9^%zsF$h-*9I{cWMh!qYBv&pe|wE0e7(GT z3Yyt8gf_50QtFI^VtrBkCQX|mlU}HApYcm|)Ybm88wk8FQ?=V!qRh-9<#fj3?ym-z zo10Po9cAlT(Pc7?!xFa<;_B}?3WDT)ZHKA(WOht_9-**@)3ArKj87hvTuWT&L9EM1 zMNYjeVYJ1ZK|u)UO%6^OpV$jUgX^H@g9?fwqH*{YtcPONBV&Ud4cXcb?uE64CkRj`U8}V7Wz)vS*!ixt|Mjrg+s*kv zrq#>a@{GS@cNFP-ZR{2Dlz+rD@nfD|Y$gU2CNGhqxK)9i=rU-qI z9TqM!{cwnn(~+X!Qz^Nk6AmabL4J)}<<}MwTs5f)_@wA{zW(cz-S_xVhoa=SY~|CX zS^R4N?179iH@YOE#$)mOtZc z1*z0h0zN`6QG)K!$4%U_DV$S?iGrRVtD9yBDz*Spvv1X}HC^HwEC4XcF7c?3D;CM4 zJpSu~U&V39%+I~&t|UmO__iP9Q3T6z1m@<1#VsJ^alpt_uPN2DUX}vkifX1Z@Fxn& z!PAnJxBcxPD_glkv2;}TXv3NL;XxIkK8|VZ^x+ApvF!Na3BX%rlx|a4?Ob#PDdYsm zCSvtabbR*@-n6QaxL~|~nE6n+p?6_#QMyr#c)v0DLH{Bx*#Uza23m=5sJb=T;hWb7 z<}-LBC>iv$wunv0IQ@FNKmv3Yb$^qIBPN|6Jt@Ya0qBV`4d^bA`e{X7J&~*sJhb=) zzSkK#gE(Ae5f*SjH68;v;2Nj4u*pDbjzBP5P7_z{J~{A5_oGOPT__I(m#}oBJVbMi zT_7G}mHh#wTQlW^9-ZWZ`bF+6IuL`&C#yKRCvvVvz{Ci?=K_#_#BxE~Jd1Xb6|30d zvwvF4=CWYM#;~D|Lt0~>BW@Be(!~Vr^x;E7>V$A2vaP^Uadu2R9%s6B45ZSN z1@$9rUDFtYCMlGL0-R5ZNG^N^Jr6XA$pHGyl=-pqM`>x~VpY5hhA4CRtWZP1n%(d@ zCwQ$${j{I~qE^00J~&@HL`KpqXozd$3Y4XoQIhfMhoYS_@QL!Y1k!}Egfek;nh)`@ zDt@_!u!;amUBRrx$|yLousD^Mg6YULh=3(|DGZMyhk7y})&y=c3y&ha5_lwZ zNu8~J+#lv1l;aA~`^PBP=BbjU<{klg;KMY2FlZ8MOR3KRcmg`a&>F$zLY_SM^+?Pb&hsbEglyP&ACO{F4-&o2noy8+EnL;gtV zWVS%}4Ym(Oq>(a_6g`y89_5`5F@TBguC9sWOaw^a(J+Jc50!=(40iWc2M7?W2Tc%+<^_!pSFa^k*j|$B3^Wc43d0ihNvx%@x$&M=n7Za(_IwD8@U%n#7Oq_e`le~ z(tATUh$5D;D~U^u5P*{SGN)mVcBKGIJ{JMhj(jup zVk2=a?zd%UXjj1>Tuu@rk3yqkqcn@Loqj(QLzRonDfoA@I|Q2b6HhK`NS?~wSxzcw zrWuM3qsgu&5Hv=6cyi0ka{_~v+zLp{TdNWxO>Ip-58;GN*eP>Uk0?vcaGRIxynBkf@bjqYZQ%3htYArD)||52=tL&Mo|vx;UMr z0dKPV>}c)+)^oB?O5eiOiLsh?GiW`=vpD)7<6w`1-JZ5SqSG<6MIKZs)#I04@NDL| zYqU$5dvs#F3x5+dI9!r%rQ^zVZpctbGdZZPe+~3vaeq(h?s`buwqyL<|GlSYWF6+SwaE zKmD}oz3Rd7aCikw#JA>0hqsGP9%)_i2$BdIiD{oW=Xf=2czX#h_+lm53(3fABGHz% z&uaGJ{8dz$x|U?+v?x>D9lp3`U$BZIpe0ZSh_Jq0;o3#uiibH6n~=;r4?+lRD*xL0)_yM2e`CPuqeb3n zhw0GzcF#_l#ZC(Na)|AH9i|YnAjq7U$k^%5vsjR7Ykf3S2T_l`9lbodcbqcpe6Ea! z4bG0(bfE$GMaT&~_I$%JI=?ZwcW>lr$xCT&M1>r43px3DiLn313umt1%Y1J1y3L&z ze!1eIp0My#Zyk^Qb*qOkYpi4OtZ>`qDDv8<^%DW0*@mFe{T;W&u&MByTJILr@Inpt z9&=qNCB%4hyT4qrX00nXrvdG={!p1P+GDeJe{;DI^|Wj4dD3BdmzjF=O63EX zydA&++p7$Jnb%vr`K|WZkF9wuqsBqGH=0KFtTI0+EU(UI+c7#}q|%Dmbiv~lM1)gmfw((+&C9zJvkRiflkWxW!vGSjJ;QbiUUJ|@~ z?ZPH6nq>7fLc}?el%<~C8KAMY;cV#Y((D}z)iA~*yg8!KEF<;ii4dn~=4GZr?*Bxwdj#9~7yfcFeb zJ`(#RRWyoJOu0YoQdLVKPKaNH3g8S13350tNcB(P=HKz>e|jhXPq|JRK63(?{}#^v z&%CIt0Or3(xPMV(12F%?-TL2qR2hWrxd6=n@V&lsYHI{^Ff+3MBM4qvmACJjJUH z$1XRazdOLd5_N}iV0^}hhMZ19(yx?IXc7YX;Mn_AETm$rVro_hQ%-kOfoBi`3YGL< z=u4@tP@2Z=5p^mt7}m|Qdyl+g!l2)P*>H38N96(Xai1XkABl zqP=?(9@?~yI4QKqlIVfdg9g=)!&|i;=p`V|Ibt0)!Jdu$N<9r0{_84)7!aKrx`i$s z(+@4&aP|p5_0By*=lZ!0V^@(CSV(z+G(Yd7-gii-JHHL6s zvfLt|ijK+4kkEzlPSy;lP;ov$_T}u@(13fZau8MSl(3biXpe={;2NlUHLl`$Xu`nT zVuii>O6u-hY8Y=0={6qqhZ_=!hB-z!_?9r{%N?(wf7;(VUve{BK1%ctp@|VkIbN@@ zK*ljjcqA=s^Mq%0oxeFCwG_oZU|$*f4D9KzSvfuO9FL+hx@pHHv-(11my5P6FJT&Q zs$W)FjT;Wm4^^jO)q2vg9ZIx*OLnA5<%JMlpcmkuma0ycE4FN_q=d$v)|$c_@$u)} znCO;*B5Z~VZ}+*+&sI(QT(p^JcX_DfXZbUNRE-NnhIMqrK|Bo6Zjnj6!Ldo)ZGAy3 zZ?+W9J~S+JZJ`wS`CYjw8r6*{k;CyH`9Gse?&lyeZiG?Y(?|nQocd|>c9VEAz~ex- zQ5^WG>OB|1Nnk>~36){vO#pBS6@9_Bb9 zn(VvjN>1qQ9DR&S}sf>=e1r z+x1yR8K*YVhJ%cR!{@}9ef$K|FR9B7!5plQ?m%jPa6pM}v*975{SO5--DG)`WS$^j z???j)`4|(Bhyn|2b|BRwn5&9_f?Db;JJ9rIdcar1=m$u8p=wY$;cX+i^jrK$cYL6F z#=6?t_UFjHoETQLxFB$`HKC98FyTot*aj0Oml5U8yAAE=DGyX);Q4_M5xt{~;6LGN;u<3$jurUa)Mu1tl~a|B=BLGm-UnqC`gwwi3O4 zcvyUSSsuIXQMK5qY>&FQJ{jy&XL5__s$u^H6wscWeK=8Qcqi_lQR+!$%mf@JZb#`} z9j@{O`TMief<|_;@$<0wto}WhaNth#A%W6}LG3Bw^O5kP_h~!3Fw>MtZ*FA$ahDUf zpBAO4!msLQ*=Q`0N!ezOm|>3-=Jm({%dUFlx83kOA6s_TwJH-yNE7pMf6-g>0}8{2 zh>P?D^dbxC4Ru0@3D*PJyyR4$s|w+4GjMAKpH(Bw-sC6>QQlXF{CwO969?xEX{)Qp zkWJqjQ)2)->dQ}~dB{xLi{jzfUqe2X!I;)KgAW`tU_XJ{CrIDRv1UEDW;}%uJm&>% zg?6V+4b@^zKSH|C{ZLj+dQISK$=w}ea(Qb_B}+p*WtSN~mdigB?-Y5>GD6ARg$#6| z1WN!qqJ58BLV@y2{;~f;l~Qm_FgTgAcm{=2-%T00`iX#+OAy<+)?lWa*<2<(^rwI> zgtQ;}tvT=9;{*N;1X>2_K`y^-osOnZkdMnaFvk(N)ln97`0&&t%!9|LFr(Q~ERZC>N9dX`ZE; z!Njafjc|BvBDf*HHSRoH?lbHUV6lf2&R*6-hhtXqq5TA&p2JUVNo(rD9Ck;|Cv&zA zv?Qpx{-9+pJ#S%yxI zEt$FA{e365|m5`r0Uuz}cPd zkx!l3q2!uu1xKOY`$U<$HgnRo2rv5@t7AePMZqmKkvBVr>!woIgRi%zrJfg3>zPQ? zE0!H=N&&<4O;f7-QMs;sIvrpdCg<)pa?t?m|Ar*dZ&vB*9x*=rx8uCT$ks>owWbBaL&kSh`TX>&WZ^|FzmPbo2) zQL3r1`kdi%c;8CZJv7>Mh?JA1(Tn0xg}k@1c&XrHss^D&zIGhi%imO;l+Fpd?TKK2 zWy*7R^i^Eo_c1{a+e8zJ@93O112sMWxO}Oo$AJzLDWA2Y-*FtiOAg{aTT{eP8~}a2 zObl6xO}T@|Km}nvo@E6jxxLw1&&kK?=gV@FDyw}Ui0*gF_8y_r{tzu^GBgbjshX7u7T6I;UU`oU4TYL`G4M4yL6a;3VV*kIMgjxO? z)b)SP%H{&F{4IU_pIO=L0G5B4;Qzg4{h#gSzXnqOCnMr7Y2p7)Mg4aw>i_psQCa>p zPX7|C%*@R8uVhL8kwQ9v{6`AuJ*XJ+gcf5H?@(xab*)S@F?j;D`@7GBSkK?58#LeX zm1X=PAuR*jXG64Rt|C@UZ^C}hA#<9~2D7&GE*7StDHA<>+q)}%j#l!r@HD*k=Hw`8 zIlLT!pCR#j+YF=1_R{L-DX^kC!+&}j*t;4ia@+K&po zLgpAS1aRpTXj_uDFBfw4rH{@|_*!;o87=$M07~2Hi>EgG@nH@|77Pr0NCYcLK>ztaSF0|^S#@u>lD`a$a#2zLQQIZ#qpV$kP~e4)*(-nz^Y;ek6X#$?W^yFykzv9;HhpA(}SEy?DC3% zy&?p>DhL)sPVEfy34DXIPdj)4DSqGc_V7ZaeyQ2IVn@h+riIhp67dB0!5gO924{1Y z>x4A!grDX_U@v1m33BAQk7neaAF{^GidWYV>O2gs{_C_ zvj`yd6DZij;x?GjaIR5CtKkvxYL^)C0O72O90@d(vK~${&w_yJcuLA-llx*|m(wvz zcA5!^_yONHA#!2%3TvscL`cnKBlqsksqXXzhbL{Zezl-)N)t>UDLKpI;dWEfm4;+N z%%AuA(AM)b_O8eB-9~iCU?buOwwgDDsf@Ln72p9jkD7VlKyM}Ze%eLZUX*-9aPb*I z%-D(sBsSXZ&TN%?eYM7O!dpJ0wlf6xL>8F~k=<+B0#_aiaS(}_-#1aw}8RQUKql^2!O4{VmD5WHU5~L(> zJjOSXtgI@!RpG##rbND&H5BNKfT;EGHvgI+K4pO@(NH9wV+?V*J3Yj^qPD0!|0uD2 z5)^)Y{e3**u^OpQnzViv=N(}PKGM2p2qA=w%urxQEv03+Wi3{#iMG`hj_h$ijD?7p zgVnnFRg9p2xL%M*L2Qh+V_UVzMStN}cPF9XzK`zx+$wiGc-3mI{sHp%3^^gLMV^dj z!C-Z%hwgPJbRhMrVabVSTv!`>8S%Vi&Az^s6oTdMzA@ePXF}I52AnJqfW#&6I5erh zOGA6>qYb}~M6|5{VoI;ShR z2-ZeMP8hQI6xSTDi+N<<89cRT$;HdYenUCd85j$6qe_h#7zjui@-g)`SM}1jy&fq& zDD#bxk^0JkP}+!;9wn;$g)O-?1O{}E&6-JEi^iSI>B9V9k=>%(nFKn3FdYxJ?%Q33h;2qFPP~y> zYZ;Q;L2Nuhuc#?|x_3)+OP!FnNn{a8>%xML3hCq|__3Qu&lEeYwRx|!z$#|S5z92) z>Q966F;8oHQ)-Sy>lw(F$d+KZ8-*V z=N(7E6OU-g{)T}gxqlG9G0JI)nXQ&92#LxL*@!0^CF*>NWw11;gB_N;;N4% zzaUeYId8Ljav9^at^k-|VqxTL;=i*Dc1}rt?eT5cCL6?q+E3%oi>07pI=wsn}^NCe+hZuWoXP?kLGB8JF?XZZ5dh znBIV~f=c;g1qG%~(A_#GwV!=(@Vlr%W3sjFHZ9^>o-Q9upL$S>i-}JJuk-y^>OZCo zkwpM72naVt```{J&%#11Zf}SfZ)II#bYy<^iO~-<)?oW*9sJT7P&M?I;Sq-%-+`OG z3Wv`?O^gj@TX&jfj9YPtnk5Ab=Iz*A`;b=)GR5;#kcdq(mJ`{`{9M7L#aS{3d`NZ` z=U6T9ZvBqX>!E*rz4{od2R*_j4Qj?yy19G-abBfP@V2h>sl)vA+0%Uf(l%8(QWtba zuO}=r{wJ>}4<`h9Xqpu5z2yELX)@Yi9!x=lETn9L`%sv8FxnEIN14al%)<_U@yqn; z3g4{4{SN}{l-M+DQHZTmzF)U8r>1SoBCHDKj0#h>OGL0}OrH{>aJTjU*4 z%d+gWF>OZ^`9&riyV|piJXs6sp9H^ZBF)PSYxBb#qy$*K@JT5gKM6)4NVgp(=C|6{ zsmV7E8+Tq6DY{=yfL5qmomZBhV+;&_G296m713c-&XUhcw=&TPxzuE7O>fr*3?~mW z)AO^(T;s;2ikRi97l-3a&PEI_PU&W=H^e1^BOOe@GGd&bQpivM`vOcosx~Kg#@7*1DXg^-bpGDV zI6os|-d@3EpVRF*yX=Zj`||bOQaNIB9Q&`93hQ4zX8$i)DjWdT-_DCae0L20qNT$6 z*T10qx25v$tjhm;vnpBt3LgCF5MyCx|CbzM(s9d8$S)9&NJVsouq!xSAkeY8)=qu3 z>NdcT`h=bl0?L?->?A_!m@Ahn8v8-EPNT12c_I>Nb_x|ZiiWj|l~0a$Jx`-Yr{%_> zR{WK;arY+b->DOOo0Ka_-PPJ(4&#iF@GCfY9)Hzs(JpwXiP9ilS84#|nwg zRgHdCaehvh13eQP^tOH!P9=2qTx9RENsTI8mz5H~b#}T-HGGhO9hGRP3GE9pzM&2+Yb{a9R5|CM$!~{? z5ZIdkpnj}oy20|fh%-_f@a92_GuL=BU!i;6Qc=`6%krc-$BS1R?5E@HZsDPka21Kh zqM+jqDIR9HBmGRaHA{`AfS6dwNP0Fnksvt07+Hkj?D0#j>IJk}g?Ps(eN%y=$-_7p zsDMRJOc!!T6bqR5f^o-r6zjC8p_Pap@V2f{Y>M?ce!Zp{Ar zy;7UE8$o;5#pzgkRsV&f_Y)dj zeE06yTo412#KfuDA&)CrdRILE#Q~mb1M_?xXN-6+#z1X%?ogMTFAG&cjBd$q!zkn% z1Yu~l?sBwn8#t-gWDe54y4P9w(StPzBZiI$oDowmpTlVXLSXBS0prTtz>cio1g7Mf zOY(-urPE5icCXi7l<2Y*UEc2#`X_DN%!DsHHa%9%ssnZrAC~aLnW?ff5t?QeQh9?x zkR#KP5WXCO*G>j+r?oe?)z^fXJ2zP3@P~f}TRSc&vY_GU5Dx7bzQBgYwgqMa|4?@P zMBEYk-bPcR>+DXEILfC_pLtj@+@*cvgA;473)RmLOBB+?1@a~IBB@KZ<FHtiT3UxjujK>a zv7}mYY#Ftyb#*u^oYh6q7CaLR?W?y)k;507PG2zInK}rUh+;Bh-H||IVTY|U95$MYLz}MkHWu_;C@gV3J4U86!#^BlyCkj zA#?iWP7eT5R_}Z^%>BXW*5mCw(y{*pu~C<2?X_@ellqP%)4jwEYGLr>GLJRn0_>ub zY~o#4KR!pALA*vMRo6d%#Ivd7OSfXG=rSJTjJOP5YQ5|gajV?wnRc&=RQvtqs6Pu> z5id@);D_CgbPhg|VJNRjLK<3!?{2h-8;`hUPCU4zPyFFz{Lu5}C;{f9KT=z0XyE_` zf@LnT4f>%O5Jg5x?K#|pD`OM-NyT`xv_b8R&fv|d5<$98ww1v??;x`{NLT(s>ew%1&QXFEO{Fg^c0q}|d2fC2R$>KWO65VLRbSow%3Ti zaevOg^Ub1U*np@=Q7NU$)b-TEH_Bo1k%_a_1gHt*$rD-5sUVu?zV48tvi%Zvpyv|` z1J6(Vv1}>gPD>KY6Vdo^a=`Er5~RZdR|#ask>erU79uvx0O-X*{ik#le10++FN@sP zM1fXrp{Ntxzqk0dD;~9$O_`DD7&iMD6eCb115=wLKA_-Brrk_3jgLzQi!tC9x!$HrYQEsR$LhN z>6WikpgaKrMT6DCYT6b=uzZ<4HK5=u@DAqWY=*>~vEqf_3taXcWQ2r0joFc6h=PWk zSW{rJ*sLfO5tXOdb?Jm+FD+Y&u=}OibmMU+V>3kQ+}2WpIq$%uOgYJSWj9|`4dB$X z#=$#Hr@&P?g|{flvr!@ZUW_H}HN$ZTBIz%Cg3#M?VZCHWuj(_cL`%7;YT6g&mR!U? zvf6v0pha)L!x6?JFNC{Z2#MD^8N9mQ8cmJ#YZ!`y{Ur9t444S;b6ioxwyYb%on{8I z_;qJr$qR>g^Y-0`3Au2v$}ydPhtcbpecsno)vatIFx-lYF|%(~3r64TvvN7HgI?Rm z3(=sv>3&y1^$Z|RTThTyP>NOuZo{ymjV85Th0=pQxIA|S(-eJLdMU&}S4_oU4n9y` zqf!Z`rFAR_DJ0xF&nu7S;>f5b2D*y*YXD*_!%&nF8A;!lt1IdZXBH|6^h3X*UmYY4 zFhi2Ws}XmYQALi(8A3@dsu&ULUkoE@Yc0|+*9Mh}M$_NT^*+3X{E*@S+CkD#8xn{m z1OhZC550M)Q1?>*BHTM3ecQb7GOn<$b`5Uds^v~Ouf6|Ko zf6$6de}R7g6+8Z)XByUjHpTquvH3TJG=Hm<`9Itg!}9-jQ_R0S{(qOIn7{oN|FxzV z=D#O?|K~Tv$jJ1MfwHUC8>4?f*)Ksoe}KXf={i*FQ8wSs{%myHeAqkPS3iA4^EFNP zbW4jwe7v-f&NB`Bt17}(nh7wV0rPrQrxb@7t+UrPPLHZU&6Gf4$D+~9zO1sMLHO^lK4%% zsUNTqI8doDf*7V@aK2A+uAP-z%6!m{0eOVte0X4#J(iT-cgtQRH@$X4^4CM{G{Pd_ zY_=mJ+PRsAR;~kN&t0}E9;v@oWW!us->CEHP+J5<_PSnPC=jt|p^{32(6HhPB^tFW zNqCvJf}S&b=~1yMs;DWXD0?13ibv!vTUJEV4h7E1Cle;Ev$UcFS_{ynUn~&)9}0L; zoml&oQI5W{$gAH5Mzf=wG{P8q-7lU8$luO&i->d{I?VAZ>*d~tRG&9*nB?3{J?qxN z6++6kxA{^BP1X+4te`uEG(Z^qayjkbcFyE2&(7cPX8Dw3L&CNh?GXeJBnp^>`_n6` z+7LoQCac9BjkS zf-ak`g4T&R;vE1HiyfuA#~2(G&0K4T{6&wU0f+KuZ2=ex)|aYUToFu~&JY0k6Zff= z`A+`rkWI=rlDQ*ZBe#(Dj2}klY^wN*T45e8Ym4t_)&Z9oez9#c=_n&B>ilfa*TJfa*6AnE#@z zY*(5>P|j#ZUW*i8`(^-2?L~Y0kUSkTzV35=l{#`&k_6y<)&wcIP8U{jtrVnQ0tBhX zNrm6QsQkPriN9PP93zY(0%YjKW%RAoO7NnI`QQ#g+g|*4DMT+$K>z4fW`tGl=oKe} z(5s5aQQDJ*he0_w*`SbyBrinkgC_KDyV+jiyFD2BY0)%lB5jzkzM_-U$Iq%!Z zt!SWbgc=ZBi4S%U2lb2Okd z1Pn#h()Jdf@9KG5;iVw=BtY)*1o)VI3??9;`rM&q9#w#y6ovKPpm3T?5Z8I|f^XOP zRL@8G82@)Lb&0S^^!+02ZkpP%T#VmMS^o0!P4>7>5nhH1o_P>^iQt` zG#4Sog?}u2r#djZNf9@IK1Op8)CJg=P;=mNlM2Pf#K|OpH<8M(Et!a+aR;pAaOmg)>P>yYCm$cZXPisaR!m%DjlhQW4hnfW?OXo`x>H_qP5=j?7n zDzb6KRb;B5ELv0AX~9$*UTVe3F)fEyK%o$pEJ@Q7(y$FN#%KFNh2Zxq@$<_gBSvBi zJ1lTQMXx)jqI=D?pa8Nyx6`CI`n7AU*Hp444i3&oNc3QNDd1UM8b68&8i*F})>K^Y zo{-b|Yd=?40Lx9YIx@?*I6#&ZS(f!IvaXdE%sP>iixz;YD+n|DLd#wc^D-t~w7FEB z+z&7R5QSkx8VLR|oC#(P1;M`0l?q`{jBk!5G$nl$cV>Biec@zX1AN~^$~=e z2w9Xb30vMg_#@&<%!lvP6jpbTcA&NF-S*vtBT%!K$2DuXGvY`+Sy(*2Z3y)@C^DR< z;7A)qPPo0s#Sjvg&*#f2LoTrG>i6%5-Xnm1rU)yuor1?4)jSQ}idP~eqAB`f~@sa1;tw>>X z#KKCw->q$(7vAm?c(ei6;a{v?Y#vpXjueR;yRLeql5Rh}Ud6;NQPVZ_4W2z8bb7q* zpL@Cxj|uWmtg8*zai81T2jpr;&~?cGC`o902fmDBPBY29Bv_zaG0oEkCG%ovykZiG zWyW3whr`Q{#_2 z=2g|zEWfPJRBwe31(d@%Mpy^ zDd`z*&dr22SThkg7EhwHt1UKkZf6XeyacL5w~#@=0@;o!MmgDFTnKWx|jC- zj&Ddbv&$!M@IHmMv&UTl-!*e8FMdx2IShHtCJ5m=s6;^tOUXtMIG(uR7$x1eNPj?9 z*s~881v7w#bW!Xf87&{Adsm&(2}~x>qdYOll;~A!KqcT+kZ6!ZX0Wx?_+BCa1sKVd zAWAH7w;)1n(*Crv!BB8t$$$hF>0PT~vsJxVL6uj()4-Ww4JTIKxe<6EUIrDAOeU#U z8AFO3j59vc$~+|rosN{gpa5n~0%YL^OI*C;CMj#6rr%ZiS_CLtb)K&GIxWzOUU#4n zVx4Z6-q*Tl7bU36k+cuZeJ0;94pNf%C|ulPta+$(Ik;GuPxv~`4;9#cudoS+pYB9y z?FKS4sL}|$nl83UjO{U!E^H7BZV|-AI2zM1EV?pZOi>0M_^#Abn;^CHU`K443=sfO zWbT=X3@k2EN@IzE;AE6(>e^1I*RU1K@FQE)@T10;oFndYe)oct?ge1S_5_))dX?iCxfw=@ti6UL!3MZq& z+$uR(b&%biu`;2h8)_#38f$x4%GcJtcG=25&im#d3xGS4Dv!l^=kXNtG85}>zZJ|d zAa}&6IQLxH3Kdp5lcF?6%VP@^v|`=@;IVL1PIuLy2suvg$FJQ}1Rl_4>5nlDi)-lu zU{`etSW|Gy_1JO3EdqiWhH?AeiLmvo{;6FdGL);{-^9m&*F22C)7!1lEy9+z&om~j zz~}Af>Dak@-OkcSc3C3QS5%lA+&}|f?xm8pA!Aly1v}>wKEN%)gywEE{a(@bzEi0Z zmOmy^01wYsV<@MgPqBjIoI)cldS@NxcL3ZBqx}7)qQyafvR6LDM)Yn8E^Jm=ibw*& zAKS$0_eBl~*;(|vZYf`nUs1;lkPCcU$LrAY?X%GwJ}Q+8-q&@}Yx}~SE8V@O>N-l* z@)tYZjuN~vhJ+T%FFC-T-k%B+OTf=6D6@dzW%OAcNsu_MPV)TFq%E}y97K4e&r}$u zUzM7sn$2^7MC}`H2lt@LBDiR3zV3s_DZS3!-yFA}#h8%q=H&+7_K46seyhw6oBu?o zxm@jEP?78T_%>_0LW`&s<5=ao+5gePyqFmsc>cO>gNfYoJt|AmX;CsNOMRD6Zj!Bin#mKb@FdCjq};J?mdeh;!cPsrCxmBU5b*ObfAZkS!k^6n8QQeL0#SZGALy3$H968gz>nsg{xe>8zDW3n4`AEbtou=h$a8h&YY zlFI(UBEq*3himV&FZCfJwok~i%fN1O(1uTcH1bR38u#jt!u|RDspr+|)$Y;VwO-TX zSQJ3|TEA5rz1z!LBdz8A^C$S74UcAxHzXavkAc#mf1e66|2<&vUjQNgw%+wu2bxyo zKMe!f@tOakJpP#j6IJ}P)!tb3-O;j&J54mMSv;eZ2WkQsSSa#D8B> zg8A=ff&R^_{(sGZX8sR?PR4%>-U$4Q&CG)OSDP8plg5fHTijS7sr+Gj42Xsw(UQk7 z&c5TA*W}zL?HvGL!rWtA*}4gn_-a4XVaDsd*8P(QO@iylT9&BOrMw}-lT9G9o2k)w8)Y=u)=k+4>H)3}0i|2`aV4bLcRnZ!;8bwUs9 zz1c=KYXeru!F9;?FBe2c46O+HCcg$mN&XPE?FmXG^RfkI!g~tJxh!W44O$bDwzdN6RNA zc>3|y1(bxROY{-yk?ob03YE_Dha|jW;lNoTf8)u9QO>JJhbi1i=8rcfv5YNd1_?nGq9GFfa>C(( z2+kOmZtxu zu5#e*e$~;sSV!ZP+Py&>!1-S)IS zmM3JVOu}{#&N4QcV9ZGjB4Kn5dhCfzUvSMdXfcwT%4_DX{RTr(OMCY`2^risHP|B? zKSmRg912WWJaiyq0qq+a(#tA~l;U$PERh!~nh-erB4bxVy{d1I! zrYHlB`*0XIF9mp|*QQqi4nAiO81-T?RsGQbVFx_87F_FLWAW57`WyV_G`_K^IFEbLz#v34Lp6{L zj=gMoVWRO7>eJQ^S1?YkN3bb(hbe9=y9z6`eiq28lg$43XE{@%i6?1qw*aub5_L1)aYw++thvxjCEs>ujc zJUM2l9d+lS;WTmx+Kl{c5s^C;Q-m z!3Y7yr4laj@)G)(a-;aA(nVV`%N*w8U37hODOK*y>##Pdiwic{7ODay%QB?4JCJS4 z@6=y|+rN7yb7@PbMl0gO)}=kl*=ou!F%gq3;N zLAL?gy&)_b8<4_DkkjYFZXPVV>!2L8Cv&f1*2f%ywd;|FT4Toqu8UFueIX&vPQx>% z@6fc&Y3R?k0Dk}}yuM79T1djRTjY&vqLdPN0_K@1&-}4UK@T*o8~vxywRVrFXFV!Uuxg*GIgyvt+Z!*ha8G z0Tb|#j)4vet@j&FeT|Q(YpR<7IagC<%-i-Mq@BwzQU6t>_G@UyKfOF(Kv|oVS33c1 z3dqJJrloz-K(^K7?jXuU3z?R`Zcdv>SHfvVJP5+=Fr>CkYJy6MUwn+Q`2@peF|fp3 zRYRt4afyj$?XdaQwB|SzMWf{%EZBrJs*kL63$!(+vJ;7yiNsHsF2$C`FL)CZs7K%J zsPew|vd^nnd}#!x#@Jz4yN*>J>LRc{Mlx}je>b{$fHu!3gYMk7@#b6sS*hD}-uR(Y zUivFueSr)$XgZ$%^K7r10gH z!ib)yj}4G-Cyarn%zA6)8}}eIgzNC31FyQ$k^sdNS`X@yatC!d?2Qs`c5Qlmm8c2o z2faF?^XSA>o3c8fNg5@sDvx13{$!s ziA-t64hgst`0w}bZ>fN2db{}@LQO_A#2&^4q(@>-0 z)02+qhQbc8k}LpZrjtPxbyF@~Cc0hTInZ+9n-Th=-gXR1^_LimjZxJsl4L9$(cB}AH`cUtd zgJ}Bo0=n2PXZRYs_*c=avp@L8^@8vTtuHxpL-e~GWQ9XppP*MAJ6$hf5Nd@Pz-zzb zkT3lqka12%gK%-f?cyku-Fe+iA}`LBs(;Y_JAb9r`9iBQ!+Ch zowEX6#or>QAHI@GplN*`inXe~wiZj-Xk?c~QoBg$kTa# zr$>9+t$`lnqu=+8Nx*A-x5Ml(H7FY`Yr#BuH`k>oW_x+to+&W3-^UEwC)Tix^SE}# ztV-wX7{HUuHYFeS^Xhb*-D_sV+s5Yyrpofv(%0K};+cmpg-s(B z+2x+GAB+Dj-jkBm&6n+5%FvG7B4C8GPfs?Er3dzq8RPwyO<%iFdBu!W^Kv`ThqT=v#Bc0CZb!(=g6Nuz$)4A! zx2BE(C(|Fy@PTqL(ZfSh}#~@hI>? zhAxvfoU`DRFHV>fAu4LFRI&1?;YT|<03XwAx}FSSELz{(D~1|(;pQ};VEVLgkQmEt z=fV>ov!1jplmGA51!OpB#oulfLCzPZNlr$?bCqy*5*|FJKe`}_%-p&!_niYmA^Dd% zbo>;UlP(1++DE+cW%j150{|Vle$;R}`dXs#l#%~z-$%8u4*EvMvacgRoSjG`aSqqj zN>W!b>Ys%J4!zEt35PX0W>nLoYJ$Rh=Wp*%r*VQ=WUmH<#dFwO-u<-k5#x|d|9t1Z z`#n!DKEq>XY)aa#fIkG>C6jJd4W5GOr6y34+AAC0!4O zdIRvTd*GL^j>z3fZa&WVrsgw|U2d%{l1`tA9%@#%>cs9Oqx|XKc0X5|P_@t9li0BdEv!U|PGm=F1@lIP2J0p2pt4^j+8G)}POnS9l)7jAk zb1F1VX1|g8)28#43pRjD5~Lf-Fn+{w#N_(Qb#b%V8_|VFJ2211B+{BSiYJYAkJstB z7tW{!Wq?0I_WSd*;6ju1NWp8TksCvwg=)Q~d@ zn8c!f(jehfqN$2F@oSmdAF5PhHO$Jnu+c?aC}CR!_;&(bo#;gYl%0IxMID8bP-%T8 z!|CR8W^nE(Qqb>2wv1H#=={kq|NA_JC(py_W8vzf7KTXl6uz<4+SiMwk*|w-d#+ao zD1{o)wKdjmN}$uQ;_Ih3rk-`89tOFsF`eU=3d<<+TN$vh65;iGgEKR{WkOlY^UapC z4H*5K2>d7a=lgrb!(?AQfHQC$y1a6&v zh_>oDFjdJeY4#WPPhHfqK%@-j5vT8j2*EZsFBK*4neIe8u2#=4p>IggE4{3&Tl z5p$cJTF@SwuQUdN03wbw34qI7Tv2By@8)f}yFcMK<@m-(Kvglc_x-4M%&{X1#cW!2 ztGu4hHq&>fcce$QItMvXK5ONR_{G!9^=LeT7k09zN$tp&yst zATv2L09W!?%;|JlNwHiNv%BgYAeWx}X^)>w(W&STaD^KU!yaHv8*#7BpCCdX6|y0h6p;Pdqfr|&c@8tNLwSIz5c z(`hW#@$G^9L!B#`6WE`zVcW5xH%SYx#Ef5H%&_BN(fNOl*TLFrfalYArR~iI$+1TL z0N!ASfkzbErBa8FYnK<}oT3m?a}wO4JPn{_ECFtF(MJjIDv3wdOFsGHPYigGyPiSn z_7*D+*M&b+$b4cg7+H5AMN8_VDL(7Pg%_+usdPa5tfFB3 zEGv}yumqI~Rw0U}?BONmL*tD$(m1muOif?S$&ZcUd ztmjzF%6^}0<~a?A3O*6|pc(C?%u-vNR4kQ*G&;tG zjUc)c4K#4;r(efo+YNks{WZ6Fa6eQqVB`4(fQ+TpjC zQxb!e!{;^ZbAC?wir6XlimE=0n(iThkVxy6#Bd@|o%YF`Mpv#S0}HP(HHK-N2CzcR zeM51Yvs&xnd@Ir?u)TdvO>*b+#i+hwuFFRd@q!#NSX3<;5emuj7GC+^M{ky!OnEuM zNNYdB5zFOL$ba)~Y)VzM&UjB8UBJi+vM5ZT#?DUC0DOwm9zA3?=w)%nebhp9qFx(@ zP$Db0jgZY&li(DKw_H(nGFuB&yARm&Er+5oep(mknylF);{?Fgiw)G*#RD8z!=?lI zmoIiiG;r953pE3C(nv5%5#JKR_nnR4$IieVV7@AYa8aPQ6S^R`QaxOp5>mmGf_J_!NvDTR8SX*U{sSy-! z7G4P9$j5_DKg%bRD0PR6@$ReCttnYI^M1JS`=nJ zYLB@4ro&x^`&O4FXTBgv+{iiDk6A2EAPH}#1bfMqWI>FV#%nvqo8L??^Og}kmZgu4 z3wrH`ekcj_5+A-#0-OF|E4Yu3pkfYo66wR>)HsY@;ggTH40o3x@t6`&KlkRM85DFe z5651x<`h~!4+=ipPDQIc43Xw5LV)Kx=c4?OXCgpq8W5k=wx{xV*1D6|nx8zkCbfPV z9CCEF-NdH5T^5IQhgVx_)f7!jM)*Eheh2Nt;mBsziSm#%#=mHSy^xV=dmG!aX0B`y z#v>BCGV1Svsq*MQL#gJB!?3SS17K)rO})>l!jvU!;a1x_?+ZI4b%f=Ox3XN^f#H!d zHU_TXkTi2jG?E*u43w>lv4FTsD01OxSc)b#wG&k%VQ0y9vbS*A=We@;m3+Nx4&*Gp zt80VCxAP$;#dM(G8XbxH7)pi<^wmSD`5RJ<$Aa<@?igrJom0Rr4&Nd-jK$SQ%$J_o zya{d3l?O@H!GUB=)~mtw>n{cfwKuj)5WPuIitX7HJR33gVQIJ;1hdxNAlfUzFB&pj zNApB+4O|DYKQx+1sBlrB$qH2D5%t`krGMUsr?iu@U7E6AnyV6SU!v8$g}@s261fcpK*V!81OI;7_MO+H@Kc(NyipG?SbPoNI!79U zW27ORp+T}hw!k$WW6obF=S(am5t*QL|B{+RbC1q1+n_EFm7?CaQ6*8`d;bD-_;DJ# zEZTv4Q!OB!-=r~*4*P0%8FQJ<;-?5bWutD2$~hiMuSycNV6h_R7#rzNEEoi#w*gnz z;M|47=XHiD`}Hkelbki|hyMcl5fC#5IB{RkJyN;y>EG2y!Uq#qUx$o(`>y2VG3jar zJfDq7k#L%wepZed=gEWFg3R-ASL-7zAi$!Swy`Gdg5C|ZG8YrLqzwc0_VL0&>E!1? z^-vVV-3c&b0_KIYSDM z|6&<}Q91Hqw}B3N$`bY0`B3qLQ^uKBWS{Fu9;QCxq7t65;jHT*T)6eWRY$YaEwso<2GA&qk(8S%z}5zYECS-5E({wSwh7D z#Mk%euB+N`b^JhTsV#Tb2`G#b$3BaI;v=&E@TYeYC&bY9=q4^Lqz$Sm5jhDFUg5p9 z2KMf5Dt>_s@d2n@01qE<;Y?1?H#_1&S3@4e1_~hxWhYKedj+2A%LHsyi+YFfIT7TP zKd5O83JR_uwuQB6oKx3x|CN?m8;rCnS`n_~ev+IB*iB{gt@=D#-jhQk165tKBcQtb zCAM{1_prcNhz_YsZif8~3-55JTPfxOBqD6$JUi>swqtah&n(R=6|W$h34pZtWcaPxs$0|y2#gAN8*h?FbGHH?EpED5(0vn)Y1t_1I{U(;a`xsiTdl=l*@5!1DK2{r^^= zKr8as&2UfX+W0t_(kj^1`h{HNDMvQw-(+AK$z2DEv55Oh$ zEbBezmdeyD?}WmfFv!}ePvqPheuZDX9bbCx_o%3Ugv;UyBVyf>D-nJX@qA>5x+e{) zH|iTDjY88rQ5jJCoc+31;gvs1o50q~7;L@Y5OpVBLSE$vi}T;x*cYN0{|?w-+JmP+ zL8}i_vOLrp(4pxz|F~>HfbAbr-`Euhj~USRyiAveS*T_YHB)(fSqROu5n7KJF}2#0 zx>~bJ+&{`PC7X-Rx9)zD#u06gbVw9UYIP=RH(zjcOsjZ(vpTEql{SjAAoi1>NniT0 zUS5!&br%(pUwb8@^QdYfe(Ga(eNy67zE?jf;mG_eP3Coxjec0!H(=Y-vN>Ue5Doc& zjc_yXI-4BJXiuSeq1wre@R42mQ6c?TxDKI2LkuFt(*Rpo_-w z7pIyl1bi&)VlEgA=h_^CrI+kZM8cmRz^G!b#z`B$ToJlN6BLAxB37S#!9WE*16xwH@Ust)ggi*!Wh4uomT^`t`RZJ{#B<#SO z$kjDo2T2y{*}HZ{d$oWz2>3fyfWfQ`z@tAW6k-dCQd z4ccwRygrQ^^*Q$@S})T|#t(3JZ_8rEhdUFmTW5auF%IS^kwi#lnWzxoQj1CJ58R3k zwhK91ZH9KQ5rME=ymlYURuaw*X#&;ZAv+qJrxc6{UeTN1#fJfV2lzEZFHYrw3fZO4la0g%@E{T&;-fn&R1P_j%5BUm{`Y8zQERx<@ z>kPNS%I&SDk=tnB1Fy|JGskdUBjn1oelc!X;rED}@ zAG*&59L=k&GG^Bm}cJh_=y5I5VUaA!P!Bj-% zlt9KcuQGoInb{J6DLM9o3<9W}v*g2a*ymwg&AmYo^VTWs`8s2_n_s4(9!r>{6!GqI zQZ3{*k)`T?&scvH`;RE4*cM20<#da#Qhdaxr;DnY=NcFu;4h zmTz?cWIF=u;bN}YDFI*#&o+JH#ZlUFwVT42GwD3O#k(fY9V=b2q7#&oe<$7>$!+nk zi^j~IfwNT5FV$MG^84QQ{t@^4nCSb!H(W^3Ux6m3OhV8sBGvXtpdrDjS=aZ43L-dX z3|3m{BhT#e0F56IZKT@v!E#CN;=qipGmR?YDQ58Zheg`aO*WvtR-rx3N6a*p62)Sm z(dgN*jqO#zaUCQimw1dmDPo0I(I7XL69q;9<)G&e4y5GX4QA3ZjEu;MH+~j{+pj~KM1L?jo7TX12<78xGW9=_+MBSs2mN!2q zFmq&ATt$eV(eAXmj=4vOt9$t-{blzwo-;7H?=^(gF^|E(b=}PO zkyC6cn+~02)&f2KXH#q7b-aXsZdYV;p+U(gdn!oh@ao<#JV+mtzxGcYo9PiS7%Bg(olDo12fkTc4V* zy&uRyy)3>qY<34g!sEN#(>dTkbY{cK@B0JyEb?Q%HDk3E+&qJ%Ns$^60_OXA!%Es` z_kOq-!zb~l_?OSDu%6tU;>4+3@lgCvCaN?#_SKhIGBP;^(X&tmU5_DY60|9qnNd+0 z_)|M)YTfaSRZ;bL-7?$0Z*5MeooYTtZFq**f#i~%Z!!W&1n0bg2L4fiy$12LV0Aygujex?g6%|Y5T6|x0uA^vU4qw_ujZ+E-(QhHOwKY{)e zxNjf7BJRvr#qlBhb?ClpM;-z6j_ZKQ0t{(IZtI9$nd>z*iNjB}-)Mfh%v=PB=I{0f zXX&}Oca&GOYV~I9NJf6nXx%+(URP)-bq$8{Xla}BO_D;tWes@nFxMd3BBSQzTzU~v4)z(D700gst$3gJ5`=&ht7zFOQW|4BY( z65^hl7x^-yJLjFQTIbYb-19kZ^pU|Lusb6FIlTdO?$Qcj(KFSy=pZ_NT)Npx#ua!z znjDoRRM~~~_Y6W!Spf!I${Rca44XX6>7d0hkUUNy|3U#bNKUEa!+O_5^B1JA-ZO#? zz`BrKi3cKhxV4kP$@6N+qG~dvv$=Jl3O8NlsVY)mCbNkOZa9uObU9khaTh_;%~NvR zO2+Jq)5ZwoBW`k5S8OndA_*?aU-?eY9pU(as#FYwFGk8${3aDEmOVf)05+FhR{uUf zVEw;Plu6Hs&-!0(%4Gd}k>#Hd!$19x|GxeQ>)&U3{~8}KF#RK){*fx{e;P3mKK)-q zyhjBYZ)Pu!xNYhiU>ntdp-p2!Zmt9^#LQZcX!at1zRLD+^u#MJZDK3LU+MzV4iRKH zmCIytJX*K7z4JqpIJ0Ib2))!Gn-SJ`!rZf=c330bYLW2RY<*oyknB14S8Zm0xvh*w zRL%EY#Yp$bq6nZI-W|%`>0_UFo8t}%*DA{+k42c3cbqqOXKaP)q<=B$q;?~Y2+~x0 zcYTmor(Z3m@7tn%bicdZFIdCwUSrXC4=>>nLMh(jD-rXA%l3%ouL01wNcQI>%`X4jQ-svw-VJd|p6QdGd_V~H#b7Vf$|;pJ3{_(==VWE1 z+|jOj!@Jg2LfI5LWRCblsPv{5bRkMm=Q*^y?D;{9=9~hCym>P(`|Q;_^4$hVE4T<5 zF2oq`ATJ(V55BS(Z)mI0N(&P9<}zeusXz!plY{8Jui0D3*&g8RY>fM|ykvl3BEjL# zDb1m7t98CGj54KYjxn`gIapDJFdeK=XqmwcPP@21@4!MWONt5?NRB8)Fn2(pT~npk zm=P<)D6@EC@#k8ei{0QML&-Q}AT33-qKkBAiQ{2>1V{GU=dEG%)GYL#;7>RRR5S9z z)q-wasmQ=Bg6F3qIKO;6a1V_|*OJ(nVyyM_8EFz1iaFS8ImO|(NJ$vB9@MbXW8=NdX|Es`vgr-{!wrcYwh zQV|UY8!j-8{pvYiSoIH*m1232aQH#J4Wto<1AWP{QuAA@LA%UgJKXmd)Fz_N&}+`t zJ*5yxVq?EcP+&%1*I#bIs2ZloHOKhE8si%C!im*st>Z5GnCD*iC}`VYam2!^hBdl; zS>C<`WAn9vg`Ym?M>j~ndHof&5HAgXV;HMXN;zD{<#FQ^oZHf{wY^bOuw4=PqxbPmu7?jS)#5a^)41Eke&bayM=psHKM>3Oo9d5d%Rn0w-@w#DXJHnnWlO`zxfUY*$P@UBTC2~6~vN$>d}(;sMDRd$aKgc8sV zPsrqrZvoxAp1^qGG+FVqbN43J)SY)VuQil&-`?hQB;j)|Xln-1H`L2{pSY>+O4b!p zN5OuXM*?0GG$HOZ1P`k)-%1M?Y8)7@sRX~km*(BYMT^?}>Bjf9rtu-{3 zLD<;qtJ)AYOvcAv=Eqp}1Bn>o-sj>+2=67e^iw60Hf_{6mu72oc`*aBwP9PP6Rg$Q zC2qenNhytq*~ZY_E!(k1SNipOUb6_k-;V)6c35o9Ce=O#l^tuYSGMV<#*@*6DHg?z z|H0lnz{uja*`JNuwr$(CZQZu*?%TF)+qR9{w%xaF+xqvrqhEILpUKYdW@q1|QYoa8 zN~$XLea>^v=U{0P(qLJ1U0~+lo-2)IG=8Ew)J4w?m0CsWu&)oPL2Tjbq0^`d!;`hX z!2N()Oh5x%eAG2<(zbikBegfGVO_afJvTCPCeJzdrPwMq@0n$8Lra5$;ev2IvUr2` z*WtG_ZyuC0fgVNdA0F4Od4G0{1$`IVc}((|MMFa#$ot}D@hr%lc(S`U!Ld0XuA)8c zPSawuSdY4au=^ht5DgLD%Y(-^aeZYW8)7|C_p>*p= zq1nJcz5<(5R+%-_d1bwlYsVjR6^5Z97d{O~PUWLXOal`Nf#BzD$3PFc?^O^roh}xB z$tX$Q2@j4H`lV-x1RaA)i8>R07r8VKmi-*=n#DDsSfpCN;^}#0uty6naht~KGAHMpEsS@V z)}5!l_>=Uw5?{3<+6_yH^wr+j&o+V*`X@-1;}M^{0@8bIrhX65QyvE|8yKl`%;XtN zQCJJ#-XEF{#NXtl9*OTYq$AnRU`Z}k<14&qDH9z(yF+%PDI`^Fx*SkrpQ!e>$HOFIq`0H~z@N;J#QQj~w%SW$Z8Ns8zR0SaRI8 zP>tI*BuXf>YZYrSS9wGuqlnO(Pd!nc&r0m;7)(CeP=A}(WZO*k$;wDLK$pEWZ`mc! z*TNsa?us8pD_x2kNQ*J09tC-K>1xjEz6@;F961st;~VVN>ewz#RT#UnLUOr_C1QGN zohl!P>#At1R@l;mqq|VV1#RMKux;K(2FsolY|%PLk}}BWXB?z9zQEPTGEDMUBsr7l%ju059irYb8lqD-Uy&_x81r z+NIJxyALam;lzXY}l~D7G$t6LBf}x z0B@2oh)8mZXIG;J&5o}41Lpcz;uvJ-virnz)wEk4XRl1N>_lYYtVoZD5s!Z;#Ir;iD-qD2c@4^Zz!NjX1|FG=-gWy*8&NQN#(m*8+=maxs-m(;WR{0^Bd ztl1cYEXA9Aq@B3VWF9(i>)_K-TVt7bi$Z5ijsMW+X{BRb%i7~y$kWCRxz{tq261e1 zp@EX1PP4o`^KdA-!#$(H)?bb=ixa;YGrHEz&dS0I$eicbH7p+}T;TUY;M`pUp6%g}&OM>?{f7k*8ZLw<>C!l!Crsd%8<| z^&SCUs~|H*viy%UV#<=uJ1Shsh(t1voZ)zV%QIJw&xV8K@gowZL9sc`_4F4grg5jHT@n7~au>Ezp`*$JY??S}? zTp@z}ufd^z5+WElzEea0+Yb9owRMN}5risFfG>SqzeET_&=kPON!g_^wxoUiB+2q~ zF91ITh=?DpKg`r$rvC=!Y&Qi3Adx(%S4npLE&cQ>hxcgWEn{&VPEy?7v4c`LGDi?u zalbwCSA1wjKjooZQLARx$9N4R(mEjC#=`xX_XCA1TA3Zq9y{zNOaO<~;~{fk&&GQ_ zrJFWIePQTWrIrmwr{*|u=S%(Ti^c49qD|FSaY*pv15gd0}`_}njf=a>8xfV7kpWSq=UzJ#zy`GQ;z1{?d9w&IE z(nu9JYI5Lk#OlSBJeFcw@=t{ireAvG#~3LC1fazXF=t`(d9dGg6%1RVb}XvyN~xVFmKYVE$!tD5HHHfY(7{x7>HBV2SfW$qoggIj$?>NPagb5F#lKoCd*O`^5HjXJg5=?9B zHE^_fn)Ge(gpK~7Z~WEQT=CX#Z!3Doft=A?;n{^ZFp4c_LccMRb=bf89+ywGom}wL z(ieD7FDN&@W`lksJJ;bTBW0hfDSPmu2JT=fTPy?|hh}H|=vt3C2>WpHs=%F!Aj6Vn zHeqO*&KALJaN+yQZ7iYe4Jle8XAP#Jx(yW*fM1h}I((qVr8ol-pw+XnERvV@L1JhP zG&^9)i!JkMZ#!2aBfJhRCRFR(?csF zdq?|s>lj7E!{-&2Nw@-F^ zE40*>J?;siCI%-b+zAqPh;vrqo!kuvoA~X?ubhQqo>CZD{6dh3ZN+T>jz~W6w8xR z!>y%b10vSuWH^27P$3Z>q1Duf;IeL%q1zp^*69qT#T{_kcRS(t;x6OP{7aRVgW+T` zrM3vSB37G6TGQv*0$Y9n!w%QWnPBfP6pRjrqPn_KEsEE8im??L7)UpEL%D!?f=IEQ zZcc&|1$I?t?`2%8Ian9`0(pjh#7w_DYd$%2f_tdP%)V9ekn#r0YJ^?>4D50)Fa!J3 zH(&$+CU`}TwjYEQ^qUIe#zjJL%q3-n<{!xKj&~phG`xY9Ngy=wU;OK*xng`?7;pq@ z_yHEbu!?PjQUll>-KXiy4ZqW*zYS0hB#JXL{k#oEO-RBMsO!M8tRV5xBuBhw*p4tY zqFwnbWMJc&h4b9FbK(%#wuVoVllZIKsb8pq0grJFDYoZ${L&zy5puATF#`Se`J_? zY74hd(7D%+jAO))ybMq!P0{@6uIPSLHyOV*_iNI2I~g`gOc7}>Ri$qi94yO(D%wr# zZrsgYmrS$$(Fm`q2&$P)WPAkfbeau4cYZP_K5TxY=wVcbrhsJNS*ZNGcP}YuDSJd zT^WZUZ8yIxqHQ-iei=sGsy82-u#TV*&c0MIZBHrQbEaj-vnL1=UNn`(guZloiONlm zKURtOK=?_R&=s)|4ns1aCU4?8N^=$bGn*UWBl!Kf1+s^W7iJS?mP#o5eI}NS4(KawljrwItLuNXi{9S+x=>0taWmaouxS=b1wKdk!5o z$~n7=*N&?R=C&|hF463K$&3Q$vKmL4Ljq$*IAMoN6P`O5wzc29v*!-bcx0lKj}Cw#==phWdUVn)o;0~pu#XXp*J}M#*VHp-w<2Yd zcb;8@bQK(P@1( zsu(hf!Xz;5cDfGd`AJ9b`lc38$?ilRj#13Ur-T&5px%GOl;3(1!SWm&n(3^&$!ybh zcV7o*Pc}IZ4#1SvtcQb3Dk5PhE8b-I*;t3ldI!y_@KDNut zz_1!UwE96@;RhMI$XynIR2}S)Jv7 zqCBc(dAbs^+V9FiZBACY3vLpy(&agB#EHo^yAU^^nN3Xy(2AkMHOA* z5n|m`k(UALiNzR#_604&)URaSv^}# z!X%t4VQ$AzT=#WF_K48XA6_gI-QRgSF)hsuwo7mDkD4E9PEhJq6|&qwiciARjHyDM z)Nnd2%W{F59AR}rhCDzpFsAViUam|gQzv1DF~`hyYaN=s>lnut>6kno_;1kKThELK zY*roi&ho5IlOzJWorSm`0Jn$ZO8lZ^zkbpj9Z{C-9``B^cD1@SY}WRhFk4_lG%Iqx z5(fuGDyTI{*B?=5TX2+x1H7aHH*-#UZe|{x;bS(nw#S1`w;-I}J6=gx@j3#)e7B;R zBbfO;Ap%OEn96~WJ^2$=ZHuE~+u|I9A^*^vV*TIi+UgS({ZKsb`eiVfx)3_Y1uC8JL006FIc*SP7 zB+_4{&RMU)$yaR!1?9S$W)-2z(Vquf?R`5Ean7y0Uefs$GVG zm#Q4i<&wXos2vwE)Vi=;=gVVtG9cy%7TLC`7NXEK5;6p4}(LneH2 z)=ER~>MeUS-`nHp{Auzzgp=dwp5fm+2aYD9X3G0v1BdY&>g40$Kqwdsee{dW!BCL}nrj z%4dW1hGMgl9h6yMF`uu_pnj<|g>tnOc!GS|M8DI*MS&YU<-9Gu{4^BKoELfqN&OU56o4d$0X3wRY}Pk>~{>NRCj8y?Cl-oO;fVCX@zj5&tarz`2TW$&Og5W{~7%`fBh`}YyCOwf7PS^@i)ZC!Tz6f3$1>ObpJJf#ONKLDb>p?L&tU+EYAF z_fH*@8JfD}bsj55ef_$m`SJr2hol1d&KE;_Es~zAoi8^!gS++v71{!L(^zg@DtQfW zof2-Ul*;K#&Rfd;t|Z>&9dz%pE=8%ZNv&UYPda~= zFaGQ+@v-+@Zdz|%q9T3P-wbkbd!c4yg_-7Y-{^S0FCrZbIeIBXz+_xTI3t0C=cG@5 z9D3X`EbvlR-V=7^coRnyu>b0xQ97?Vqo5;#JJ{o|cC*2xytRGmH;GV)IsEOT2Eq<2 z@JxQUJ=yFv=!Fw;VZW;+%-d=8}Cq`LeKf!QF zR!yfn&`o*kR>@A>7L`K&21)fA)?d$JVx3eW$cMl8OG9fqCXw|_YMG02;BtC*byd^` zAI@oKz=ja+yQYP4C}u;tn>`zOX+mLt7aR_#@~q0~Ad;=SQkXB)uqtY58-M8mZiS?u zSm97f7OV{1kYy-c^xnjR0ngqJa_cr^^!J>=0uo_w_xWchEH$4=opTh^&_7_Q2aHM_Q7!gFci|LBjTQ+fv58R(uk{(3+{O(s{Tur z0H-UWAff29--Y{IzOcVYx3l=mcPKVoCxAk!tOr!ds2&w$ZO^70@5mcBg+1g4aSSvW z88E&!?Wz?0>+S%guG&6M@Z;S*pB)i1E;Xj2+svElIbif}PCY~qTbgf1)-t@(IflAN z-;D9$Q&MnZf`c9VGX=`XT4N`MhkfBz0s0%NfY)zYg7V^xr>Ini2}Bh(a}Tg7lc+Xi z_rjEGFkR~jgmh-8DZhkR4}{f0RAR+H9DxbZOSol+$U6?@P$DOHp z1TknIQ`!2#zx5=Rtv``v7dNTN8l|cJm@AG0F5@v4Q)L`^Y&&0p?^Iy|jhD|s;cHFKKh_Y$KRCHrh7*707 z^rq&w3sv}+9HT546jVtk{H{nTqoeL7@Pr1zl#h0x|A@bYWs?QLYVtpxvMFP`w!j#$ zJ^JtW)vT!6&!#Mf-DSh63>y!k`qzQc2EN7txLP3bhvpGHeho?xEu^}r?+)kD9pz)v zaW^8TiLCwD+boxJ0CK8mw4@2%{)L<^&OD*Y?O~h`52DjPP{Ym_d3wiBo_?E-sUwEn zz)m=3K^^R_>k@;>mMT<$9o?pf73Ymp;Z4rsfQ*6ob_UP%n@UKWWjK*xgdLp{nNUAv zditq!-A!X%+AW_(LAGDsC^*?66=3&P@%we75_F z5IP){Zcb)S!6S*$npJH?L6EWM%uXx z>@5~2(Vx>%YUUtHkC7oEZB)M}OXoqaOR_QZH=JT3(CD_{V=Fr=y$AL=d@5UCh7keu z8CK6|CpI|Zl83$O=M?Sr+DPx`m>%$`P0=5X2+bTqn7-x`9v*TtyaXVgVn1U!Z%J^K z)Qr_z2`MJ^f_vX*VyvF}^@H2t!BHPDj51M9(`3U+f<*jlI;~|^q9hF@_gsZ|3&uuF z621mxi0It1e9p-DFhIve)^lvwaDyUtupESuLc`n_vI-6Hf$$(nfxWfGKnYxCKJb0p z=a+Gm`|9yjMrJ=TDNd9Z(?KKcQ$(x7zN(p8ng(>01A=b+&2EMM2f+vCXZLjbO1*VBw`)$V| zXdH_%@Csj(T4V^Pe4dQ5cp+5pY7r(dOD3wJ1gdmXYt^IA2$P-a8dwF8N0bv%iv$}4 zu`l*&Aq70W&|T2Y%g50L49NBn(qbAQSfru%5Ser90cCLiFc$BEHC_2Ua6BJt*(J%b z`_`&u>4>pFiCQ4dk9rgiG1JJ~D&8zo?xJju?5Kkepcu^yIQ8-qgoh8N#+Uw6UXAej zCYSJ4{8&Y_rnU9w#sFXiR)ew|cg7NB(?mC-zD2j821Lx{J3Z?a6VLFJ5-uKk)^u^4 zZ`Aeio}}xSm|y8ggG+c2An{_B&Rf;9D+NpYgQSj8`6Jxay-+TNtXc&cY|I=A$_web zw*i-!wXH|G1@r8)G_xKN^5h&p!^&C9I7poL0SU8GTmo)|nwpZ}pV?1B%0=i{jdL>S zoX8{4RIV8j3Fbv39oT}Uc=CN_g&H>(bJ#c#+6uPu)0JJ3Uy(~~8-{GlkE+S>%UZ!% z=J+KQf_|611A9{AN*mxo5Sax;l@(6|`V46N(zxhzOzZher#pSb;~_^?CLQsUCGm|w zmgd6wPNl!6e^wH&#v_!)>bU_7pJ-sWKBeKN-3XwAf%wIQrwPT31?ANnaLA46Vq@oz zWAMzCC*pmV`)nUUb+bQ7Vw&6gOMk0$7{*hW(;|*z^fGOf`4c|cUw8)>8!U0y;**L5)dLhhK7Np~6Hu6kwF@E`o@JzM-TmA5v*j!JuSq`Q8~?B8NOpxIcUZxtHaLkA7ZvEttX_s%R^BSWsKb@$nUT^ zliHg*=UNnKjbRpD<9g_Xs$*h6nr?N2`u=)Gvq*Ah)X0CRr3oG$vH;BmqCZW)sk0!@ z%q2MSY0?2@k3-043}Sbk%JhYr%z?@JxsUvdeI!zu5wlZ%`}6W-F>CA|&c%X`8b(p< zv;++<;@ZuC7JSCk`q+@1oz1J%=~Q90p0(+$uv#W#p*ll@Ds&CqLuhiEN0BT3YnU}v ztMfcaJMHl|sh*4Y;SS3=>{>sOx2}%;N=Eak7`SeGH!vb=R%ev*kSQds_UqT8n;; z&xKmZhREK~3F@nPTl>ftEpy&F{DXhB^cz1?J3bvFn+8OMqk( zgC@(?C{HY5^BP|FD^=4wpT|bmnD3q!XajphO629;ez`pIF8Y~#)a;-lk+VU2 zlN`*eArF~nm_4->j3KKSJaehSlMxYgfP(s7U}NQ};}EZ=vX-ZO>LI~}Eb@UVIe&57 z^?Xfi&mw{zvdoMO#U z2)y>W(&GGo0u2imJe$G>9&!hl*%MG$Rl}PZ+37|iKWM44M-eX2toirZ0uTX)YHw_W z=Til3B#uGmNgZ@kup-mGR^RkgwJTUf$ZRZ(l!ucqWZv>TiY!40amu54Fj5Eoi8)l zY|h#uTwnw8tAgpt6%t*>p{+2(`Ngo*A^Y^1hZP24BzUdmjJo+cwAF;$>uYO%_{|$; z$){(PO8VxD6GY&XAOL%iFDMfNyX|cI%Av}G^5+Q=0q~OK57F9dVH#A{!GVUdCHg}7 zjeb$(*rU>twVm6RVcA0zKa;PaHYvJvv$Cp$PvooalTl)wr5h4(u$&=a?i&n)duv*q z1E!tRIO3}E==+lpuhogKhWj+yDltc~Bd7!9;kq~jqAHb#X@@X5)U%$yRSVyfT1A9R z@~5ph)j|OqnD7rkhf<^A24;ruj7XVa_r6+&dk`yBA!`O(8S!bgJ;_-22cZ%M@2z#q z8u?(KRdd#?${j2%?Qsw=kO|+sVDPdNXhnAgbkuP(;pY(TP!mX;&++TKG|i}xDO9d9 z^arB^ET5x4SX8dVs{#0(wGCc%iI}I%w~v1LJjc-h9hJC^PUDPi_MVzEl)yOgFFzVN z4Qo^Nk7T%1jmYH4Q>Zb5@kQ&8rL*2nph9+$d(1u%{RGZeGPQR#2njj)b!ou*gz%0R z!wRF}OxsF^DIt3KY`Lhu=EcF)XTx^8Vy{k}i5D{*&&yHYZ01wUgtwn)SizIIS0U21=2@ zNALt-MEQr&RbETNTVlsyoMNKDjMtSh!u;B2017Ui2e-?`{yL0{R)dMBz#dUU^y6hip7WpS(#qCV5RHLrV^Lg(MomEw6J#pR(h+CN3! z+x@{tt_~A^;=Lj@wNLNv)osA#_Y_QpFU#CO5nKDbWfYb1>xvU4o8cMNcH>dSrBV5{ zkCq9lgwmNwsu9kqB`&2RmMaJ9sz}!CQvG-)lxtdCKr^J2zR-#cKD+kk5aW~un4}D zhumeOE}*NTJf4mVBF4pP3r`EHjLQOQ#(+8IO5{irW~JKR7`j*#MFilk(}a{ImTOf= zWoE&WH*NgXA!k=36BOR(An!%+z|UBIUr?#STiL_oKHvT=$;wQ`I71s+T434D=1_sn zRF@IWsbq7CF#7Xq*iYH#s+hxu-XBD6-<=M#s$=Nh4%)rsf=&{jn8RL;d3a35KAi$o z`_bO$F3kqRqeL?lj;Z%X{Y*?YLWUyBS`sRfSkR-DXO7-bC9Lx;++=3%W>DJGK75jW z=x1E;+gTk2UV4#iuv`wQoRg&rH{5V2H#0r`YQ@C?2p^t~cx@j1c76WsyM%v_M30UI zB#rN#`z}3+k_H~--5qrn@n^GbdN!zUa^7w3&1j}} zL2sqpL5>VNk{AV>9;B_OR!Layp@@2JWniVaxmXOImYBtr%?N8RbkSXetXrFdE_WuQ z-ANb&ySqcMTvxj9WbrI%ZIPIe+Rs^6wrm8l&OqV_5k$(jY_qB9MgX@)sl=JGw8w%w zp3SQH{mzUW^WW3i4D4wOocM;&5bSu{H}YxJutJRBqJrn|cm!$K z>7?O30OrBOBE7x?M&S5Oy4T(>{gW|QpP$>VQJRNeNC;7ZUL1sSzIxK{(YSK`#AMK zcbsCN|Em$`pN1EDR>uESkYOi!uNlD`s0-Ln3$VP_iI7Cn=(S*_gZM%_KED@pBt{C} zjOL=6wz)BOf1{&YD7;(i>rnj_Mq;#n*|Ov}kmV|I2-B7))7{A=rRztOk$;s9aKFJj zMzLb@0qIymU{$k#l@H2!%J#!nb&$RbkGDqE$(B-YO)?>r8XmB)JGmq{3iB+EXggR}EnMOQC z&PA9M=E4&VB2ZT-mh?vM3#oWkX^|RE^t;03XW(4#yRd#vF_IY>11#jEay40_Hj0SQ zgLx|eM{QK$)bKpfzGCsoj~9s^xEVH7uiHPbJ<|X??xbLiEl*pSJRJ=-#niqMo-I0@ z%5kJw6dWN=9Is-sFiz|DiFNMBRd5`hBQGU8$bE55Cp42tO<;CEga+391X>^xGzGu9 zic}JHE#^KfGTRnQ#;S%yBUV=@Xn9qqYE?BZ(URtzn>1ThNP-+HN^rsqIf_AG7J#nx z+^{6*UGQ&hB1jX>MBbS!`=E0=E?_tdh@3VW*7JM7Oe&r2jGN8uIxE+;ZQG7qV+bi+ z&fo!n6sTK&m5O8DP-D@Gf^FaNn+N>T-+X3CNOO}9iZO`b z5BCEiKU?2g>X_794ay>zAj!N)M?`=NCCQIh>{XOs)K%xk?5S9JezsPZ+C)xX4tK30 zHv^0Ny*W#dPwEb7qdk876quV~cbggIP&CjW8!L+<5`%2wXH}(76%@ysNOAcyFpMTH zB|^8D5=crJ5pS{E`j#&t22G=SG=D%Eb%f{yqWij1N@?FH2fv52k=Khbqh=^gF2^gs zHI>X*wD3m>wH@ZHic28tuFCs36M_ka52Vr;UE{AcLN#>NNwRLf9Ugo9G8nn z3f++#gN5EEvGF%S!zxgAjt$y^0BTaW2g9-b%5GO+<+cgdGh7;+kvrnk)`I!YdE zi0~lY7&AGsEixsLWh5>kW0rKGcjPDrtcspIoSvw3JyrxIQzDsfG z(OIVekQ|v})THoU1I=J;;4^Zsmo_bfp;@3Gb7lT-b!3NTST724jZd1C>sBjyNRo3} z&Gx2-d!Gb>of9uzOd1?+tXx7_?LbrEKJNU>HIh_C4&KMB7o|tdBTwnSmNB`9kivQHJYb$;0dH@K`~LQ?_|yaM1v@ zvP+Au-COyt7uj{Amb)vl6dc`aUQ z8BVMx*_q!>lxD4w3T~7tNk`OCHDv_QAh8#;Z7FbJ!Z{7$mFW+#H{0OFWFo?U8%=uq z&6$DMQ_wLUnLW54HJiPN-yyW8Ed+yJN%dX=BPU8IyHJVwZk9WGqENXMn2jG_z@Z1= z?w^fhG@}F*Z+y5&QA|r42T%m}bZ9b^;ybXPc87_JdcSs1A$3t(3rvY==;rT`3^_xNpyR+5g6>TiaYfqJ;`); z@m`hSuqCS;2r(@MBE^WD0)T}nxCK(u*BK)9I_5>UN=~;X)6ByICS%$5%g3sFN9d55$WcC+%)!WI`al~w{xL_L1CDMWH6uZXk}c0m``Sy~c50P*P*&Yw^^ zx+%w=jnVHmi84*MEhUHvpk~Ezb`eChn*=ZsbmU-@!CLo|(k{G`H`$P8U`lAYy5c}Q z+hJJ+8gWSSvZuD15Q5+Fjj4fj$SWbLSzS$urEw3skR~bTCGG=+<2mQsU`)X%KJ~AU z_zd)a?VI{9obkVd$N#W3`73n&KR)Dh;4{$wm%YRc^#87s{H@#y+gj_J+u&=`FyJ%b z|LsZ}hE7r6#?<&99{Ro~X#UGl-q=A&-`dW~7@r-6PRZQ;`&lL?d?u#vr~mON#lrEQ zahnAu&W1Apq6c3Dny}o@6BnByvXG9+iX+Waf(gOe113P(L3n^XLS|Av_WJGXSy)&l z%v9#*i6gPF%2N*4czqO)ZVgLTt{%_;Tf&UO!{s8*y=RWVp zC+SOtvU!V-N8zeda*j_@%%HqlLjB>3+}TPGK(78G_2t_`Qep~n?Vf9G{13l ze{#9ZmZ4@#f^=@uBJtC=2SVyc#O^{&k^$Q!DZL!Xo7dfG%`&6j8(@r$!|Rp)U6}6c z+eCkIkoJc<~K0i7JLW5OuW0uXdN>#{(;f$FHq+w z5~UQ}+~0@&e5rg9QM;C#U1)bnQqTa8H?%%&g}yymCf5u%(NinSP)l1mSj z?*=`WZ8(@Mo{xUC&La~F#184g7ahB)bm&;jb4IkF?~k*PYURM@L6-51D5MR&2gp3{ ztV4?3%2YpOAI`CStH`l=j3q5$y6D!+t;BY%b#Y^zmwLUExuv+-a}8Lx)TPmQt(ORV>w zgP;`9%kG&)r`qK*XIcfHrSJhR@Y=c-;4>1reIQG^%MC+qB6ev$}b2+S>RvJOnYvPW*R z?usV_n&Li6@w!78(-@3Gx<`wpk;Qqw|0Yh@ZBhT^ieFu)ROW~5Bum6|kc3FvRTh0g zzLRnlrb4)ST!Ao2^|;pe@CUQ(*A`Rcq{?49KDnk~K8YSJPLc}COod7*u29;n8-lul za49wG)e+9(%O!>gdy~v?KGM>$OX_8YHbfl?yO=RKVaRezOPBpwD{+sB z#lp2)OR$VFA#6J$g)ATF0;$RZkL>!+423qHlq_Dgk1;M#gJz|we;RT9MvBE{-6P=^ z)E?Oxke_y+M4)P1A3S#4taakN$+3YNmKjrc3+i_2(Gk3)&5cHI7e%OixbTJTj)XEu zrD%4lTL1cU%?4~H9bA;ve@;Zcn(#QttgtP~3L309tfyU6ueye}Z{^7u(pR4Ko+OeV zj0yDJrJzYW_ZvYZO8InfXu6aw1LPWG1bF4YL)rHhXB*zJ(5T1SCJ0VXPQ=86zm6LNm@;~loxg8v`n3)5c8|1?1s?I ztQ3-SjKU@1c8^_aT)JGfe@)*vTs|KsB3i?30I$JM#>J=zEY&T#gkly`CY|d~8$v-` zRQ`cgkXfd3t#ZY~7)Vj#5lMq;U~3E6JfUIWzD*;({#@sJI|pbv zlJHL3=`l*e71gjRLQQx^>S{T*`fS;pC;WDwSiDjYLY{VhB&wIuNG{1#a!$}mF=M~M zBvhkPo(dfil&Grx+@iL#9TxWjKCCwW#%}yUp<}pDe%S#aC9@?{vP@%=hcdoMkH0km2O^u~VO3QALru4K~lXu+#_q z@B`ueAl^6{R0h5EYC9r~vGBehq(fl=Lb0b&g0xv-3bDmYfY!&7DKnW1xm7|^HXJkP z<6unP;JY*6y^%yN&7R`h1pW}w_Y^IN{WSX41MqB^or+VN?u3A(ko-wH=LRlym|Mk! zcG_!QI*5({Qbwt@vM@^&`dPxyiN^vVo~Zqr>;?>>IH1!Ze1+HZw|L5k$FW2FWdsJz z@$yI7J<89@h;N99-B#mjMZ`LFVXEK&Se*-?aHp|y=AoMe(o^;HS&ZX9%uG+c4CFm> znIjZlt=TSInQ~4+qM7+V1y)0{g|t#(`v(tpL{dmBswD?4*2j$V7Sg7RUA`M*kFZ83q`1^*Dk}~E5E4@_=#n_D5_2r{a)2frgUl)KeINOwaWf- zcF)b|o?ZE4;8MO+mC78jb96Jr}c8OTJ8y2kB>e>jbkXgOaoAjEO3}Hrj_T&Yl?wE?{Jk zjv6Av29eV8(!&zM1PnO|d8Ual(eLzB!EzSUJ7?7uz^DDyI3294*N(HP5>N(#xw$}r zJ85-gfDu^sAZtvdb!NzQ=JsR;(mU^+Ej8FUe~#^TSXF};p~rj&fNS3$!!}$r^^U`D z5vGthq?yolrT_~I&g-(jLh39ci>a8F6QQW*`tn;Hf3GXP&@I^)Zxvm=yBDK?80wjj zCnG#Hj%znT`;5N=WjZtB69%pW#bTPbT{`d8TV-m}^;izqZyC3#i-}dQ2AupBQqDC& z%7>j{v-n-4nJ0*35Cz}7W&ZH>P0VJZm1g_5X1@PB_B#I+(;XxI_bB*ZU-*2-R_XC= z4J=^(X2<*c!sqV`pZ~!NpKsUdzkJvKQKevFU}gAEjDp|fs`&MxeF?1vNTVF%q?}i_ZdZ|(YkIABe@cl7Q-veqUOT^@o~LZpJ)`{NsiV?ZuGn6l zlEDY^G+c1;G^yr0b9Z;N;1|z43I9kN3Thmvy6!W!?_b zXXCx~Rew+D`HWJ5udig9GTPyx@K>d`VvcvzqBn|In8iZ4pqz5cn37D++Tu4HBh_$} z!(s*F$P?FRAoQ-j*KF&31mbmWaV0rh8QP$ zA8~oWJ(p}8CiFo7yO`%`*m1VCATFE5CZMLvrQg1sTABEjb&XIkE z(YO2`dd>hp5x9eE)xn;z1XFs6f~#|+=M9}{ii!eEOxGUOf4fQO^*aG|z^_BXZQbci zBt~0mc4Pq9v0&?wkX8)cCF}XK9F?6A=x?KvG`gFt-E9Xw3I1qn`e`B;N?cxExSNy>*e>}DG5pg$QYL03bv}Sc z;-v!XfUFjZUDA-^3d3lg2!&gRA`Th;mtAF?6!=gC5SrpPwFEmP5lzIO70q)~a;61v z1-U(Ps0DyYkNmzZ0c!amznxj*LMI)mYOX1kd3)9)Od+_wH(rpKVjuoizZeQM^k=4f zRfa$dzEba0WE4_Ei~Zj{(=a?EJAkGtqHc=B%j)LZ(<~h7us_f%(Q<`k^dxGro|o5B z0>?2(?2{Pq!HwtnVvPWiqhe9oubg94tHn9c${;TZ#yQdL$B|gTFE-isE}`{=lA3`F zQQpZGuIIBBT#Qii?*NMV$24DV(?`qT3UwD=M4o`GohUm`)!}2e44K*yS)at(-SzKs<-!M1fenf6Z_)^LYY^Xgy0q4sm6ZjdPrhCiA>0d9yWI)5I_o8 z0+;Hwm#SNCn~bN=tj+@)vT95<>HnxnBmmAY3R`wzUsk$N^0fmRfnPdtup(B7FO=d* zD{DyIw1g>Jf?+60xPU(w}S9N7F-G_zL#!(P4iGX_$ zM7lGetb>~T#!L@lc^kMBVJ@~467~XizxiM6y=81A?V6o!W@ct)YBMu4Guv%uW@ct) zW@ct++ihlMX1h(Fk7klNqr8)EMiV8<%S+*6_q3+b#t}$!&<52M-Y_ow zasfWp6ol%dJGn6s6C^5xUkiD_I3C+lZ6NWoWM|<7UF_+!MRWQj+fyFWO(z&B15ID2IyxU zQXH0!P!sj9kG5JAf7NQ<*6ieNOu6gOiy7?RBEVA+m1-O)4*3bnP~0tu@^%Fh$~f^{Uh4U^~h@68^OFlbGj3TB@IdmVq; zcdxDCr*d*E>q6sOxYwt~a1 zpY(S58n2$cp7uf~C2zo$s{O^SQr4L0C)JJsuvQ#G;c3;`E<7M8v@e{JaD~|?O8@ZU zuw?o9E6>#gvtA9SjKvB&p^lWn4LeoPxV zjHk3(?98SbQ;&}g;%$^5POWWNBter zS-IStqAxj^*@x(@5oS>#CG1`{nmMHGslSWbP{8eEnLdk%KAi@jse~kx08DWq!C+Vm zJHUvDG5u`_6#EuU_vd<=*UwklH!H<}U2uD*#t@c$Cu2DQqRk@ex~P!Nkjz|>B7X>s zBF^t(w%aw3jNRe@dE$t+2*95=39;mFC#HM&I_uHXCF~`#v`~a zC2_L%IV8npkbu;3qciiS!&clshKz=uFstfulA)e<>${)YJ#+UWn`n)s<=w>^BHmM9 z;^&HCzDu=dnXOyWJD?$%q0#dML)vI>-!Q%?Kpjb&ju0g^jB|JVmdcDht|m^wko;DP zm@&WchxQH^v@!UNhQCacBB)({ClxQQo?FlWFO?@UgJ@(-7dl&xm>$DAgrgj|_92p* zaBhFuIqcAoYYIXDS0^7(=yxUTn4ou>$-OohRUHc3#X#Ux5fWStptPB5y7(U$VUk47 z)KtWEp2|BsSmE>|xur%H`@%sF1+jw^kIrwvLik=OR@(x!c}m8HSk9ss}$(+#(mK4z9y)?aDS*FvC-pB;^Uk6P}^-s&&(Q1&`RxA(id3S~nFRQrOZ-SPfXTpKKtlkv3fM3YbeX zgs!AIdlg-h?|H|#0IeG5VxXqMA5$YD|Cswp8uj>se(|XfQe}VfL<8^YU?+A|2w-t_ zIVV^GjPVrwQ0Hm4m$(Btvqx!r8qMW`ql=b}K=ZL#Ezn;T&^X2YzFQ2)?=2lv2F~?n znKp-R&@(-87a+2ezk5l$g^l=nad=pxse6S6)~qcKX~wv{5T$h-G_dV-hn~t8CtQd_ z{p&n+aDmuwAPUU->T?hvbu-NKEybW0;SnA@9TI#AV>rhr~oxfYpxkMMg^iENFDBIz20}+ zK{v=ze%^=AqA@N;vWG}`!^KYGIM&9+i2Ky4qi6WoiqVVQOfocolUPA%f zkaN>(F$54CTu>`gN=sv6bbPfJmhupo66-Fr(2nMup>Ty9-qkj1z&&`D(66t&&-bEE z&aDjQv6$#LuS21|SHrTi1ty7#t_xu)m?@;7C7bwTq5%eiCnBgg`Q<*y9EzN~{#yLUpj3>Ee?_HYV`Key2yh2#lMWjrsDJCQ(*>f0 zU9rt;R5;aX*l)9%J5(<30x;uu7{c_!)TcQOe3w|I>fLj+Ed+!amqgPDp^EPtzIn^6x4w2(rrAI42HbBSV8b;pqNzbUym1&9Ht3&YKZW;IyXp7jPE_JYDNUs^7+oV5mPlqS^#2{ zq(uQ)MS|V&(yZtcwL1SUsWQbkiXpPet(PO=4 z@EnZ<(H>6~H7(ymA*4=3X^j+fmK(fGvFEn1OYzZTQ=$e-qbaKtd9fobjCKiDU#>N$ z?Yn-V-}iZb;-=B|o6kYJAbDtDk6iJ+dNTs+tM+Vq(_2Qwq!IRJv0h(W^yX=fhIN9h zkcOQ4LI5`ZU}e7SGG3M0qWYrj(E*WZniL`)Y)#&Srtv^A$cSOsSg$N7-_|h#!+V_# z(fKZ05RkA`l>p88!k-ii7|^AyG-6O_=sJySqG|!3?tUWR4=QR6!LCoMz(w0{9x5K7 z*Retljup0JMdGbTEA)g|=7w7M=pEr(3dbU-KP>JGI^G4s;MAjaQ!AtVycX~2oD?jk z&x2{&!0jgbMyc4d>-nOQqLJvOXnlbFJ?o`U;>`lIV2Xy&J@1pg6CQ=B;iskVH*>X& zE2fxM8GzwX7k*2HYXDuL^`@n8kTT~L@~C$Xzu8;>%MaOSb)(AtmVAK8Awb6l>#KN$ z87OQ$@c0(+Tn4ROvDj5&rfM6VcuO_h4shBn3^OQ-AjRZL$ORH`V3I9$%kyCDGRi(SjM3S{~{lL|(DYO4viO~D}{KPN#T2s=1ft};QYinWu6zja*`^Jou#HVfHQ4!WdrYDjrD5lzsdBP9{G6zR0m z%^g`3x1keAm8^N*j0EmO27m0TZ{xqFxk|;rb=2B5)ufnZ3`~inK3Wgf6 z*0-<1>=i>T7D#K<08D1(x;%y29YyM&e7mQj7cK)I_a-A{nLiTbWQX__JAIasB8b{Q zn(HU6qH11|-ZUXu)zH;4f~%ZP5vX`B9TqLfa6{W8$SA zmGD5{61j>Lj;n6)Mp_Gl7CJbw_98ra#TRbHh!zzpG?JL#8<7G42@+<^Z!X5xRH)Wt zr$X5!Ku$^tR~}hy0IQbXXQSK2q5Wgsy3u>nS{8iZ&t9mSYM0lC#Ut{RyV!KhlYOMK z7n+P#Gh?xxI;!%iLFp|P3Y)^1E~U*8Hn3GmwI3!Bm?pQN&U8L;{`g$wkd1IH9vl`7 z%Bh55c(1CJDl;e#uKY#1Az>~B8t9M6CeZ5GMnx@z2om7Q=z8h$8{7_2K4S^axd4?r zDdw*!|MfvH9OOC8+u2H3feiWINVKzJrWX34$*g~(1Sw=7eg;lE2O(JJuI`%K!Gt#? z=k23OQFpKV4KdmIzUzWAxt8Q*ic4Y_C=;8KhKm!$gTQIvQA;Sj{K1SG?K40uWwhVLW$~>%+L0JP6 z=bwKv5iD&Lb3!CRJx*bd#zZ6Qu>&+}uE_iXYvAargX*(H_#iXn$JjzJhIat4}HD}mrh6RbfUYP3TNd%%z7Vh)jpnu#R@Igb9~R|b>8%pP<1 z3v=MALNT$fLpI@4DjNhj6M#bH_jdVCy(lYtCxGaKP)yhKUxGlzcl^G4!G(OgkNaXff}ccG9l>n1 z1D$LiV93%=7dse>s%Kf3W>A$|srm^Luxb?h0HH1z{)_1DI03nl+MuEe>3*scgjiTt zDxEQNs_T#cM!4FzMhzPCH4;>ZjYfrZE*ikbk3co#;j}*FIWSG{(&Z+6{RT29BnbmI zQosd7jlMFX?$MY5a#5&gpqmp01#>J~6WQy;C1K2INuY#92@#KN?z;yX@6TL=lb<3z zZjo@lF6;R{yOg0ivq_UwHQj8tdx;+ywY1Bf-pH;;RCs!Yfz%7bSWZe z5OVEkJwD$#ya!;xK;E-ft@b`x-U7=k?{{7v?nl#uK&_dme6&x5?qQ-pMT-sG+X^pp zcPl&|SAM^oeuh!6I-_J72K4vq@8Rvu0TPwj_8dr>-u8&fwKdwa>}@(XLG(YJd|PVX zDc^U4>Tq`zlIjHS`BDh_5sBpK13?H<)D@P|@?IAh5YY}g@^Y#m%LG8Gwx<0bxhSF- zka!k+^kpmntcv&rS8=LPj&OkE$`~yS1?@5Fv@9X3>iii2uQUe|2rUl!61Nmt)POwc z`Gddb9qr|WBpU402gYQmqyY_?{-UH77X0?)L&kR62;Y0A{I8IXg(T(F3_va8K11-d z0DoFB=sLyRsjiC!qJ=(y#l1XTh`L(QELeUHeHBZ6@uEP292Q1`-%iU2x@vl6x_;l; zfp~RRz`xLczHJ=;%k-argX6?Z!1yir{5P>j#LY=e$;rU!pMXqaN=!`OhyOdhiRo`& z{$GM`V)>Ss{(|4c$n+0@(?3L{|3^e5rhii~{Xa%C(8@tGo9KP7RH0MWtwQ%rupOOXlkOuGSCA&a{gLguf zsNr{+ewC5ku*trWQupDDp42Y+BJAV=y zn?LFNnQz6kz#}5=dkLcLKS|)6H5SDLOlDFfRelT`vU?F*U&!d)k0{-H@)HujdDle~ zYeAxOZ5iLKPjy#Jv^#~9tf9~^t}z}bW?57?1`X@Ea^3 z5pl-(BbC8~Tb`Z&-3d!!kC?t9lGG7q_?mOrY*ONl6B2I$mm)}J*^z~se>sSBo1Nu6^k$Xp^k3f z%V*nA9f`E=JlUrt&MCUvREQyWw|IF@M%KcpwKB(7!Z66+r8Zd@{HH`{#rO`GTQlqP z6kR#1_*tgZ`-e0D_LpU8T6Vnie33jFYt1@w7=6LyVuZ`;Tb^S~0(zwyc*ijY+AUJq z_adZ06p;v_u^W594t3P)F1V$yjqHv?ssM zsvmNDs={*_qsuRbmbeQ&yl7yoLF(r`t|EIVWNb4VRALLZ0EiKbO!+ojNJ-7Pd6hSs z!?7U!X_~WSB&%_vUPS-GXd0Y5Y<8;M`6e|f$b*}4JAkIar#lu(3&SLdH(Bd1$?;MR z=BLRB`?d-i#F;g%&$D=(V;@4-dov94ic@5YxChij(fRuqQp%IV3k28dcJ@T4nsDv8 zIIe>F`g0@}mY&eP#TdGILAcvb(yn$1r`>u6`jK2Q2w40M-v@uP%t2>nV{#o4Rae}e z2xaBanv2t=gb6Y1$Fs90^+;F$&hA^(2@jM8q(UPPvSaF0E?Crgk|pCy)CaF`F4g;`|29U;$cp?ir>8u}P-i7N)4Rb2`j-=*#675Wqdj zE}u3MJaV)V%&<$uRs69pxJF3rJ0>oB%aQATwzjeKg=Y05DvjIAy!OgQRiTI@-k}xT zvv571Rkxa3o`vU*M08t=V>@FBv&qkZmb@&O*ucNJnR&p{QSquQU5ch+E&^~}LKxw5 zVJMTUlaBt(QOO_F2)NwpE z4bj&KafC&6SL3p`>7vEUzMaCQH%RxChGruJKt+uga%!9yOI}^FYToRQ{0YqOlMADFZ_W2MFZR1%=wFn)i?|H+~JgI(q#)oyadcXe1)2| z7@wm#JA5R*|6`xeMirr}6gdO{kuL9k*E&ozuHY*SJJTCB-0_eLZ21Ffp!vdVW3G$l z*dVLSY#tn4S(kmor#~pu912+Bj(^F-!l$(+qR(zSmz*a-HA*BWyKU}fzkd~H(5NMD zbEU~9sm9eh)0>A)=R;3(w(ePM*nExRwb@Dpbm0`^d|7sq{YQx)7iB*we^P2{#n|^= ztKh=@EQJ^7q_7Kb0TXliIpebUzydQkt2g@7cSjO>K9d8Iu18UjYWrzV72 zm)47nNQyai_FD>X#0#!R3zG~>CsSKrQ%d8q11}-Cytg=|l5YMjfvYXI%kY{(D2JCb z-Khh!yn>r&wy7ieDMl>K)xB%23QRUAQX7rA`B+#WtJM7@D2J%%##Ow%aO-Bsti6X1 ztmMApi9gAL@pzYuuHyI%$dpaAZDyFsMbdKzXINM3WJ-PL_MQkb03;8^09lE=73@*> z&#;Hfa^9nbOL6$+AE50-EhI+I$GUzeAvj+ytaX+OP{P)wcb#AL#w(?MOq2$w*mJhf z!u#T;7M7w12D(M*wrPnFfL{&?v0Ere`xa^*)Urafmbju7Ol3Hxlq_!Bg0hGuw8OqC zGJo96(N^veApKeoP$>kR4EtRI9*^@{2nX065?))OkYpYC38<8hDd8lq+x*0S%%T>R zH9OBAO%1$jm$vzDo*dUSMYT7Csa8P+u;+zr@RA-pVx$-?`$9wHkGf*o+2`Va!_8tz zwdDUwz4%|4f?*?I{M*^SA=0A%QwGAffWXM~9}m7T|Gm)ikKoHcf-nDtgD=c~QQ7{F zMz#N4=9M4+cbixKdHMe}%qxF?E&hY%73RMes{b12Dwr8OMNI0{rsv^%t(xzw9B-eEw|gDKm8)5w9hq5^*OGeD z&5Dvf7E9}!fiK@rrkQ)otD_Qo*%EHplLzxFW$!i?PK;E?jYe^Q&BnyAr{ep(d>-d+LA$A+{TlUM z3br>%fDe{6Nm^g;UeOKz;jSx%vuD}b*di`Oj{W|ibV0-ko00EU>Xcg_KKHkScN>3ER( zAB+=udRy#O~J};`~J0m(ca&u-E`wAJb8ffx+ za|oZ6;srOgt%s;_-ZSDaBTORR+X*7In<^oV&xNMxE3L*8A`EF&vE$vJPP)Z=<@arH zWFxOkV7rO5)wK|7?*-e!V|e_4_f*iW38I2HzOY4zIdVg+#xT9ru~xMW@62vY*Aq~z zM=SdMwrpJ*yU{{FHGGWXsQ=(P;iNwlOS-T-{i5Ua2`uy8p%)BRGNekL;WAX&Wi#Zb zJ;a6l#OVRJWsln$u-A8_iY6?_74A#z~QW~+nLd94$aS|`nc3rW%z+nc}vm1pb==>0TEDnb@5|1csG$9&l4LCHX(a^UNNS60>)EnN?P8LphMa3v$LRDn^ z1ef5S;nie8aGAWjsNvX)Un|>xj**D=vMih}1G1&&VW&O^t)jR%MLz%j{YTEuDsChr zuC_TM>&?EpXCbG=C!pdQVCc@V!o%<~65fAr%u{-gbu{pYxtTrI1^1*ZAfNF4`7;M7 z-XtLh?`FuwUnFtR4K>=b>6j8P?L6?f#k8>ZQQE38ue0O?+ojy{`@7C1z>|)9y`W#* z)uUG$=tg{Cfv&La9G_#B9oth`a%$ zRGNwrkiR!MFw{GIRcXfN_VuCRXE zi#2UF9}c$46!o%U$57bO3WAX&Hotw6@@}L@8dlB=IHar9`bihjP**k!9~=XMnnIhB zNkowG=HcCFp^F|uMl)A99tSCkS<|@R*vs^h$WioaGpRwx*qsK*j_T-tfu_NQWO(p{ z@(voC!3LJWRZ`wU)DK9EMh*f$?Ir`#H=_DwJIl0EpjU~(dM;7a3f4EI8qHDgkmYI3 zs3j*txRgN{>5n)Cp@0pjBPjv1l9Q1Hqk=bG{{ln->lo^*&l8~uq=d;+;Ab-i15(Dx zN_bAr#b>2$l@|R;>~I{EW;a3zesOHduS2+=0%Vd`PrBIOoG?6Mi}rN3sopY8=^JR^ zg6wjMo)dSgChoqeKPLu!xF=-bVfLpX3GwrFzG+YH;?Via7DYp~W4LgJO=4cH^uV2YhS`ou*l(hI=^L7MdqvhoTe`_~YKFf|d z!~2hYL92{j0?4((P{StNY^GTcUJeB9h)Y@Z`)^n&438>lw){eTOetOl81r0|TbFGa zUem?_l-FKlzkb5I(yXz&!a;aUjnYX=p+%OW6twof!_s)G;wPepG}IG6nvRL)(slq`9AaX5k;st%;aGg`Zv$5pcI7E2qkO^wD!X?L@ABHf-O5@{1N3JkZfNIAh3X26v0d8W%v;Qn^N5fIllL| zMss}iBL&rSSyI4gq2GArMXa|7SD%EQctmRxN;Az&xJzu4?%kR^Vc&IW$hau&KAvi2 z`zIUr9X`nA+uCEt$OcLKT2X)!xnz5bkJDdLLH*hXA9Fr;X`KZ@PD@1uVisUEMGBsC zWVmo$x+WAA-++rMXkeuG#U~^pr$&)U5s#72-JBD!4!o+T?wJh69!j+lpG>vF8a$Pe z-8W)Xm6A?a#Nl%${(%;5pqmso2P!jn$Ob=l{0o$ zn&z;J!1@t_KA`tYKz+N!oGENG7#Jw z_l>LMi(XtowcUWgo=eBInIj0o@){e1jUcGpks7Ch<{80qaa~QclW2vp;D(=CE}G?a zijofS6@J}`n_8WTGHu{r3A3>ebF=GgAN+aGLwKGlnsMLycsm42wb zhBsn*#m@&{B4B~8QG&|o2{PS=Md4mU%fmWnG`B+5;rLXtgqz-bg z;3CmbWgj-mg6GbHeW&pTkU~G@bF`$wq?!AJuZ^!2wmM3!4ERyW3inJ5x4W5EjtNwQ!=EOCrF^|Q*oMXoL)aHo!KEbu5pOT+rZe86NNo@$wZN z5^5-#^24tO=bqtq01~Omm8%$edq96}-5#&k!ONrhSWOE1w>o>Gz%N;pb_(iL)se7u zpTs#O(jIHxk3&(ly}7}{b=*()t+Dg!rSZ$<=wcOBit{D>?eX*ddfbew&NkT=s!1mI zOYik<{I$ehB;V^0TPFqh=(MNm?^0j6-muIXKK!$v+@!r*pIxu_msSJYteWpIYI-6m zXnPuE((go9KGVXDVaIU({6On9s$+3LbHr>xg2xXcAx$L3i+4;?pRQmldB{pK`br-f=yP6XN z(S0gPZOBL7YA3?*@LWC$mRREw#W;{y1q6P(H6_iIK1yH3C&T$SXSZ>%?33$f4RgWl}vv^0Q`f)krU9Xo^+I!Nj4@Q<6u!HUuxqc<6rz16YRWCk1Bwm|I^&?j^Y+NmCq@xSng%h8mS zBR*p=fw1f)==;r1>jAbVIM1LVsBU6aLhcd3s(vOBn1gR!-iLa|pZY;@G87Gi?n$&0 z-LlQdSjf;psWH7x`Cp7jNA~qrA9YnIg73oTP9k_+F1?QH8^9=(-3htEr>wDrIs}t~ zu2oY5EJ1HWQC$hf9Mgv4>8{bVp6}SA&kiJ0quTN~3sL)EWA!GffDSi`D5n2H!4C%2 ziOly#d*0b+W904gEX(P+6l(#wSD^~S55|S*kbo*8tl?Zi=n0i7Dq);Mc==ob9FNf9 zf!P<<=&#N9azS>tdkg)6KR6Uj%_?PzN&q!fkh#0F6IjSFN9LXxPo_wGxtJvG=8}gdFDR?yY`=f8h7YAQS=Y zamTC$VZ31S#loawX8{m^A>OX!DD5OVNKPstBnyL5K^^uwHU{y$t#+o+-$iO%)B$oA%%z7VlHC5+iZPT!cN0ihQ=vf#z~7BpBy$^a2n(Qeh$aIJ*;Zg z-`nlG0t3xbby{p_pu*O%`dL-@$MOg_fdJ!C;*+vB7PG@Et?&|fAWn*C9>~&b9b3xS zq5c4L3YX6;^>b1>Y37mQ2a0X(u>??g6!vix90B=;A?pYg!W6m6DOYnCiPhFA>FAdV zUVv~IDCzJQdL^SAT3MxP)CJ^+VDwibnkk7#B`Z_ukDZ_xvD)?-Md&_+ApnP|rD(AFM2O&0uM$N6OhBkUMhbyLT531$ zIJD-sC7iwSN!VaN4MF`P_y@jbIL}O{={*?&xGmx@?!4VeAQA$Q~fipSILZJ=UG305NE#Sn}FEj`mn zO3YGZiQ$;{rO|&BnWpaezj6M4iV=+(La-#vb;T>;{2DdRVMsl`d<nZ5c9Ji)NmN%YA zIb^!7>6kr^ml915)<~9?wW1Ft7pYoq*?_9dnbg5vYguOe1Dkmy5bvTFOq8V-6R#f`PoZzN1PH z?Ho&^091D^Q5dKh>XZ-~9BhbK71)h))qa{(8_#Un5j#3SlGaO$A%OVj7VS1M+SzPY z=jJOwpAnap-Pkl7N4vi5D)`r3U28_TojF9d=&DyXA5Wt!!G2>d7bF5egqJdGRSvZL z%sI!`ssmwkgB5-bylzoVJL=n5*-dQ5Y+%~0SicR5un9d1)CtVUg&-~X`cGU zyq^rg2SUn(f0VC=#%gbC)GFJ8&FrX?m~5*yzy z{tFc;?8SgPh#kG0wZuz{(0?$RPRJie_t{tG_i@f7=@}#+ue1P0vU0_Wj^BMAQNO9V zA2}M_fd-c!b(ho8;WGA>(I#8CmarOPlLg*_#I0{7GR&5U*)nw9fenni3VJcdk4PpF z3OX_sIjg50_N&`Rkiz_;6p#xsRgQ*<;ZOl1a5G%Vi6I5(UGzBmm|l^eSdVS+)nxD} za_w-Ni_`5rwyw@q@76b`-iTOh?z)t3G0R>eNlbX^NrAB4d7Jf-11qoiYn8^W_QX&` z_zYjO;J9Uh>=(i7_9J5e93Tt{<3F9^O(fBzBY-F;ZuR~^-_e#ocVtG2LL(3`z(6yt zex!J)Ji0iCLU+MRz2vSUb-?XXDF!m`MR8{aEKLNtp3oL+Rc%A8 zI8nazvzU62i~&kJjqOQ}Akt;yehNKR{(Ud~IlUFKbJ&n91S(tAL@jJAv2+r`aGcN- zM~4iBF17tkss7<+vfD`?eN#)Q`Z|RJH&w%-)OLYmr0Zanq)i`8%A33aq;a`-(X#1| zY*(xf=D^_!^kL*f1Mf`zk$hVB`cYjBL#euUds<~|1ArDdxs5$)6R&o(0M>BMR5_9j zN_-2NLV(}SwG}u*`g*saEtXd2*CvR?_2Bf*VDw@3(3_p$L4|eXS-2bQc-uHgaoG#G z8Jio)r!d=6XaO5S5y)ldHaJy{%$uU?VdKiOSlC9`YIa_QUyo(T;Y=;+=WGS385dT` z0nsAqM z8Xmwt^}yT=;FP*xyfIMRQVckBST2eY-~tV6XazhqOSO})=C;aa*n6uEp566iG6Ukk z&h}0r9jm9huCSa0ke*MQJ`2uOn=Jz{j@5^ZXJD->y}VqT`)FVtzii4d#e-I9;exI_ zvvjZOzqY;d1Bp3;lb*Og(I+vMF!)xJSDfB{w98%y9C%y;eEs?GQURUAN>^}*SKn!+ zoD3_kdlDJPkkDoweKlKD zw+Ip$k`@`Pv0ytustVxO+ZDwJuFK2p!n&zSxY6`=Ukez$vxHPC{d&ekOFuJchA*>O zG?~uScWRLd9z@0gfFh1;J;K)f zt{=?aPf=oucv&b4Ow!b zy3rta2!&LAwVcRc0DqDk4_IENVdN8Yu~ynz3cw(bA}zN7#upR=0DC_0#b2n6EPs!Y z{ZFcme`Rv}ram(gu>VWw?te(=egBB%Uk?Ah*S%0EhfVpjCo`r(EB zAJ(kZKz8Feeio)}H_( zBhe{C84Q7((Bf67kMGnW&i+3Vv}5_JP#f#N3pCTDHvKoRP7OD}wgDU`jG`0-b6`Kr z(-Fn(68Lgdo&r5BoZ&3 z)_O~eK3a{L1=g!F+ujwOI`gh`*O9qq9Jqz}%ngbSkJ6S>a+en$7vN4}VMe|V!%U>7CD%6@=dI;h z1UnbPo!Fa&etf+yIYZ&fC#T?_TDa52yUz#VVM>{WT#?_;>UWho4&x2dBZ7F`uX{_modnGFOs3lI&6D)m*7NMcSueOS z%R*_)WAN>ex>QrBWbY~K^nzc+3GOr;iIhA)-F~+sQn$n-*pGa7O735E^%eOhRCQ-?{f0Y*|iiZ6P!cP$b1L>++VV&5a^;*1n!rR)jfa&h< zd$a7W3|(usPci)z?YgLnl^`l_nA6&oUaOA4btmm#&$tZjFzgg3=_<`UVgh|5q}9(7 zuh)JT7{DcIX1&T&+1~qwL!;)^ecC#=;RkH@pj{v&chUO>w9{aD=08`h1MBMi5kqU) zA^`2iv(Uy37)nTmnW8xyf#frY@i5rO5CGhHD5R6<9eJJ2p*(tj6ZX_qD>X!xSZ^RR zYNI*~RwYDEj7r^Oa>p9s%`yWZc|5M(O_!$!Oxt^Y9h9Q-G{)}p!wa^_0n?>Bf~Ky& zXn&%zUt2gO1Z!*rx92P=;LU3>93+RQLHJ3e0#Wo2P*j|lU=xLUdF>YWA~OFX2x%Q~ zq^MHJu^YSKxV|)^WO-kd$7Gg$ zkYkYM;Vx)VDiw3^vR4HCb5N)c)tWc|ue!5myN=Q5J|$d-9TZnNUV#|Mv3_>(Ex6ib z?gbEnGzFt%=I44M+vK9?uKZ+OHE3SouZC*01DF4Gm%&Jtsldg>MV!fADI%T@@I z3Cma2?IhdB=Ob(?%}L^QzX-Zx?4VT1!4|}7K|Bp4Ka)`xddE~7{E0gQX-1a~amyDH z#5nt>HVes<8B9HyMjP#=;7JcH7%qMv4f(IzI|ND!p1|*dQ^SkVt*{m7xNV}HFqEIb z&~v0}ulyzGKtD~gFvT0{W)i%dT^Tbt+KQc5xC+Q+8XV_P!XbB+#|g7s6XYFu~s#*WVzZ!np)) zAt?EYw)fNlbXjy&VRGhFXqfC1eiGh|%hy+*#(51zN;jhK7SI`Eg2BO-T5kLpFwxQu zf_?#iy1-h7dC|Gcz-Wn3H^?sYD|vGip^?Egx176?Nv5MlAP(}V8wONoXfJL5?yr1E{fl?z7GzYYnt z`W-X!E6z;`C52o_KRZvSF))E|z<&XWe!}~ElM9?@CU7(JA8U&W%3(k(=O}~&qhq_3 zR^X@5-@y>%W#Feus##Z&pITB%hKtzyTbaXGrF4$dftchY8B0pJK97E;k2+v63gF^D z=UFN7w65Os5z}yPKUKJsHy;>{Wf;$I23+#Dkf2dPAq?oF_Z~PSWI1Z48sQO)D}M=W z?l4U{?Y7s^i1x-ZeuR$1nk3|>hhl_F9U0J)GUUV{)W|RRz=qL@Z_}I;7AF37hirvm za9iJKKk!{LwlPRW(}1SHgG05m%&G>LVnP!lAOO1IB{2*-=OZCtF93pi3~ni4i>(2xpR&Fal=>!^9voT@RYHqg%k z755rykBo%`SLh+N*56*9*$MRo#dDe@C_{-8Qhgcc!ze3_WR?W=!P*Dv0O|rj*2R7d z5NLVQsosi4h2FXdT>&mke}K%i9FVncD&Ht3&vOh#o%~vOiubK7hbtbN$1YGB28%2o zt0A*9q65WuzE^cQ#y$~@-oy7y!|=} zd}~8W$z|Oa`w(_;IIUMTFi67nOP9x=!lEE;2_$ul@uy>PRr45^5SuP}BB5Cn7*8UK zEuC!z18`hn8z$jo&CiV4O?sb8`d3lBd4j*oc`TY$ev?oM{-&JJ1-WB8HyKEa>|rd~ z$eJY$-|}nmws}&pq`#K(p5v;QDu?nsa8H631Ei8ppb@~20Nu?KpHbBp($T-QOB5jF zZo&KcycbD-zXCShiTC zVeolIZ=Jm_ozUu}bS5eO6MTb#fAlDKjzBt$WXs$#oylmfyWPiZVBmdR_u#$Uo;!#~ zs$cV~xWvIxtlvt+C`_#nC0P$2k2z7VL}3cq_U~O5{2Ia{^%}Xs72S<%mI(ntfyN+T zLJF<8Y~cs~lASx=3DFGPwPU_c3;Mlyn`F;=7*Qz5>?o#jmlRU8mwW6QGKhWRMSqYK z0HOv@6;S}MM%0#-D?fQwh^6q|3lqTvOw;)LOw}EJ+io#sxayWf9(0iJhs&iw-*2fR z;UuLzhLi}5uefobmbn97@2^1Rbdf}e@dRNmBuob}Do+n!pbR$ECO4H5Aqhp<;Ao$@ zzWxEmAW|wx!(T7-#XB)W?W0a`{4JH&vO~^2)1^vy)E9*)^U`XDflBL$k#qomEiF<( zDsCs@KcYgW%jNFml-_6~)U+xnMBQtGo>?i$8!@Jk3_^whhTuy_7;71(0LPSR&VM57 zUba~Q3*128!BZ>B`x3`;cU4Kp0e}G&+MS9v8Hv@9V8!e8;-#~0$ER&}5|xQ5uNKF2 zbhd7~nKid{X;A?;NAD>1M}FAX!z>4sIiOQ~AkKR*iA>6*xc*3gyHg}v;HgE~8 zVUX$3gvq?4@qPak!MALEL+4g8{}~$YMP`>?u(}8#BZiL+?``h#^uiQMV!GH;EEmG zRB@nCg3qI)ftN^S%09<+5Bc2Gdk5EF@hCN0q39m-(+ar87Ag#trg|MezVXWwYz|$B zHb+~~D9{sW$6YKMs-7aIWT(F7k~a;$r3=|M6}WOt^z)pU+_bnP204Zq^>2;GXAY6E z0&!M*>^#=#>Eo$|>=({DCw`^H(eX-^EZ2Q{43nR(4sta_FvP1R3k0Hu?@n*@BOh7C z&of1)o}S;o!CL#@Opm`D4JzW1&W9zebI1R}Hiu3A(2@eVP2h#XPpb8Eg=^wS-Vc6B zWmPJkE|StQWM4b$Eh~Zsq|;ml0Daxk5%*Rtxj`CVpdN2m+0jfd#O@LB`jYI6E+Fqb zHTwcbOrNiXxC~2%=PnwS%yZ8)hNfQwm+$ab;r~c;4Ht~hwGW`dYX1JzNv5mua{2L90%yb0>hEr5X&K`g0F-*~#!O(&=pwy!27Qm2*|VYDuf+F??dN#q~!(38U+~&yF94-IM_Z*^7~o zkqMZTg2^R9a$>BGuyMUBPM@IM0?#a8sY45BtdQ7p6>o^yhR9t-5yu#Glw=-jQ53C+ zW+tIe@{v3Jj(_@Yv0Bdzf`y*4*&ZUsX8qK53Fi~SE?gFArthG{+-W=kI|NgcEJgvj z@o}n6v9?@~;jkumO-jSeE;w66EF>{lAmITCEKt*3414IwR)62tV1-{!IJO|Fs~s!( zqMQED2cni^7265Jii!Q`@F-AmInVCTJGn32TKV^OjX$d-{ZZ5PpHWF-|EeVY>()t@ zzpRsgA)Ef2RFYW!SnT}|*%t#F{XY|J-jK4Hyv~d;oYQknkKS3s5mg~4)ux?$*dV`C zvs-@Hm%&b8X#l={+QiL6-h&v)X<*T1tzTa8I2K;tZ(F54;1J~d` z(6S;9d9TxhMHTY4v*^;?*V`sI@45Tw0nwL{CO`Wg)5EHZ*5c%N6LMqHJ$-k0#IzyI zG=%|eQ%YEtj=G3ycyTMg_D#KNn zDNJ{&r78xr$vY)qVD``Q`9YqG2pL^5)+K#aQO$juZ;wet;YL+MSBOvZsVTR#1Tl2j(g)Qp+yYa!-!SVIAw4&GNFdW|4_a9JbXE>lcQ zF(zCmlK59_xU9GAnNGE#vsoFeR(>0)fac6y0tQ&yuPmrEQzCV0M8oaM48Rhi#r4=3 z*VhrhXI?$6Ul=#)|0## z6Oq9~_uwEwB#JO$X4qa12HdhGZNu$87o|NcVlSJsS;H@WLRA<Pb^4fT-lc?YvOWFlf;P%n2VzFU9vkmuqFsF;hlSamr(gQN%310w178vB^gx~M$yBx#c)&d|o z^xMsYAZ!dyjEND6S7~++3%zR=omcXlThGfCSq4K=6yAHFY87|^1>NjbS5mJ5W;PPR zPztgXtkKc^6yCkE;|X6XJwpK~I>_WR;B%NKGbBm6q>cbeiZ@uR0o<{>#=s><9#$dH z(v%}Myu&nlkF1<1uY3<|ZK0GDf767OGx#w~Zjz((8CbUY(n6~r&NOjxk1IhnK{etj zAmtU#;v+iaxniJCr5f9J7TY}fOx#rq?8%F`-D0{k{t1ug5EpKAc13oC`EmyHss8v2 zRNst+KclVwl_RYvM-&--W`VwOK$!V4b3rm&Gy#3)06$BS15t*TENf!k>XGWLs?KGK8$+Ik@_s1+CEo@DNf|2)RX z>^p*8`Q8r$1w~gDUc|HtBnh!bZJA28mpNkLr#9ha%C>ZMr$Uy%5uKC~c^x%mix_6% zWq+L%a!hg$1JHO#g{GZlk~v^wxk@2LWMgPM9YPNIr-2{DBnnNj%OpqvnpR{;kolH& zlkPOF%Z-*Vy zc_A$bDoT)5#iEPC{&&inYQ}Bj#lkAeX2zTh<%EI>nVF7W@-OFI&X*us3kG zxwpYLxIB19i2Z~)9eJB^LIx;UFo|jqwC>Fi!q~8fWzY{++!;qk3*hIp zWCa=yjFP&XG)bD9YWH87s?!FW#qo|C;I&G4J>TMZw+X$LW_T^*y0VKdnbMy~62GQ% zimAIqUJral;M50vMPSrle1qWCSA2sM&<@EXY~px@G(007{%~iTBhl}ypcir8r&H>I zkoHuM{^r%e0>8OCr2K#|A@r-^Eez=eOo#PTKd1|=6qfMKi;Ts%PHXGXl7&2 zLuRXQh;OBDO~%Xp^+ir)b4N>K-hW$%fTiQVf3P(FTOtpqrM|T(51A{Ck+F%slcggW zue^Y=fGGWcEdRd-y5o<};$K8}u>8?a^mlXzJI6o8xE+oEH+09l5RNARsW5~JKg~^M zLyQrXAk$RjWb2#7CP{9;yE&jQ^h$6YV#irIY=a1yQlT! z_B2;P)B_&3YL z922ywDcY(vqg=#oLQHRjXm6H#_DQVgs+Aei=^c{YVRAoT9JQ<93|f27NR=p?)wAi) zBb;+2(lStFBRtS%PMfc;HDCqonkS8dVxBQi&FjO0&Z^TE5Nwzf>!urm2NI-fdv>c( znFeY%BTSf%5oC!cl#4>U=Tiuf-4s%inzKdpY>VwyYPmv>lIIfI6Mt5mnk6+EwC^If zJvAG)rx~vZz2=`d3B$kq0L`!*4Yi@G+X0i09F%+`Ge;n6n zZ>7<}-l8*T`Fh*CMZnu6v`OYVIb-Q9cQnM9Y==I`Gb4#YQN35HuuoX#eerhLX`Ns` zBywXrd=tvN$dN5172!DiM`EltBtQ0RG}oKa(N7+u3mzhqRErpXX#lvE-qa1ab)LIme#~rD%mAqNZ>crU05ko z`CbO#!Z`^PM#=r)W)~rR)JFjE5CCE_8DB}t_we#aUV#d7W!vvq*i4HV@_it*A{nA1 z9g`=f2?FYF4xcMTf?ROHGVpSOZZHkXg(4Tx;CLcAX2?iZg87(O0S+Sd-8@xVeUK}l zy<5_R6Ho;g#+x4d$FO1!vNuM*qZOy}@O(4$&=~ZANrzU8VBB^>e1!NR1Rh8T9}W}E@4}$*n}IL+G+cUKLb93b#pQR z6m$a1awAeF_kFo*zlU`D@CG^>xF=J-F%mW;A^BqlC2;Jzf#M-w8xC~-(>=^$_=J$o ziDm7#kP@%6f2~_k2W(-gqs2JsQJ!_Av$H%~a6laI`ivUL*vOrvO4(e{f)AGpBZ>Vc zHQR)Tsd+x(3Qjwh-1bIN3*fUAe3RxmuD?(HdLwMSkKU}D)rHGAY>xApsVO%TyvnJd zN*nTTlX#Gi6m!C3Yj*e<=Gfu<$j~qn`a;zrqaCzCP`$j*;C68Ig2;p8R%`@0GMs6c zs|J0++6*OxBp)(EkLMOdq9%{;!b{DjOUF7DD-4*Mgs3kQQSk<|46~Hg&0WRMetqnq ze7{q9VWh{XcM8hg0Vc%qV#>>+uqC{}-|1G>46ajCNqGDyk`0#jF zH0A3s@jP7@TH6E>E_0mVI=g`~hfEh@GV{!2oet%HXlEtCEdF9ZmOc~q4{5)=-AQ{0 z>M_aEc~Zw>b-hOsh>SpVoZ=?GNWTKL5mS$Z{r635prEp2%9iV!4&WQuUEr0{f!p$ z-`FiFjKRTp36QRxEf&uD1{0F++t2H~CUz|y-CA>=-%DIl)t9+q5U|!cT7s=147bjD z7xyhQvC{oRUoG-Kpa!Nv5p~Mu=|gbST03tCkd8Yp#VXkSv~dhXm~uSsF5A3WYvGmN zUE;Ml8^l7sExk&{`>e3V5Vum6Yh&{y4)2UJj*YW#T?HoO_caiF3FRT`bb`kg=L!NwjV0)_CjpR zs`%|SyLw-nX46TkJ@U?jNHSj!BQuZzd?iQo{l~8@M@>!=ONfe>|(TZ zLbzf|?~*Yd(rpr6yr3xrOD-g6Z?mGFw za2}gt9o)>uR)o@wBh0|YpGRS3-E+w-CVsY!_N;0IHy3emTJc!o%xiN@*UWT1^F>sT zbp5y!xsyw$0YL&br*Zms&Qil8+SKUjzJ^bPpBrO`;V&$(0VQSeQUN zATdc{WPAf3!-n6G*e}LSXIT*47aZ&KwLvgNJG9F6ljfXOoGo&MCKw^ggb;e1@Ptlf zR8lfi;2QNvRYy-J<^2m0AIwH(5{rLT@tTBMt%o6rE>_zNitn_yMT%PgWLz> zu5x>apG^f8MT4pX5C0g;dqJ1~P(%mLnV+S+MveZ-VyM@PouGK8AW(0VY@iwJR_Tsk zb|~z@fUV@^={3&R;*}018xskYH^*Omqvf*{$RT7Njxkg~;TLP*1)TVaMkTY5ws4UH z2}H_LzR_o9qhT}Hk}gJ>1ry_)Q94|)LJ(T8tXe}tO(?3i(;KS0%iOhXzZ$WCT3~o@ zI78P-r$5xj5y?B^M;3AT20(lXjtGRnf~|Xu=|Ga6u(EBP-3chcb;D6orQ4*otHo3Y zi=oYAQ1j7*mc!A{)*ICvw~FbGMf9z++UD1Vio+38u&CO%Xa`t!oHJPf%_J&?Q#BD zbcKbfRVr5P4;j!4EqiN7?msjYXeRgdiXz_2iexBpx7Bn$qd_6$wtGv@s>{^dSgxX8MISdAr6WTpf}nDn)=ekaSyAn@{G}GcVDyo zj#NboP&ha6;ISC`4ybowRFng)q4p7<6m5tfKcX0CFH;xkksyI)if&{U*xnNdw7llu3S&P;Iy2{1>Kku>KK* z`9Hnu|9Nx{);}qeG10SpIa~gj6dU_>ain*k4i=d)i$>y zfVfU7>sA`_o?fOa`&yM^oNU|63@?c816hXX{j|$DI6R}Ash014zo)WQqP+-SPc_Gc{lI^ho zsoFds|1?-pk1C3NRVQ1Qv_{+ zRS3(7g5TS!pImwHlV8H754>PqYMoeOyY=yO0tKBL5oT?tFrqN!6Dg9oMBic)@9IP;4|PBg zN&&EaP1c#EwC302`S#}HZ+hqnJ!zEQ2@~Z#*J3XNP_3TnzYe_QDgFkEW6(bDFmg{^ ztTUJ{k54NzVRAzwuE*gU!w_0lLeAyvBvLY#h5Zg^G?OcHe8f3#XI6(2B+iSXK2GL) z)GUPK$ivh`Q5`jqwIj&J>7JZ2?0MqQ`0-RmN#twsnx0nGB8;BycY3^18MN?o#tKtVep%(lor%{0dwa4nytt2^d*D_+ zqVweMeY8FWnIc!Qg+v0Ev7H(ZBO;=RlPX)6!n7BGrdEsao|QyR12-{-u@WLOhv|9f zML$+}rdvyq6XvJ{#gI-zQW$SCA~T^+BrRFl`C6YT%9pj;j4H?)(f2$_z?l=Q6#XLufT!%e!5xS1PGM;GOK-K*Sge+>Q zu>`_z1<3eHt%=Gon9DJVZz4R4i^7Kq^7dXF{4HH1(aDmQ79Ll8n9q24;M?cL_0z12 zhh^{OjHY^HI*o}o01f9>7B*xofQfP05K-;923bN`18eR$fdk)4DMuiM?EO6(yaSX_ zFexw_Ml!PygWW=FF3@;-A&3Q)DWo4ELY_E8@!!)GIPYT^n! zhH*wgrZSxm6L?Q%j?7u5U|af)dV}!{>Y2ga&XC`PzDKlXLxdEUlkf9~j!o`c_rx3= ztv3PtcZ;;*7TskwWtarZ$uPc+P`1Zz0_$+2r4NHjDZcVY6$=*3f=rt@WiA|PJ0HUf zHzN;^0+Xnl43-ho9(r79R_R8hVUin_ufnF!&pc&O5tb7qo5gsRWvN3mtk_u4--o4U z4CiHD9-@{?Y<)H?DV3+s_U7I04@GU~&$`8zaXVl4hdJZ8}KG z9hY+Q_u2$Nk-hjzDw#ECoRIbENG$jMl>1m|M7USl)QN0+16PmMRGXSCkKaeb;_Y%c zu#0JE6V-eb)%+zYDZJ{)eTia^6=%=57`L~`C)!0+!Ye8YJPH=`76QWxs~Ch`Xd=u; zV{4SG^cf8y$n%pshh7L)sz}hZEM;mssZ-#5LGP@l|1dl;YVOd`-iJ8=OY91Oim_A! z2_JooAT3ewm;|~#JqGIN-mclyg-mm)iVy*O3NhWUk%%Du-hHpkmAD4U*2$is*M8DwTS)53tH6cE8uEej<&Kbp0oq3S zSc7dQzh^CHFiuma#Yr^kZf9*ab$|?NqJ6$;KvcxR_sGfNUqJR55Xmdzz!(e7Q~i|>VdBXB7A zI>{c6iu@f%MdgAb8h&?GIs`*|JUlL5&*TsUEp$Zv6PpVa>lBPWz;O$Bm0Za7v~$6& zJqZAoBgi?87PN19BtqR$OOgx=d#i2dy*_GMyBeSS8ZI0J+)LshUL=`U5?R@GXJ=gcTPI&I|y@ZHye zF%(a9rol#OF`ut3`67)t;tNj}cWNuR1m~**IDKo*QBi~KA6u(S^wV*ds6p(+0B=oR zow{pzV)SRgPp~~8z~<}TkRF||k?i|}BO%Xtbo~r|zN=>pRwyge#BLVjL(#m;yuH-& z`qz1_=Bw!5`ednaon(3Z@Iy(kE1+5Yh*=o6KXkc^!!#&5E8x%Huy8Vm(US^1wX3UL zGdnKW`X4aAWoCPN%aK~2socZVBI;ur?p-h(MuJpFER@6sBZcQe6nZ8HQ|M8}3l?sb zqB^2%d1j(=1vgs!6(U~8{#9>&5~zyR?&G#a$W_+a zs*5FtqJu)ZP&)q1GDO!T;} zz0&uYb!+-I5&itRwv5B3L-_h!DLOHl^HrEdM{SY99P9o{liHmf+Tqe;uFz^R{|Xy0 z%6ncb449Kou0*U#jvHz<@pFBDI@+I_cMBy1;RbErGy!`Wbook3=Hs&sd)j61@f|K9 zQ=!niQL=x=gwX%UYh6kJB%q=OYz2D%1}syDN|PH0cF8EU&iv*Fn^o`aYepC^@}1xY zwxaaJsrB^4%ymD}Ah^ZgPdr9+!N~J{3!h0{r7Sy7{3O4D=DQhpdDM3tQ=x zL0}_)iaoCN+xTRl0hI=FdtNX?XLcHLp!4a3o3H22c%y$2+n)Yo(kEGmrad8u{|RIZ zu#`4CB<%0Bp9Qqq7|0y}`pnKi0>A_3TGefBeh5y>GmsSJTh&WeMX4g=mgW^!HMuh; zj?~O~58w9agdATn80eHa!Asj{NJ@9AgGP=`@e+odB7d3P#lA*^OONE#l;i=|VgoKk z>qV*K@_SN=SbvzHhswYVcw=l;btQ2?>i2lpts+>tsb#8Pw-uSzn@T5iY%oEzHp28N zC#_%RjsRKlMVU=z8#s*}=Ud+Ukr2WIaMlao18h^6NyyRYNXVVf%-4LIMLybLkDzkr z@Qj`qD>p-S$#>=H0Ly4+Hlm$8OapsMT>j;feacx4>&J=5sFP%WRZpta62zf$u(69o zroB14jC;wjZQ-Q|F-@kFR#0y*RjIj)_H&-1g7siVA?0O6SqFlcZRH12F+X3ZKQIgz zDKH9PIx%MoHCwSqRTVdKx{y=FvNiYTVGjQUD$@nb9PqFAZA1-4+gmN=BbMOed!ily zyMiSBKPy4}(IxzURD$^5*!Su2S^p+cQH1?7(aRUzlY#Z$lWqPs{mS^wC>{GU!; zf7$o{vhOpU@Iyedto=j*%joeTU$tbDc)&CBuT`$tgdjjTvEALUC44mG9SG}!C^!{& z703#uTS_4nf^*>rC8wg$a-vYw_eVL(xHO@S6;4G;Ia7^WA&;wgQXM`wW;=%Zb!2w$ z@wOS6{tJk0Tc>JRr8?c?4WWBF=1t+FvZJ|VeSN`6#ANqL!_rpG~J}V$$E1d~$m_ zvcbDOs~W5rO#k@u@9$mrv8PHAfP5ZzX`p9#f3JCVQ>lHH`7OVov%1hL7lCJ*#*)BL zFi+34`T+7_T@|l)dw?%)>~r!nabA1F}9LT&g~5vLrRw#AK-W zraZ|z)m30yXnPAIHYe#aryVG$c`TG?d_;J11)W^oewU|bl~T=DzwXsVW9?54tu%#u zJ^skEj_M(d8HBl=tTS%El>DfpQd2(4R=H|u7|=4_c4>xVb+L@Xd5*QBi*7ZJdsj}U znE~B<#HjqzkLH7Or*1&=t=2T;A|(AVLq>uWOzdf}4KLGd)KS7acF_}5&iU;K&ZGGz z!fEiei`M5fVg{EDO`S4DM}&f*%@&GYDY_(>BJ4ST?vL zoVu}itFb{QP=oY@UD&L94?V@@O&GDh!$brjB)EOv8Yn3!yxs|41>>Gn9-`fPT&A|U z%x(I~Zy|38U0u23daUgR(4=cG&mq=Z($y@VJ#t?-+HcM1-YVLX?iXWC_L{-K8d|_- zh;Etu?A7VpW>;mqmgTF7fC`Xqx>uT7Wh;qUK8nu{*NvFmU<}@tFfsIB+2m;*UdcrC_{g4SY)M}&IBW*3 zgHiD{u<62ZZ#E4XUY~;w=!X@YrnMA5?Gd~mGr#Wc%jj$pM?MvT#ug4!W{8tu%~RM6 zFX2VB_ARO3vX}yqVi74Sn#4ti=b-9MJRj)DH7kA1wwg|BMfMCT*6>^=J1?Ac=Gbk^ zJz48CQA;A$JGO&Gmbg`zo0>J^LOd7O2S$TKX4m!y=O7Gryng7{kBB#UIq8lGhU*hSytT%q53&0U1$)j2O#nk+Mx538!}*U)YQ@bgfisKS?` z98;6ac%!8K>W4=@8Xcso8a$IlxiJsd5hQ^aVYBxEG7FI2J)sQ3?!l{wb+e|nM!>!F zUrg*$5nG4%CN4VXnxTLw8AfZ|gtfvoac5Xh*ok=dmYZl8aASG6h{emkTm=S2AZxR; zM}CnCDd4XJ<}^VoJYY8f2?0L|{KE~d^n?eeVw)xEV(1ACR&X2O+jbdCS78Jlhu*hqy>M3kyD|%{nZNAGkAW^KLIS}!T-k+~;HZoHI z+Yx_NHqr}Lo^eW)If#yBgPSCUxvhOVr>k)=5(F`_vS5gDU;BxWO_dtX7>0E#wH}Sv z3BJJbT&ll5rX+<=B%u9980wF@9}f8!v44F3K20n=$)uXPq!fi7;LH!Y<|X)sIL6^f zx5xmRp+urK$a!rJ-vJWr-`YDAUh2HSpt=A?ey*>*A~iQEkEtyOZY#KwGO!>2thK@W z0qZ3UvRfnr#$r{V<#}EZ2j0evn~h8x$Lf}qrP)*@kXr%7QdH*m!ww61KpWUcBbjBO zZscVrg7kYa*fM#qmy$x=8;_9AD^0$kkfAKn@qDu48rU$|369AS=0=f1YB4_eh5_}3 zy&b5t;+L_S(0llrERb0%Uf$FhUnMVJ#f-YkD0TD1v1 zvVD`eyEgZ66A$yKl`vw!m8#5l8+$fMe17^*l>;vLRMZyCOgJMq^7pgR>3#NlqiL>Z zQD{4PvV&aaI6Qq3DM>}d)K#$^#(*}B1TFEiA_CB#+49zb?1c}|M+uRq-prQRu1Y1d zJKMw&b0-VqL*-WLIw;r=Ouvd_B{L-0SQD|avB+y}=QcCcV^0FEybo$)g0-lv%7!JCn~U|g3YHp{_NZ@Wn4g00 zsH1yDJh;uiLdt?_KBuv5Ms-*^Q~pk?RXbxf`8TX4l<0@u8TPeV)KN*0PbrEJNpflom>CjKaXi@5Nf#oy zD6s=Z*Y78a0E_$FnIn`uX&pa1*Mw8dR7ury3y?p%jhRS^A0 zr}s|{1z+ZZujEg*e}K^b@0>IyrmyM0y9@r%tY!PlKk%1-;J=A~fbEYpj{o6bWoP>5 zq|fWt>n&)%fj)u#5`g8wlO+|Od0}Rpi@`4o`5A7tc;G8($bL965OZWr@lAN{d5&vj z6dG~VCg7r&qbP1{q%2 z4_JFp|73mGZU*%^teDX9(l9#u897RwgZDA;{qk9)p5{}pn)^Ex!AnIK-PyFt?4y*k z4(s>H0P7~p7OIuWVHdm=84Wy2o`$UFx3k}SDT@bv)zE`m`=`*z0ux;f6f59Qr!Kus z(1_%!bwPGIweE-^bKEKs8G{z#3@!|NxnW4%sQD6tsKgSKKkHRaf5l1H;UB4KQWxF4 ztBX)V{OVpA?(cDQ@hFWj(X*f(Tr)K8zsa^!qW=yCb+mG3s{Wc!H4SfQ_@jg^;Ft^% zh62OApdx%$b3F-5F2sZ>(TYh^K>&tnNwP@py|v9dpgSQ=sJ*G;vFA09Dr22&qip@H z?_T9fdh~FyGd1ni*J>Z>Jp4l**3wL00!ymmlN-V`ragF*nu!#@JbRS`_GEBwvb?X@Iwi93g?3^M!9 zfl18GmB#~(YM!*7W)Hcc19W`wKug%p=S$q`ho15+Ph+mYOntfK!SQip!r&oESr{HD z_?FwtktkWZB=!3W@9rmCGC(FEdLJQ!wJLzpxV_-hOSGG->03i<%jWN62X(bN;5mq} z`09>g!9A{SJ?D8WbJr;k$duH^Q+;AadXc!SCKqQ%c>vIT5`#8Nb~SduvMuMb%>Lk; zs_^M!K`JDGa~gWz!f)fBaBaNy{I1wYK;()clWwY$h!T>DoW<@mpDwo7AKNsl74Exp z44K1xgh$HJ$!rx`gL=%Ss-cA*-x`zMKz#ukf{pD8J3xC6hB!S@fc2#3zAO*V)%&G_m%`{d@0X|x4 zLzH3Ie>5qsDWg2bZ&HkxFi?l797~+Y#F`;>;3|>1E){AkJd{|P8Y>e&23zJjQIUT` zqr_An)!hKXwe{cyb)!Yj+X3Ps2D!L)Ee%qNASx*`2PUe|x zJQucBHa?g{)7X&3QR|TOt@QT+l%z0<@`8|$jlo7!y&OA#`HAbXC^3W%Y=NXq{%{lQ z0L}gw%fOSPna85uc@Q07Dx?upPKi{}1qsq4Tq2m@y_ntjV8t-nQ1Y}eBDR)?kZCi3 zyiiWATQ%gzSU5ODkpe;y+{TGg+kZ$@Jo zj9HK^Ev%LjQ0jGV;elB-II`hZO={Vg5hfQdUH-)MnIumuFa~Kd_N7QY$DQW;8GIASpDPVs55){?-!-GRgo+rWhZh6z1o;Pw0pv!;y$Z8K3_rZP=h;(C?Zc2o@}CS5t=$dkjc zWF-XsyZ*B9FU^*7VSWn2vVzU)v30x#?+RmJ#43azG zS8%1a8L?s{WQx0oN63?fSRDG*I)|y&lA{JS% z+eZ{MoF-=k8>lvnP#F(qXMRDG)Yh)-P0QF`kI<+C99S{Lc0{YdQ?6;wt}UCai@4o15>CPED# zJ-)D<(|Y4jx`55*W$L9_XQEi)db)-0JxbdNr%^}iRJKggINzUVcSQ zQ=%NsRNZJ*j315pb$nWfVSdit{ASf(p%5 zyUw;PtBRBH5>KA^9H=L+ii?LN34KWbV#UHs!;q-{G^O_p!5_GHZN98&*G&;lBG<%p_vLx_(Nj{2sw@iA zku{Ay_8KY$CYs_QOl(07@=64}rDpQjDo|xzh<-GX2HpZZ=@-hwC_*_Oa?> zM2H|e6j5`PZy;3^M(e@fa>$P|PVLod2RX|YMk{4Z{G1pq^->#8aEamoSydU%wJ9U3 zpvb)jw#DoTakQ6<6DEDck7G1?%`Gl`%cr--@ODZN!xisv-sD-@50h!I!b7AJhI45p zwhUHcvocO0l?J9s@08k-4dubI)nLH$vqzs@KE$Raa}&XH9i|JK(hm&PFRxY-oJR6Wm(1)Iu&xUM!xBKC`uEFd_H~f_nC4H*l7H zh0K9pj0`1$O`WH^+)VNPZD((O+A2(UIamgvOdgiYVG6G(LzN382sbHc zz@k&xZ8DqK!F-0FCPw9t4V(%xOSfIf*0x~m?ofdZ$dPcfk(c|~Y~EChyqd|vqGg$( zylp!JVjK(_Ovgs5R4aBs_-nDU-YMFU;<_OAFZ6 zU7iu$3SvFV<+|>fO9?yEy=<$pZY#C^LsJd3H15-j7?0G{bY4S1Xg54Kd`zJs8qMx(AZ)MwdE7^n#ydAC(TBnaaxql~zMkJ=0+Se$ z=Lr{jPx&3{4vm`x&2f(hIAcHZFB`HvOH z6sIV@h*YDOPiCWtldJvdR`UXi47R7z1>WfuaYmr&ty zD9g5Qe)o2t6t%zKF@E<~d2(8FW9Rfw{dz%ny(Og`ECyMxMcY@P#A`MP0Oh>*pAV!E zdQV!3%RcS-o|e~@$I`rlQ%GHV2!uJvs`A98MJ81bmYlwtJ~ij;f8QYQkvaU*|02*# z>KAd*+z{d-v{rbcfD0E_fQPy8bLq*p9ic@BCYSr|`rhSwI~y^2GfNnVIW-b*ZL=#y zkNET9l@D)9J+uGP>Y(G$%!q90w}ICxya9c!R9(ZU1T!nLuK<>g3z!Xd=x#Zlbw_9Q zdy+&0oNICIPYNOch}~SS1Gr~Q35k=wo)=~_z!Bi1;T=$teKv9x-yF>lXHME|e1Ki5 zGOiH;RUl)Lfy$Z7iP=l(JZKPL1x!9=JtD*L#I*VP#hgV?-O2Au^_x)3OwO;?+I8r3 z!}L<=h0 zzt*2+RVZ~Og?KHl)>UL{#{2P$q4yBU-XczcMLle;-AW{X`MNx3DsF8$hl}^Yp?)fF zU!{5uuvukaU~fuCzo2!^Hm;-LIm-m!jaK>9+fHsdP5NY5xKRIJ?7dY~Wox#jiv|)v z;O_43?(XjH?iRSaL*VZ24uLxa?(Xicmz{Y|=B`#dPi59^w@$0P`w8Y;|6FU%1rPuD zM(=%aZ>J*2I7ubllbU<3No0Vt=TafQPu}lnVwRQs%s1$~xP_5IQ3{(ldfP&5Tb+F= zj6`-pN(dDmO<*O!QYU2}EcMPaUGV*wg>Xka9P~ji-1Gpyat%c;%>@#R_%W-h`HC&s z`Z+#KO93UB58#aA@VuYClUBMP1-b1ro*%gt)3kn7bZLbUsq1U9czBB(kcKM}Ct-P! z(~kmJpR#@se$u+brt9N*i10VVVm;IaC^Rf%NZ{c|_|7T+>s0zV6V4AOw&(?Ab%gDa zovC2(yGP*4f+Mg1lM1$1TBL8Hgi5OX=cL(hlJ#aED(JBJ*w`=1PuCk^el{i-14|#E zr~q8B0r`JWtg`;TCGszHYyRG&`6D;pXN%^u2SfiK-aBEs&)L?jf9>x4VIBM1%YQZ3 z{pQpAwA!)$Gcq|E0f+zEv-g`w?{9{`-tg)h0dxKO(=P}|s>(9p55 zvC+`d)6mmXeXgK#aI<#QbEUF&Ao!1DCw4Q{zg=eSK&|&__%)(7u(6^sQ~hhU(_cU5 zUyX*cH8lRboZ)ZLP@l(t{4sxD`1#xa6b*&@+ev}XZ_Dwwz$m`oZVp$>($eYk8~p7Q zsXQ4jD>W_2UzYtPK#GgxFWFFZ^nB6^Dnj!A7nkk7e}sRF(*5@j^q0u7f3bXL`-AeG zo}TufkiZ%EgiMKntj!XLNBQ zIbLYCYXp#4sdK6$zn)Cl(H!V)QhD3c*O3#%mXutPJY3sO&Xs!PO4v~Q;o8!yC|_JS zx0;#UKGe3d;9Q#v4OSHP4?eKelRm6b^UOy+>|FahbYN;drV$(gbH54t;>-|)`dA;% zL<3f&cl}U|Gtm4|@3JkMEW=^4)vnE+yMa#&GeB>2KwY^U5r&M>B(&GO(DqtseQlto z;=LV1y?%X7MoW*}Int-=%};y@jHmx)H@-~}wamU_KC%*0%H{d-5Ms}yay~KiYX5Bz z6zT3=7AS!3T1qY*JBccDPXytE^D0psX*`hTDmuyLv6**irgOF0qRpe}d!bT=M(HsD zw&{r3+U|F$;MVe})~kf;M2;K$`|xG-qOBoen~{6d=wDoDdcy+RK#5q)rk}$wcrLdf zNPfuts`)_v0xCW0z7C`8&ScGu**}kBlL)FP%A)|+J2Hie4<~^ANS4hcv!-I@oC&&B zB;MaK-UpGDbn00%UKUvx{|y|d*b&TCr>dlU*#H>wGu*aY%=#)Kr-?LtF*+YyrwbGG z4KKKm`nJ@fK6K8oVrnqTWp{?${O%VP$!gKhd4V3T_qR*<^J~+%28!@kaFTHMz|#|P zjbmS0p{N9@tthC5)pTj?)3$q2H@QP(JxmSrXg9kJlBXI@>tX$c9V$Re^iZ<(s^#9Q zuCzrW2N*3Q&HeN8Uy}H_maEyx&v(rgd^N!y3v}#rF%XYx${4f|`wnQ&_@lWDt~$6c zI5OY^B}8xe;S)Y`m1mtpM1I_kXUMaqR#+)9Z<(t0xJeaaX2+b629*jAwM9pRaGey= z+jk04jHX`&W^DkBAhxwB$3*I4X+e2d0!{QceLqq^-Yc%KLa#W$8 z5qX`elNe_zdL7DdL;cs@Q22a+ftq4;!Sr47CnZ~jr82I{`AlloX>|KM54O-woS`&D2_oEDBP9Z zvyn6Su5lrCiQ1mB8Dwi}2a}vLNFKd;s?1Cy@PSV{aJD=Mnv4G^Yu#C+Pd|H@K+V~r zT_iJm#XO$fXFqkw=r4gbQrr^LpTWa}nDE7#&Q!_VMfp`O3+psN#jozd;V*DHt>sdm zW8-uV;e661xX#)~U!5-pkyI{TWo9RO&;5?>I=k=hJ(6+K0| z#&;Wp!~%B7O`+?!5>s1{#_5WuTSkKS8_N%m&bx>k;h?z5p_msMFG5c;-t8j?(_a-Y zlHNHa7X2MOoI3jIyh7X2Z=v@O2;*X7kCN#ub%imxw_~%^o{bVbzaC-h5JMg=xK~_4 zHlOC(?%pja2BQPwOgN6T%6^`2m{?#u@e7$;cppt2=CQ~D7kWlbxSqUYS8rZdP}HL3 zy9f_&o>fu4?tR2)y#Erznq$7KiDVsDY01FLq6(y+{|Uids6+nTSly&EkjB>WwNbG)doUuU@onAY7~Eh zd|>{dGGFMi*6-`o!pVM&=SB660gS-br`Cdl)x5sgnEq!`-**D}_s(wkP9uYzcMHYy z_%OMcQd6E%JPpgc8QOJefKh9+!a82j&G0X!!QsVLO)`S3I3JPK;2mceGm?ENKe#cD zC#1!;WRfFBzngF4K2`WnUJ*UdFYy6WfSxN5P>f?pU)s3C`Q!4@x^H!wU)w-K!`}#x z2+?t^H^~PR4`dv0o)9ScvnrAZvD%EJ*Et_DPrrS6dCo-h9Ogy`PgLbs%jKDAT(1b~ zo~_>Z>95X9B?;dOxq3IJPF4BpQ{DUwL+6DXEQHGk@co8N*kLp6_*c|eS35w{A}lJM zlj~e;Zk6e zoqK)OYm)kIMd8*aXR$0$i>_uTm#NYhc=xP~&0^7n4H5OF%6mfe1B1{?I_qo-*D^E| zylo&Vm>db@55Fgy(q~pr86cNSI4d#J(+q>Gdeww5OTC#AyX8Z$;0eMS<6VlAO{i9a z(lc`EL8+RvDqxz7*j-ChwzDdAMvR+pM)?i$*+x8CU=A8{gq~1%tL$^6=D{m=0f5Nt zJsO&12E@`bM}T>&h>kWB(O^pNLen1i(n@zr8)p723()GJq;%za!AVslwXLL;4i`+X z*c_cU3$DwCBt(b6xIyGaj|;d7_>ym#IndYk!E1G!Xk!c(Ti{$zOEVvgeRh&Yamf`W zi3YBTzE6KoN0_eqnM>V2WDo3unG*X=1yrYcJ*Ti27FtF)DSAW07nPZS(?}NAsi3<65uu;OpNz5fAR{2{COgbHl` zAyoZj6`yld*#1f`ep~#HEq(t>R`J^#{Sm8R`@NXp&sP4Qt^9xERzBN5Iw)Dj^MN&lNuGM=0tNKK?i)cveY%Ub?+y$wGl9x8B^TF6@MHDZhr`okFbAl}=LPLS4(u*F8< z#jW#L1Ap1aq*d8rAGW!6~oGGwKX^Br_D2w@^zm+v5Wm7ay&eeMF#Zjdv%O<%@>Cx8=|D~-TaA}HOc=p2+QNomY^&__< z6XAhoi+Xw6MH5I$4jmcXy=L@4aG0j~T4Fcp(yX+%pDGI>Hn6{DwHrTP{Qdab^fHp1M8e*+Kjip>Vv6paSeTrpQUynN!`U z%L^b#(NMw=V~km!YpPmw9cc9z-ooSpDUkF6PnCJlxDw(~AilwrLZh`fAX394EyAlj z)w>~v+6WNbl=C%ZziO0vQ@lPTGT)T0o`kp}U-C%(X~P}33%gd4fQ;rJjJUGImI0XH zW+9+HE)j)QA<>tj%Ke}cmh{%09Ptu%;{j;#{jxkqMxnKMcKS}+2!ju~LOj;5GnCLp z?Cd1ppr?SZP6{243&_YgY8~Yb%(V0T(4L_QA0BhDpe|<~WnKQ+1V?p0F~w$I{{*}pLTM$b8d}RHFM`O;cIkCu(}k4R z(m&A$g>;APK&HU$b#@u3Yi^hniVfrf{3brM%V`bTG-f#5{Df%@iilz5V*k@;^GAgtb&SY6S9Hcn=CjE_VR7Eq}>{gF&HbjedTA0PcAU_{|IKG61$dPQ8VJU^;8Bq@62rq(#g)~37>B$7 z*%?xn4uCNhFv|_amKZiRgaOb&bS^fsH#28^zQR_@c{D;K4mCEPE6#H9yaph3ZlCqx z=zDgHl|?cENi6*1(Uz+-KeOVOLa=v^lG(n;?Ae3UAs^lR!9*|KvpyeYELTbV^rM-^ zD+G(9FWsts@#X~IToGLT1OV*yp_Tnr{2|YB5hc3)z&4YH=X;qW6EvV^T8i4!u*_}! zK}0Gs->Pgtk5izOi{1 zRzPG(UD2sxys3WoK*hSGYn3g%1JnB9a3`%sIN&gF~Ky@WK& zBS}j@SA+7JnHYLN2x~drUE}?3HG1aC+jj*~4nyd8A;S9eS#M5S)YYEe&rFY>XOPot zq8*xj$MGPqE_?n+uvT8@o}~kY7q8x9%q~N$O}=frdvojdcwWtb4%I>n0D%MSs$2G( zqYRL?f6JF?MK*S|mb=Qb!%cJ5@opZc%Q>c&;j&KFY8w~ue0@w#WpV2$h^)u}oG)Pc z=hSB!ttmTW>_zvpTNHRyhzBsI-$o_ z{=`Dl(6YLo8VA`8MpewUr|Q$zaSx{rzoyaR;*6>m(t3P|!UW9s)1EqW*2jr$ctr7s zESZMEgLQ->h{aNC6v^mUB%8mJ4=oI@@K`gFoP5C^M}B-@%u%U{n>y9g&qyTdG2ZEK zx;1a2I5v8U)D)`OOrI$$Bx80_sx%D1=E|g5kF24?_kz@#Z#jdj_}QPsx?A>S1m` znWAn5p+uabtI5q??P;!RX&=47#;%9>I-|X~{+8yJZ7(4uUfo8wdz~j`7wgvnpvV@6 z^tWdZ_3e6Bv(|1Et|(=mT_r?{9pjZ(3&bK#3F0Ff5Me`U@0jE+jGt1&4{p0j9dFs5 z5kQk$++()kYII`T)5EM_mbkvR=7A|YlmgYP0|D_pGL3;*l1imPVl4eBlk@ubHb?75 z6&)KQ{L{I(Mp`J}fe5lHnHxSwS^KXCl8L8v#6z(G8! z!iVKqw4Ls9shXVfsoqHFQz4cGeXy{4dP%hA;%Wg`MTfRh*p&w8GvI;y&mKdf3@Usa zQ0yz^d&|*j{9{6*MN<`Vdd6$<@OKFK*{QoEM7NoHK3XI7fmLj^_t)oGebRBz4`0tbKH| z+5ktn%x=!ybPdtlMQAPV46=4G<+=cERmC4;KEka6ELv|t35o(YzCJ3vG;|w;nJnsR zP7=eq_X~<9wrmpMUg7u(IAjVkhHYGqF@PI)t||F4{tsScoYum-^4K6Us@sx?J6T&` zHK!Nr#@H@hzOR5X>aK>^H>DK9qPs6n!51Bbth|b85V;MQ*INotJ4{otsYH!BtV2@9 zcV^!Jo1D5@t+l)t*PHa4r#PrcAqIx0|H#fW2kSJ=-0I!}$+GzLX8Q?K0YrW+3Ka3Ke?%K7WxPp; zmoDLw5$G?8JxD#|6kwtAqS|b8Dh5ggACIc36UrxiP|j?bC3Ths{c9xg zxkkB<-d1qsXiymV7o(NtD6LZh16{7RY^xZnf_R6eBpTy3cOb)nUw7PDKy>@ILn~MT z?~5SO-uNw+Kvv?{qr{WB`JI-zpP}juY;2Fr9OcrFGdl=JUYOIr6f0*Jkp#U@ccp7I zuR0~EU`#+@+pgrB%;SIDSy+L9P;AqcB#yA9K;6bftHd;$)N9J$c6g$A5Nkm4P@4g@FL;6jyJ2sGJ^cwUl6G zdsx2swlUDqkNyiUR@C<{^Nf$Iz+jK;djXeVJ@}*1HFXxWFpbi{@%#@FDSJB zOF#V|p-o2G&z;@hgjc`Y+0p$&4auJgWPc`*{aYoF(bN6Ddiu|aVT^Rl|AZ4FLS@DN zFH(y4Ud0NWFJy27P+ywbm(*?WZCbVkSI7O^6a9E)10ufy`^4SlJY}Vyqru`9G}mgU zVLHofyg2@P89zRwQ75fgs*s1tB4F!;EA)b_axG9q=&WGv#<>t|E2q!y0Fe3k!&&c)9r+i zc6s5N#CHazWST;BV2x(o5knD4@ZNcbD`{QbL|V+2Xr1#*Rf*d2H8}HL1p%~B&g<~k zeAZhfj`y$L{g<4GZd!E_<5|k~>;%pzttUllhFJoJuR@(@Fm*W+Z%@t|SbAorPr<;H z1>W^3jChD|^0*)G_b3Jg6)|~TUsgPY>?7z9kDNBa!cIW5$Qy(lG>{cZdlW`wjCKce zSLE_-VHaLrY28WT)!flP?#B{`L@h^ie2`cJYg=i+=*}gsj`nXVbR878gYAGYHW4f$ z)v73eI(WR!cEunlfuSjcPs{n6@=CT^M;6L zRd-Lx{ElY4AFO@czedJD?l-hF%7^%5N7}T#F2K#u3}Hj-p&FlFQYN8UdNEH3n;GrCwW4w7a zk?sycqR7}@tooCc^>-ku7;@fjAzgn;2QT!qS3#B~bb?-B3lgKV!&o4nd3+E^KwSds z^>=6?(TGrwJ}&>SNb!){)mC&abQR zV!M8J!wde#Ix;&AFR;M2I|7PcfSVen(cL9886hY-&|d19l=f(rtCs&(C~teLi0YW! z2z)q;7*_g7v|P-1t%Uj&A)jOjqGt(lp?mua5zLxH?q4sTB^v!YUR;znATamehFf{8`LYN@$P_y$zu?1wV2v6Vjh zHd0T=?r`Z~9u;_Bg*;LyDr(snJ5DYM#gj;jsMrx2 zmjbX&#l4U1Pcf##r=2_j^mijRB!Tsd(WASbR1aWO-0fbLdUs=4viceYR2tVvOZR1e zNQH`pmmFVHfu7Et#`&fNL%b}8_aR4sqyB=rjL3tNE5KNM-Q+9@8fMbaIP}diR|C0f zCHp!fbu4Tc--Jj-kQEqdD-IVF$y=~iQ`k7NQ~}O8QIWjb^KlPU|Ca5M7S|dlE}`Ke z(qfQ-%b+LMtL%3-990Lq6R~3iTNT&>*q=UX2&p$?HM;D={XVB~yW|$e|FGN7ObMrth!4pRA_=*T52t``FQ3X|(3Fcdz)6Ez!AVdmqX1Nmm4p+SJioDZhX!FMNjop?W zRwjrb1;NHQ1zT1}AMjkVw8Vjk4C(s#kBo?{dGAiIt4eTUO{kr*o_23KzR!VXFu;)$ zOFv7w&b${5ZaNoL2p*$7-TIZy zcs5aU8%EYqaIQNmN3=QBuYH_bVI$yZ(ds+h#&PAxtn%>rsfz0ko3&b*X6Jgn%Coj^ ztyS)0G2^IN%Z*95Xy{1@-E1ki)+naxiHy)8i-Da%H!c~mCnt8mHNO3RyicX7*h zu&iY`gV|{)OYx0w#I~rAPL*m zU$z`SWPiL+|G~Wbje3T>I#zr$#Et^bGcN@63Z5H+`F!`q=mzQ1fH_XTJiM|*V3UG zx=doA#l*M2Z1I=5CXN1^BHcJ!PW=qR=#zW=w~c0jzMs?MRZK(A1@o<@j z>9}GMzk=h8Ff|vAuTZwRJvxJ`Rg099*&x!UecpAPPfo9afPTbUx*!?bC-Cc%DtSN} zb|)CvxX6iG*=Jj6NcXbC;t26Fy%ILF)L;fcj1!|P;vq9wiOeVl{j5Z+$$U^?$U;Ke z@Zj6(A@tg(^D6(*#F$DgrLE#P&oS=t9-E8sODy)qNLg^@@{}^e*k;BjCFC?jvicw; z!ez!UWF|DfW|-1u`9@OOp9rof1+nOW<%u&s&rqz-j2Nz%D%2x$I7bcME_adckQiph z^F=;i#^6xMjB(w~l@dr|0x;5~z%yTJ!?dnIMU1{f9KIdzkfA<04*WBmq3`I|hUE+; zpNoD8&y0J`V>75MW@#L(>0s|y8oqK_2p&6qzp<<%=)tcv>R-a4rQD!SF*liX-DkLX z(=fWi_X`$yIb2Q|JKrg~0PbX*Nd5qPe_Bpxaeo`i^xMRy|Cfc*Z`P5&1Ub_P|BZ%! zYD4~}6ZymXi4K?kGnwo^@;I@5#+6$`P3l-goLGI*{)#AR3jhfIu%Uby)h0Usx~qAAR@) z6ziaYF_$VKjBqJb`W6wY7rr59yyRti`zU$3HDJ+sql*TS|s;aPOJy^vY%-e(g8Tq3+Q zydl>sL=fJwO|Kx%J0Z}Dw&h64xWlV{iq$|HmJ3k<(QAc!#-IziNZBH^^Wh-e%XN#V zTzh#)AY(+%R~k|xJqNMSk52VgZ9R7$Q%tE$jSPrAisaW;hdF8nRImz*_p`lf5^Z5U zgUOtDh1fUy>Ez~r+tkL~bS|K8#u01^S8nxj(nlbJUZ57=><8p#e*BubEv&TRB7*mU zQb63O_c5Y(c?tdn#;$M0uYZdCTNXZA90WQP=~|`Zu-%P0h4mAfC-_#8t4=2kCZ>KA zf;O3``ZF$?73s^%ny~!&eXlS+ly+#{gkpL5)yfzxp)C=ith(UlGga_UQV-&U`Sj3M zP!|<4RjBTqgLe8(f{jPJ#pS8pP(N3e z85WgkDGe@xRNHO)_1uapf?L>C@21vvm0^b~+)ida)pshlC8>7;q zCP=>aZqnV7JyJ}7JZ_>j>)_RIhquF1rauBl$^7mHQj{Mq0V@`jp^1pTW(jUMjwJ^1 z5m@V4!B~ts1KWxAdqyec(ZKKmRP6Jwkv06HPYE? z+ol_c!`_99=oIjHF{$6rM=X(!wPZMWSeVlDGnMx+Z8fcFyAgZRV$<^A37<;-`$@S$ zr-dN!Ok4pBKpOpQLS6yX38B=MxSc4PyW8VeKhP9F=Xpu!%_GP6z?bD-3L{%%DCx@Z zRl5N$SD#l4e$x$ooC4Tl1)h+?6Ku@RJ{=)^=Sn99U($>M?tv;^e!FtU!I76s7DxQR z#WD~~Z^9Sycg#}e0$tn=wuKG`CU_`yAE7FTFO(_U(^?92QBU&(Bt)lPBj-iCof$3B zQ4V=u1TjkuZgy=4z%sTZ%k;^s^C&*&y_qZXKXxxv^PEvwmE)y8tF12!C%(7OP-o{K=NlVLg6iuaB&imP9kK>{hv@WbRQ@2zzSMFv7uL=(XVR?blcR|I z>ABQ?s(PA6PKppbJqhPhZ;?%2dO8 zH0Icr8vg74KtzjOf|Pf{c**q}IB@C&5W7HpYUo7@W=x>dfW+RHkmCo1rCS;s>me|V z^KS*w@Ayv31=7FdgEfByb;>1nNm%zMq0jBqBS;jFiIG}M)SZ9rK#%jdq&cx}-+7R2 zh7?*t_&^+IyQ`E1V8PFLsxoAjUsp*rnnavTsoGK_YT1F=E7*B?K4+Acu@(BL)MwSY zeVB!rzKk_k&a$qFW=B(`Jy?U>xqhM*NBqi2Duv2ixW}0qp4A;7t-=MoFS*cF|@v2t7kyR~Hnc;@}R1d=t$} zaMqY+D5cLvtzFsy!w;o-mqD_xn{lH+LBVD;1ljwUkK%E#lZQe|*7(Y(lEpqs(4g($ zNwwq}k{r|$o^NY;ELyoNy|GAl(*(vqW{0BI;0If z9fj-&ZIZuy&oQ>8j>uc6H3N5M>p4HQMQ1BV`3|-(y$o%|TftoicntbdhXuN4KjGH6 zB#$VmRY`z7gpzQd%VEDSyeP%~#+*F5r#baPWNsv3N?_7d!o)@aaVKF{PHfXw_1zrL(A{rpVWy zv4FO4@KNAUE1^kZXq>2J3wB&SKXRd1BBleDiM88pcR5Xk+xD69YI=dzC(~#vFf1h| zi7j7E82vn`!exZKQ1_fH_R@SE44$V?RLqn1^$i4Mg)_9&i4O3K`$T!Z*}&CUK7$i* zs9#AQFxnwZBI0AH^rCZHc^m_tkDGT$Lcy2OJm7YV3=mUSZ$oURmGr0=J(^@O50cOd zGU7lUw|EH^&v>#tna+rhC2915B8O%$ob+FmL&aizV&orUI!)Yqs~^HxxB9Y+C?-d> zRcJe?xxmh*ZF=TWJdtT8es}gs_3_Cf5EJ%Z-4p$y#OvdYd2bKAZ8H4sG&V9`mUp6Q zk)-Kp;8%oH>_B^lIa3PrmQD>Obq#@Zw+3hDAcGr{M7~s)FdBqAGLlDm}+*X=QEu(;7;9SCX|>$^z!)u zVw3q-(L-oW@iTG!4eRjityle|Xfnz5R9A=hCJM7JomvFL>?y*7;XQOjj2m;sGtbss z!4XuTkr?% zcK>Ozp=608$EEHXR@lZVvXJScgqs*F%wVdo$|s0|M~)+ILz#^glk8{v`Fw2OmS%i) z_hLtNXG(@Ddso;$W1EJCmK^TnHeGLXi;X~J$>C%KQ{`d%&HU|Y(t?sX5AADoa4yqv zGyPejV#BV+;0Bl371uq~mdak*o0(Kq>uTN+b?qLbXz6<59RhMf&PZW3awV5dQKnQ` z0nBk98-P9MB+?x54`kadR{(#$dUuRyMH%s#RLb+CT)_p=W7GqlxN#MceEE`-NfIiw zLj|zUMdH`AaUn#htT1z3mmlV_X^*;5UKwX3X#mb`KDm%Sh4T~t*igF6xEIdw;PpVZ z>E&Qc#s?7Kf!z7x5BL`S@7wVI0^j<(u=9_iTK|6Ner-~Sf>TJQ=z{qNnme@AhjvN&NgOGhJnTpD3ZJx3!!BLf>lqu=KniH7E@ z4BM}W!v7Y$g5?W=z;C7cY&={maNoQ#qc4JU%IyO}IE@d;%%^@IJmJ)7q-~6ZELU%W zj~Nv+tgl>2!=R%z;UB&rE=u?Ft9|UI4z)emba@CvMZX6Ip$B=tfbG@(JgVKsmT6}` zPjvU-rBS*NLkgjo>zk9>1HZzb|KsB%bT6cVeZd;8-Kq!#GYeLYD>BX*v@n_ zjBy^Yg`4i>Hr~*t$6GbR8l-4`;_Z&dM-}{1+|WeTaGwrEeGJvKn<6P&3{82~fj|N~ zh8pRtmkvc1_XwQFYa8VL~0&=RytVFoRt933hPQ$KsUu zq!c|ia`5<)HP$e2K#&$m5LYabHkAaJ5;26*(@?xr0E;W%;oHBVTkA*Rn8?s?@QzDH-eP4^z zT*_L*#ePEcODXcMXfZ0>@{HCkhc5(5D8sc$PJM_IXd$=A564i@BUiq}$=7(rm?Vy} zQcQogzMDA?#`et0uTMiA*Al{|-gw4LTWz7|JFfhvM~<7B&I&i_Nc!#_G-Ip!VUL>LKgm585u}bjHpi1J%{XT7MDDQHx>2 z1opWr#E0JFTlET|gt1uxKnOmC|@c#m@HB{6DnaDkCQ)(oPgOd}$(Au4rO z5T+O4M(zyI=OTV)u^_mQkDHG?h5_A5>V(Q&ED;lL$x%A+Q-krzAtcoMAO@3 zc0;z>5Y*qD`taH{1Ry-DH|=AG@QwWHs$A<=D}a3Si~zqx$s)VPQ)D0j2Y|6 zPB!hde)7xKyXbgmpO}{9_p&NYxkphK&EyVX>y~p`e!x(9SVPi_laT5+P_FJXL4(?E z%A3XVW<2asz*5u_t?w?EB%;lWvy~iRNDM*@G4YA5hI8pW!o2%Iw%k}feh&UQ(W}9U zgU$ns&O`Uj6Qop78aNMVi}FKCYg8|_4ybN8!VjY}p)m%+#>V9dM<(%<2{$jPT67agqm}tvhIt&e z#n=u5deR(YXqn;EBl7J(pKK|dPdg#B!qF(}VD<#OH>FR`Lw*gOo$nSSwmESG$!6N&7E2pY*CzuC6`qdU zdL?6E?k#;6U%T`W7-kHIzK^9huNC{@g^_y}VUtPnU2NY=)cg3L54aH1Utq8{i%&{$ zw0PYX2%z}O4)E~CR~$4#vPNr_>9IVUtXys9P$t31#al|=Hmq==QYL$*N5UJ3xiY>> z%%6b3$$NM{TMIa-F_M{g{=4}PtH;CigQWB17+}HV^huGP`sGYZj^)YROmFY0RkTXd zHCh?+0*SutTKn8qUidm4sborkdW}sP z$qc6^mf!?Yxr;vLHnydbv_p*oH`qK>-1NGP_DZyFF(El%K^HY}j+&O&zj>kEb~jXD zm`$#pEf?Cy7EsgQWymGi<L(e%2C6XA7b;A;_cjsaew$f}* z0RHi7H9906ZZzH3Lhg>}^x=UGQi?*4G1zdeA+O-2=)3DK()wCuKRKma?88@rxcV4v z_l4Sv=6Sn$Oz>pJ>f-1bcqP}ZJEuV+k{=J0RQJ}aBK1$9^s?;P7mH9J!xd@1!jGJ7 zL5`r#3Hiy~Y)LaDpwByc9e8L+*3ZEb=i&65VNKVFUT)ubV7E3nWn1!R2e<^BNq%iG zGv;#E98WN06W+CV74+ZV`cKzVT-2=@%N)^CUuigmm{)SO@5Xl(>*sH430KZ_Ss z%ENVhSFiF|wmx=ilj6{dM#blDz=DX8H1)hbhs8RQuiyL$0Can({xG29n&eE})!zk~ z>Py#)fS`F?ib+oQ#FVue`zBJNA=QU&7<-M}Hh2;S z{v9(KvS04%p4&sqZEH=WG~H@ROpRJ0Mpk5qE78#weXlV6xseXrfR-enFoJ4nw}cLd zKooP!h4j|OTz=~9?JYOQM{h|9?BLFY(FKa1MeD9-ReL-j4beOEELh&crIijLU09YS zV%>QS7P?vA7&*Pk*cxiY$mwIvx>iT{a`r)^Fk7ij#T3Ri@U)7|XnCquatm#fWYn5u zv<4~=ztkwK!J zK@8Azwp{>EI5JjNt^`x%YG|I@y8B2A)b3nmjDo1L7@X;Qns$bxBcbK}>AdOD^E4y) zW}4`ZF;~GZIG^1_HKDwNc(lFL*B$*_%F$u)pNAB^Rn9f?ca!K6c3*Nm0Vsv%3)|r@{Ai%AVmQcP83^obP_jWpjBSh2I$ z>NIoC#<=Jk=X5R|3>8wukC!Lsr;#RP>z>6(?W&chA6|Ow)o@NE4t!}_Qp%)io9f4&zv-kH$2veZgQ4H95jG=1XMGRn@jBUwM5=v%J zOm?nYB+lbH1MfBicZlHPHzq2=AFDyXKxt8i)`O821rOg<6tu-}S5}evTwW}!pKtdr zmp}7za!b+$pjE`A`9}oq_nr5Dfx!Kd73Ysw-2YNx#)wPL@EZk`hyDyoW@P$2`fJ4U zZxHVv>&^a`;X|LgHhTKM;HX_j^Pg= z9mA(1@SoxfOZF?mzs+S4P+9ucl>nZ{LKz*kBblBu);y9*!to6jLLx%cN5CiP7Ujml zZMw~$McUr6TzljJz0}O1)xum_ znp4L~Wgm~qI2VuNxcse4!{hB$Z`JmUd7X}mXIr>;+q=>IyF2X`4g--__sj*pRJkiG zJ<`vxUq1`<*(4B%l=TM+DQZ&GsGiKYUKn3|Js2lMLNiL74q8MSRViwnGl{EZ<6T~h zsh%F${EW1yoNE$7Lyui6;j!LabX+_KgKoeiaO6D>@6%chOd21vuX42dnkmAMD<$-m zh{@p>9$!rqDukkoP21giO5lI4sMqW4v`8bMg|bgnztJf}@@&PhN?n_-R4spL3NGs} zJ=*chbY_+9fqLC%HModazQ+P%KypYC&D-3GX0WFlO%K=cufXV3+EHE?Ei%_EwI#zT z!KeSO*0%F=i#gndqRHJh;cfPm1m8u2#ZbjJFj1pfn3J`vVrS6a5l0RNG}XLP9f-G$NGX1S`x0Y#6p?mjyXEpD=@+4 zXYq|9RI}+y9J}5a{E>^jJdWxrYxB9sLRwVK8t1R#*GrhUQ5pA9kML`!->2$3WDJ}W zgqh4TXy_K|a@>VA*${#(b0-QUoA*<{7flp8U}Fz6?HV;yI-hEW?8S_|vMR)L;)ztJ z+kC%Ka06daM-r=~*K^pj{SNN-)?AFGPlyHj0m?W_lqxu48&aqKEdPYX(YFOrqT^=<0ETEO*yBko7wIE&<%W57v2NP z@|d5X>Ng>lFmbym7LSWk$vDEG_wKN8ms_Tvvc+JYxjc^tSdp1_m;?^(U5;9QX-|?V zCTRv=vfGDyf5g;tU5oPNr@Ay}j$<*s%aJT#Th(LBt&8>r}Y*D>C$ROgZbtoXP$EotX6!7KhTb9fKXD+nr^I1t0{nbDr zRDw`ZHeFeT{GhUaUn;;sr&a%5^IHw9rFtbgcx4OFCPX8#OM5=1QlNWhiHK3J3}0+B zEP7Ti`e&v<@kOi^;a&}$_77Nu%cr*8t%&GXm zt4&^&6S!QRZ7X^D%xyp%$OT+bUHxJa#k>W_`o33pbW zKFUHzql{He6_oz`}=f@3oUmyLq=c2w?uQsa$*+s{V^^gQ#=A3D;6wkx7jf6<} zF1KRMoQD)RlE5FW&H9ej_ADxlBZYCXV7na`u5rBn;9Z&wo1ZaKsp|m}8z8ibT}_?q zzS(3mYMnMHSNboa)LIz=pi0eem_vE8S%Yv`-t{6A zb*~T{aW5U;Peq>9^AiI76o?B(lrX=-B|dO0*KdFjhY}LNsWu~l#K(|Ri1r>PK7yd+ zs2Qkj_|~PFH|FJkNA_F_l zWYr?Kpvo*1EJAv2^UtAq*U( zCaq1Nb?%34>9N&c=cI{fgOgD>8Cq6(Ueq%q49k)mwNF5pUp*njz@v#nx!StFSDJ3L z!}0Sez7a#858>Oj85AZl@eV6PEWt2_Xr=gM;9wOBnSHI? zJV2Dx!VdOOWX&v1@6#Ly!Ljb3RkY|T3(srt>5&Hq=XqrH6jjSzbKOIml)MaeCx;6)ViZkCW6#3W!biAGc} z^l_+Ua_>874qdK!8iO8xh+7xwGzzKVWn0l!ZcQ_kt*w6#5F>CsjcTr4(g<*WO2iF1ol1=yl}Nkx>elZJfD#jo@ylZo;Dv z!uZvX5QTV+C6;?N2Kzhbx5_KW6KBf6PNRJHTs+v6E)&5LCZ*~ALrX1U(Sx0H0#W15 z?qpL~ohbnehc4swxfEurT)mbA;9@_1EjyW=jfqjJVsZ2z(?>OorL1cpEr=$Qkf-aA zGP3c!hgokfFWv)XHe~u3P<#R#xyh}mmGuQXijcY(ELhUF6V#3vgjPe$$15+H_f9Z~ z#M)E&GLw_Co!NyXh+8zWz4Ot8hA7+V)88aG6_rpR_91+IMu9=yBxp@L*!y(vjUO6* z3}FK+U*xvF5$~1N{?^nP@64}(NP}qzZ6lH zA2O-}khWHF-d-$9zYjMA$1rg*1a|yM)aO^gJm$8Z6(eo>ZKUOEiWBxSt8gIgW9U}l zVrQQgHCjG*^rIS^ef|)3$?j7C-81Sz%D0lxb;!OXa|_Jr(H}lrd5!kOU+#yuiI`3E zZ;OM!X7*i49giQkJJyLu4n%?(B}`2v_8ZtEC@_Ky6*#oob!ZaZ6&;spzlBq|CFC@p z$HinGeX{C>__8=7iX_Z<6(@xp84(>IRcUk=>159PkDA8!+`@8Zu3!~g5(ELyXe5xD zZ!P!AwL?niuj5%6QqW$OFSIJ$WXRS7Sf)*U2&;V+WeYEf)hns4@J|rRtPsm+EV1vB z#!Q4>f3S7gz_!Q3!DMEKa@j}S(t@qRBYWr*PyO;8m5!ohab$*KA8%Rz0)+Ap64T%Hcz?)TV*SKK{!TagZ!nS1&cDYwexJwv zPw#$zI-LCJaPsfvaPn#M^N$($H_ieB3j@PHfhh#2S=+9N!n}jN!-FKj7v-v+%U-M$ z4afvLpU6|c)8kWsiSVviSX0FBF0WMK4RdMK?l9AT9i5K#d|Va6b!N)e?p((HUQS0tjb?Wa z=z9g{40CHyqav&PUMc(*&ye7tVlgn($f z4~-rJLN8bnX^euPGvYACj%Dd{QnmzHlbPYE7{hJbAVBBSLHj)N?e;}lXh;ZdSwTKj zHNCwrO^Sf)kkjHXp^t#P^BXW@*E*ItkzuDSfd` z0IkrTP0VGkm)a>DE;E4LyT)j>GPm6n7y_?y#d_37BA!2Lc)#cValsfrDpi8ePsA67 z0hj&M{KkCJPJYk$foR>iOQf2OrG44Rfg(p=4V8UJo1*LFV^H>GF|A=-Er>^_6TSio z#X?+@p-HL$B|sx&1pf^%6yBIbNi$%xXj)7JoY=8tR#K~GBgJ^lP4cOR9+wvqhA z9qh4jg=L-j>SytYMc@~INkm)j%%@x*8|yANhII}%&7I61A?95P#kh<QQm4U|soS#1DFP(yLQNE@8?qWXZ-s8RteVItP{;Q4Wb7gFzj&JX!Ca2}Po z32a3*MVx9O_eIe;&Z(2=7C-!z916^G-Z3c#{tB%8F0eSaFLHWILz#9*jnJSB_Q$LW z+OKN^m;xld!ks-e_k&)lcNL5$DClc55lo6ih7LV0tr2?!a;=fUZP9oI>tHYIGUA5X zZk;Nyxv6LhmwJIV|NPM82Z%4ILD=|_4MWU@-$;mXazTu_x3{owdpb)S z_1MLkX6j3fP3<2pxUsjmoE4s!$p6y z$2i8XDyI4HU^Qc|=~43c8YJlX`mHQ@0!B0YT1*LHsCdve_?&us#(SOG44wc|3Fa9Y zXk+a;ko#m~RPw_1e8pQ+{uR@(76e%hxp6LCOV-)q;MmYBWnt5Gu@*JtuBNz$RQa%i zWFGo3A#*1*aeqStvu*g%^x}{*nYA@dqvmn$(9mT%G-@lrDdOVIB6vDjH@Wj?@ zSSs{PhP&a+M8BM+$T{83Bx!#WT}%%b-If(DqCe|+Ukwl>Y3&3)unbm9>_Q-DAhFa>a|9_xs5-$NJra;-f*Ik z-g62^^=fkuuKB&%)&j zmw%SV_qLM7!%hz_f$4HRt+N;e~@Y)%q~nAvl1KzLn%%nclIWmmDTW3a#i!Rkx_f6v+;G<9q6mT1O-_$4@%9wxUAyPT$gu56= z=DEJi%^f%1NxCCba1Bl9v|&rtV0K?N9jRW=b#xpBdssZ5tHB&?v*7BHifSb)7eGyB zGscseYZ~xY?zPIoRIZ0N+OF$`_DDEoaoTg;(&P&? zy+m^5z#D)|_%er@pjh*+I00(Fo zP7&0NpE(Lhw|e-YV2cf^bM2Ak8wLyt(|l^hS5C9&uUHf>AxDOOUdm?92^ve*S!y-H zKcVj6PQMF8O@t=5KGO@(T*LoDg2`;n&T?u2=Udxn=lC_TUme00m6c8aSqALCMKIxwd&rB-rRA!u8pVg(5a^WjfQ2JpTMLSn z$}>jluX551l?tyf{elpIbxXP=JZsmHRMzxSzTz-t_>qmHs9csIAM%s9-ue7Ot6krO zf2!G1XH>Lx}$GX-qXjakITWW*^7#8!+G(gmk z4BjCOb#khMfjB#Pqo69Fd825=pFAc;u>W!eAWov`f%c#Z=rjJxoDiWdo@{D9oge{` zy(C5A4v6dkNF{56YnS+v)lL5qA`M0Xqkt8{7`UMDSg8YI`5mL2wvJdTap-zmq548k z_l;c>_}4NwbadUqz&C5_Ze8yXkRHqxI#IO}%~dni``IyhM=aNQQgK?J@rYl#!=v;_ zSDv_7N}~X&stCmqgKW1fb<{vZDX&i^EFPqJ*f9Fgb}K#AygzB4pZ(8wA+Hc9Zu9sA zs~Kv>fvXW*p1K3yy?|>*qNKw;TCHRBgveMM?Xc^F)g~BBqtmb|qh+-N`d~95H`Ab9 z+3ZXU1Mg#`yyPeYaALV1qlr(zah}J>b-3OUzJS<~zW!6hw*=0;hOGh7<)zBWPb-lW z3;h*g-A$jBZ7T#X_XCbO72=**5f+2UH&l2nFlw*v9hsyLi3`2f`s%4+gK-4*!Ma-s zYN~&-$%cTLyqoo7_GY}=%oea8@1sE|zyN7BKj;)>F%`yaF!e8dw$x3EDoO$IWmG+_G{j8+@9R^3h zLW3(QRpc^R(xM7Ww$i&*$m6#9dgd&I&!?(-rxxrn!$pUyTOX61N6-B-haO8jpu8O zBX524gJ4Be0!`hj%U7OK@7W7yK-RCnvNoz=`b1sZD z?T$~LJj`4IY)gXpw$Y^=For*)U+}%zVMh4H7j$%o&R}Ks8=o~)=Y{*|#^EgfbKNR< z!@Y&Cu^DZD>30d4#!EIv5PR77>mEq*LaXwgxW+ynh}!};cB zL3&?}e`5cnA%bo0SkOtKZ;|BBgspyZ zY~uNn^XAMiG=}zs3{2_bfeWmMrGzLpa#+*UpT88OKoSOH=imiYMQ^njMRJ$qb$$Sg`Eesgz5v_fc2b@ z85rRg`@xvz9D9efJheKiZZVKg;U=tw^^51iIh#lXm11+ZS4J;>PugbK0f_-0!#-fm zH(Ice9$H!-xXb<43y9~3uX_hUg>bPGX>Qe`)x4BR$0143iz;Y8 z+4W3sOV9$VLG&T<8`$t%8eJUU*JsuK`=H3@I(UH z?P_>a@+L%v`L6Fm@KU>}=Zh-x-ra+Gsoivdn6@F@$XAp1P0_PM6^d<7a=fn&Rtdds zlM?#AA;iw>Y%T&sDR}r5wicxOWGy?c@xsq_{X}kry@yssJGH@pGedwN?aA{DHLC=Y zj3se98lG}@$WMJO(8mdv*sO7ixap_eMAX|h7BZ^A%p$V6jfDijQR`llqBA-BAtGc5 zH)-T8=1PSbbus8JHWqUC)=|oH5?svB4Zs-PYp{JZ)3>vf^J*o}{RQTL`e3Px3m z>!#C|D3S(IFb((_%eX1#na}SzUTbRZ%d(Ekd)5q4Qukmrn7uTp0PyKtZybQKPrAg1 zoa@iCK3Jh{x<&6HLsiOIms9rdfenh;G4kH{r$K&_b!M)yBfGTy!>2OfbW;&I{_HH zyp_Ae`v4ZJugxQphJ(1d%9nL7t*O^L1QX`zm@WMxGn41xF3m-#xUyeE=*WF?i|p?X z*{Mcs?XoOwuYkuQeGRDus8wH?U$=f9e&nxwW%zk(YcDzKV!gpTmfO4EeXqdZ_GOF0 zNJJfhLremJRLFx|2h!kClu<{2a=FaSr=?qZv@gM4d+JbWgFI%q2}nF!3SwD|Jf*~k zYzaVAhs;#UXEuK1{>57P?2eg*Sl{~zc(A2U!k>2p7OMp?)7*J`OO02w^E}c89Bw0D zTbd!_P2|%Xh5HT$UN~rY%&@uOXsi0ii$c$L;z9r)Z#i8|GCvo~#=btjw#+B1>yd|y zaa_%8#2b&G^w2um5a89=$n8fHt%IjUSw3-W`cg(O?h>*+WY$TJS5yw61v6e%QC zO|1499G6oIQi&e3Sk5!qMXl3BWZylU0caGYH}89<$?h`S<#sRn_R;%Zv0d9I`|S@< zqo5<%NTnmu%>#XL0=3|U%ccm6gB5wa2?Sxvr-Mr1sG~T2{3rfQgw0Uq${4wG3lSMQ<;G$#+1V0N7{16EEC*i zXT}%s(kB~>DwhSoOJ{6W)pxgibeL11@)U4_$9ML@;JqA=?K49x)s_;($I7OvtJ5Sq zyc0zMJB!?VwX}&2S}Jw0BY+>d^*H3|nE|RJU3jOqyPjVj!+eX*SKBkMP7FBWf#t!a zsq4@EnVQH2CD7WMi+^+U$I+nh{Ubc(|6va7k7&ey&xZYPxx=4?W9EN7GsgU9X6)Co z%>40E&YOm9-M2qcmValI<@fadKPB--COl+jPEP+{N#fc6?{=sB+wlKAB=Nt$7yqIp zp5^zFk^g`y>Hn$pa@%hOG(&B}@++g{$@+#!VX+(~>@9a_S=IDt&L zVYCx$w7Rr1)M}m7>y?EQVi zvYQeG)>Z{!S~*3RtvGPTId8aqE}J{wX;gGD)6g&9X6`zMsn|%U=L5-cs;S=>@9UAi z@LsBdiP4;Fr;x7U39qm%=xBAXsyA=*6_nXWsIOUrM@=DVS)74&*GjFF2}9Iyp4N8 zqkC%WUTM6dZ(LUb!La*Qy^aRb8?`8BczpyW~gU|-AZHuDa9nuc)1OkvY+Sa z!+miM1c)(GfPL+!mz0m#@~|WJ=0(fxVuI`-L5St_H0y&5k-?s5=DLBMLmA-5f=dduN|PJx^)O^_>oXh#@kY?Gi@q8W%=@=*|J{uHVV>y z^o!2jrMlxSkF_nQG6(8hEuo?_UCq+~=ZBwNuph$unuqOAb>*aliDiZ&#OD~nNl&W_ zdFW(DvuD#yUyp(JL&0;Z09ZIgJl+`i6w1mXY*=-2qDv zgI*rhcYJo4z(2_`tbI+C3@0-&QYkQ?s8C-*4n`Z=M*53-PB_jXqfk*sS_WwmF99Zc ziCZZ@r7aB$_{GzZ{#gbSn|E?kgEYXZ9lNw#zHHbldv#&*mh6DT>1&T{ZCVuJX`#!1@1$j>-6sxF~sLuG}m@5g@W0&uaH!3huu$NFYnJ1I(yqCR9Eq|0ewlh(xJ|1gSA=S1cm>79poTo}Y zF`9wrayo>;!UwYOqEw#E0qb+ui<@vNXDl4zF;>L9Nf^P`Rpl*XTz*bv@u(%`M#CJ* zPaQKO-%2(nokEOR)~qwiFQR5vkI>Hm5&9^YQZFt*54kUxk|rtdn8H*G!7B#C%|iGx zY4Bt6v$)|e4&zhfpK~17HdelmHu#DU@e@D~#joj3fC7xVjjphBVgBO9z$r+Fu3OrJPUKFb^VTW$5KZpk3Jq* z9d`@LRL2co4BNM1>E;R25)}0|Ewd~NY&x74b|2(FC3z^)CynQ$7h3qFq^viyQ#Uyg zx#{Kn_=QZlkG(2Fa2$36Kb;C2FE-vDw`kHVikTq;5=sp0cH~wHxA{#7_HgfUFr71n zUz8}0fE+z@mb=$(U0_AbY?V3+?t0k@_H^5<=Usg?GtL{_%+4=XOwxJ_rQjTj*HCsT zUhKzFT3x{NXswNWkM2)`s(>{#ZGYL^XT%Q;NNSUEbtzFUHs>vsm@_n+Z}pk=!3w`C zK=EJD3R*abTf&kydjMkUI zsTwe6Bhbti)zUw=-6$eVJDGCoq{Z8`SAHE=jV!22j#3Fi8nSs*S zt5?yc(dO3LYQvW9a%0lTd%paRuj~1tNpW>Ne$vlZ!Y%ZikcR}jT8`GaeeU<#<=k(n zrlBoaFZ?MJLz3aM<&d?53-&hmi@YA?Qb!3Xa`j<}nt`LFuQTUX#9Zyj_h{QOW42*H z{biqq-_PX+9h4D(x)ILgHzTQ`hmnq^tB+Wrfe~DZBEc-XlDV-<#FeF8v;?-G?fl-r z)j539Dt6);J&}W>R}u3~zipx)!3H5D$;7yo&N4)fn33$2X5*#RfzQ{ptzC%(c3LX;Ye~kCBx; zwg=?khzVw9-%y|p-A>(LOg3MzsN}D6Fm}?THpoxhBZb`}3*JS>@B36p=4VPQS(~Hk zdsLtnXBH8Wi7TlkiKD4!#G`H^?{6-qkCv{b8t0W+2X5)tr%9RGro)+Zan*ERn041T zSE1Xcv_-gjp$#9s2A~azH?irW4bW&Wd(v}E-1N)OVCXO~UO{!;4BuerB2>6{`fUzky@Cs2BXFgT&8g^0sh9?4q^f?bHds{IhUMhk$55_n zY3h8Ws_V_kplOnYlF;#y)|}wa^l)>`*1cAfKDb!GLD0E@-5QY9Hc;6PUmc#=`FW-_ zqoX97DmCH6Vywiyv<%#rPN&BqhRN228L+J#Cf$|qb2UZv4!94_7DY8<<)!0Xy&EAi6TO=5qZXV@*~e#iL0BT<*0t_^$9ao&& zxKnX(nYq=k>|_th+*+g;U7g<)=Bc3WsNmSVW3+SP&MmrZES9;A&M-&nnpXt1>So?T z-)Gyr3hJfR7~l9CG~(H;*R9xmIssYcW}Bi3@CI? z%QTpX=Tx*$yDT)<42t-szz|F}n95?M9BqY%ZZ|Bn6SY3c zkQFaN8b`6xbFIy9vc8P%*IRIR^PRKCJT-b0n^Rdcc(cf!ghUPMLh@=gcA7Kqpz>mA zEiZeKh&Wr-@7LODB>3|8+e#Z~_ARQmiLJVHG_P|hnGWT8W%<+mfWXkm;}i8BG4!He z(oyH{HA{-Lfs+NyvJUlBNrzn@Er`+7UFytK!$YxVq55TADWx^OjFIk{Lx+>>Vxxz^ zv@n)={5SSeGus{>V&|mI_87X(OdW)dj>u}}JDS<(VX90ZsF`VFxeZPZVGkkR6WjsI zck&siKnyaHx+e1LF@{aqSw_aHsbr+osgTgg#`-;sPKGmIT!~wV@Ugt9B`2{~_0@nu zoyBrTieF8FQuB-&cGnDdWDOC7)M@eCv1g2;FS>KYgavVVQXFT+p_w`_cP(LP{kf=M zYO5H{OCx#!oipb%g6|@;9B=~;c6*e7LKW!ek*?+heb{1zxV3#%%)ch$KQh*jI;#0- z2?TeokV&3q0@ZJChc>`KVGuCHNY?_@I_o!1A`r7PiJooxU8Llzrfw3c6MMRly4eXF zOEQG}Der$B>rTvt0}^A6N2J>@PQn)HnV}?4q}1DKtm{`EE`{4p{)S6|t*02Y8P%Aw zPH3?Yc3Q&FOWJ7$_YUGXJFNNj2opaG(mY!4!erlKYveJac&3(>&D*a`eWqcvEhJ(7 z6!+af@LLNoJJd5EQs)yX0Z}t~3UybKBH@S9smSJy|7UF$K3gos-OzHS!^DCk>?X2j z6tX7IbOD^*+7{_Da!Jkm6=0mSUB>aO?rG182r-|>ATR4@5&fPC4bbg_#d&@deKt(i zqarUR*O|knAL&;bFsD#MtFjH8nwyG#8i6XMOGU*}%G>t0f{ZMDY@1kGU|CSZ zu$UAA3#>s`yW~NO@@OQ1ZbyK+jBXex1fU3|y8xi|^{U9)zaD?duWq}XM`82>q2d58 zHzX;#H22xVY8sBeJd0|%#JHEahAN>K$s^wc5kk>1%YGFw^#UFvjFrrb%@+neVb^53 zqXM_Sf!;Zm*XiP@oKd!myJ5FVt!;3V&BR`8<}ElN-5)xX!v|kv6ig2`;h+gJ@u65+ zg@xkuGby$G)C81$_w9@MWxTtXkWtr6jnA*K_(Ux8EaMe>_O`eFmPSYeY9G`u94^zE zTVq&$00L}l6KuvSCOlGXNH z<{WCF!HbQ27t_mQi?$-KT^`{pNOO>-uHKRr+;^l( z_o()q9_kxh5V0zdxi+u5YxP28{NyjRr6QIBz|=jFd+pg)n~-^J2Si0g%de!CvddKC z%myCzN}!}-fJPTdsEOCXf~z9Gq~R6;elc4reAT!ulSnH+vE-z@@!!#^TOfP~Xa*yI;p+sri?D}kLeHScVOD(mucUZ9G&mFc(fcyNU>c9ozbDxe{NtTB$l?V3BQ+hSE?k?aPWKRO3n6K^Xhr+z{& zNF!fb$Qf;PFtuoKA}Ug+&L^Xn61h%UKjHDEAYW8RdM`4_sXqUL!o+6#3;c08!&Qs+ zmzhpdq8$<41HdAU*pK2dtwUo^uW%Rux=u0|59u!}J zfH23)^6ZZDY0C@Pt78iSxI&vws?~3u`1rtQConKb>mp?Z54xz@i!Eqr;W^D&`BBIs(`4QxeV0;j}s#dKd|B1 zFzKhZMOfWtNG?u>tMHeop*$DguRZX9zNlfBm=z)@z}M&V%W7VU5HB4e9IJluohYG6 z%P^?6uB>zD)wa|k2{l1R#m2_tHXtE%kp~twrm7arI^70T7GyK93ars246N}otWxmE zM5#Ex&13?9khz8W(mpLh2kUtSN>h?U#0^0S9fsE;5IQ8D`UEBpz@8wT;0}a5fNHL7=as2=SFNe@?e6m@ABpOKtoUzTEaR~nFqQ& zwMWIPB1~v!7S<$I5EZrvHCvrt5B*Nao4BjwQ;Oc@bn3P2tq`9sfAzeMF-&|Z=iNQn zxZDGvJ9P>q)-d?MU33XX8`c(PNu*{`rqN9g1g@XQk*sq^qG= zS#l*lI_h)SUJQ=LjOY(GUT$PjA-T8S$cAa2GR` z5&#zvx`%R-NBD7hb}aVNof7_BCKSm+omc8APt*$laq6h71d| zEPq(5ESrj5$d8!3#E$`NhP|zP)P{7NQI=F;6GUxS0v+;|UbKvh3*_1)2-w`wso~I3 z8Th7esm`XBD0Gn&1+0&R?9hYt`zQfIuB+FIrWoqF_Y*0|cK4G1kFAM$e5QCa31Tny zQB<`L=eXJYsX#V&vtPH;I>s+82$f{WtLh2DRB4t8q(YI-x49-=opm>7**@9K83jtW zwP8ILzzzqem3~`k-q7>_V{y^4e}HPR{$4`+e}roM5tPC52|uv@UGel^!HfTe9*Xt% ziP!)1!uF?z{Z9@1zn6xc_4fre{)1$|!o>1V00EzRsJN9T#5bTf;A^l#Rc65TY{iDU z^f8;}?Gb4b__$9v$~>4fYmRzM>F6T=c=~fe+h=R zzLg?DzLy9W2rJCnrxtEkYLUE_A?c~wzT2l;+VgD}wbHy@nBPfsM4p&c#1Y3f;@R>F zcW%73l)8)2T-S%4wCUoKZd5X%uD#VfKiTj;HYR?iF=p@xLmjV(l?i!6JL@jb+3wCoLfD_Vohls0y8DfCmiw2rAj&8*%h#D%i{!_bBYSPNzpz8jT=XGd z<`l>z3}vE%nQpEa*2`WFGFL1yTQlh+T62b19KGlxeWBuH5@A_y5rHV+{@S`0DwChU zy;H|NZJAJCXqoB~B>rBthU$1>JFeEO&7!v2Hp{RCK zBaxyjq)2g!j$A;Y;2d2yJ0EVGxB}{7ULRS-UKW$kmLz?PIgC%vB_k~teS9d!JYxX= zgKb(QgMh2T_eLW_l%IH@F#MW5u_%dweAkW`+Y$R4{-&b&w_k`o@aJkM;yVjlxj(nN z5KNUTux+bt{2w2`qs#yvC|s*&E@)hFe=8_U9d+Pp3b0f;GVWO>EAQr&ZOWFO2?y^= zS6oy02w3Ne>iyM@^iwn0XM2{Y?%QS_0RM)kP({%_^}R_3fCkA~Y|_K_Jy9*)?s#x# zsP~`Zryw5QMLu~LHXF4WxiCrKpYhY~HTZw_QaD*AR%=(N}(DMemd z*AKCZ;uB}uE=`rw*TC*|t?OHObIz(M$8rKzk$g!uDkXQ$bVYkC zKcVH)%CBcxTXlrIzCcYzVlE?D0d)%)z^9N7OYhH58VPv>bCUrP5_zofPGh1?P!&rC z?w(;LGsb(FzDS%3$TLMXtmFvo-z?;Qo6$_3WUq>Qo^E>(%XTcJOxE9CVWn!9O|7(i z{-);gjBd)qu0WYRxQgTWL!K4AI5eM?u&KEJh>P>8iEZ|Yp)N-KmHLbZw2)kt z`xIAJZBW?V*EGsPB7;QZ9cRu&rTk_U^j2yny@5w85Gc*JUv|+HEO89Kh)7=A2%!F< zNcAx|9|@wAqy(#ICW^`ttPO+^HJT;o>$WoOX&6a%hsRjSpow)ywp3juzt6A4t;Bms zthD?DoG+ks`^?=0`!R+Y>!A8>4?J45%Om5`W1<0|G7ggFi*nzog-C%!ncv0S{5FZ6 z(Yv(tLXF$;$99WU3l!V&rNxbL!8;rY1e5xA%LLfe$>LI&VOuJ{xQw&C?(PkTa-ay@ z-a~E~npKoIFJWaq9wpTqz!aJ}T4*-9aYv&MD1DvGtwgKf(vWjkDGZCVF53EO4m> z^KNIW6{Ee?|Af`@I5VajM$3?tYWhh%-=&N(enpQ2T0Kl8Jpn_{dKgbW-K1Ljv zo^w$67UjUU%hKvCHPq=_6gL|9d6l9xxx$XzIwe;Z5?8x<6E->`Kis#`P`}-)C|>xl zc=3c><12_7LY$Yln|01gZTS=(T_!FYyOkJ)^A0%$%$~c2KNs$aZUGj68dcTKO1bkNCwkraD?%^_ny z&<*t6M~xfWLXZKUo{b%F}tU)J#7e<=%PNApW9pNs0Y2jurePeHat?HAI7b7lv=f?m-~Iv%J6=%gGpx4^T%DurVg zZa@Mx`03aNsKBIWYo!>-*{|QG8i40&;^cCOGk0Ih3!dW$Z`Vf{BbxndAm|B881lOf zFn|>4K>A4W-gqy6&@M95>hCG>w2bSS&~GMsSWWG=Rl<&PqnGxLnu_WE$^<`@y@Und z;G)*i{lZd`9SDfGm~j!zPxfIqkxA@ZN4HB*+!LwA_4G3#&V11Kb~fO9sSY{-3hwwV zx+Vs?Iq7u$=9Z^<*mpPl?T@d8MI;Vt?u%S{t;%s7c4t6X-{-vtmJHmgGoY54wZFxv zrJ`2Fb81@`n`9HI`KOy_HDGs0fU^ig8|M4tta4=TzhDw?&_llW38!@FSz2nJP#vESgskpM!SHIUdn}H zk6Tz`l!5JfbmC&vBcshr^0_l}WLUq>PR-S8>Bz_x^xn1}W9BS$B_l$Knr_2g=GF6c zW}{pNNC;hyrzV9LL1pFWXshAmD>co?#lZgDi+UCgHo$u1z|yRbYGA$(#-S$|=a}TX z2g?3dciK)9wGvwOM8*(WUF1pdcYTbuf%CR{3%Ux5RM)h$%0NlK2G2XN93 zJjd}a##`168&?bU>7bJMjR?=dtQrFv z3aqU>hy{&UyYdzp8}_i2$aqkDX%Cc%)vAm|7-eh~5jd!kN%~EXo`71Hly)K{iikA| za^Fk@w!_jfE3&w14IIhw(ZIFh#DVnXmyg?IyQwUJSrjN^@aF&mbJw9T^Ig5480;?7<}2ah9QCUDSaFh(GS1wl||-6 z6(L%Q_$34klevLi@bS=4hDQnRpq9>=HDP6{0EY&B6JQdT8RozAsXHHK zCKmox2&q#)WU`XqJkBi8qMeL%KGlSNmB!T!Xt!n>TZ%)gVF@eX2yYLUU|atfs$@fl zM|K=I*U2inwGk6Uv8F=9JNkH$+VHktYrltuBVd4sz{#;R;yAG@=}Qj(<34>F_3dJUMPE^q73 zC%E@=Kwjj96_Ch*I)VA5=D?6|33Bc(bBvb;O5K7uP}FZU{&b^2snij7dvsz{GZTIs z5B}gy!jxQ&Awj?WbbG`TTZE%gM6FQSaBg)hY7z(_3fy2De@8dmK$(MxMtnDt>cpLL zYG|N>>9)XRoP#=}+-kVCW=|7|U?*FvpU>6bn*xq_Ol;l;^tr(ysC+$V-;QJ$lMsGC zyY@4TQ)A$$hp(jNRDB65yl2{rW-Ym$p-^0bm~*>&MXAlA%4ugz$o(#9V9TN$Z7 zqU~`x54*{{1t#rFwgsspqbx0W&9sOGjyVC_zb_P zpFWE%i2hw>^@o7XXSr0?zn4$==K-7lWrqDvz~)cD=HCpk`Mr$r@6syv-=5w>t zH?%Z%!Z$EBHMij*Bf~d0;vrLGk)fBd6EZe47x!>5R`QTlHuSJGr9ob)xBW&zw=wNQ=WNvGN zuWw-M?DX4U|8n3z?rmpe^4Xn)Vjw|F%=e z!C2qvx4iFzMVIvdZ0=-b%tK~qMB`|!Z)L^E!Axsx=SW7! z3-y=l^skQJP2cXXr~kLB^tt`VYZ6w!dCS0V}7!ey}qC?Uy;N z^leOe$lPd*j7{{Nt(?es|ECl9zg=AQKb_8B?#I6fz6c^yftS%Y^=OB0>H2 zzu|KQ;Qhx!Vr=udfH-`v4u23Rvi&|?_UAk0jc}p@5(y+HRjgv$;~TMArL`)E2*fcPVP+ZdN&ec3>;f2 zg(E%!#UsS)2uJGC(p^w*bSTc%`2Gg~K0v|0{CJ&caW~-BW=nsLtKikzsBrW9D(9zi zA@gGS^2gxS!$Z~W>PPV^T+29)gIB{)wKq+57_P)Gb$8DfWw#UKz7p3T-n|#sbvrfX z*dM~*Hb1TYx|v=0d8NcpxcXhhQ6i2)#^SyB_**P?t2k1k7AtmLiFTD}$yd$ldi9!O zG&V+wH{-;fXD?NZC$%DP*Kribc}CF%uTK<~jACUp9^SlN1%mFtkTTNV;pg!>p6AOX zr<{BYcGYb;HRDyNiYN~dRG8oskqvc=OA}CdVUBy%z+oSd8;SdMh;wAH4bvzK_V!D4 z5P#rj6BYhvdOF3|F^utdDjU(3^hz4+>#ky}CV;JO8zROms9>WWL~U&?pXCIvRiukJ z6KfesqcjBuD~T#>Fyp=)McWUfcsPVo(;;8@vFYVu%@vJfJhK3pe3xkK(c z&Rw}3Dc$=LnNYzlEGP{7rHWj&UsrfdCJ4`H9|Ue6`Q$33dH+xj0K}cRt;%tN!_tEf#ohIy>ql_| z$MM7%+8S{g7g1k2kofExV?E%U$VhWmjLiytwRus2co)(~N9QKUKu_KbeW)~^zH-k{ zk|foIpSkUuhOvU<+%0lvOVyL`P~lD&Dg!GFAArfm+uw$39pkom|L()JC@tfhL{oNm zQ+Zc8B>Gz2ixqqk@>S`$5oajHf{(1PXT3}UCY_EB4{6KV!2NtM+fJR z`(Ci&)TehEQ7<@#HsR1JF5;v8k$|0YM-)M~t9IhD$N(k6R0Kg$kK$Mkwws;Li*B}_ zYv(y%k>_>$&{PBw*g@)c1e2j|Y7Qa^`Yz%F=kXwwrA@^opJ-#JgHPGV;KynlsjAl_ zioZ7G*@$D0^|)tZcgKB}iTPNW&P*IDhjMAp-!M}GRqz&cWUCxlax49qsS(dQ4bFMi zNab$wR5(~RNr+AS&|#4LQ^BAJWe%@jaSJR^v%UnsaeftvYd=O61D!BOSTsRNRWt-p z%I3*_L+6iW-3(&b_fxYIpkOeMn(>Qb!*`1#!#GLzCxk=y=e*jje6Q>PNQAP>tj$U8MR@=oO<1_%6nYgFZMS`+i2dDiHLMO)^Xo2s^H zi;MA-MKpjScglv4FjQOiY+w}HLAe-Dz+x%>Gu7LBF;326sF`o^E65$MPE3{a*zt4d zxUb!0cIA7KlkF8bTy-UMj;$7~Ov0P9)Y|mr&L6$2ZYBy#%|nmCNdX2^=W=CndNG8h zAHjp|RoC-RdSAu4XKU>WNwM)jrCJpXG#O9@!2!Ga_O{|8N+MLjK#~k3*c*`B0n~hW z_MG(~i_)S{3(CwmFTr@SgqoRRL8!|2QtYSn1Hs7hHwMC@5fTvUj1O=!OX@ zN`Ru)6+{xfS2mCvNglWmPO%5taeS_0Z|Ck$tYWs!KH_~PTS;g z0W-K>HVxR%kzU~>c4QfkKDB{xDNm9WTBTgxDh|E7*%>b%tKWsd6fXpy6nO?9_pPRy(fOM}R% z;&+yuM(RP}tA8L?&4FOnkvt%p`krJWB;8W>rmo|xHsd#1i&Q&;c?#iJNqPosujt8# z>dzR2IhmSSV4l+P3sX8<YCKxy*e}en_F{uH z(PuUPC9cOYOP}AHImkzF>4YhV-HSe*s?0XsnVbc)UhnfUC_k~xGnEV&H^ea)~iZN{czEj!coISCQ z6wZ-uWGolK1YvlBdLAB{l7xmN7pUvn(ybR5<{=S$@ZT_@jc1@D9IV@*NE7%Cs2<#; zKMZWUtyj%egOcFVhMD9r9+->S>-KL=*Alo2qpLE-Y zH{VkH6sBe2U-!k=GF>hdUc4d(R|CH*!9OA~xcok(xlwOD%?$l578FTJ?cbp`xaEm0 z^~A>WR`UYkN{`Z*Tt4Tx%wZr&+@i;9#TtYb4z@6#ulal#3^uchGpqa_EtG zYzO3L*mf)0^NfyKXPeHV?&DpWXOOw-t@4^5n+-|likqx zvYxB>MaHMPT9iHBh^p6_8UKhEzo9I+zqJ2TT;lYtVJ+^r)L=r9r22hnI2KYoNy>$N zud^3{i~X&p-L&IVHYVvdlamMulizWv!4U*-;&l+Npr${nOMQiLJ8{rg4Ay z->l`^I{1tZ^3|uv-!HWZCii0{Ib5SLu)H{!djJRk4Gy|sjO3CA)UqAMX7 zMtG|uMkCbwqfR``rRnGWpv{+k_!&3SW@(qxhyo1UPM_WjTmV1u74D+>tu9L6?V`We zt!1n>Op~YAFZ<)eP6KeATY7_w8(l3yx1@i+ydI{9{r(@*R(96I(Wv&AOQZKhF7#37 zZ}d)xm_zv{BA?z{!7Z7TFk!-~Z6e0J{;i`xp}ghu!W--GIk!*D%J&~GGy7l+6y)v4 zOa7y~*y5MB;#0p9A8)B4yurCEYcl?ugR8QY$_m3{dGq*uRQ5bRUqnE)NU!-e#Z!d{Un{`m4c!p?iE$n)v(zq6nw`iAwvrsz@E;RO+88wlvz?yyhv|NYUGN@!a})$gL4*x&JlmTCxbrEirnQ-5W?rkAOl}|d zXeIlfaHwsZ=E1bOYnBLV@1P)cCD`XILhPcQgU*)yXSMmPqaDN z8ev7kR9h#~LcUv7hQc0NJYc#+(IpREis*uT-H*8LZVzLipb3ZZqnHlWE48)hd2ac% z%|dWff&ij*8M%!9HQkQBxEVv9>n&kAc#Wmali2ubt>f#Ld(EQhtE9p*-w}Y=>e_CR zce6dd-cGldJp6uP$;hC~vBM%?Hp=zJ*ct_Z8bhT&TE2o1O1u8yuRKgT50iNelXrjq zT=Mku>jkI-$OU0{L&@&J^|k;aX}tKUGlHxzDj zVSE-AfO(k2h%Cn;iB}o`DYmI#vazoG9S}&iy0&mC07wdTs1&hE`3dX~bC4Sp#YTbx za)ZGAQ!3XTCr`g;Si8I+e&QP_tHLLsJa$P|d#1&cC1&`sjc<;-m>nVs(#0_|emVU< zjm6Ey-R~~`@@AZ4xK6x3AtpQl9t9b>!qq)J2!Lgkfq;q@g!6tN2&5t<4g_niA;bu} zC)pWhz5~JPrAWyGA%snlUIan13Q~Dd1JcM5k~1yY%S^Z#sokVEB0-AXA`w-CUFx$a zSjg1r!xun`n2tz9MUXFw$h$=?$27>IU)E=kb+aPPo{1v`fK)?L65%`}1j#j@AteR9 zWk7EVnDAQl83S6ABL(Fz2#M&D>&WWvJ_A_!RRdY=ysfL^!$%>FYGx`*e65NJhh}o@`Xwgm5z8IO^H&M!r zJAopzh>C7QP<3K7bwW`)TRe>vfMA#AuI{SUkfI*7J9A9x^k7-i>SL1 z&|Ykkt0utGuWQNcmR?iTu5XRE26;Dm!z`B8!7Sh|IFM|zv#7`2e?2R5up>5L`0pBt zqg!J*oz@xB_)$x7eD}OmYm&+987X53h}V!*J?6SsjI@f5Icr&mRqC0vgpz0P)qn#iir3oDAH zwRjmdy|u0)0A$b9Du&t#ZtvsU%b`?pPK%C&pomYZB4)Ows?r*W{p^vL;+de(%1V_G z+L^NEJGX}yn*n(G_1x7hme|zA=Hewp3RJJDF1i%E(=3pFr*_iNE)}Gq4UVY7sd;%c zIg_F@o}`J@>{ihPb%nD=mh(#y^=61pw}Lz~drfr(f^#%2pYCnJ5F%$}vm(i=RX7L1 zC2m71iY$yws+FSiFCC;r_D;tYSUSxw~CR#EutSWrT(VU#xrMjwlPj$-_6ocOJv=z4l@nM$h8BjF9 zxjOf2Cdf>vQJ={+-YSXV*_(p8FVCiLqjF{?seZ|+C^cH8?b3f@cRpA(ZL9Y&OXTQ; zAxF(*>%Fr^FJ$YzA!rhGI}`NQoSigQ?fgy=1GTeR5a)GrFU-i2+j=-sd7+W=?LFN} zq@6HAJyV_SHJO4G7Q`o&POmr!5AR!CK9AzDBtW)^_NIW(hS7Y16zAAQwzyKAW81Cj zzDTm!*|cEq$Ua%fEsu)0mxWvA!I~5qEd)rgThhgWI6$IKO$&wABOXxcAlb)ILWk2c z{!X!no25!ol`9!i#j55kyUlW>d49DdzF6WX6Ay?_a#Ei*r?Jv6vQsr6qyGcxc1CDx z26;0t%S;BM(zE6}kQ@yW%Sk&ffTovp4rU!{K(w0zQFZ!k4+oM!bZu67l+-|6l!dQX zdxuMNAfy031Xz$U?8{&rf(Sb*gRCktd|Jk=Ris5hnjvM@cl_lt24;bIj*NB%#B8Xe znF6S0L$ym}-r>cOk*NJ2AqgTpMpIDeE|6lDH@oFtCJ`081%gymGTAhW7=U}Ut1D79 zNj=HCsrwlbZB&+hD@UvavnNGi>-IpZB3gUwHxXWfoe5EdTXO(X#DAsPE#aF$)a$S> zh*dS(t(ZktEp{t5@kJ%mFcrDgs+~zBw=DnJLODaqN{Z(N6?-RF(UAP*+~ro+4k8u~ zMDwe7rr6HN76Pcw3)nzK(to%vw`5yV5QxsGLj@G)Ke3iaX5D>0YlQ`h2nm+#EMGfA z*(CMFX4|k3g#jjGvGYOfjAW5a<3XK4289kAk3e+fh5 zc8h#}<>hTk32Tw^h$1w%PpOVG-5gH$KZ$a8?br-kzFxkpPZg1@HM@`X$f`BFL-9zT ze0Lp+*w!h|q8)F7pXO-L?<%5Qhrmqxh}6aShMCzHe0u`ht)d=LIG?wUe!C{WfM<<4 zuU5hP%HicuESkuz{LHKm=LZkp^S z&NZiqf0n)W+f!^>Yp87_n%Wer7S-Oe}IqAdZ?N63s;MBJ|okT`}5jQjAJI%pL_V`*4=aAWgWzQ z#vn0&?mWg1l3A9OProwd5og$YG_&=aagTi2?RBp2BDCkDtt7jNBgkrX((_r?@_v|= z^^)$Bek8Nb<)57%;4V`|dWUzD#9PMW2zZi9 z!}$$~v~vOt@D;&YAw1HuS_1jAOF0B_T+CYKN52XjmluRDZQio1a6L~Mw#BBg%kX!1 zvk$o$nHl;v$k#?9D}o&MFfYqrJsYPiA0A>@6ISlg;qwXaW7Zm1cH%Pp>6p+aLGDER zzHRs#NgKXw@i&q}=W~E&9SM`<69zFH1!0T#490vn4jB-dD+ybC=&~gA6_q5&niMKF zizvLGRr^63dt{Vl;ki<92T=+u>otdK+KvvAwxfa&S}&pK%_G%L9}+l2u{!K@UAg@L4>kMt{8FV$ ztqJMYq+@fb`f6=kFe{&Ls}^%+D4&J+qY2~TPLmnbY} z#|X0FJu7_>$05{ejWQV8!O#Uea>|z~?1=W74Lj0iIDW2E@iK0CNtrQ%QKvG-qLShf zgWalTj~x8f*K3ZSM!vGe_VvgtPrGkVkOI3sNvf+PU4*1&h#-BRk}54pr|~2G(*?kl zpPtel>D`>gHM0z#ZdLLsMXxb{4&T`@W1XXiYjD5EVa8^y!G5(v?gJ~b{{~?o_n$%6LlxRu1JTKl| z_w1G8xd49hT>-r!AbqSWFmw7?S78T_^R}{$t6#saw*H=>lI-7jMI!c^0attW{TdD9 z#wRUX{k0F*+$P+y>Q5R+GMpwnXQyZjn7EPk^B5wMO(s0u&aFN0*S#Rfi%?qm@GkOg zoZqJ?HNqyr4VPm1-tWtuQ9Fc&k(Nu}tAE71cqlB(vY%S<$Ua?8kY74_&4gv`I%Ui+ z?F&`rpsm^uh8M{ZrK%er?CA2w7qB}T3Rk;>p$p+TU4`_Y+E77dWw`679J9a(-1PMd zBNOi;iNFnB13CeVoeb1s)WhXyF{qjAZ&_U}N2BsucPf&;%Qev}W>=}n#<`@s;(@Ex zZ+sg1q;#d7f;G~0>T9o#Mtb<kM9(hEz7Ri%QCRU+D(*0PZcW%V{g&^uu;#8JQ7<5H zN+#_C-xosfS0+8OAlgQ6*e#slPs1E-foR=`J0wPu}MYnj-*$p;~L^r=E8mYf_9V1`s&6 zSxd&o5|c7KD9fv9zsZI%wH{?J|EdY#k%jH-RkNY}RAeBkMvdH45wCwx^)0uMgf|}ZU=mImzI(Vm-#}M(l;Yldc+`O- z-C2QyoK)7V}lCJ8HNEwD`+&P;h>7;$cifku| z-~>_H@v>~2s0=xa6M(Nju3f;O{D4m>iuIP84P zNenw&R{NRrBa&onTDA)FSh&&^NhqF@62ywA{w4hO{C3-a$#;f$Xpcawe*_Qf`wJEL zA2RHZ@9!o^)}JFNGo_CCi1<$^{9VNP3D+a0KOueO3t(P^|F=G{5=^I=s7pckNa}_k z8UB+6o)6*QOmSAl$ggmI-aRPEEb?V#6st#k^RLX@M;8Ce>^@Hgb4}*XNu`We(u7ft zk{)Dlu4%wT8NEUK>Vr4=>cc7Lh8rHcJn12cG8lxp9oi&_Ft^9NMT~|={na%ks#Sh3 zXURLYVkv6!Z7^8jv>eTiS|7tvlCN^k+VEiIjE0kh&B@!RK0qBIEq8NGxj-(FTIBzAemBopm5fiX08 zYb!>n5#vgdL1IOettbYMB-BDSYIk1)i~jI{9K>9$mWU#rDiuAv#79O&crg&-<$Ni% zkkzR^RU>um$+j#V@=w&PQ`?yo03FV8vEh2+o6q;jxm!PtPx9^B-@x`}j3APIwm~SY z08|9Sn@~m!J4yWFqQ7bX3bT5}w#I%`R!6Q&2xbBF%HtdIgl zQXw^%1-4^J=(?&{>Av5v-Z&Pbp93J>Fe}8yu+wloQH&UCN4d zXImxSlQi&KzWsl)%N|+6-c-U{xv_(<^any4a&*1_)Ic}P%yBd|Pe}+6FKXD=oE(~= znsLGyY?a}gJ-|P|SBCG#Q6+_)C0jiM9BY1lBR<28*#!VtNu^?XG@>ndM?PQEg?}rYLghuRvUE^8YqZ0$q6$E z0j66A%!QMM!%d59BVp)Ha{gKUVo#sB3}iPEl2vw6A_kddXByq9{~IeVzxs)JD9Ei; z40>EQ?1Ub3$w)PsfDhGx2nxc6=wxusTqIG!LG;xwjI&OtPRBo&OZYB15ExeG#>s?X zv0n_5+L}+fN8`tQ_8g z^c^j4HbXe4)-0C5S>@kiZJkl>@D{d}naQ%=T4w5g_bD@zf$vogjtj%PUCy__Nj)-7 zxNG69n$KGdT;}i?gaE}BU?B2|;&);^YHE{%ASNEGAOyHO2bWP%D+f97519xsand+t zS6Mg|&q2b<^wwYg=7SMLE2b0!LD1KOWbM!D*+Dke*sC=s9;YB$?wpHV?4&``<4JuT zAaC3oPZQM1%mOD7xO`VRxbyp%^~E?@JX~+Zxp=sqvb=b>&I)~D37f5h`8J4DoKxYB zta67QpH5&(%^+Ggo>DW&F2h4%xb}>V2zKRaOe|m-Sq?V|AP|BmPF|Qrf*f4J;zc=` z$U{}1{bLAvp4wzg!<@Cr7GfN{1jCCLvCAMq|uz z5^|X2lHkh>BG_fKywU9X-r;WB$(kJ;!U7C}QA;Ep9{GZiC>+$?YqC3ghkNC+EF49x z9Av_dta1?T&wHFTxp4VNxg6p?KxYeu?k%nz+z*?U)|zd|#pMOaj$L71I+Dub!H zf^?Sm#;$QIh|QZAy8_)K6pS~gS7)sh8cw9n%H|tn)>-*c?N>4^ND7u$^HCD)vW|2` zu{*h))RdAhrxya))vmxbNlsar4<3s)$%)R%T1{~FY5(TMQD;{SQxWHWy+#2#@F`r< z*Eey}x|Jl3Zj;DGw1kc`m1H!4K0Q5j z^5?%vdz_-$a?boE+O<@>C=kBLSJrv9tUvC3C4Is0SJE@gDEj-8iYVywlddS%whXZD z`pJ5f%l*EXxcK{Xcd=A{F5G`VL8W{*PrCe+iKV3bE~WdO^en(z$~TI1ND@lcE?XzF z{K0T@y?Hg+B%PhqG)}a$voZ=NpHC)UkRV?lBm9x}aM=Sn?N1J?PDYVEEXnEEH$6O` zwzFY}k}8`FNdrZC!d&$#B;#{i+i=v{Mb3abvm5T&*fl$0M_{=PABCCG#eNLg8NEhw zKGYU5(YFnxKTrud=fpnUUa-r$xFs8$=95_O$V+m&!gONSEi<}s)a@A5aFq5Nb_do- zKUpynBK z)MPko*ZPcx0H5J8>t0f_lN{uC^z^uRyW@NYRj%pjv1($BUSkpUsRv|*8oVGq@SeQg zQ<^zQsxT+JcF6{q4Kngmeawjttf4Fm0xNu&0$gr7m99H+wyoN9=?zOi$V+fvZL)l| zo%Bh#ZYTJroV-CI<#B|UqWFk+ZmD)TYCm5zK~8B+Kj68y)0u4cbYN2X_RM ziWA)gWmqo>zB?zEwIruvM22=g%kexvDo#U+4Y#(BjIGinp5Z z@+c~@a!5|sTUqYAT8pGToW`@N2BxrCyfQPZ#f&mDF52jrwQI1Aj&2r@Ps*oNJu$Yk z0_=g~))M0it1sBt0zYlC8vk6~8WfFlR>%J5vi+bpSg%5 zq4qSDs?EtOcdlaB+)WO4&7N5?mHEutfnJ`q+GRCNs6E!IV$<%!(dnG@;d-#?>I)sqQJl=X@YUoN#{Zsr>;6m6j7=68UguSpBzMWPm|3xeG!t^cm2Vx5l|+H z_L>30cht#w@aLV|1ZREj@1!=iRDC4byewNINxq}zk5KPYfI9mKfxRX($*OugsX6Rx zti@Ad{e3#wShJ;_$?x92ZVy_|dY}q|HL_L{0NuYpPX{nzMc@2GZr1=e+0dx>JnmiKep zPTu>ei1+n*plaTC%CoZGSISX+?pQ?4!@y0ovfe66+kM6 zY;HmN_O4*f-sNA^U6QVg8)-ifP;9mXyUwXy7I6mYPM_M|iOllH6n3N=j2TG>f!t_c z43Adn1qYe?yHA##5d!_RzG?4*Q6gxg&lkSP#V^})o=2I zo&U03F1vOmH5h(^^A3BA)SXqXi|r}t7NZ^@2Fyv)4A2RJ!29FNZ?Csf)UJgkT1PEOvO1gK?7e`rln72yFDvgO$tKDtqWyl;CZ*MKG?;r zz2moBtWA!cq3EPz0V}g_#klyS@+Op{lfHxC4iE%R zP6lUktQb`R&u^ANu(6<8eKHeEI(N=}&*Ly#M=; zwoeaViX6+iXac>6kvHKhvBNe?3F!5dTr4>Z-PKOm_VHb}wyz;X!K8yR6 zKx>5$n#h1&AqPoPOU_^{9II!%)@tooXPvoEfNHp|X1+kM5kfV29zb zXFj?@6^mZjG;4{>OeCgJC5Gf1U4?6XARG0~UGW>qc6Xb#Uz2#H4i5jc2o9I42*I+< zayedoPPon*oc?I{s47;iCJ?Vu{|eoJu7&Ti%glA*YhKl`6*+LXaNYB@%j+B%1l5Z} zGbz2kJ*vwKAxRhaB*??prVsODjaq}5;}41#K+(T#T0K{qCGvX$Sk`qHEafQf zoXp8&q^l?kpDh@*D|-XS)P3$B91{VAK)Ud^%R?uf+&c=C<6A$M8bk31iMh-j4I?p` zjdX!#VX+l+SJnVowT2D|*I7h)`sqfLGQ$XUwNc*v^yxVcjJ%eXtEfs;J$cc}CLL+y zE)qEz9Hu4(dYU0Ne3u%%f*o!1*~p&b!$FJJi!1RMd2zO4cX~kQ&sD!^34&5aT@pno zyQWeaaL6oFkftjw1g`pyTG~Y+1J}Mw3SV|KfxnZxUO3lGYE^{8iEEc2W4kmNA9hF+ zMAO>?$jEzMU1JI`TF0TFbn^!y(yHwOnN_{1OOAEpzQbG~w`$8x)DjJ|)f)x~x|Ghk zxbkc9E@*!*-VXb$;%#AvU87}E==~_({+^p&inpYm5&4)Glh#Y-%w2mXKIfD>{a&j3 z&d)Vl`_27Q?{}V8o_HyMbkb(jjr4rWUiVA{A9$VChg@gX6_j9S)yPv+=IWks5iDOV z5oNtxv}UrAQ@w7WXHNRqf2gG<9pvrlK317bEg}%Z(eiG>!?CLOu7NbrTC=e0TCF2b zjzMjWu;hH04*Pn|?prQZc2^HSKXYqK%uep6UPZ!BIx)d%3CKAYW!$8PR}Zuy`DXJR zc}EO2$=V&mB0U|V{TgY-Gmroxx&^!1SMyY%cym z@GTFZ>LJuX$+^4u12*9pQld%ay@nFCi zL2FGJm%>5Z}$RsJ9jLeDzM?{V6 zUc(~^7m*8g+Oov(oEGaQ(YlP(6*R4kQ#a7sBNZFvv`d%;KH72@VG4SKNdE}(kHfDZ zh%sYc7(pI+>&dgw6&Om&z$!ur#XNNs%``l<*PJw5I@fz+uBm?PS}|R&-p?U|gP;yM zEIQe3XHlMBeZqTw25@ujO6@tLXp`)bw>VV0_R6!)u3aIY3`jY+H7~&h&Q2?QYR{3h zQst0}&52M2xe`VCL-0wDrH^9GT{ykho%LKZDFsX2wj9C!%9y zOOkt+@K@r zgF!l=*?@g^H;GEy-7So08usfZ;R|Hd8XjqRcUmwdIn*RF&`95tR}#MJ%j6r*k{A9qRDaGmwh8(r&z$NwX{4AP|wStGoaj5Elipr{+lEc>7S zB2{&6e;M}MiijL2&fY(_x_#9D-uwR6=ejW`^*_Oaq@TYbzU0iGSI9OxeqQR5FIpT! zR5N1kWJTE$a9MR$5k@p#$H*o{m&41< z*9W85rhaI+O5m3AN>bpfqxOL7nsb&j6jd8?WWN!RHM>swnqG;Rtsyr{e_2)+9IFgZ zQ{Ra){JrPEHAAr(FY0++b)uIim#7Z-F3Vp{^i`IZF5weIwcpF*-Fdk8TJk-x?F!e{ z&2jOgkH}#6=p(YSdn6I;CB?Ztk4N{HwwHXu;&q}+R9O29#knue0QT3E&zpQGV#-d} zS#8xWQ=YV1Vk))G%AKzZwpNB&M;Ao=`J=4Q#2N|o13ROMz|L?g&b>|%>F6ptmq?Z7 zES6+S;#J?dWJori04TOEevLUFv8!@YGA*?xSgZ$&e-)Tw?=7^GxdV z1d4IbnsZ5)H$8Pt5_yw}_DIlh+jV$98q>0gTw)4N%XClT9DEOU+2lBSxNCFH&H9+c z8wbg~R}mAzE+4eKu_-ufzVe?0uXjm-fmmFCSPY|;Sas4EG!p}Bf@Y#sEQZF~oZym7 zc|5)BOo3KGo(jcFizJhVUpY&%xXX7PH8*$ptb4MlrNF79!WckiLFgw^X(2dS#tnx!X1wDq%J}$4YxXjX83U)Xx%%Bp%CDtoYj7>F!Haz z(aHf2OOTJ3;Q6P_`cKYWFl$dNEjb`^clb{V=fD>rx+K%nm;fD#7D@m^GDc_G7&0J~ zHijgL#-wmBcjn?Yc;Itw7gKKrjl#nIfoK(qq1_C$q5f6^s&}&CI3Mz1`j$2#V}Tmh6*(PR0Wh; z{zg)KwV03Rti?S5R1U47fIAQ3r||UwmO5`NY%GVi*<{V{0uW6kg z4iu?=SXQT_b1t4W@rn0Ip96)qJJ$rtR9C?c+?~HyLyumxvXD1z^6a&+#u=|oIna5B z?FW)UeRDx)g!*rbALVh0FQ^mRIST?t%^z}w^)F{jteKQ6Ez0mVN)IYhTIp6&ZXtZ@ zg{?Fg6-}=jEaMXBtvCV@jUl0A5SB51lu{C-G;#PlkK|QAMh1nEABa!qS%U)glY11g zQ;HA)rKq^XO8~kA;KV&$A~6fgBa+9_%O7t%J$(O&^GhHtDc~cV>XOdWN7h8E36SIzajkhD`X!B5A6}Lz z8#9=rh%sPe7KtqqAVYRmS&q;0E`Mf-lsnUSR9$my{cdG;3?4M!>t)qABIU3v6w^Qy ziq}FcYgUNVS!_kSM1y55oFZkXD+On5>iq+C%N9Cn);l!go6nb}HIzUaz{c)jp%-h|3#rdn41tE=`9DezCmrdrdc7l~AK z+BA!-tu-%gQWN#bbkf#bedslke+MCk>S{e>L(FrL}u) za;3GuB6-P_;a0m;a8lMKu&s)?YKiHZHnB$6v{6U(V4h@geB`UFy5TIp<^mUaB5`Q^$wFOZhT8ur_omdzUS(%Cky(UKeu>qtA^o&ldCZ=-p7u-P zi_Lz`TH}Kna8^j_re~cP?P{M;jPkJ2!STK{{~uWyFHbIzaP$pglB7ASUa}7#%dOVzpdEWM;u3|+ z0=v2dvDcclX~*7Y?oav^>F?&3=!r|!T%sktKq!EfwwDNCg=;RTYe&<(vCEgKQSi*# zG=o!0X+nQhxX3Pdr-rdT%iTe{8<82oCF_)xp*3sP*~7HvsUFv$8t~3H=gF95mreW< z?9r$=xrzScLf$ygO+=0fn;on680Wb$%3B+>G8&ecX4_TKv_}7PTu9P2?J^$}sj7yq zB#&qC5rsFq+9MiC`+#8`)sZrK$+jvoZP84FH>e4>g~6Ey)q4q2x*=GX)SVjC!|iF< z)3|59Z^tyoUeZ9gXFU;YnrkmHESWSD8*AiD&@i6zlBY~f-{5U&0n&M?X&}1h)8wYl zbiRuB$QG&Ji|+Z$kxS&TKlNZ5dv5<)*fnXT=7A&t{gf|z(3d`7#u=NAJ8h%k_9}$k zFNB7h*HP5g^S#F-ef>iM1tE8p25VT;X{F>v_W zQY8sWgS|&gGB*3eGUPH<4MR(V2;y^-VKll`|eR!w2?3I|CPYqkq22vdiPw94=wkvG?C2Xl8b6 zOu5Wy^AZHvI!{j>ouqGut0UKYh?L8H@bHdnb-iB0wJ5MJ8Rej2(R!WKFc$Wk1QkIl z?n|B^JGUDQlK+rhWr?<=AZ$yD1G@i>H4>6K_w{F`kV%AK0IHRCu!XBe-}6l-QcXON zk-)hW@f=k*>!%RMA$HP0awuMM@&J;=-FSFJvPvGZs2Bty5Tko}3QqQa?X4P9SDjLY3=CPrfXU2dx zgV`D#0)rBEN}@4J+eo@O4;jpuF3LI*!Q$&N;h?uWZ{aO*iA<{LbuYbBPd9|!bTOEM zH)jTrcA&W_p)JegkXH00^a;qpmQy;Aaxmsd?nWmD!6D*>)N2i7;neA!NKU~MMJ7E4 zVDcNEjsMSqz^(#q$rKV9lF2>yL_IAc20J9zZ;U|CGI|H1e4?`nariqI{q+TZW~YB% zwuaLmFIz(*9g2s7*cXazQ)V9|%jC|62r2Cw5`|1=7{o0Q-9n|JIm6s_QEf04yFE*u z7Y1Zy;DIcfO8yc+rzN~Y7jt`K1TtK>8tDF8Zt2X*$Kjf_Z?0S*#)RVWVsj+|Q+rBJ zn?R&_Uc|7rkOP@zCM1C=k7uq8fec19Hx7*}nFV*o`Vb^%=*H)SjQJJ<8Pk=|fn@Y6 z2M1*O`Vat3rVRONTMimznz@h{#M>VgXZDIfri^DJ3*?{gv*d7AWFY-tWUIJ%iY((p zezIP+m;K}3Pu2~Jf3luo#?p5EHxmJ@`6pRByD5>Ih^ew?ow6@C6EgkypUZn|oMPC8 zd{N~V5L??`e+nfKRcY4J`c3*NMAeUyT;kI#+a)H<(hj84K`c=#I}IOAA<9>Br9igw zwKA+gzK4}_DUhER3xAe;Udabm>f^&-KpK(VJdvqn?DBAajcFiuGPRaPlZXJ=9!;If zk&Ey8_JJiEM7+V9uCDC^r@Hdx5RqQr(9%@=evq3cndjRSEozzlMDze>K$yQ;&tr&z zoNrz%0IKwp4KNU;;T$M-RojJ#Q^_?La=CvG4DHT&+!|z-Yx){w)+Fg@vt*hEGJxrt z$7Op`%i{nE=uEF5hl^7bpfj1e0GfD6gBH^nGem9TH>*S#kvW{}PVzPKAKLA@DSenNTN~50bq1y^#r)&_S}9F+0?RfEQ}wEV0 zT!OrIATB<(lYIrU=->82L^>ahdB~P^lz1SU4*G_NdoXanB_lR?vdxb0OVoZrW-YP* z13j;y0J*(RHLVO2{;*wlY?}{RTzgQVBePvdWsIxRn^*69I3;?;ITn|>K45zcZALt$ zwZ|Gf{uVW>Q`#GC!xu&=#N0Y>1XBL+NxZB;k6)hZ197?Y6fQlGdTeoTt&n;)flO$w zj`->Ufx1!gFr>%pMFg^Oh|6SDXM^#5gv>&mdgehgI7mkgZMb+ zwCn)gf{rb}Gr^AB3cT=30v?*wS3pRL%Vji@y~YKHvMND!(Ys zzk#0R|0Lsl>8YYT`~J=8QI#G9bq=-E`{XP7F7LLf3*LX;-YWvAxhABplgwij-!k#Y zkvE&jqOE0x$l-a)7OP^eY9NUc5`~sm0iQ@8-k<}lmN4TgOmt%hLMX4XHLoNZ!RGV5_xM= zPI2XBR5I82cLc6Ye>oqBI8MO#~3(J@=wZBtV$PnQ#?!F0F-GVnNwo1Ay zs`p|Oah)=#Im(4K$Z#lpTg(wR?i;6W*DjRJX8vpry<^R7_N`R4NN(+6j<5L+1ZJ%*ZvlnK{8rLj z0oL1s3c#nnvDF50sN_`C+i2%(#JIO)77*TMAQLhA6f#QY(3xX!_|)rd*$)!gl4(FV zXj?p22Qpm6+2VKPUNYIq0@=(tM);25q*LnxSpqhIbA=>eye3bU5`ce50(`Bl zHoQQVe911be{Rl`BJH2617F`kxxDl-S-_&%Ms0codbaSM)sByw<0Y#()Gm9ppK|lG_ho^=No0{a{(;& zRP@3?F1vMGkQsv`r)2>IqEXxO4o*xin(7Uw=H#hv2w`e6U|l%T*yvB+(8HzYO@=}g zL{C<9Vo%c)>V+)I7!>mX1+XCE8WoQ?CZf<0xa-Ww2XvxTG$YI5vou*Zw4AHSdLVO6 zL%c)J-J010wn+U0NzQ(MM%nZOWHDVU`D`FGjwR!YqCehYK$ciWR_OiZGo{8lP3_WS zlcsjQ)+=@$NVzj)-IE~(GMFAuvV1csg=E?TxwPd6r>2sM`4Pwu`-7f&K8BdU>J0Q; zxbtzGYf!T`72nF~(%syHWNa-Ot-~EQ-#})`I2k|6{YJpz&y_+q((pczcweI7yH07h zK;hnKMxygph>>JlCG0F(w~J&PEjq*C;cZ+LMn!tHrHq68T*WmFK64{A)!e<>ZC;*7 zi>z=jc=hyvK{e}D#zU4?rf2FQ6xq+e0DAitF95~_?$^#9qW$hQ`UgmD^7)4xt$=S^ zd&s5C8BlCph(pG-+1x1DM3m7xVceYe@CITcm5G66Cy-H51yX^JYMujR^C6Q+AFxi^ z5XeSyhEv8`ojTNP6PnpPM=lbH)IH=5o50}r!cEN&xv(^4dybN+U14PFP2}*@>hR`m zwT1l0cDdx(mD^x=1$PfM4$!u!7pZC7jf{E_WRQ8vb_N|gNV~KDko-xWdoF@P6>z?i zNQ&Z1an5{C49_1YWz8Nzdg|H?pRSRo@{z^JED|=avXH~(6{F+uM(Tvq7ZNrvN$m%| zSSOF=uTCX95>%gjZ3bCM;?j4_cuFGJcf2t4%?Dp(bx;s1M#}ARs6A6|UkJe+7i_OU z?BeLv^8>_kZW#?*q&6VdWEP3o7fDNchhGk*6p9!*Wo%r^8AiVT>G8|2pB^7S{Wx#$ zKi=BgkN5A7kAL}_-tIqtJhYMdtEB6-Q+xYKe}Dh-`1<(x%eQ}g`TY6I=b!)m{@-t3 zzW?#|@z+mUpa1;xr^kP;U3wK(L@EC2*1x}ff3!FJ{N{SrUC(-2|5I)I`k*(vTHB}2 z)vaS$SeOc*Cci1rqiIdSo{H(8O@GcP^>V!6I=*YIxf^w;wAoovWiadaK&hJzVmjt|sMcm$!vAUjDXD4%Nu zQQus4=qEH}aw29I3B9H-;}(&^?28(3C&D~&nf(3vMV8)CN4 zNS1glG%<0K1u=|kFmi&NTtfr?lUzbf5fr(kw;q9$U_@+{?hM*iO9XYMA+(eXiZC9j zX^bF}V)S5$eK^!e2*&K}geQnMKCD4H%u%EV5h(-3$)dE7PLc$XigCS0I+SC&aMF-x zRtdtR0#&^Z(ZZbG(;Ryk`a!+X)m<5(llK{gx$O*sGsCADN~dwSoia}L)5X|#gseyf z+l~~ku;$2C=_z+dC`C{hY1qY_Ybuf|7h=!I6*eS0>1o}_O;l;u&kLc*XYQ$+BHFkT zrp^8w##RL)6Y)TB656FDk&rAStCCQx;jAY1#&QQ_1>uZBA(*pUuJO6TNUv;b(6!f< zTe0hwS_aA-Yj;L+#SDY5B$*T5;-19j43MjTK@nfM#&+mb zyq&=%0#kN{q>K@M$zW&3p;x7q&jUvGm1r=gn*Yw5tW8UL+-;@RjO#BD1`n>3f!NV& z4hq%1ipPkEEqh1YEJ=~@CiQCw!zo*3nT#4t|8*PXPL+xz=CmLu$jJQlNkj>sE9*~? zYfeM{O0Tgj+N(&)Sy8CYs6w@F+3Oz7>@BZTW^WC1v5Qub6CP}Jor9nAImbIA@){PS zY|hXzcV~0~)TR@G9tr*wqH`pnjEYRUjP#5XO@Bs?GQXO zc~kk!u4fVLq^iQE5Zuz@z0d8O(UpzVh|0U)0{5yw{nVT|BXD<`EE&qZ#)!Tnmeb}F z7E;-KPK3d!u_ku4c@2|@rkWfZ(@S?~=N8>h^HM~2RrU6vN;pOLE|pqzJ2 zfeWossL0j5(9tI57kh`Tf!CG!aDvRdQdvo=_8+|7R?SRj;CZ*|b})f#@AT<00M28y zjc4YPI(rLJZuXf|$*#fKN{$oCU0%qI6xgt4kD9GpESW`StXb8lCDxRjnSwc+=k!OT z5=pWqyu&qrFM-M2bItDX#dU*t1}UlbzQd=ybC;J4BlU=2hIT%=2J`IJsV=?jec4E9 z_lP$#^IWIHW?8xG?AV27xCo8S2uiAvu;(C4jWDj_pkOH>Y&xNe>i*77F$BLKiSM4^ zBG&JPwNDiBBPbas$Z(e`S-EDc4Z=lE$SKKIa*R+(p4dcrfa&i)1v^i$a*w2IEXa*? zbby7n?WCuD7J5!ro_pu6a_!Bvc6|6(t!cvQo}~CMivWvFSub>Dq{}=|sHsikwsCOn0)> zq_4zFo|2Jkme(^SJJ-09j^DY0m8aS*mPoqPV@YSD6uU!6Un#_=MZwS& zD~QCk;LeN8p}P?1r4wo)aL_Z0MEYO!4wH(s3=aCCS9D6OXikxynf7kP^nB zPE=?mZlKO!;jN)9O+YX}8u99@L~<8-WwkjiEkrsf*{PkdBwvUl^1~*#5_4h=r^~i5*bQ6^))hN~9(6tTQ4Pft*u8(!;#7i};hLS2v3)V5I6xcYBmn%3GCJK$He{ zf*7hG=?$Ccq+l;xN^)2l@f=lhl|Obc>QppgO%6f>GlUVTibzm3tN8llae6*Sy<|i3 ztctxMc=g&eA^5tx7U$gM9GedejBK~wWQ=e%FNWZ(W7ex6m}jjSK{(swv5Kuks9Nd4 z8kyP9B;0jPFtV`gP_}Ie$!8S_$>(bA9v60))b7r)PIt`%0#cow-52KU?Ec)ai>kG6 zY@%!QSlHC5#uJZri>cJT3D)%T#S#b}bt<2{&!{M{c`DX$tqD1^C7B_|3Q3SXL3Zjw zkx^2kM)_-WlPYUDMKNFlWy+rvv~hJrZAF1-SF)UiI~2iB zhh8oFUrjM0Sm&Ns+GEWPh^TzZ;m%`Np%$i3IIQ}1$$-PVLeUxZTDtM@cI~P0@b;-@ zy+h_$jRB0!am_NgrI)N40}P9Q6WY!;=lE-zNM1z!tw}OSY6f|a=7OX7alNGD_bJPr zmCZ5-+0uP7K7Cfz&n~O2cIr z1>=&bwFj+i?O+Uuctv6`5^geM6DzsPj19_6+35$1dkvyJ5UnVWyTMKfw2cr)MFO|t zl8|9~6HHz09sMILA(wDhDqoj0tTcIct**cv(%MEXCZUGeAqh|O62~4UFY+awc8-Wn ze06y^>CZCB#DV3-a&<{iMlMIkL98h=*+@N7GCbh5Wn~A;Md` zHm8J~HHLgwV04r_mI&gj=X_hxMYH8>8zlS5_-$PIF!O&it8}6usX>69hM}Ns=?r>SQcK%8gmjp9|=?>oE2&BvMV4hMA zx`YSnM;p~fWQ=+0tG33i*Y{zCUa~THZ(3;WoRuCKRo~PMbnU^bVW_$pY%`|3@zZ}b z9>K=wnCwIZ8yNYcmQXqHmU?RKis=kk-lhn$AC-~S(Z{U{-*S?wn^_SaG0E%(GEWh< zf3rHJ&AxK_-<{GWrlNi5aGdI|U^u2?d^TIpp&q-bJ^k7}wXoITH%3%lMb2f|_^1Z3 zbEBi0#J-?4syT*xqiJn3=zNX2v9bJ`cVoD|1|MT+4guyW-F&S* z4kX%?gm>6&)s{P^p>q@(=PY|ZrH!fYn4F1*$#9oe3`~!E)+7;_;P$7bnXaaUI9PoN z%uZn114f%Q@ZFQLTx^-4(92q2*1x zS_iQhtLDiLJ7awFB($t{z8zY1+i>~wzG$hvAoAS-Jcqo8HSjjHQ-JPn%`f5$48hJKovaxz%oeG6%%{H_><4``&yJKghR*R}ES<>mSj}`m~gQ ze~=cx*8UEni2d4v8WwHylDa7fMGgq-uW;pv;D3emk}rS&R^P9b-*#-5m6w@XJrSL6 zd;k2r1MS_ZpZBCyT1;{i`@SvYmN)OdCHd}TmgP(KEUgSh5-Y6%vUbVj)k#vv**ZxD zxizdcrxMzGYe}r0K0S;|4`-2l=^?OsC^a3&QeMd_Q%ZtSD|P66W$!e|jF8<;5hawp z;GONtcv#0=X17zMRem#A=~D@XJL;7;-yCpBt4y^rDJH4vv?yY7=Cvbx*9*#O5+D_a zm5C}zuZofL#3g%Ioq6Hh&vO!o)+d6MRuzmKPadhd$nV;9OxUOvBHoc)Fp6XYn531J z1`-u2-*7If@$i71XhjCdci7&c<<%OE4F|t^HYU~@OQ$dfWQHrmqa&cBi`YRZtYTvm ztD9GAG!Wt+ZBEBpy~=dwF??-K&)SrvT7o{H)sB3AuRh6?R@=~OUlSPcu*t#9xwhAz zYL8DgT?wMP%}G*C^~pK(l6}-3p9Yydt82|3A&ILW-a)Nu^0z@|ZP{7xgpL6SfT-i$sWKvB~^Tuo>O^tZaYV4XN;7LsR|N6ZoWyTlGL=9T*@YZWa zVPJepWGtBRk{OP*y{3(k9ZeE`8@(G_hhhVERj@CiPK|+GO4>kY97a><5GY;OtjSO@ zg{~Q#HLn5mP{e9%4V-|rC1Nn#Ymn7#=n_FDTy@1SVR$>kn^hXYRBwODpy66-^1?K& zGy{QYOJ*j$X<8}hOmm3@FSNSDOL#*Xdxu-LCrOi*zqd1MM!iLPlSpY~hnrx^ztJcX zGGmi6<&McP&$7MT@Q4+0lCEv_Mp7GX&*fR~G;6zq;Kg~?cFLenNkWlXAe)Cr2FZRw zz9eMkwfm0{tOaj2GGCHGGw6RVncUSj8J;gk%$o;fcy=ts-Z{yu#FzB-i%jH%rv=NO zl0zhRk%h2x7D@+=GUMBX{UHDR_rhDo-uUSEbjE-F_sBDq1n(wEX6Hu;Fyvi;w4Wrm znxsi7x`?!V!Y~go$?Lhj4shenJtE)~VKgqu%baA2*d*cR_j}KepwN5PBLf*loWx`Y zedQ%xcG{#n`Zh=`6M2BO~kO0Z+UD30rV+vI``l%na)e#CjUBbmp6IScyGs+ofhzBOxe*9 z4?gwGfAD9ZA59XlJX#UMZD;jyB&A1C(~<;y=FFLdQ8r$mv&wWcT$ENlgCPdm*FV%)Ft++H+~2ooi2* zVT`GlbnU!1#6lT&-aumY236ndoK3(DrV4xpO!s{03N0XpfCvg}q9fLC%CN9YQ z`G6$$q6GSeBw491u~kY2?~Dg^NkbrX`Qio={&ttv;vw`dtp(6{2!XPf#I^XG@UL|_ zINzNxb`l9*WUQ{uB`^2ptSWCJ=b@96sI+2|@M&J+(Ar(@#LN6SRhFH1F2(`w0^bBp zBK|zK=Q+s>V2*<&^D=afe{$J7mSR(V$vChRCI^xKa=0rp;j)KZ9*$sm#cOb_QO9Qo zc1HPZ8+L3;%ND|8wYmj%%GNar1J+$ZeeGG23cPh_wWWO-52p?7y`Nm`|6Etg&YZUm zeS-fT{&j)G5+zF1woZ^$R#{|UU%DvlpmqEH<@IQ0VA#fYM!bq54{gCJTiqj7gv(ZR zWJP+}ikH?w&lE8xW5_I9&g%_9q}?At$3RuY=Zqp$IgIzIyAbNqTAw4c^fU>d8IP~| z<5PqPNLZinuz3SkWK4uDhGc&9Y#NI|^W8hBPh%>Y+W4?|Uf`{B9(0<@xk0YHg z5)O8}_0~hGEjZXhs?i2wLFg_c2-IJ{BFT_u_9jJMz9k!+AreS`MOK#6l`7(Jk%zRW zZKfCZ940CHv|2Y%O8ja3T$e zGu~KB9xKJx64aotEax%pR)ccDiVZoA6rIh=mDob6x&zth2fZhP{5acDWFbG@qA=vX z8yhW#+!wjRABKnB7^EQ+Z!6Sr18~TZiO?w>oVWG(`f)(D6d8#Cn30{)(2F>7ac_%u zm?DfviX$Cuc(ic1Gg@rVGf3bVVG5Q8hu${Pb614f?ipVu1#CwywNX_fj6>3V*6YXP;UZ;aFNt_&WaEy-wC8vS|y5J_p#z7V&lRP zP}_K78>~fXY71oVIzz_14B_&SRwCe+B;nzL^{9MBR(WV^j3c86@Ys0K_=?5S5H4F$q1)+HAS*LgT5M6Z?*T0<;~XIR_9`41 zm7QHuSa7z4#}6x6O5ys1!xFM{2l>Z<&r{pNXFDNUlCQ7xL1JuPMS2 z73cfYiIe5TvvN__#}jAd71^Wol+?~EW~mHjn1t^>GRNZuDe|vcPTuD#slBq8T1CF; zx!}yd`BaoQ26+urc)z4VZgR3FWu2Fl){Btj1lCb4sz-ho$5R2GKZtVwq9@VWP@$!Ad0gP0Iy4L&2Z ziHw{Y6Wx`=8QP_Iq{E|?do`?)8mfs^wkc;uZIR~JdK!frWTIqZ53q4sNNgC2%#vwI z0p_~XDe^Ee(j-FSUehygo5$-MOpU(ruFN zN|pQN!XoC}PLWgotQk@rfi4QEz9H2^iV!KMErQRyV%;6s6gh+jjCDx7f= zS#@SeAT?DDp+K-ejvcn{?G5Ysr|IqCjCCzT)&fF~bZnVJAA%z=t_;rssUU`REk&s6 zZ5S;vU|%GT4Ai7Ab%rp!u{UoBZqM1EBDH$4FG7Ye5s>h&h}}ijtQfon8FKmyvQY*l zC4IdhueQ&eFaFg=!X6);{+MHrs-s0#a;(_MA7 zfHO1B)by=8?_O1pb1NC{Xr^n5SG7LL%6PwL(RbrGnpC!Yh$1Kj-VB|5a~rg%Zei%&xj?@NZDrNqKeQ{ z?=pbVC#}C3g4>J<>eZ21Qab@Od*1*Q;a=|S8EP0!X0JpL z!#0wm$il@)ON8r;P~_r18kuosqy5W@Tx^6c5>gvd$Da+UJ`BF}S@=%N&?5)aa>bcL zrTLuDbHJ8-G8=L*-;IW!fdQq+8i8<8A>-eU6dm!!L4hLO%O{m13?|`aIvyBGPc_ub z6r~=TWs3ZT4lrm%(wzb86h{VF;V|-R$SR?D*2CAUM8dyG5IUh|UOGpiW(pV|vm@Lq z&MDyygV1pcJ-kXYXG-~80vfqkRJOuW^;@H{d19ALRQu3b2&$X;+n|NJM^u}^s%J`V zoRLU{G_doY2vxcy(pbvlh12!sl8sHwx|?Y%1H3 zsl{2VptToAM(OEZ7mD1S$ZaW7N5~zVDvZr)hMKz@dY4h)Zfre|K(7;YLj-4R`!eLz znMq-aIuMRCG%AL9W+056G8`uCw`^q95TwF)7exl5S{eADa>ogzAqZmkFkZw!k+d~7 z&PYm0X%-62)jVw*3Oy4Saq=Q&?Ywd43S30O)J)^L$WWe1`Y+CP9g$JU33ujMiPR0( zilE3&q!&Ux5h`009&;9o?kVv-@tqDc+?$kV@~J73?y;01&bawh2);2YvKkOMiEtt- z6t7-UuB`0U%blI|R-Hin?K(0_ab#xAQY$m6ZRKSul6rTmpkjz90-+N^0+FaJL1rWi zU2rMVBY@LO%g%~8@HTJY3`4&D?d{j!KfZnV_~X2P`tjc0e|-A>_TjfbwB-N!)VH4zy0IO=g(h0|MJ(T|9$)N{lD)Ye*dWE{{G9yw||F(I%-=& z&wo|y&-d?d?LGed%k}fsKOWBh1d*?A{aqQZn2eTe&PB-GR(|7No=f8O!yjN>}_ zY*HyOw8oiwRE*fH9s1qe_Xh+0I1x0LZ12N~t@~sT2_J?Uqo`rCVf%s_-AWMjg+6{a z<_8UtCzBx0kM1V_XS+<2CCE`AdZp0BaEv}fuj~HX61YSBNUK#^K2spX%$1?3b=ap) z#G^ElL3iGTXUAL^z(b^Edwl;qZ(f@vd1Ke z!XG5dXp#v3OPvviKFj7!)j4#3-gfu92Z%PTxV+p~kDu?8o>{Epq&0i`ZTk?N!hOZ{=DfthhairlB19cENMINL=tdW!iQ{^pId9#i9g|Ox!eEf2B5amNsI1qt1_yEQ5(;&{opkN0ol+o3jtiT?%ivuSYh6 z)$9#3W_JhlVxHRU;A9BB!4Oq8Nh_RtO@>f`$&XeYc?1!pvkHk<+>OpS(O<$`*3NE5 z)mvGluC6*FOhIMf-5SBW?P)@}wko&x;Tf%)mO~rwdQ^GpRYulBFLbG?m_8+CF8Z?X zo{WGh*0+E%l4d=7oXvvYRd*qKRzGu8SdXsf8)x>`s`-Y?_nAMPVvjmg&1K2>Av0_B zZA_JAH;DgX5<;$bpd+Pj$L)Yb2fCy)2np|3^R6Q4%{xLobtd<)AYCpkmYN_P$Klu@ ztIMUvh#N$^U_H1UgM6k?wqI{sT#^m=l1|P8aORs;0J~0XTz#}th(w+`f>FX#Jjuqx zrLRU0xa6Bt7ql+J@$Nb?7KCV*sK=n4&L(S-bjzZx^v$vJ1IGMF*_ldzZ@MYv`bU?I zmF$nUyDTSl;!J2FyU5l-vy{~EO&asfCxI?UnhbiNKAPpm{%B76^-U-Gbu^*AOFLH_ zXV&c5hj-5|8xQ049kb}!VNGbwG2g)p&wM%uC&B2CkUK{||6_mQf25zSPFh3$X%A1& zQIdBo<5%+?%LWC{HVkfF<&)vxtlb#qGi%%6r?R##pZsd{V3Y%W=5hN?&nJ&-n7hP& zBVx766*cSBSBJh__Qu}&WcC}KyQfxVI99H|QT|3rZjeDbX1O$Mt&dRVUUCzR-rdp@ zpx0GZ)CMchu9`L^v*W22$>`8y;&{?iq7eM0-4kgVqd6!RO&Jx8)(YFBq2c!xrP zSd|_M9lg+)@!hW2zOH4$Z#SIQVGG;of}L|ymG&at4zlE4(&N!l>~N=@f@vd28|GlI zdwYaFSSFA4t2ap-7~^GZFFk=y=q$Y_7&prHF2>f#iSDtRN7|Pt9=n^*9f&8-NRtw* zLNYQYV!CQ#Fpu`AJttJwS!d>fG0JzsMi*mSkwv4b)K{n#y9YM8-oowbbq2F*41`() zf~_w{s9&<{Sx2CfLs5 zxxXYk{4F7)2qvWH<7Ej?i^ihaXMBS&y!4)?9B-0MGPcnsS*9-81S8An1q^~q>LYeH z&9N-VWa+d_*+Yt`i#nqpKcvT2JYb=4LKUfyRM zf@_-98w5C0)%TJEm8;HQVkBP1kgVA^y<3iK++OA35`_hi)>oJ@FKN5$!YgFfS1Pzm zPJiVvyjW>y6R*$)3Ni69h(8ch2@zWz&e$v~SEyKf!VM}Luey85z*o+iVi{^l7;@IZ zQ=8-^X=dp$0h?)(RcA(4G|4fFL;+~!3n*sLI(Ng!B)Q~BkDkl4wW7)j6;iLt0mz(x7D+@;Gq>fml#w&r*u98 zcb$ILnK&c;u5)lk+8BpV7cZTU;T1YdjyxpwkxT+Fb!6jNwd`I3>zK3@#Yg_st1wha z&a)so@N(C(g=XQ=j4F~`W3TTCC3)z zOf5NfAZLxb-Gt<{WL1#1Da!CICLPPjHtmve$-ukLQx@|{vir<}-1^MMaP_b~W8@1m z`1V*1FklV7{Sv{hG3aGy6|q{LJo{CEa>XTvtCqJI!+5w?U&SeNYYTQtrJZao@K8X=;vKvo%(sVs7!Qw{xr5M20`93V*r)-7Ulke zF-koEM|z zzz^h}**${_pDs(nS4vw(HVh$e7m1h%qJ3sS@>|Se!Aa6@i1{f=m+cc}`w|;<`&l?+ zyIUd6^^P*z@s)S6-<0g#d^RQf+u{R^8>-!_BSeGznF|D@>-b7zjGTH%qNN7u4j&1Y zq_2u;H^}TjiHSH#_lyZKZws3wZwt#IJji|rE1uChGXVC}fMWJ41CD2cbWh6)6U6Jx z6Fb!A;2$we`{MC&UVxanAZbrhzl=5+}K3wPb#1ys3`Ro3U`<3Bo{*rG#?43EiNh6r5B?XPub~l9jzmayCd(8jk}nsFav7aJlxG z@~>Knc^1w<;kyaa=Jt4z15X)E5gR3>&{22kR36y{=zlwPqdiyTUkCIh}R>U(ax zA+b6m%uVx>d>q6XC6{a`ks>@YN^tqk>zjyFfcj<`?CGm+T6~qS5;OTK-zBF~(^pw^ zvJCW9Lw}zzm}IZHMm_U6P3YcJg4^MvB^$mH?aL=gYb^2!4{XP$p*K~bFUc6j#{2yqZ9SOZqYwz>wq3UVp8@+yMWl{2eOmas17 zLOAo%YKi{3i;sBS=`JrwmhT47)Qd?LJwq;i_x{zORQGUtKE8i-i$~6_hQj)~qt+-r z-|AFf7n1s-etGewS}RAFM^2H|7j{&aoa~ZX+3>#Ql?)&3AJtI&M{7V%zvkh8x-q|= zaT~h@x+RAHB*uMsANUk}{mz7ktd=;scd%=Y|Ld${GQL$g=isvXYYt_AyZV$~w$@#H zY3Fm-E!WAAPvu6tC7$Y3+D-e^(fRw1dZahK+^QRy{ZidpV|=8AdO)ceq%}jooVS$5 z>IZn-KiWfA$rHNKYb9a$`co6K1wK+LXVPdK_&tNtgL+2u&EzS+Js7-#Kjl6!bf%k)NV}V=&FZfa$plYxEP< z2j^muo)T1V2;sybh9$Ck$%JG1)cVGVb}uIvtpWG86()m61_xSoOpNEV!t8fej}sSj z-D#u2Nw0^8VVKZ%gISR_I-ijGn&AF<*m6aD>@&o-G`FYA-o8 z^zLua!{+Wxmk*pFM!+J5RM_q*bHb0=H)XU?ok)8#o z(CNhgL4=iTgY%?5G*OZfZd&(n8-;5$IP z4g0is|HyZx%81?g12X^YJNr{M8Gpj}E)g6tuE_b7hIiHO{*|h@pZ+tOajEUsCx~v* zz!T_cFVT;J`2P82qnVvwAOAJHwSE=I`Oyq_yeAvI^=F|y(#5#qf!@*CX@!E_DI|Ut z_0E*A@ExST*6KBR#~$e#Sry^z8VQ-4N2okS7eINj+kmW)1UT*xGSPG8tc7YoH5R{C{JL&)-V%xH%}`dPBt zOS%c9JlX5V4YGJQgLE=1yVN7vk3~qMM^3k(9A$#^DaL_SFBzG^rziWdhzC7M+l*S$ zCyyKiS+vpoG7ngjP=rCGUsea1oi0^`$NA%x@P(f#O*Y8)&BbBm*7{%|;_opN!Ctm0 zjqb)8b1J?&ky6tphP01E(RBs84{vF-k>pS0oQb{k^qTq*pU6Q1wYBBmu#pzJxcRHE zb%;5DPZM5*CoKtMNZD^9qmxK~f>wk}inPX_*%RNWcd6T^W6fDDVnZDS>16pStCsw} zux20n@x0|RdNM%A@79&6Rf2Fq3|s+L=ME)1|LHWOa0<}l$M7PpPE(ORGEa{d8;;rM zH>6&W_M-|vQ+Wb`k<+hKX1uksD7?6H$hrr6`{4K%uUr!TuITJ=ay%P;`Cj9OCZW-x z5l6{gc`)Jdwkvro*SMiD8l2tMLb$_wBDGpFdW^lOq9HuMocIR%O}14KJ))u;&Mxss zD!*F!eWYx9`m|Mkdnc=s5pFatG9#N_Mg=3>XjClXT%uLd(#g^)5mC;yDn*1=lDEfu zW?lJ!CV^30tOZalYv%BpWKI&PHBNHqxIX607d6Qs*{4XU_L(ng5^0hld*9T!6a(Zm z8MS6J!kLx-NXIA!k_A*-!WlD^s8`@SlG_<|zWk8SmTJzy1r7RL}Rk8A*gj>Lj#Mfn$C?e--B-r%6tvK@wOhwgi<7OU0ICHIX89cFX^g)I0wO zB0feCRS{s&%dU--PU3k_Qok3%-_-;Rvr~||n+8D^q`uT6745gAvapSAQZ@ythWW^- zHA**jaiDc+We9E^9w>BmlEr|>hU3+F83xCzUZ6+tyR(ooC5SL!txqx!Z3JI-Zbl~) zMsxB6QbjcDb`0o^AcMe>t0_$c-^A-(h_8+_d1>IYwGKJ)$70@7o^&1BpU(R zp`UdTjxGAB&udOMs}6310nQ7@)*)vw*dADLKlZm)^QDo7~^?2)8O1$!h>g6Opm?2lxrJW|h&LP7*7O{vkl1Mtdd z-t{C^xNmXoy_}BA%PLv-fFl)bwT~zq&wA?L>Vs(JU^MwKJ>r*sR-M7C;1p6ch|%+` zkZChl{xqg)8veIlfCHKEh<;!)Hf?<26AWi;?yzF@J^PDj)oEq*2~=rijx$PsgM9CT zICnQeeA3w)SrS48@jxaDcE`7e${VJiO|Bu49U3&d9trQb7QBy|lUuK=YK9vC59?z@}4Q|gOH zX77}0>=ETwd7B=g_L97?Nt|0jwcoTZ0>^wZAISOfk-==`9eiY+CWft+w;M&sb2Z6P z?~&1-D`f8gS8Dx7jE7hUR(5;M!S2>aUlp_U*IOHF-Z)CKu!dd#k$IBnwI*1j^CO5* zrT0RBvN}MAk(68r5^GKt6^Vj)Z=Q1Xkw3rB?0};HgXmwfx|nE1b?}k7{_Z`;pYVQU z-QoC0*0IFy{*{PFrvFOTBifEr{h!pQKa>8*mz#|>diJl6_lWlyPLc0aDcnzvL_Z7V z4rzaK7BdhbX^AtOCz`HgEa`Z&|E}H10swllTZf}7dZdpAORb-iXV;itkdFG1f;`Ap+>*6B=#ef%C!-< zjuOd-99nocVu^55-N>!@jda=>cTU7F+M16mevy*ti3~BBd3e=9f+w5{h`8f9$3eQh zXU)fLZ$Qq-K8TTymkJr}6y^5axU3S$NSV-XQcKzi;|5U;T1C{q=Xuz_+fPR2K~F8y z+LDDH1S#FfeGeO{LedPooZSE~g1g#CPbE$<`@uix`2M$aJsWiz4#US_yZP8f z#-f%*1~udcw4BDZVSNOux`Low=3Vag9ocyIw%fv;S>G&TCI4 zm-Ff=^H##7`(w8Y0xgx|A$O%6w~r)J5a(I9fXs}l>qV52$h*JNGpeC=tpsFr6Xo9D zxZM(n0qK%yiEy+YBmu3CrKYQQedTukd6f@R(C9Y;mQiwK&pjk2f!PuX0s|r-jR&!d zV4!T^5|eqG8j%#SDkM_ILWjBUe(LfH2;tP$RW7eTNT4~COA9X2zme{W!O~7&^$Qsz zzO-iTU&y!bh34?i$BpE~aO!0JPVtRusZTQUwR5~ava^x+%-}|reI$9^cR?g&+UOs5 zwRV;zGgF2$m{-1$wLZ#XU84HCbe8gt>RL)W3vh{3vuxK+yO5q{&Isp&$RN~#^A)Y# z;^{kI+7i>`Yh1fCvDWj!E-^qp>WwVD*gaa?EaGmbIang<1gC#&pcb0BE#@G4MXf?+ z(s@gf_R+cy5DekAw}UKZqK%X>q%QnEq7|!3G*Oo_IC%^NNDic zOgo_#b1Ys&G5Dc68|k_kcOW5|o`H6y)Mv^Jwg1R}MIK1bkj~ka4lh)&4?@>xbC^}MyWWOykq~V-C3=uY zP++B15t3ADDw}!U=0S8(3x_fJKG9von3{Fi@61aDa#OyMMZQ@|YI!4>ywl+zkIwA9 z1#lfpk~S)4CJU`2W@cGvF*7qWGh58ej25#jW@cuKnb~4`^1U;&v;WTS&c=HYf5g6t zIO)L-Y9S+_rSZsd4cMHLxaP_Km|R`1YWg*a&z9nmG=ei+ia=a(5%^cuIu zBBT;jBnAZ^77+O7Pd5t{+6IK&1|%f~mj4uZ7n}kWC0cPJwuET^*eOnuhH1;KM@jIN zDMTdJWBimlaGpDQjHIq+eZjqK1Oh?D_-!C}8j?XBtC5!V+Bpw~CTz^3CDSwWTz+?1 z@%vfakMOoc8URsmat^+sy%x2}D<_nC=b8a-ff50gQJP(D#R3ZSSps)ETSb#eYuixX z*qZkKvSZUP)&T3sgXY~U04?#%7qM<(<-$P-qc(nvncDjwV-sfS>_vE05rnqr6W`ew zAwErMxZ6LTABD_qcyAiZ?@>E`QgiHm-m}+z_Vzs_XZps>nMQ?(IuMftY)1fO%efKF zH93mc>vI_`}HmSg^AfZj#?P2T`#X$VB0`7|Ww3;gqt z{z;QKZ@@E9K7C;Z{zoL*Z*!?LL$ztreRBH_*VG7gWg|=@dPhx7enyaw_mjMDZwFPp zZ>YLJpT7y>!5di{Iyl-J=~?|w+31_YGqSM*=mEb|TwL&Uvi3Fx3Pz3q4LVstVE~3!YBc#@Z3^J71U)!17UC{v*W%VEs#q8Nl|J6bFFm&uktZcse0hM-c@_Jx8NI zYKkbZFaa3ZIQ}g8Au$6O+3Ei#v3y7je@MTp3fNfM*elrT8T?sSz=0jW@MkWafCC4B z@y}L%m;4y8t&zQ>nUTXEy+{c#Faj7^|I*8c^t;c$)clY>`ebAJv(FFdqffTK4fmt5 zzs?Bz?;?Ml5n(5514lC(YehF(BLF=-ouG}Co|!d3gN6aX0Qi0Qm>zjOYZIeCPkl&V z%^V$MjqDZltZXff0POH|3TEyfxlBv|CZ>;UNh50$M^gX`2h+zSnprv;*#qc=EkCA7 z(8$2X@PmlM1OJy5f)Nc3NSF>|0LBbD3ovH+HA`G*io!xVA}xwKO9?4}Ue=O#*cd$fYU(0 zzJlsO9kry(){Q9W`|GEbYRpUA;z&78_bY+4x>pr3?d~AaT54@l=MX^H1pM*9Q@+SD z$Qmwj=dl5vZ!`eScIG>G&rAM#~OHnCs$rhYYwWou9bNQbstAN0jr1D?Ln4ygPiQCI%V z5W0nAQUL@Pju3Jx3JoU;c|AY0{q!?q+8DtUl;mUO*d_AVvODF$6C<_*n8$t78;=hp zkoE||wxLxys8p5a@r=|t8T~BxR^HZFw6e0(klC<7m3@8n#_ki2Z@wB%l?ig3 zn5A{fQXw8vDvvpJu0VYjR;rG9ZSIFg(JlTPEIrVs7aZw7xck|e|1(`@{x@Bx|9dU} z5I(B>?eE_-n(^cA_-_@uRGNZD_S?3)_BS92p~nVhfobx(I9Bn3;FRg|$iIwX`7VKYYG7xe2i_Fk03 zbW}Fp&U!Gmjr+>R(O+HE+a-`c4w> zY}xm`n^0+07>{_Sq;4p5%@3zSF+m+)w&RT^K&LBks&HB@rr@Hl5*%o?5#o+U_A(x=81_dF4qem<_e<2k9X?{NKn8Tp+mC%0Oktf%`MH~9m1aV$ zJiOK}>0B4^`&hDAXjW^E?AWhG;seat)_*ibo>+s3+d2mF-qMBxj|&N?L#5+RLMZD= zZ2cmb_a>r7T`dq#yK+8kl$tE!cyL+9mCh(Fyh7@gd1D5|fPQm{Y?E~oz@Yw&U;N4U zti}3%4KJ*=^$fcd9v@`X1feX1(VIA$ZoLpJLB*!e*;Lrq`ik8p0d8cwy0hf@?mj_& zL(&^e72|YJ6OM110WG%g-8plKRSUjJ)~J68K6v`ThLEhp(}OCHY#X?+a7bWyv{iuU ztz#oE=R?j31#O0eGw4{J7!iI0n0u;g@t0p5 z?}pZw63?Wtuk76`go^spJW9K?OF`86{UMoA26eX#U&2z|N_dLKlH}LiX3o;i0;ZdP z(QICXR|-rsB_`*FLDeMi^hsp!;eq6Q6EciNQso)|QFm0vQX3Qa+HB85iu#$bkaFBU zDkWuvvEX{VtnriYCriFatvurpgllhFPj+Lr8oY1kwwVKj`Ae=mT>-V)3R^KsJHb}HQ*uM=uir!Ae3Qik^ z60U+~8LrBaECH+Z#Vq-b+;8Vz=}07I!&`DQ#8G;#YKo+RD2iFc@&#p!^+gMk1m!}0 z-lZ@w9ro->(CZmc;s^~yz^~_mGIBk|LE>J@I6Lz4s8C3y3*P?@GK;Q0AWcAg zO)*Pa6t_Z0Z)M*H8Hu4%N+#uhnc=9Tk3GNW#!xXQg9yIUrp^UkFUoks^RSH??QhVC zE=TW595Hylspmwi$R#PA^%FWy2*nPkgF#`y<~7&aLtfIidl@~>ypo(3-S=J8h9*^k$bZO7MHK-YqqxM)fdw(~!YGwZe3? zq_Br$tR#A)iIjbRG8^zv1d#{)%@{dWI;O-uvL&*BAJSZ!k+zWe$bzEtWE3efRmm zw|#PgIE=?-X^iWbd)U*1w*XD)JJ~Tf_Juq=LU&-va_GfLCC=o*g8x_!49-tW7oO|y z340)WNw{|o*`$bUiy~-QakJLGcj^&e=!|4R5#xD2NntA6J&KfgfOta8z0G|!>Q&mw4{GnitPC?i82 zN}hKNK6!p4X_8VJ`5|-SyzJze2&=018gdslQD02ovs>_^ zJV~}LesVQ~bVacjRDLj#3sp1@9EFYI>Sx3`!HQ0k+$r^>?7MJBhu1r~m*hLimvpg< zlpJbNE95M}gaa^Qyl(}dF=IPt0N|q;!cf6oon?d&;xb3%d+B6Kqa>F!I=^qkv61RD zYd{cLmP5FKJ)Rz`pk=%&ZVR4LY0rufU`mW`XWAk%E!MX=6k_KpMgv^I?-?^0euzN}5^)Aq3xXPce z0-oN5mWmidizzQv=>-sQPDpz3eSlP0AJ38TZSfKl2{L(9=vEej)1>=F(*W*|QsJGHwvrzXnxGkn`*-tHn)$VoInd)ufg+a;+i-In3;XT1NC ztK!fL`w~y6<$UEu8N?XLPoz!Xeo>yWP>-0i?52Ps@8zCmiZG z+3ZR)rLCONmthF|7bBXF`~6P%BKYJpp6?7hr8)M8O>zzD>sJ(>{FEtAu%SkEFm$AUub*V zt=!KT`s$w1Hv23Dg@O222I9- z*9X)8ub?uWFate+^=~-zKf-3#4`}=wqs#w>hW`aL{>c6K{0+qZ#=w6a>%Tzkzd-E& zVi3#m8;$-|*Z&F_+3EioJX)Z#V!b1b@(S`Q0Qv=Sygy`C#Thl6i+wp&mo&Yf(D@rU zSGQjhc{-LBoE)~voBg}4kCBXyYb;GHGe|G1kdxDV38z=-({uWAE25vReO=mKz!n*q zdhFP4No?GzrSVwj-tOq>TJ+-2m}l%NYmD>B*$D0NL~(2HY_-l26ziLgE1Gt9PwK|e zV?_JJF%E+W?Rlr>W{u?MCz?l*`qypzu(LSa&*Jv4RnffhC*}^CpMuwT9?$k?PhX{Q zdSsaRdA5#RdgP_DpiFj6?4NOnMzJKoONPdRX@`spN$zD%mTylzf*GPQ^$z8>J7dB` z#}%?tkxp6&hc%DK3e!3sN7hjSQz}MgGTun^66Q9J1)2%M_1j6q*J_E&*0Q+H%g(lV zZwUlPhcb!?grVYt?+6;6r+N?;=0rQs<+A}@sJe8NgOJW-q_~$MK9L@7`zdQcE?(U z*_aatoi=oIga^Q;T%g3Nw^X>CFh+8G0bR-D$~}eNwG{?EpLbV@ARIIsvbFbkW*++9 zzkENWHc}sDE3iv&?l%_|=|I~Z<|Ot8>Ep`av)XKLgDR4=vtQ{*8umuxD=KS`6^%kU zeshqb&OW+^Ovvabvd5T6h%U4ptjF98_hTd5I86EAejLd7aLcOeb;-uyPUs{#>tKvRyOVIt_#57_ z+A)N!x-NTos8NzkqzF#Bp7Xe7*PGXs&IIh>p;lW0U}eCIHLR zg-PXq)$%jR^bM246Vi+8^Uzg|5ov@VQjmG8Dt@vz571!4UObZ|-WECuFBjTo1GrhZ z5SMu<(RGKgf=-nSwBUfO50s~WX!@q7pyYak44v*$qT+pxgq6!1o@$ov zVT|K)A0wXw371ea_hOExQxOGbQ*Pw>#jMgIv(ncG*SjrVG$+i&F!;BGbdY&1&0eA}N_~M?dNEMI3AGo9^x7Gw({~z1)fiv1!>#7`;~3 zkGkXSL8E(P@jXx~0HNJo*tOGa|lXB916%~51TL#^$cH>vlR6dTli z@?_&-9tYf@oRjI^2j;8+IpKrhALMd!1)zq)Gi?&mID1ioM4xX|qyVm(RB zC+XvUXNYeleaxA;-6n@-?1z|-Lme3vJ(-FDbE?_s60Wp8?uvj>$uY}^$C=TO-(F_| zN|mCj`8=)*Ez?N5xi5`PLI4A=gGiaxOZw1M*pFXV4MK+C+1cl9w`lpVW7nH;`SD>H z*|!wvuqP8w1uDwX8x!BV zn$Ch1!nJp#x9iG?Ou7fYwT-L^8DdN=XZg+VGrQVnezJq*l0C!= z@$7_Vz{~47*OOXkPP6HV*ymvVm`hvObg=i{!Qi%c4)cC$z7^;1P>lpZD`mGO8kgXjRIrHaev9qIL|2FA85tuOT7JcxMG9Zv zP|MVmLK>l+0_)gnODq+~Eir3>CeR^_b5^Y{`X=5VQ^6c0(Z6yd`n`WH&u|hLpMbbm zGskG7yJdBKr-30wbbWUH$@<+$9pce~nGJse;8U>=;ja-~y>uECGu1pE(T%G`o%~!| zN#rY22}9!#yo$NpjF-$2Z@+>SF@k#%>iH7K_o;qC{ayIK(DKK8gG9w03?IlA~7K_9+O>FvRU|2K^DO*X+ z;wn>zcd%U?n;Ak=+BK_e$szptDXz_^iB7LkQn1q?{`)k=VjBz4NM!3(cgQoL#ms#K zSd5Vx-QE0-9vkzm>4cpc)9h?TpfuAoR)ieb{nvGa7v``o^3MxfZuJ`MnWPnB#Nu=^ z$)bMSFeNf=kuzY)O5dN(vGYO{P2I#3wuDnk61w>)*4^<*VCVQ#vxdc(!1Pk|^JG%a z>~`kMNGnAJKx2|h>|mzDjU^Qs)5Eg5F%1OQ!$xL1I3;mj6AXRn-Bal8mK|FJ{TJiE z-!i9CPH)Sg3Vm!lE|`&;0wK12Y){^(;7Uk(EN&Q@Qb zaMo=mt<7)*fEIcp2ih+sLBtX+o1qk-50UE#OD1q62?V~gYlkPoegy|Sazc)l-}xP% z=k4Ky?qXOeY@66&0yBSc10_^zI%pKWWYmjM#m)S1(Ohn!1Ydo9L)Y?65OYX6YX~m= z>4zc6J!$@Mp%;-u=s^CkyYm{tI`4QB6UxuEOi@yYavPou>OIw;O{SlQ5@6TV*da~p z4sb=yJX!sN?`DNQt%VJU+!%L-TA;rdwZg@bgXxhw=kucR_}zD=aB(gX zRaqwlwkR(lLBmo%H>Y3HFE1fR6G-!(PD9w#je)G0%`5E~WE1a$m`41p12jky8I{&|fw5))?*jq6`Jl&(6L+Io+o>mi5njbhB%$(a2-$ z*o??eNX7|;CRi%b=|3mc(S?_Ft{x_=-MiNRobrhdpX_$(+p!(qVMpNcesJvd#&9)U z^wOC-ISzeIVY?50>45Ul^6DHaFNrWq6;7SlF9KVX_})8j6Mmt*6Us{s_WW6#E?bL0C0Bf7)#)I+KG20g z%}oopiX7{Wl5_tWL%9g`Kl>xZz z3A=mtuEe~_mbSptxB1cx3YR@VcOu_OP z&CFAil8mTDQJSFfe%@a;Xi!7|~(Ci39<1WxCGc`D1CZvyLGw&eYMxPE-wX-J`{4G2Sj$g=_k6WYS^gT)x>6@NH?T8vxWu7 z#W|wW^l9o~wka%SX9R$)7{VW{==hy4#^jL8ewCXLv*jcuXGYjE6C3^6n3 z5nRbX14L3WU0j4ZUWtleeAy$t9~I4e2J|twoUJPdhNniU!$wrTS?wao>;g+A$M!l` zLw{L9gKxlvuA8TwhAai)W`!P-BG!U@9Iyd@f;qJCuaF}@3-QEqHRJOM33B+gqBX6_ z$7g&4x04JnX>X7$mbGN13gqy5#3u9xMc&a-@fLF{>kuEMc{M$gPKK>aD1py!<(9+s>t}B<~URDxqtW~CSH7My92M&%l zuA)+nn!3-<&3>hbXVVpSkl}3n zO6QJ|Fj-4H7oC8is9gF}MPVuV2<*ok17rv>5|zv;987V_CG^+L7`P?YjRV%S`D|(V zF@>$$E&&g2A!Xeoq!KAe|qYy<3qrYl}{kwv7*?aWDkjA zG-YK=ac?|i*+8D_tyE=yF+99Xh(W6(p=;_}Sbp_g4Yb+_q zWTkKe7OmNpY;*Y(IUlfLe82aO#AN)GllB;e6QSr@lln;xjljIZzR4ck4ddz3m=YR05|Mpo*}i>ggXOH8 z4+m-Phv7Eoz^(JjBlhExb@nko&Aul> zAFt_UuOMuDbtm&1qYi$H{-R&(vvs_&^dw@tWM-s>2r8XM5oZhok&%|n&oLkClqs|0 zoG{La%%q6w(})GWrD#lrVqu4S>Lm+q{qYw#(oA-Fr8K#<wPykJeHTLe;=pTe);OWN!h%x`jl<;WVx<_2WAB=Lm_lr4Gcg3q)X=YL2Q+_Z zF78p%7n#D7p@MC6_Pt_4zQo*>_QG|2O$0jzoEPp9{`=cF&mB`K-4(8%CU^(4?Mlxa ziC@a`%q($^o^z#87((q}M+tb=}WR~^ma5z5neiQ!+5+^A2wWwL7* zMJ-0n?~ZF}C_Q{V*xv6I14fO7G%j*5zE@q#WG)zEBNiV}ELZCK%Ta& zq1M8Dv}&3(+O)<8ypLfRj41Zu+*`#7$TZPgI(7Eff_HJZ0{xqCEyL$uQ=`V}SbdmStmx?|fMASYvx%p@E0 zF#SKlBUx?XA_PNp$x0Hxybx2xYWY0iw%Jf<=vp0=NjZ!k%$4%LA9(r>HPEsL2Yg){ zxE{*wMwDL8Nu15lNO$w5z{&=N8{YmL*>OlunVcGn zW!i3*?lrA?H54>y*#c@tacTvhD7UCMBRs2!BbXS{Dp^5E^X)w&0A2rXGXo; z-br4bK|+CnJw7MK3SAM^a%ZX&RbrYxhsGPcR?b^*){S$+d!I$Wo@A%#>770o{q`uc z@dlG5=J@B2o!ERiC78>OK4oob2mF4V8oNV;m6nK3Rgme#89DypYtXCft)5@L{C=fn z%>l$mkJN@ju=Pe(r(wP#_<|L${(2>g?w|4mwLN`I!1@Mec>y0Y2b`3WQpkfMBWhx% z`GeoDzna;N^WPKIxp-Ya$odu^jsyBeCT7;$WMlv{LvAt^ z7AbluTLB|eGf{VYBL#P9MFV#W0}ewnfWDifkpnjw8#@yjFAtZ!p)sfYhrfZVm8G=< z=ZC~iX6oo@%SlJ);^IQ-qM4(m5jUAEzasw!H-w&nR!CNXjE)E9k9qo^j^9m#4@kCFX3kNlR7eP3B5tXk@JCWa&u8^Y4bw zMfZD+EzNlTO#D%q?(bUsBm3_z?VrC`TPJ(VKlH=UfX>L$$jZpt(c$BQ8UD6lh6aDT z-v6Skp#i7CUsvaEYxZ%{@jqLOKSunav^@W&`ybRBZZi81h5nEK+?eS9-lycR6a^Lr z#(#p-{zFB}Wu*!E75oL!bqI7>n7IS`*SKBAsqx}LLCq{r-!q@YkNk4t7Q%Yzr;{(B zNH2a?%`3B~92R!$psQapnlam&#iiHndWPn$^q~XaspaAhd-em7cFogeO^kN$cXwaE z*X~vV&(5Q~-^Uab!IspO*@W6@2hkf0cI(W{K0li`s{4=?E&Iud&(0Q>G_a+cZ?uti zR=RYy;_q1t{j5T7etEb7Z`QOyOs}oDU$#-fkGm=R+(QRVhQGPU_SHe?GgSVrpXXy_ zoYGeZ=>=lDDUM}Qar%3Ucui89nEYS3Sc39v%SC>L0YCDKeCL`NKH7S2Z{lqEWRgB&v0K~afY=`|Mk%s9~1H~|*m zQdZ6gNQx6-b!^t^`Z_{c3ltR>-W4N1EwKNYv8%2cCC{Mwe9DdfeA(BmGjBRoQ62b$ zWDhv3He0+;51VUT{t6JW*TBC^m3NEX#~O4Rmcgp~);N(8u=kl!giQl2i_2XZEBL*Y zKC$Dxht~VeRqR|(1b6_ON%h-12#9KnHgG}Vx_haL&lSEuQJv63=-k2=K%=a+-B5!x zVhnQ@?TS-7sC3s#*NiFQihX0p;7>3j(4b(gX0;7HJ%L{cakZ2yahgTegYhm6CuOUj zaNp3uM=pX`maP*gD55`^DoLYvzyb~i&eJVdvqaNZ zz2%tBKkMrnfk(pBNdz;mGoX0O*_b)fO~N`!1T86kF;8`xg!_C&SV6y>IC# z8d#Zc-CZDKmqgi?a!6ler_r!0wegZ3D%bfnE?&2nM5g#B&Ze9urJTa6kh%(KRSs8v zOvoc@4a*YPDFnEf%CU3i6!^!+yLfwqRCOdjoI8w!~hBSgcxim?$y`e2WJEu z`~YdFe?<9h>cW+<1-0jdo%qgL$J+O;l4g;de2857G(xMgo)#*^ZHaZQe5fq0gEWfd zkt%las4Py)M4=}f2|CR%$C}_eoT@yx@bfWf`TY5)7HDm-nKoNA5Qu^XFL1-rlye1R z78)2E$IgNb%!Rl2`{OJJ$M_ZQX%M)|RyO+!u?aqJD|P$x0|!2YKVtPEsMxB0-cSWX zu#amG@TLy*0cGO|5=~C;kKvNo7&?tzMa3GUb)1*)hoNZo*oJn%Jauo?Oc{+S`yN<6Dg!N>scf|GMEUIQMMCyo>vCp0VPJN zI>l+~95irUh#27N(MeK-mwnk!j!8Aqp`K%_!K2MGCRmS9ocBl62H8+`A@rkA zbrF9a%Ao4P=ue>PqW(O5Lf$9r(G*MxhpG#uPlu|Dq+j{tz+o(Qkm7H2$~1^eO@xm@ zKih$D)W>-3Tblalm=uf14n}f;T15Oh zO3M%-MwlrKr8LIpAPGkmvTK_{3EW|eqkH+um;~z3`t!hv_Ld{!0939$=wO6AAU4gJ z>_sciuPc`;zr5QBf*HvWEYZIQj;F=bj>Z8YuL8`Ie+ey3yekWKfnsJSjcKM1X)@fd z4YAYHFuP>K??n1B51az$i+krFM#j@^S3Wq&oj?Rq+|PsBuI>bhrrI76WzE~+7sa)T zbd2+)H;AH5{Le9p&}RrkDs%AsF+>k>^e+ziFz;Wh$l9hCVAP|kk{S8%lR`(j$g}kTd1IZZx`wHPb=$(kb3CFd^dSvP=gW=-{+5M72lKXs ziRW?zUHC&SmJa8R1W||MK=Q=HObA`()pw?jU&tMfo6l{fP`EL&$GbmPV4E1mpP3%~ z0E9NE83Pp=?!tQuwKi5A{X%z(bKrNQohzBCK%!mVW9 zSKCyDe75O|7Pl#jIhUKw|76DfUa3lo&G@m`G(r;3BFH&D z1X<|PjL?>DN$$vL-K=2rr0o=l=(1~==%jfQA8lD-$vwS;W|6JZwMvHpRzk$y(B0$& zn%7Hg>Na$zYvCbY^cb4VLqC&{Ef}=-GMmi}l{_exO(&)dezZ&th42#h+eo8!`5cge&G67d~yL z0d9U`*`X=5D1+n{Sg}KdGhcH-9}dvCl4kG)~qGHppnlQleiChbO!?8-;IVZ)+6~$_gfOHU-OSF zoeYw9WL+SP)t~>s0h@{b?~U320~7qexm|y}!}zN&_CIfV|0qfSC+nO}M1ht5L;ACg z|Jn}!-}_&)ezf$b$Mr``AD_Pv(wXT0{`Jnk2Pp}m7}H|{*vKp{IB{&6m0QG0Xkx%f zhyh(lIc8pm+OIUv?#4iVapdmtl(1m*hv$oHRXXpEOddDd48zt7brJm!yauU;CF6nf zX=|3oHLX<3_;qYPozf(&7q%zHV(+-djV~23cFf6kxHr-GJX&==RGPJoS}N8Uw?xnN zrswzlURbZrH>1=p*(0gbsY6mc^*tLCs5omcJRUAg>MsY9H9EGpU%~_RAW04GV%Od< z>gK62!jvrcxs)uKm`EK|Zcp9sPy-X5W9)GqS+7(Eg1)PVGS|ExAb^J8_%64IdYZ*lDFfMsc-T!q& z(5=n-v-q78WFJcGO{Iy_?Cme6Pgomt&!twXYZzrwx2|@bYe`=kil3tDEnJFdF^pa} zM7O7sd1A?ykOdC_#XTsu#JJ)ElcQh^Z; zaonr5QkLmTX=MjuKQ)%;oW$b``MJ`c+hNJYIe4gLNZ@J~&@ddoxkuIAx>GY{NRPk| zxzmUX=!^-lV(42`5#rtztiGStluIfrEIt_|XX0CE-{MUb$Bq}Q!d2DZL#afAmyjt_n zxga{1*9M7+5^4ykSpbs!3QDDV&zDFP>)c_awYT2W8?<(%pjyaW2(4TOsS>R@*4c@a ztsIoHNi4dGpqIiY>k=EHNXu+;aagsRO~f3#HP<&17QovwM!C+bIL=**FBaL_0pZC{ zMT6EQ$nAgk3z_lE>XE9J1w@w=h#Y82gu{!ehvRJJyWn*FiD~7|6pxYu%4>iCg^jxF z*H0ubeI<#u6JYqH9g;}TNNHMy=4n5fA4=jk4`5O&I+DK3bui_*i5*eBuO^Q(g0zK| z572-147e#TZbTG9m20_AxBs+So@9yjeHA>5;9P%M1j~zFp8dy3C1K#!&~k@bGn2S# z2f6O!d|I{q?&fjdzKr=cZ?buhdTd@&?{It?-;05iW?)**x=y{XW(qz>SrUsCJ|_*t8P^GmIM|YD9Z>1O=8RJF z-l>3~PnYWSDv+!0xpsv9d1~1jVJ}RhdTAMMJ-s6EQat=8>j8?R6>yd&Keq!>9J6!n zp5X}&oS9;;YCbN=ZXO#92QYgz=8$tRq9IJ9IriLbRrvPrU&le<(om_Yk;?`^oaGEa zUd89mLHW;Wm72@fSd^~AXb43Fqmh+ZSI(ca)bXqu_4GOrMKu6xn|j5N7xQ}qh+2el zvK{e@R$7h7f^uPENqMMkpXTJFeZgV&QDUzftZ`JLO&R4;zkj*>zGQiFJ$NHU$U+!Q zE|D<%O$J-2JgnogM}$voUx6Y7Yc)9?Uk*#T*Tl}$g^D!u`vIN9bh6G90Ntj!scJ=N zoKrm5jFtoY5EM~K1 z7H(Mo>^w=2Cv4s8@OFKKA%fI-QGK5}7Ng%)4y$F#55}puqWAGcLYFes12YHw~76 z0_xi^B&lIuWb~00w;JNm1*t6T51Hv%{os245(SugRkRoF-Krl0Ib(X#WM4Um$c$Wv zB{IJi8Zo*a%X3TL>A51M$A{(6_%;N3#|-wBSWbUkMA4g~^mCE7gpt+9zS-txM{du6 znvuwYq4%;(%alw0j&Bk==X+t}4~A*_%d;h+8%|1YlkvuvTqZ%FWsU@}E!kIsHTisp z*c!l-$qNi1Ux*pjj~hNu5tk}){BbUSgxs|mJHSOEfMp_riO}nwHXN!YpD-uYns`q+ z`s0@jB(IY7xF8Q{he`CK*jiySWi~$Bv<@(HukI9u!c|SYU0)ii>W)Np9+$)6%Z>^H zU6V&Cxk9>|>T^4eKp3CZqKI2_k6cz{Ry&{{%|wzzfqy0Hb*AQtet}`YMOV_cQ^s z-BfRVYpq5hpJ8olU^n;m&#Z(*{=&B#f!LfUP0t7>u$c{*ZJP1XT~&eG4>gNT9MK&>T(IO5e^v0JJj;XShHM z50jL@`J11E)UcznDF>NV^07(L*Q1^zfWL0f!@p6)Bb_A z;*Vfke>M624Fcn4E4e7dI}9PX+=p!|BYw|1HnlauQ@ic;pk04AH&|no<;_i9@B$@wXYT^mYJDc) zm{9YD!M$-q<*e{ce7zrfyq4O1@qXTVUNQI${?TR4oAr}XD?zV;(78|hGvE2iS`9_; zInsN>i_z7MJ=~TKtgyFl*@jq>__d&^Fi%W$r;%aZki4*YEqyLit%j)dxKdq{&P#|1 z^(vNLE(giW%vaQYtO2a=MxB)>ykfk#m+Uqhu+Kb!nT)M{TJ}lLN@7Vpp#l6v-!;*o zh6fM5L&6mWk$AtCL{K`^dWWEbyC4FA25z)?0rov@HXK?LL8c55aAjqP)ZIWrOSL(58`I*deb6grK0!uZ#ZYoBhcY*?>hlg~Aynpb z$x}yE_@RU(NkQvZRV6{?JAzGV*axBNOQjjBodA2xzvrZT6&Ti3xi?@6>VwB zgS*b1KYb8&65%xNMCZ$foEoM0#qo6mkwjejGkh`o9^aVTW{Gf+^oU=nB4w^kH$WxN z7PH`PTH+L~a*S;a*)ZGk5J#WV%R%CM>pcJC7Rin5s`7D9@RNH?eLim044QbMIJCjM z=W9id^2nCj+K5orlG~zFv@2W8iZ)RF=@~*`$Cu@YW@+eZ zpLbKkPyr4|Io(f57TZ|EJzn#w!<3f z9l;}xCQxm}hy&0e#i4TSt>~s|3YDd#;4HpX@q0vV4JE+x5D~=-0+BDdqBwzjdP%XR zG`=OQ340rw*99x;vSimOB{Lo@+sAMmq(tdobewwmf^nm8^LFk{`A&Zw9R)THB!X|$AFAEfGtOrrDQ3m>dlu^2OHzy zBg_d1JM3-)b*G*y@6Fe2o$v(EsUWLNRd1er&3v-?)!X}~zP8KpBHwu$<_Qxr*;a4G zXFasATyRFSeYB9}@rfe*VoF-8IQ@siOjK%;C$#{@BT4t^)(ppr99uZk+FY*n{<2$l z+Z675HVS2Nn)so>Yz4OBl*Y_XQt*LpMy3Usz@TnfSHcsqfbRI-*x)*8j6o%Fr)ehU zq{zj!ZfUsRC2{_B4rRq?QaR;zrgnr+BRwNM!Y5iM@MElWv&?GzD)o3kD70Qo7W{J0 zqAXJj-qE)>$ZPn%V{y`^ETioj%ZA?;G)@s|fZFjG>ZLPL#+csC* zUTqt<_nA2}d+wZxJ2US_ym<3=WJFa~WmRQXR7K|h{U3hfXYBd)NK+V_y%OkA#uDX8 zOQx_#&IPs;yN22T*v0@@=0k2m*BTxrupAA5vi%@)qmw~YR11-!wL`?g4z6mCjwCts zZ%|(R{DaGp8zps*CC?n7#dF?_x1#`h7l4OwdKhrHzJ*vkLk~U@`5Uv*#6xuxB1q99 z+!oY>}S0J!jtFBpYqxiFZS6(|3vSVAMFipp@bd!#j~aV^^|7pD1$8&Ufaa zSl2nIhlqjDZxTAj2g|}GSn@7e0b>qwZa)%Ubqyh1FL|F}1ev{z_fSbUwZp37{J@-O zT4-aR+k%({Ll=~w-msTO2j-2_+N$(1$$!J`kCrK--HzNpNz3vIdpQ^7pdpd=a30M> zt5s#@<^1G!4w+1fgoNxpn4rUs@So%U3G10X--U{?HxV~A#E!L=fwdNi4GxetMR;>Z zA(I(ricXMj3{=AU?QCPwrh0#X7_gL=gB|S17?Dmg>=OD$?@J`3$_vN4?6A z?|eCvPa*xf`#0tlfRs^QGjN?rz_1S6XR6T;mQi^XQU@0g((28u=PLu_=7$SIMwY+) z+JeseLcyZ7iaK#CTPiEL(RDq}fWcF9CL639E)webWkLeheMNg@4eEWY#gLJpbP+^W z+$DTk;2Qjsh0I$L(OM4z$_XkXYLHQ;n4t91f>0P0mMM^xOv$1+_|-u>P7{o+c_2f1R|hZORr>4Va4Ka0S=&m4F#m9wQV!=UR|Dmhfl8L= zLD&ATS1JzWje?R^%w7PZu(OM@Do*E<1$fm6w#!Dj-4l}?;b1-|Y8R?Ex_SXt&63Xc!TvZbWeP|k<5VyKQsV4{JOQbwevb`q~vf;P6RTgNkj32ZFSJ~uQI|y|E_N+4Kdss zb1LbE)4#3f3g*HwtJi}s2 zq8v0PXaTq6^}d#C13n8ACJU`@>mh%RTsWt-XyDotp#tOD$bNUPGlNNXIk0hl$PX6gE2WRD5`S+}s82*+X;H-4nWw4$C90Fb)JG+%vIJ7Og^rXrM>C;21m#dfo#Tpr z2eCJ8^&;9^Lc~Y#k7dI1w-tyTqeE`n=-^#9k=_^jc&<3E)fC^m*EPDnKyvz@LwM(> zEKTBjb19wAz({W(zutwQqE@Gr%k_tP_m2t~?UdBlT{$bDzqY2G^t0jB3;DMvTf(DNYC1KG<)H? z=Gvp^4=>^Z`1Lm5`vMT$=0`@7nr~KJo=fNuHQp>v3fYo<0L`3q$_%`7I5cS%4)-If zh`VJ?7K=imZJ#m`Z8~7a4V<)|$x$u)qPsr}G<&r#hU-AM1TboECdZT`LAl*K7s^+j z6ZEWCdB!Ki+*rz@GK&?_?25=+fMupHe1hqNk zXQJukoIWp?at5Y7lfuXA;R8at0*x3of2&*!&HmCxkw7=H>$Ycvh&zh19T6+Pjo;08 z&>Uh9qMj7z2#MMC^JI~#UgMHH2`x4nei^RiRy1pY87`~pQ?GbIs}U!QJiE%sv)3w( zS|Zop!0iAW94S7w5Nj;l11+vXEAR)l7SX}0%XS=C+5PIcfDW%iZ~ zIFZ;AD*<`8QEj9UY!@Z&S!bvkN&~fC;`bw=^(zUw_R5k~ah_NhH3j0st|-C-C>F8n zS^{34TE1TgMO_#4H4n18%Dx7TdI&hCZ~)EmEf?zY=H3jJFM@ zUo@;;)6?$dX?15Q^-7q*dny~rke+Tdl+`jVPz=|Z?Hf6cEV$x}Bg(4Q?ER^a7)Ub0 z+M#lx{PaYaA~AR*M#x;G>=_A87Sdp$r6hrvhB7(hdub{CHryD|yP?+4<|Ymv2)3wr z68Oq#*UJ_xzU`F)KF_Hk|fqz^sfZ&BpJ3bvcYakfd(PKc= zQt7GiB=_darcxP}9HI!xRK_(}FTo>oEf+86${JdIrk2D*V`iKk#1-dqR%8>4mpGFy zMvMS^HCGDfz%k`lmp%i-GimsI4N0S)%aNYhC2Pvsu-mnUl9+ZDBsgNskc_Kc>%s7} zqNGmDh(>Va3prakj}SBEC3TpN8k_Dt$_qBPu{oKA8yL^l7CuaAuQCq-zfE&+Pn0u_ zA~Nyn_zbf!wb2`$DjziMIado$8@e9*WyMKzQueAV+w_;ta|R^+-}narDe||(%L%YRo%W5 zo&N*u(2+VUcv~QW_-S)IR$SPfxIm?R#}4S}SuO4P7>6fq2rZQF5$*+cE# ztFv9h%x37CmM3NMNpY8wL?#Gp1Yx(3~Ka1secgJnrtCf z#OSFQ8eSUtT@Mr=Bg}**q zh@y%qmxjQrc~6)59FXMKz>7O^4nDgVagL|V_cVVy9gQr%OUT>R9jGcdH7#31YXNs$ zEP$Vuc%C|!pJ&n6^hrVUdN>ZDGB8_8{LV~#82N)MMhvT}poiE}*|&weNnOy{%I32T z<_yjErly3kv02q%I~|J)`~f5ij;l;#e3oOSl~kVDv-KWAQwAr+B27HsSqSFxFa1ae zw}Kw*Fe!c6e%x*mhhY5#csb;IE6Pd)ED63?x8;Wb$c{@lcTf+8@{gy!xoHJbP)GCw zC!ni3g>3}De?<@VNz67zL5Ant#u%yPg24kF^lQk;6A?DE?_F^-)nb5789et9XC7@& zBd$)F2jpp9e_tMZcvnxbueG=_PYx@Boy6{~(;t_UK+GiFNAKdglwmeL7w5a6o7#>= z+(`XtY|_T?yvaup?^uJ!HSdbu(PV-Mlgew+A+awB;t!=>AE_HZ$J$2+v zX%frKl-qZ68=nNRGQP|jBu?|Iza_OVcii7LE&8VM?(n&N3;=2fzf#vCl58Oj&wRo@ ze>^Y#H-iv}NIeP!^u$KAbzO1O5jjdfjz|XL9*b&R#6&Pyu=wqFX$S0_7Y~~o5u56E z>3Yoc@%I%^D1l%IY_Lxo8%P_kd1LhQkr;^Wkl@t|dOkJScz-^QP5Lc*DG+#DQqJ5rYLlw7?$GaJ zEBfADgHLY;uuVD(c)3B)0R)MOd;bAwX8d!u?Efv${J&A5 zUy@nIe<3^nJ(~U+9K`qs?fEyV^iNzUty#sv! zC+{o4?CnNL-4k9)Oc#`yR+Op}cgB*8$%|Hh``wZ-opE+c;|Pd^K#>}*bzbm8znIdW zd^^iy%4_@PH#wKjC}iv`wPWB8pJ*cSD!WA>e!lTgpCUe9-K{E`MtnIGUKHs^cRIC? zLy;Q83r)R#3W=WfRsEJ}#(JkLd!Y&ND;d4S6WlBnfgC-B*XGS$|;Gi1|$^C1* z*4xbsZ0k?DYP7u{oiyG!?-`xwBxoOT_BTvb-b9g<4uZaMZ2RZcky1<|9H|M^EmNb6 zia>o9aoR?*qN6--IL!GPtKXv-OIwewS$&>ge))X7`*Y{|7HOz%b$lH7SFk1AHxQ3s z2ZQ-c>5hre&MaUa31jit{=(OR;;v4zz|AHAG2}iLPL(SH#3J|=vp49h9(P~Cz8Bq= zk+>(GTROUh<`#amZ`t}Y{<;Yuhm}tJ-do#uV9R!fOPWBp@%5xnKC^nw_O^{M!a-%; z|8;mk&}&15B^9M-R<7OFzEjItN`?P@vG6%uE4qAc9BWS@={NiEd%1b+E({E4SXve! zsO3U*?N#JEQV(mQCiQtO=4sl*;+mdUr};?NI9=x}I_I=FOILV?-FwxQ&U5Get9$Ig z{(NwJ*cx|XkA^;WhliHFuNzi&m#Ws#_la_lm_v|Nbu=JQ4V!O;k3cs__acddWD3?} zdgwc;{c0`(FkJId2cvJ6DGPRGpwKa+t|P{H86Z*eV^T>qZPg1 zRXZARU^JZJhb!}3>=Qm;!*$|fXs98SP&IUP;z=QL(dDYsVFe#^>9)B zgX&qUJXwA7&)Fs_%B;dLgkTrSVr#LDsYjV1k3k2uFcVf&ic3IVVnDo)l;JmTerr{hUbF#orq%{ z^>Fz@#*c3ruy z=pI9iiK$RyqU7HOK>|!sQ`U}lxg2U%aPoK7_tJx?t|#Abraj`Rs%L8U@t-N;i!Z3L zu@h}nQ*2O{Q-B(5<6<=W&K=R+rXI5|g}#OKu^ODTEG=oZ*Ja*r@21Q=*C^`|r7hg{ z@x7|~-aG=Q4J^~}qOP))qh~GYPwU_#>&$z!N15xeh!4~%az##fr^l9p);58Zk@1Jt?8Bxz&I{v7khc2E zo24y*G|9=rWK|}3=`ZFip%74(rh6l`h0gG3%=k;PJd^c}ohgVeDf9H=cfgb#-*LMh zP;Bdd0BB6CkRX=~P;6vk?^~jC8^QhGYO*ECj_lFr zbkmZl`J?GNpP*c9Ta=E%8O@AFjxHhJ?2Uf*=+u2k#V{ulxEqY^p2M9UwZvZtHdh^Y zO!3IL7v`j$g6wXvmk4tTVGl89df1l;OIy9~BmQiz%YG0_zlpHEYg$C|m;kLo4$DiJ z31dv-FkK%{CG*oSeaK7OQ zxgt!Ks?9{TI?VAU4*^F1U{QICv-1z)WL61T1^P6*YoiTc^mp$z`Ld5V{}cx#)c)6DP%YaC-tm;7@VY&T3$aAPV#Y$PzVX9Rfb9m0pC?r z16qHE^y)V58@;sX_#wI7+J+xIaXfS@n`P9Q_46zSP#7)DOb|g^?6E)r^sAGyBpQ-7 zdciAEd=gokr!OsD-Z-*0?r#H^$KRMMGY4TdK9VUHU-LMG@~FU$!wK35XHmDLOc0NO zcxSO+D+;HMry%&RF4auwqcKUYa~x3u`NA5zDm8{HhFIxycDSVchOswMfwc!9%4RI} zYttcU{C5th<#>G{{d1C5ax{|_Nh&Wg!TfnPe!zGJko^6+T4wyxT5I(PgU4ya&XV`r zFH#GXX)Jw|jLc)Wq^Zu-e5Q5&T>`A#=7|le zfapoyfR}dq?S-`Vqd9q?(S03|Z(9MrLu}l@kK;Lpj&vXqMfe%4E!j|dJ1>JrDQf{K z8MHL(c1*UeViw=S-7ZLRg&fD6Y#iULk*zf>*0$P2#;w(xxu_2))iQ=cfcqe0*;#Vh zydlhn-ob3J<|AO?$JoJYh^+bPrKQoOn5WRbqB?bHPo~d*&O<*aW8hsr(15YhYLta* z3~Li@DRc0}@^E)vq*kKcbIYiEdwD?%Y3oeF6UHr-J9uyJxY;u=ZmwMKCM#ZJT>KoU z)+@PkV)qYzMdT;Lv(%VPIQhQoZYL19Gs>77qgzvNo9JtVgw>vy3vKUmIv6u0E$b@7 zaQrNae`rJ!*eCzVWa`@u?d5qpC@gupanCrBJe%ZS%_;OO6 zq(-u2Z7i({?fz4}I{tt?9_t14ErfFpG0Wj%T-3R8+fwv^4IQ#gJVBkM1S- ze(;%%xNvy@__rA`;wBK>CXGS;hFqS;^Cmoe8~q`Z z41s-mc5)V7%WJ|Ykx*Nf+cDMV%yLI$gJ?`D!YFR+Z21&f)imO{=Sc3VX_RkH9bXd` zyudW!5TX{G0q31ulyihSv z^c~~%k%LDHtjp~kUjW#m_>aQ9L9rN-GIG* zL&%%fA4KZ8+DKe8GvWwOQ<3$F6)r+XDAeuRQcAg{);LB@dH4#oC}^IV zNrL-O1uc2!BsZ{AQNPG5Zfj);%UmE3J=|0ln_O*7MRh0AW0z-KpQAvzR_1%oP z0mG>2mBk~e`-|v;M-Uhp5*5YcN>j1=(ANOLQhR6B75>Gfq3soZL2ki&RkZV$Cyeh^ zq)ZnUjJvccDwho%5nu*)yR_g!!siwvdgN8dqJ0@fCO_vFoE+QIXy+GTBFZtx>}kKL zvP3B^fb0drlwQkm8?|M@Bm$5V-6>7cn~o?s28$`~WeA4{CXb;@vlGBsy9X<1NgyT6#DT@T_3F>;kr|)xo7D z&`ENpQb!{<=Z^!ZD>8f1#@*Olje?roaPtruijdHW2R&-O8mKgGGqEiiy|oh*O-MLe z9Kv)#$Jn7$%z>klOmIA!$(aZI?BkAMe*C=bX1WSduW-GuMz&n$O{7ebn4l}9BYpb4J`@f#pSZuJ5Q zLz|Dpa2?+!k6+j~FbI%vf*!U7fNWn`?+AKn#tV*l?h~o1UDoyMrS{ zmqnv2Y)}-yai|&@q(i0HGT4SI$Q-X}cLokLYThg(If9&Vt`sJn0sC1SONn#r2mO8` zJse;-a}I;ETUMM~kzN3D4?!9y)`$?(L@$XbGYw2M;R;8I;85g%IQKr}N~&?mK)aMs zv*a}`e*)YcayT!0blxRuzIh(7IRH*1olI=U6Hgx7$Sp_l!E$9hPh{tJau}lZMY+Nm zGiJwv)hEU>s8F$WGpNqXhUi2=uwisTu}{c;ArMJ-8}IwMsa|p*x&?yNF{2_v$>8C% z#e;M5^q)=4sq#ZZshq9mq)uRE4N@j{9bpr>U0g~6@uZI3C=SMq^HshQ`zx8y#Lyfm zE0vlLR=ML=-;lH>w1FpGzW&uB@+s3hW`Hnm%wZR!cf@C-2?(zn_kW!62j~J360@^L z*DN3Ff4nv~<+nI{#efiTmkOVzU6Hmu?^f%AGr+P<; zYWihoP-f`YX_F}TlsbjUjoO8qt#%H<2I0!UhFQ2M%8l9!8lwQO?wD+z^}zg~|3IlO zGXth)SXa;JH<~`mZ`HyeUG2QI4HlR-?OFE8;G*1Ab}s(tOm#m> zQefU%Cerc@$b=mqR{cIBw_9XVL8{oFQn@O`r2XCOhIL;9?)4bont>98Ey|Ed`{^X~ z7-K~Y80$1i!bU@h7%-0U8PxAB#<-uEOuHO3Oh&cho-t|S+#63QZo@+cM#3$wI*%&F z8#-8FlfJ1k%hcyu9FtDTNJRrC3lmGQt8h%(ZIfCoW-dgcgczo6%40^G3w+pUX_)V* zrIeVs!bai#>zhy_bKT1877dCxHgj^|lUd+q87D72#D%vD0luGs#g!I&EH}#4sAH6?ow?TOC^LB zMC!W;Fj@AQTFmsNs(;w$6Pga7clRqM>mUkHvV#5`3(>eNutFJ-e8izs!Bd8pnaX$W zt-kh48=EFgs4I(t#R!aW{c{0sZI!~p?Ci(t&{BR#$wo9L)OnIXH_V08^cXtL^Zeov zd1_~`UtLQ-gXJa4m(4jop0Do0sgbQ>ziK%w7kX5M7Z;i?AJ6l0L<_oP{TSioo+Y-3 zYj4N8>o}*31)V9Sw5(_5y}7T#CuFJ1F89Hp=tPXu60jjtb@kcq({p(}0ssp3EVVH{ znQn_|WSM2as5pNKtD0q*1EBC=cJHZ!l<=<4A&bc2{qD+h*%}u3>bIK{v~yGNuu414=x%BGh2b$P2m(P_Kh4jEZQ<`F(~T$Hf?al1 zX!0X6538F_qyakN*;IQItp7ND3-A-+jlxQ8q=5-B-%E*zloxzErRVA7 z#iu}3+7XKl<{k6}p0h3U_f$MUH}|~ahN0}}Y>HYfvT2jOg?fIpj~Ctu$w-oFG!IW0 zG@u(k1g~#CxzC%kqy9uh_<8odN|_065E^7vkoq6 ztH~hnzBzk4NN3>rlVn$i5#?!}xgO8TE}>mGd^KAqNJ?EC#N&m4+d)&e4_I`)GE4Uj zBwN>x!5nN}AActSW`_#tY+CTaVPVpO`W25TcNkVoGj9t4wH3FCnZDWDJYU=j09c~6n-8Gw0$ z9jutIt=F+@H1>&_|CXdR-9EHd$c*T1M}{EZJF-8Ns%=fIoz?A1X*7`}upnH#he@^z zm^9~*(P$E?Z9Kgw15D&xaq(&em~t?Ani!jcDKr~aU|WZP zBXNgPQqCcuR;#QS;cS$K>aH7GzD;v(!|`S$Dv4aKoftBuB@&u))IJa1NCH#wQM+&5 z`iHns5*xf8oM{tmzGp-b7JI5pK!};=QLdM2BxR|*5Jf zInE)V%Tr)@rq6G^zCM_jg*Z6A#?W?eojA04E#9Y)X&a_>TrPz?=YKyhCVN+13_(4X z-AWG$8Ga3V@0OlPmkN1hiwh<7>pcz|C-;;f)Nla3c_v#h84<%e44QU4Qc@kB9DH~@ zf11i63JqVvaKpI!iMWaDe)MD=m+mTpOFw$WY5Lhc!ZmCg!QJg}U7ZjD%fV4qj)5A) z+v$mrb6DJUTrA8l@w*)H2W;+W#4o4Yx%oTiN~ajfka>IQ-$gno?B?Tp`Mk4jnIkNk z{9Dzzm$EaD!z&1TP>`ZpnI(K(P93ieuRq$?`xgY(Q*EqO1)i?mJX}q%=8p`#;)kXO zr~9@Ix;0lELb~|Ml-JetOBf20-x6)#J#^*kT3AI;*q=J7UA8_qR<8Kk@ zJqaF>5N(;*@&Bk5_Gz9iH5x;rrBtD&ryQ6f$cqRkf2a`zLS#G)eB&b(4p`HhcuN)9 z%HO%Jz?;oa12fs)Pk(oioJ;+9JB^w2`I;`ygqCsekCY~V&XoTzC{6xh4&0Ydp5brO z6@@Ri@Rt{ZiRlkH`hQ@yXa3s!PmyhZM8UCqJ^EKQilD8Pt%KrMB(gC+H}}{0aYv4? z!2EytsISAcGj?z?H+KBnR%yXMcJ+I6X;OB!-T1v8#y3%a>HRG*;dyuhG58b5J_B7-fr=#6mhqbn$1~CE zMGCm#NZH`8x6#l044%Vka?`;`rlA|QM_arR9}w?&RclRa-ilA+Zknd@egkFH%cJUg z#!$+z<%97tk{cH+)mTonkEerVYU zY46414H449Sy1bvo~jTQx7GwGYTYPWdrH;;6YTpI())kt`iKB*9!%eV%ul`U_bVUjmK|PhI3kUxCz=7KLn-Xh zU9i)nriV^%q2hK^)p&R)!E;e*`@Vap>op4qEjuFF1}-KD&18Kte6B|$;|uE!9-k%x z08+#8&&DvODb1P1e5PoMCN*XX6R^A2SK!~bq4{HIlzr@!);=4w6U&cabPBMKRi0(D zS>F!WmM#QiUg;{iE0M1XC8CYEM_ZMOJ?8(U5Sma05bgVAxA=ToMACa4F&iHbXvP$# zB36if7=d*tNmJTp-E};wt3-gMEMpxF0vc2JjHcW|lK>V+O0(h; zDdLhQVmY7_I`p!Ct&c77mCfi_duOsqn+^%(%DMh@2WpBWA;!y)8)HhLBOdjea)(;N zvdB#o8)8z;tJ;K~YAX1&!L{4F*r6IHcQPEOfUsf2J_l^qv86LHvBvk(&_kOMn6Z`` zg5!vTc+cCQt&K4|DT3d(nvcN?N>zRW980T)D2G{FQ%}QJK&OGyHx^~oO<6n0=c*?R4G?wU<9VGVx--wZprTFc)x34iTXrLCYeN%VRZ^Yg=tp z)NdwdL0D)`HxQ6Q?!%!hZgWPE@e<`l_@U4egtF{Dq2$@Qaj6q8NK&kT{ao7-NEJSw z=QK2dW{)b7-P@SH`imv-XiLZAW?JuXZr%SGbBq$^sy3F2+>%m0+VIfVK~BB8ss7}& zYn7Hk94ti#BH`v1@i!~Oz5*|~&D930bEb@tD}7R=+4xHgNOuba+Czn>qgsO8o+~kR zudC5AiSt)hHtxY#OXXmp-ttHKGCi4v=|%(wH410d9^PtgRweg@4{VKDCNh&zy~8lEsH!vB;XF1EjkWM?&6zQleq|YgRvSqz4QkmyHf>MArj?f zgIg~`#`3Y9!f=C>31k+UK?K_B^K!k>y1+chk!@cQ8s~wjz~<}B%Op~b{Ojyi5KFZZ zgL`3Rh~b^D@lf2AyC++Sh~5N*-zK`kk}rIs!x46gDOvIm^Zm=Xp`aH%F9up`xDTr+ zh*LrxHor~1pyonaj~LL3r8uw-U`Q*LhouA*8IoyR9IR{E-yrJT0AaQE7FiT&9*k(h zy@WM~P+b^kSPDH>v>$v9YllcU)g-<%x%#9D-dXPQDULFYw!{e;kUy7g4kYxVA%&hs zreqcMnyddsd#ud%bv7WU zAsS-JWT^zV#jf9f6l0mZpgVCJsT{k!Hug1@57*emNp&bq%af*6@H z@ISx^On(kh{%>If7W{vjc10)he;C*N1snbky7aHjO#k#@|68g5XCU*JF8wcE`u|{E zI`g0HA%8EcSy}!wsmfm&T@Guk2wyI5VBA8Pz-^iBS@SfRIpPG2)5*~Q>RDD~aVLr~ zncMpJBwTP=Yc`W zGF{R-AKo^M4xPhu1_z((vPGtjG$s+%$XE^3JBx)wX!G@JYo5)tT?zFo8B9Y(rmtRI zo$LF*K0w`d&$@y_4s4`P(lauAe!Ti+pnXlrQBV1GHom*D-z<#Qhlk9+x$~P!Un#+( z599eeZ5MrA7CogHKPiC|e-ko|yW6VN6j}AR{;PrlFd>A^yR)w`67S<|q(#1LnzcEl zH2I83sotCm1bx!(+7-!IK#~eNag^P(4=n7l$HOe8LY@SvPjrPjBBy@M7JPM;O5uzo z;9~?_dlykfQ!oLQCk&73B85}I7ZKXpEwKsPJq+31Cvn z=PJ2(2uPe>%)Dvfy0EP5k2}}4lOE8*LmC)mJ?q8j$+}ScZPqG52$rb{J9WWm<-=!J zZ0LJHPLb=k5j=ClM)OU_Hs-kMs#t!$Me;UfSmc6n@#&ZyfH-Rve6!9C5*(1uZ9n$P zwS_0Rb{s9KmB9NoC#rSu+F#^-@f&$@2%TPf6x z=RiB*nKHcfd`+^##O=U!d0q2V)03{WBNR={y_imAC0W|DyEH|?$1s#oeF z_*7e@Ph{u*q^E>sYT?7k<-rqgby(dxDyq0?Yw=bq+!aIa(yjxz0EVzWcY>xY)dDyL zGfH*nEDX0zt|O6=Y1q@}jm$I3 z>RDsy$~fjK3FDQc>sx;<@bL4?2i}!7nkzi+A>fwJ5q?Ph3H^@d_(RRj!HB*vq0qxJ zKTZQn{Hs&ItL2$J5ZtFDSRn6c&jAs}_5&GX&J~dLQ%H=a=bQnb=d?`hDEmt+V7j^I zunU#ewui)?hf1A_Xh@QEcb|KWKb+2hDCfCEb-wJ|F*4suSoYa+3}={V=D;5KeynQq z-1UtV)7}P%n&MEv3{lJb0|ZFSGP_#R@y)M_?ahtD@?UY*JKl}^`B5HvcySIEcPBDwjAdhvzm#Cl+l44%Hs+?|2gth|}Sb);4J1Rta} zRmjw0JVgra`1i{_#n?|uz+5afit3oAu`le-6DU?h-xfO)_0Urw!6+O=K_Fejr0&-X z_rC7e45vGX{TB==8=)1xYCQv;6Z)Xu8AJY)S}78Hu+o_N9q_f#AZI!fH4{Y`g?-u# zi56%oq>H}af$cTiJDXoGWJp>CEgc5qJ?JS$GNdkYe7n53J>tL2MEE%AcLvo{Q3VlDStxH1JFv1 z{e#h~Ow51ud;c4Gum6ur$ggfO^FOjSGXL4`^;Ze`R|)w)xrF>Pru%yd$;kYlDIo_` z*KDxZ5Z?XY!Fj6yB1l6XMZrrWiXagdP7)HphgV0^$Ku=D>(Z*vtBpoF)t4`;gh(vQ}wtS7vzaa7$^`8$%?ab{-p~e*UEu zwz8}FFmIsu#sYi;m)(UZg1Yk6mj!otP5tW2lE=my^(x}Wq$;p-SJtPWO%jF)L6kLK zV>dsq-Lz_b+gI$OO9!vZv=`U@&{FcTeatrL6&5*6!xa8zt6OI4I$2IdTkV|AyZJoH zT?r&9jJ7JOwZe_EKfTdJ5doX_EKz2lyeKV?haU@ z2uJ}TQpgm>+qy;_Lrio_$I@h%DoHUmO(CM-7wx(%g4E5qxQuG7IoM3@cR4&ho0Z;afagWcWXi3*>Bh$T9OlO zvjJR3TuGv^vj8l=9>4E)&Ajz*kZu>+zRH$|e>jg7sBW;79SrcTxXeAn|Si`a0` zv^gp26G&N;?qj@63URrEX-`0bW3rkqJWjmEL|gDm$v1A;EDUk|UCW!RBzPq#cfk~{ z+MA)Q13z4!R96TR?l=Te1BY)xRs2H^>P!Kibs`{|ak1K{a>t};2sNT zRU4t|xLtxwD$!s0c#q2m#JstPUwt(SKlp8>+BX6*ne zF{_|Z03AQ3*Kb1v%4mLK^zV^=pLPctf$$`2qRV4B9_>|w+IYrP0VnSVti4?B1IBG# z38GrvYSp?GuCcq7+}l9-*WC%CpA5KstTO^3FV{PT5dDs{eR3M6Y%B0z5r*UFb07bp z|Hb@g2kU>K|MlPNdeMn|g}5;>|0~`7?}855@tIiug;@VnGy}_@+X8>pFMri9|AXrn zmOm>y{$9T@vHoX*4*#VE_5qArnhG(5Gmy_@%_)7#tXM89gKHGllqyybQgC)>c}u0O zB?J^c+M-yzS37xdfqS;1P2ICpes%^ch*D|87y$8xP7JEBsyE4@an7{6sc^@^^?IOy z;k4FU{%h#Ned6Y}5GCSQafO`ucSnitfy_fjA_=v-?ug>#6pNOZCj9 z^7{%;#VO6nrG(S-#}c%Y`Z;{N^HxJdOnLLlbU8ub7Gv;c-#nR6jZjP|l9OK*FH*xK zgh`1&Ds*P97b%CcZ2K9bN2f&p9yV2>wcGQc{*vlrd-v>*_C{t14gcL@>d*3vvbDDL zy!Wud6|94LVL_z`F^(%c@sLj`T+iq= z8v}h6xeDX6SS~j)FjGt`YUK3QQ5KG!?KJ#`_W_Fxs0wq2ZY`PeRhnnB=TkM@amb1x;JN^)1$tcj!zZ0%%HgP1Beog(DUr2Y>UA$`dlCfy@ zjircBgo(RMqexRQFb*F;pCpsFtoSL$eNjg7)b~AD%^8mi=qt#cKp>eZ$5 zclUfv?TXNn!z4b0{h5aNe)pvYXgUwr50UA3!fSRHL>3X=YI6)yAz}n3ZD<^u<+mS* z&s5D146e7G9`mdomOF=u=bD3l>Z{GY2i=X;MJ>L|t<+#}^Y5B=6X=qWN3W^~|BJo1 zjE!W?vUbfbGuvfmW@ct)W@ct)rZTf#WyUfyGcz+Yv&;DTOwZiuJ5!o_)Ss?e>N!$I zD*i-9Waf`|?dM&4ukaGO@Ij*w$kM7k3i|8|-HEYk-^v@;eQG+`lBaLHDsR{psC3Fw z?{W>g8G~?8DdI=w#)lYtSK>tnQ@qEl(|cp%l(@$)fwbn<@@1ij%&dZdCO2@N$|w+W ztMwTrKwZBG@}GRZm1%Iq*}1wot)M7k1L{Qg01&Cv62czTdY86DHBfC^Flj47 zOMiT`yw&EHm(EaD7Kem{egz6Q((U0(B#a&v8e~vGEqr0Gsu3ETgWPtq_@;;fxiMW}NL(-ahY-6tIE=_$Rjz|}zkJ_IB*2?Sm)LI~=g)%NrH)dR! zhN#b1Jxg;Li_%bCmD%M`TH+v!^43k3}CY({PfWG_RV9QMIe^$Z3OB> zO@wO3xQRkgj2@71t;9b$ma4wrmJsWv!d7RgESMePlpa_>6(r4+tS#bs0UMa`0x%W= z08MlNiCwgVWRjD)qBE+HX4O3+7ECy#*i#T@C5U8&y=5|;AWCKH^{8X@@8r{?ny-2G z2TZi9mc-PkiJlLZ851cZTnBOqy%Jd!$Keu@@35YHULkaLm@l8AcLOrZfMIAq^Hp*S zpaTJ%QkbK}09!0O$1mg8kSrPEHB!3hs}SGKtH}TBRvIFPR5BQb5Gq@k_Eie`fk%Yc zV*a>msf0d4eXqqazYuV4F`Z;EoCzKrXNo21+yjok!c?=Fe?|lQpQL`y?1H8F5(i5( z>c29s2@Ty|9@~`Z{steHaz7+o;6WSf;k{ES`#K)pDgM?!{Jdl2jX(PoSU!j$Zv{?< z2U4+Ks}kX)(Z^wZ>yY+F*aeUjsi8d$e1D8QI|t`yQ(rSprhBUIb1-labtE4) zNTL5oPVlX1?A+XoD%W(YSKH|u+g$Zg@&$uN*<3rgmQGS24Lf(9ossFzuukiS#uJ@CuOqH{Tt?#E_}OOLUy_r|%AB zxUDGQjG?09qi)=$<}s28k-UVyx$$~21vK65r8~&a-8Ot%#2PfIolzGK`7ULKWjx>81E@?%OkOOlRIY&>FakPy5eOV9U4AuxT$2*oWoZ2~0mr zm{{Z&>J-V5LJl-YGsNX9CyG^*F(?)871a?#I+bt21v7ft^HZmgB1(!; zLeh=gVwv{sET&)!n@mspj+*e&`Z^i6Q>YF?YmG!3Or^whZapgDlXdg;a6fv+6CcM= zX{WU20;yu+5~UfA8${K1o;GMK!V4f>x}^!}pPQvK3@8p44=tvHW@A& zQiN>b9~1z#Rq*G{ZX9Y*c!Ml;v*+o$y;DtsO=OEow!h>d?vbplPuDnp{3 z7*l}V&%aRvvsB^d%_AcAJ^#VfDm@){f)j$Y%$o?K;xPYkIBfXqAV|m$*7-$_rtF2n z2;Po~H}oA)(@{nlH)CAT_NlkgEIFf;GG+Y-`5Ts265JFKwLc*gHPz$2p*kGt*N$Zr zJo%KSZF5CxRx_h(N!Vh#$e~Gpb$}qi^g|IFW@E z7Y)V&U`1M8QmpU(0rwq*+5W71ZaybIwS_b(Z*!^Kb^H4Dl_w3Bu#!=X@?5wqlh|v# z<+9sWn|?M*(7sKaG@w86*g%Vd_jtNGK)&6v!K@u1i?q)Pk`V2WnDgSNszPQNCPB(T zLZSt(1y+FTH@bKLBq>b*z4Y&Mu75SX%pkPQX&2qaGKsD-}9#2|Fk~96w3BWB5fBlcoKGluNfeO z;yQ%8zg6MTtrK+TS5go$8M6)oG9R9LTB1{d;!KjbxGD!RcTcZIQNC!C_&)KSqE)Bv zsp1TuU@QTBQv@Bgfm9B$^Z{vpH($&lEF4_i7;Y1Kapd7-m3te|(`xkGb`-g5sOork z-TX{(^V(WJ$mm%r_A%0}fQJn|Z@i!&hM5YK zZZ%b1sSzx%lPbF?fGgjv#g|PDm~H>`v~+01wqWx9ue=_v-Dd}=G{R#s(UIw6OATSo z)#eDZf|3+ChM&J`!cdyf1hE56asokeuX51wlB^c?+aAjq(6ZmJ$0iPgD$X7|(A0#W z-fu^SgGmO0XF&AqPvMlu154IX+b3cB;ab^4%|a9X4h+?#NS+FVKF{+oy5gu~@fC2Vt5EgzX!v5Y4^-mFDte+H%<#(9sGiLEW_x=77VSkCR ze_;{E@;gk$#6RQLriuyPs%hfpm@S;GJ9eUIXLtWbJYbR=8JfRyXZb>@ z?)Uu*S>cHkY1RrOONuEPTdQd^h%QYeTIHuz>sNA=`6J>r*Jv_iB z%m|R@w@?5%2{?l!c5hlijojI1C?X}EUvcx;-|6t#j4SMDy&NhnX?@Y2pSR3`CvwHHm5w_gv8S9)deKhFQz0gyOGQ520Y3=WpBb9$(FqDp4{YtQuFz_q*gtr4PKF_3c4*n;XY1EbMm^s!St2 zuZvji(t$FoZ3~wqX-W_|ZVTIOu^x_v5+$-oc5*@|cnjaRV+`dK^Lh-Ce_VCxrfLdQ zm*+j3(}R563KlZWf3Gz*U}U!BQI;zsJEVY-corvlyF0J7Y&mC^1HCaXGzcJP3!jNJ zWsFApVe2hY?|f2z-|4LKWt7a-Z!(aF-i$?=v!KL?&8U9twa8PPj`40rx|wamW!&Oi z@-56(#v#?-OKL<``Sx-9`kbn5Qx=PTUjRWjdCB(a^_z*KaQa0AkuBh+Nw@A(elcpd zrUI-Q23Kk#Rg`C!|CgynMY$hY5PFz=cPcV4cw%;dX9PpgO-~nJZjr#j1CMZEd0DUP znGQv^v8auuf(K8I1@66g1n)U`yn!@BWs zUa0nJo}Egk=qzRT{pBV}A)R(9gOGqyC|A?^XVa;#!5rUnGte&pFZ~JS^a0D2i8Hnt z3evp>MAoj$27QWU=c_lqIIL^$9b!Rrr0(;O1ZYJet#ROfu6#c zCZS0UTS9*`)kJ~4A8tM&YB|Cz!!~+3lI&~Lm&f`rwWdnPs7U19_gX~;uM~64MQBtU zD}##}Lz}H*YA*kNEG9{M+vwEs9V-lQu4t%*Fyj~g2Hc}W(<+hd@=Az-2epq75z6jF z8Tz^^8q}*JyPw6A4z%~k+bTVe|*Sc5)QpBacVNeq+XUA zB<0KN6{W-6f+oa(TEvg}Q&_cbc~<~2CvaoLbwHzB&j5GJJ}XqyS+>f%Fi^|Bnm4@F zNlNY;=!GFhi^%Hmh7Ae2ObLh()CEvDQnn%R^>*Vyotvc+*LGuB?`T~Lh=U3QMfJ>) z9Vt}P8MdK^Kr7yFVy4X(g(}(k8`iFzvEtWQlPuIee~uDGBa-R;m$`<3BcCVu!`b$ z-;~ZCj9)0$LCFxmNea*E>_iz-^PCyDcCLfoIV5SfeRiGBYpcM2W>+iN8I@x-HPt6JN#_{O{LU-;;5 zs76kfHKyGbVole4muY=UeC=0Q?LV=6uwc%9(j*zue7Z}bD;*}>j?#)hos24H6ag&} zKj20&$}rb{lFc}y@NAYKh>OQCypB43weX#7+_#qH*^hPpC|G{XSGN<^ey_0ju)*P_ zZp%TdlpgwmtEF!yjuti2y$bhz*|%hJtg1kyE5B`_2uWgO57u^X;dDhr_5MkbEWMl%&)h%LB}+N z00woUg@ZKzQUw9hjLzPu1tp8P^c>>>fM|+(9~wph#fjLSRAUj0(ll|FNrpTsUMGbZ z^NPk*3+)td=EBlaB%SB=vtB{urxIIc@mmAFt$WhZ(l+>5;Ix{3$+Qin>Y$wvYi#>0Cx#F z^u+F5I7K}H$HCgMN}}o*iGk0nQ?ga>NP{pv*=wl3G9v=L$yz~?PMC6TNDW(jHma?= zhW16TD>R@SQydk8{Ty!IKoOBqoL6)J%L|aT(PE(snk0(SJc3Fkseb2D#R@>tB5j?- zb`j_u?J5y!)K*TsGSj|iIT*l$&=E4CDx9dpp!6!q`FmTzv(0M{bu`}zi9_eqV zZAFLRGVA=Rrw)hClqmAP}u zHAUjaJRRQSO3NfQJ}XKQ;cd3}Sq}reJtgUH3Zv)gP#w%=Q;IVbiZrlV{`OK-$gPYE zit&a|(Kn{@<*pocXAQ$&f)A9qaD>l&D5nx8cC>`!70{+M78&j)=#k#AxNIO`wKKR ztX4^a&}8I}Rmbp-p<8$@2F%b=z9czqr@G zF!y5p9rvPVX804_t4?*;W>xI7L-Ab@ml)6Du>%Wx%!n=x0-mo0oqY&3k8XOWihL<2 z=OkFEk&r@ROUT^5g(p5Sf}s6&2x0?GI;`!KX9JiW2ds!d*qnFVmmw z8k|jaZdV`KrNie^>Bl>k#sSIvb4zPaHV!XOYL_bGj4fFcWcWr7r&{gpn{ySOf$z31 zn?14nHo+~l%;~{Vyk%{qQ}$D1w*Ui>jZ_EZH!`JHT~s0yAZV zF}c7}cn-l;2?q=x>r(f77x|Dub`^=2E0Wt5!HgAlyNpoTnZ#CG~^&E5br>+~~uBs%$hCAu07y*q;0=?XZ9 z3VwfeVu8g&M^HDXCRoxE`XU;)yP6Rc5lYz-fcdvrv!-dMVf~BsE27+?)Do zeA3wWqMC5x5N-BqM1pZxalxC&T%?~4dHOOS%!BO5hRuceAjwMEVTV?#bXL(#TsWz# z1dA^$1(-nCFw$M`Dk531*5xTg)%pcd$j41z*#hfkAerWl6mSv7~G7N?t|lU|F>Gp$7&oE8(^iNSK!kfM7w+|y?` z_9NF$-7oQ@bXQyFc3G`WWHcngFPJf!u9e-CZP{I)onr6N`34v|bZToft7QDPzmjT8 z*sfEdXILcQV-`W6T?|9qkHdz0WKdlSs~DTJ$X>&Ha<<$v`7w5kR)S6=h^e$xiAB_7 zrzWz)-ICC;!u8N%V_%`O4F;I7pnd8!899CppIi=KW6fnFyu|S)HwXo zxoHHUsp-Y6IprIhp!trEEKi3bk9-Qe zYKI069Y!^fPJ zt`SP9q?_+atY3&|h-)dUjzej`MK!Xn zd)!QP?~lMD)|+X&gjyX~B4C8a$9d}w;B6lpa9*Jg8VCoJ)wNh9m^$UuVf`F|2`flV=ifwbs=Sq1Rwznq^ren4rtl{jPdM%Q7XYQvH} z^aGUzlop7a7AK3;2bfRDf~Ew8E18nv2m-yrDoI{r7ujSY)kF9?#3vW$4A>5AfLhfP zW|5M08_I)!QyNQQg2;#R9V?Wo*CaEFVZoX{mb433Oe@eQh))qe=LDWrgG=L}wH!U@ z-_eZZI+Vl&tD|;cSxq$@&clftia9;h;|y+IskfT_sz5O+A`$pdhhaFvU6@H%9}R{g z=~WG7pu-G`Bh)If`Muv^8K@vla>vz*go_we?OU3DqB70}~6be8(@eg?dZ zm8{3Y7&RKWQ?r8VAzE0T=E0c1M5o@MVYL(qATa6z7z5TbvVjG-8UO4Jc#0GLC#KqZ za)M7D<&T=o4-r4m<#MET8oQ`(hd6YGPcJ1*3RKacv0+y(wm_dfz#_-&x2rgnQUzX0wL?80*%}r1!&wE{)ierkb6E)C*qyt--bxw@a${jN>2YNy_WWYo zzycW37_TUowekVuf|^d%?{b68`L;} zwm8XDSZ`iSZ}i4}ngdzk!itkM1A zr)TKunyJJICLR6i{)IeBt-QOr;3!M$x%&`5Y|pGEGjlk16Ni91Mk*FKK>Q`oYXFoH zy_D*>>W(~-c8~7@A_YBv>e7pEo~FV_YVR#|%4U%6!K^6I#hGIameNF)w2vtyU@=ZB zTm47uR|%{ijcayVi!!YJ`#PcXW~MFS__wE%3jj7GV1wU1VZl`4e>U(^Y4)_P6D1VsxKT9LKBs{ zL}=(A7)2t;YtAq|gh1zk<=Si} zaMS5&b&6OcN@AtlA8V6gepFDhd?Q3~5c%*p4*JQ0(Dyf3Yq9naQ*;DVgx|2c#08>xC8!tZnI@jOg{6b-@12z&H3JH3|N2F&U(50Omi0lJ`e!bKEPn zZi;}ZZkhFa&4_=3@TUtHJI2bq9S5S5M{P>K#(J;!nh2znTI&aUbyXLQC}`n+Qx=M@ zpC4!dVm(^tBL*y3LTYO1M1Nl4ScJ1ut)DX9f|gD;^wr)lcHS|--O-nT;X*78|3)&; z#Ou?N0Ef4U+Y*ia-Bmy%rWsR{wG~Xo=r--_d3{2CO|dQ!hq4?aH<&4W6Ub}vVSeeX za!GoVF9qzXlf$K)e6@alJ`tVasiq)1iY0d}5s>F=TEIemW9pHFd~x3?`!4~)lyABl zJwTY5kfR%RTgIDx0o0St3* z3(p#2SfWXep%XTst&Oo!;69$`A4CftHsYI zg_)W$u%j14u&BdSDdZ_z@r88fNEcs_8Rg!ur8*%JJYIM1|HPTZ*6{(q5LrL4;iYRk zhuvLnyaJ~uSG z7(%%f|Csb9(1$Ck!7Y}a%#1?3=8Y>Tzl-AqE&TlMR|)&$I)QNJ8?S#E^n=b}fdFDK z3j>C8w%j4{6S9EhRCh4x)DNebeW*^ZJ4vG>(HU{oBLFCIQL2`^7htdUn2kK-BS`cU zJ_~Nbgy2`bFW|3II5&Zo@?Dqtg2(xzXg=;oqERs%@iH7nPJIG12%~XZj$>vXTW3sLpc3gV8#DDdG?dQGP3=S!m|BEVgFKI|67#T zZzwE1JrH5^8J0YnBKbqG+8uq+kuqC8(5- z_xLU0wCFd>SnP+_8Jq7dA)TPyJ;vIHuA?_duW`z&FIE|o8#FqiC7TqW)YOvB98rk6 z6EG8~m$|yA+I^dZfR)F`*mi~6z<8mocDKpB96M5cfN_&bUE2Be_p-)L*xJ-0V);e` zL_7oYJY_14Rb_guleK~!p}p2B{O_0EDm{W7oBS#jKd4F{X%Zq;3rnCHAnY4+8UltJ z7^LieXrb?*wOVLnMQA4_fp{$Uv9BG-t#4A3PuKtpE8{*qQXVP^zR7k_un2dA?2}$L zu3DYE0`w0EAJB=4V0KzXU|rr?%eOjZ)Xk7oBu4CxPTG)GQqO6~ak>nCB%)4gtq>u+u_f~yC<>iiSP_mE<39Xx$7IA`LcL*V8 zel@yAMtQjAC&SiFP_%3DVyNad_?0g&OS?I>oK#ua)l?xnFE8QU5TlEO-xK={w=_b; zpYFk2c#i;`J#-qs=|VJA%=s&}w|O=_G5>ZEFW`b006yrew9oIxLo20JyRY$cgxjchYiVN-+n@$h#ZO z6ay6s(nx(gs@;egB+&z#7&Zp)2yryfB=c0!A9unxDZml4I}AMRh-Qwx+!*~%wJS$y z1*|Pm_f|AavG#>b+T2l_J)77^16@I_G(uvPw1h{&31%$>ZVuG$=Ojc3k$@h8zGJ43sVY*~eHnS$AD3{&W)$x&TwqHes>wHSq!D26oar7qdxb&!` z<(NRJmmc}JMA6)iAJ@zcIRz?damCgc(h3AZho56@=ReZQvJqa={1yr|G8UxFN=ogzq) zrX6GwW2}-ggQK$aQZ5Kxo8jI?F%>l(C9(c|<-EtAY6-lSOtnB=;Cg*GeSRbzb|fjU zkj@Z<)Mo=~E#29iGn1q*>0U+ueS^x&fkvDJnXDr8XlFqtzZ*25i48!|{P9?DQA!bl zA}n51X&od*8qLE9crVMg^rlCN z?9FK+9*W=?U)*xFUx-V=qDR3Q08U-4d}a8qK*C2p@pNHt;^l&;@^L<#I9EJZD>}2U zr=elLg=G|J2BM!{>e$URQEp^8Jl#j5zo<;PG>R@RD*Q!2RC+nFn7mZ*KF^HYl{3!Q zI4!4t-k~xm!*YNzz9lYCnAu8Or?`+i@2uHGNDNFMAGjSZMV7h-S$!GbXT^iRmb9FA z_KxxFKuGR&`({FR2|W z8ew3aaIzZ_4>z=RV&F+~C~T_PNx zAOPuSZ67|J>0-E`QlWt9*`sSrJ!$RKj&L;ZlVaK71?UWqITMXCQ8#Fw`8N?xHQpRf zuX@tf$RqRwE(fde1CpL$_=_;jKnQprpb_p z!5!kl>~dqizA~_W?K_*{eaa#HidtEw6I@j9>R{dQ5lh47=AvM=L?7Y&Ij}dY4y*U! zQZA~dcntUZ6`Dkw2;#-XHw4#4Wz{mbXo)zpT3h|K%1#OgO{Xrh&6?##JtrGv13O8! z9%yRMC=aGsj%?A0T{jo%RyVC64798RLEqBe#p2j&dt4~j?VQg586oQ@_unkA?Ehd% z|3B`I{Fg%h|D$;SocYcEyW*Yw@8=-@wbcH#)cz|kwSTX3|9v79JKdiNV{B7djrm(@ zOfT0RKUAL1;+3c(I#jO1qx%ro zDMDQ^+~T7qzF$H~Clj zv>&*kFC)N4c;SR$LJKP!q?_%bX>`-%;IP8&8e=Cw6Z}sD7=JRJ-pJ-Oju&E-HjrD4 zxS#-pBtOvnuz3E#S-wtz9O$czR#p>og45!lc`vxk&sPUHt&rUzbVr$FqEYsBDTV9& z*(RD%$hhz;TEh1^LAwwYJa%ebsVCL9X4DB=d@4m1b2U8033k1Pbu}^x>tuR~iE@VT z(mp_>KMg`CEruEJNiL|Kc&x;zD-sY6o$lCsda9&27h)yeoa2&|goNMR;t02F(byq9 z(uZOd?2n<|zx9`UWpWTl8Xn9ipyILzNpnVN-1e>8F_RAo|N z)3c$O$Y58fy}J)Rm&=I=bCTcTp~atQp^o^=T1F6bebGgGX1C#$+0E#E2X1p=pOtE$ zk`+8@$L);6BTyyf*BbM>4(?0n@MSs`FL8ynE}Rl>qz+vUf!C6{`eDW*r#k-PPEc&M z20A3zojn0z6WJ-zsbj^G#ff&_&YE#^sh>%hu#IM`$hnowDLBG;s`!$ zVZp$DZIaL)8(fP8eWSRo;_MEEJdT$qW)ImF7uk@MpxuTjr1uGi}1^E`*mVT2E`V=FaAQjVkIiLfTEn`TVXNh1U zbam~R^bVLbPdG(nVuiF@KpIHHCSY0AnrnU3w^<;fMJD}7vn%^(xE_$k?IQVAfRk0Z zLqeJ-4a4LHYVI{F#>PRa$x>M4k0qe)vmTr$E&t;|{*=b-y3 zR?&24(NfjHCMTr^BZCfM*~5{UaUZB-RMU551hg^tzJ0923dglD(Q1V3+Fa&zvuOV}981nCSk7&_DeOpD$w@qdy*qiSF;?J^or* z|5{o9byrpAJhTvBK{52V+(~s%{wjX?OV29Tc<|m#6nN?gnVJjO0ONv@Jh%-qsgZ zFHm0c)O`zaBk$wy8<|^QZ_hnlmdkNgggcifKC4-j&IwY;PPB;jKwVcUyHT7pgw?^<=*l?Pmx(Aoz~g}L%ppBKC6ubyq|PRyEADXT4~ zYQVmWiqb5|FnK87W5@hHGQPX-mz6Umt-E-JY3MhXkKG!vw`zG+(BDc)Uf8Xr?fJbi z$V8UAVzIIk8EEs~r^P3PS>iUuk8v~_%G;!Pl3@ZSgXO@O;EoKg9y}*gpJwz6uDUKM zQuB^I(G53QDcV;2oYF)e=k8YA9ap+F)hua(Whis&62595Io=;Bz!)gy4{>HPi7^CW z9gqO%UMO>DZ8Eiu<38)|@@5Y^GV?7sXB?5$+-)^COFjsh*Tq3S_jj>4Y+ei@arbl- zP)%gfvPdGnIFDdRUiG4C$PxP?Pf8`J^*~a&a9L6qeIW45>WZ>Ko5_qP!%+03==2$9 zwb@tMg0P9Jq@rBC;>5W2=oA=6W#dgPaJJ77MrP0iW*}>dIcEW{EtJ)>-AEVhT+mx@ zx|c&m$AmFp%$pVn^pdKmcAECGspj2na53Zk$RN49_u$1}rzm{TBP*s~N48H!YYNQ8 zdjBTgQ?)KI4
      <7xjbi3ZD8UI@LY+=6^PW(qx9#ci+)SHglLS>~)`M@8w_XxMn) z4=(*hZ?-NTrY12cFU5#^^hC2!r-L&e==K$7AoKx3t7dKbCw4W9mmzg#mrO)fJw#lq zaI3MK;%e5`5k^5S>P2EdsyPiz9YW1diRvtKh>Y%}^)XeqlQ48>%Ij*t{e6dnc5GZQ zjtIR4`65Dr81lnZq-x57-V+x(kV<-3N)98Kd|S&bb?0r_63P`Dft#iYv8= zD|=K^Q=E&emPAIwZB#3A)olxuR_j__KYu7~lJAwB&^C9ZC42~U6L#Ct=%wU8wZ5h= zB7DiSuHu|BLkf`q>h20&GKPijOJFfPH{CmhH$&pKT|{{zHpLLo(PtghwK+Rvgqf;Y zX`d_tW190f4?WWWaGl_m8R-)*2LYEdHX?u=^Jxj8jPK3()IHo_y`jO$PcRO-1HdDR z4V&aI9~I6o70M$yG_ORC1@@a27deJDFb5iLi=l)E5`;P?)ZY0$MdUM{M!^nr2@HJQ zJ&k0-SLrDL4Z)CM>Jch}M8wfnP}J4|^2qcF2cK^#`^{9eWkt0fcFPiO3drs&e3Mxi z^d1)u&^+9T(7DNT8ft{{t-*{G7L9gx!sjY0LY{qO5o$wK-wcL07V^jzFx>@gdXVx! z0ztp&!NXugL5G78mJ0RS+B}V`Ld`$Wx1@~kT_iI~3JA@Kap={j+llBqd zmB?CTcY8@QHZu%*HaC#;-0mp!5dd3 zGeYVQXXmQOAARG!JQ95E8_Ua3kN+;Em~V~t`0LGuONfdHw2OQ#0R;p!4ah zPOrw!#?qj~+bv3G7d8CMewJyFJ(mc>^!&o(&NX96+9|_(FPHJf@?S{aS-+F7KZ6 z^9oE-kbFP{x*9-u-U#cW!6J>Swi6~-&lZ9hK3eE|pbMfLT1@K&9{?Y%wK=8AdZOls zeKiWJVN7l(J3$*PpEmjJ#yxmXo&W?qK_yR=EbVYNP1w{1d}5rj)G;jjxcm|31ZK>(Twc%TFQi3w6vAlL|Ntv-akd$@9VIoSN?dXht zITd4pL1%2O|9XZE+M-2hQjeM5FadM1sM`i$t?WP;$0qA-h12Dx_g4}4g2mcDX|O$XGZ_=1 za463q_#ts2Ti#rRw>!ytwmP*DD12q7TRz?eOX1+iDcpt;<_89tsqa4E8j#`8@HTdJ zog}+kzzMH_G+V?N&ttRAt4`b*$8`yg$^@m(WR&=1HH%<)omhZ@sCS`yS^_v6lBZ4h z?kF&+7n4+YcE1wCI`WEyQ%=nFr+sm!iBh0(sdDhxdupL%pJE43XMYCTs_PTaVdifU z*WFvor*&XEmc+{I)4v!bv+qx9VPm9_Xr_~Bj=~_wp~SKq$dJ2D3fFM)O7 z6NRXnSrW;(8&sh6wLojYonX@{onV9w#UW^8^-})uN#S?+C5`az$QlB2-@D zXfgiHuMTLo-Qm0~bhz3tI>xnPoy$}Kp;oAmNc3X{JAeC~kkE=~|9GZomA#B{O(AsC zTlQ!(?JU&~NIHNtYAm1MNQ_Sh;y*=Vd^V0S(f^LseA*!Y^MU?iHGi?1e_>Wb|2tO0 z$oOZH!^;1V7;Jwy4uElu@l4!E?^6vLBb_wQfUbE8yuVqq%Ttc(h;QWQEc33QpNKTe zrvvc&5#@cd8g?$C0@t#mn|8d+au<1ludhTxlm=D;6^Tamv8lcz!;MEbv6zFy+Ay&y zn6LNn{i>3NsAZLLw|Q9GG!T)tyJfrdl#Ra#n>DD|4XHXxPpvv>YDzosaBpuiK1it> z^P4A!#y1yphNL@qQOq5SQFT>tb2n9igLnz~dAfXcA@b6>;3tMi9bSUttow@bKKqxQ z_#fhu*FIE*Sf^X(k+T!$zD8c{_>ORNQZkz96o|%Oip9+{xG31IW7OmS0*35w!%Y9DUUX{@J6NskIi|uxB_kUbJ+rko?ZO-jg-P+qP zac{Ou?a9{GWTr;lr*TXkHIhWY#YQ7Un_mcNfv-px1y-gwmofjFOzW*N=BZw zoRw@MnD&}Dr9fg4Ck;xc=@}$q&#MWti)T3QCn?_ukGP&9y+G*2YLc|HR4+pXCu_)2 z?t$2s-DQr=beZgXg%A>#W#d^%AX~Fr_1-_4KIj2;CXm`8pEmCwM3LCQ4uY!Za0M11 zC+;>87g@}qMn7ZW0FGLL90BjIp8@PMxsr$rQr9L--yS4L$*|sdYnl_bYr@s z(>W3aEo$8%A-aX)rGSx3OV8WHs4;~syeovS(oth#?jJp;h$>JCRCz}|Io8yloWDAQ{ttrtdmKv_0UHd7?6!nR&3E?D4^F9vFnbDea~ zDm`!hQ&rImUikR=s3CQx7f4o2XhR{cA^wHJ60g?w^zEdczM7@mM5mda<+Za9-*$=D zHad{zli&2*ly7?@nM)=P&+m8EESbq%Fl$A-w=5RNtX8 z<5OQO8_Q}7cb^lCAVO8)Z^7clEj@spA}VAn_X;+WQ~nQoZvh)ww{7RzZDwZXHZwCb zGc&cBnHkz_x0#ulnVF%@%-Cl3^M7)0a+LIY`E&D>E9JCQ+EuEmU2E--oEz-2;ctdmadn@|BnyeynfZC;+7?vuD~P zxHEl-5keTS!;0t&%NGf@+R*$h{z*|onII<~O#5c5L2n++7mV{PteO2+2gV6IgabBj zQHT(iq+@oyKs?4y8T;{NTqu#N*o9pqeb_vDQ&K0=@_-lmqr<$MEL&>UVk?Jtb`gHq ziy(Y3`7wS{sxABqD7N81FzoyWz!3b9nPkRz4x~kblbWpPU~g`jVi;QkP9T!Ex--9scdT8KT^`H#5^V-4I!=fHI-}*k{?F6G2!P`uJ?M)V(-r`JM9l55krI z|2jcF_sKHR{|>Xz|G_MOFw4IPW}*KbW}#ze{2Lo+%T-qY$_D!{m}L$U6qR*nCWR%V zaHRg<;#1>N6mlgMcAx)>PxVEHkVsmKRx!{j*9lWa*gn2JEjn3jB(kPwXvn_Cf2dZ&O;q(#T2j;Ty;*gMoMBm;yqNU? zLo9uLALg}A_bj#D&3_8XX72_W6{fz>(Nu!5UL>~RNp{4jMnhR$J35`fVe(i8@LF3@ zAkpf&b)XOUOu|FmFtG0s}F>n<+Jx!NN)Qru>d^#?SakE>W`8UEQx4 zo^n#w5Cs~0XrOl9>}^q>KanBI+A;dBr8?VL3W8ICRCIfCb5uC~lBF&rj;qi62dgPi zVYw@*p77%HK3$z(FM#sX!TVaqa3&Lv$OtUn@mZ zp4rQtp!!nFWy_nj{9c-NqyMy%7wR;9LUN-#?D-3?J%Sm%5TttBZu~B*DPqd(O1Bgp zO3V*N(m;I~1%AZ?j>SVLb$s$1Z1Sv$2;_^HA2hCI_CBgcibJ#07201j#{g4%`0-rw z2DyD^PyE@-_9dCEGAoXs1>`wL^6B#=mCMR`RxiG)Nf3O$)34FgP9~LLu(+BBdbMp_ zEtrdR;N);%LHqimCG~z{QF9gBp^JQ~58(0xNh%xEIJuq!xXd-M^a(+P{|;nkU_FKf zt}EY@bNeGVA5H8gp+sDma$qe#a}pkgo7P+O=>z8c>v7HI(kX{Ut3N!BD$<3l07cJL zQqHf+Hkm7jSqF_c(Taftd!yk}2$SACVObQx4;hkP4Z31A3D3p~V!9YA#68?O{*^{V z`Rmj`@kn}Fm}K0HxnJz$hCci!Zx9x}ojtHnFD8)?k@PcNd0yeL%TDRIHWzi2D>gvk zU{lp3AMxNK5ZPff06@E|z zRhg3F;4+rcFi6UVrm&KLGB8&a1x;ell9cvD>#%s5xQonDe|&}DIJ z!J5cj=1<`<4|wiu_9?K!gw1SG`NcQQfD5iM0K`A$iZ7J>!-xx>P-^J#6&(E)L>w0m zm;;OXGjCmL5U58I7par#*kiw&a5(jWOGE2k%3lg(b{%a3-DV$fN%ZjUu|2`?BV+C5 z;o+B;I4Z}y9;I;d0lkPqH=iA2b#A3R5Lxe8cPJhERTzC7p;Ywb@gufd^sAfs6`AF# zzhh&YsVjy!Cf#fl9qp6;+h1u_iAKbVzmWx>iRb@~Km4b(v9K}VGco)QjWGN{BY$MU zzlbbg_$?Y?{<|J~|GxU75Y)2qVvmPYPaa2V23YbLs{S>$7DF*#LP75JAwyk9iX%r4 ztrA8oH6vq;os&_ra}{{$5@g$`4h~!Y>M~TNUrqEAj5vTN>+bInG{1Y{NZK!T&zgkb z9pbl#Nwu$dLK$>Xl5#mK?yg=PxQ>r9eaKj=Aecr5u}a6|GzzP*s_rT3@I2y)r^Ma! z5S@1Mc#@vJ+ETEUo~O8LyGVjeVb-`+G<*mE&Xip!Nyu+Kt%aZoPWQ)2PP$kFa%#o=wA3UFiP zKvlX&mcM8&+C_5b$6pg#Z72CikE@+n6}=|G_ViJY&A;=AQl8se-9gBOQFr|1h$hQ6 z+I#?Se`6u*5?AQ7$W&Jk>@<07t$M^wSE^)#dSI-%tw9W;tbv7SSK3}Ud2wAhal%u4 z8sU3V3B9EWE}Sthl;-M-xoEyv4^-y4+txFFk zb~e6Q(ySX=8JMHdynI1f%iWM)z5>M`S!hR<3C2z>9A^0KmWyoV{Cw3+!$O0jocX=Z zK#+%K9t{-pG=iSKik3WcX^GN8QnAnAC3U5j3jLu1uB-V*1o$)px}aXH7R(3*Kw(`9 z18jJ}eJ82+mn<}`Ttx!z>dKtbmTgOawWEO)ILAcs4@IusI17r3@DIr>NFaGI=MZR< z1f8#1BPHA4K=bk(!(Dth^!$#YCIT za*CGa`v$0Gs$oA*U=n^$b(lR%`Ub6Ln?uVP(p_Q$W z(Rxg_Em2b2yS)_URU}ZwvGqt~w`v+tgx8nYE@rmVd&d;ms7tzs@g2o%`-E8jP1i7MP zb7JqWR~pk73K}BiELg~=H>J7d|6n!T zDGAD*r!J)&x(+m@u3r}(NOyGyi5XaF)*lqa9WcBZUdQ zgA5PPF?I{5e?GN}ICN|2Hp<(cRABX&-@xXqeq9FuOje(1v(Rf&Gw@#DCICv)ZXG|| z$va^&UX)~WQy|IqU3Uj;k`I)>3m(PQ09kifxGX^MpqyU_fAFCbELJ$*wTw-NC%O^A zoA zh(hDDvl#GYV9yco~^kQF0 zWJ4jV%%|Eg!fWg5(C8=jM`VW59DLy_(xFHVdGe~jT1R?RVy`628&*aY4OBL_ z;%X5(tuF`~j=`MHq*`b^q^v0Yh{&rJcC#(%G7Zl|J{U|>%A9XHX$ekQ976Y(XyY5)+n=q>jvSubNO8YOD<_E4*Q%GEGEL|d-ir2YwE2ry++ z+SCt1!HC(b%$^qV5q!__yo(_Ss?G&rr@NkTq}>WUwNB4kjiLOSfC(i&$ejx{WzE(M znUE*zHg@DPdF@}>^RLgXI+%9k!awF$dm?4O+_<%eq`Gq@@owXeWi8ANGzR;~-UxP7 zbZN8qDHytp`Hj?4{6JGIO6hKtXzGjKrRXpg;Bn+reC{XE&%k7N3rnMgK80sf!=A5f zDf9Sxnx(HNb>*EogIYHm)3KWVL5B8dZCGx~LHkR*E=D!JB>!}1CcJPHQ?;J(tm>|n z;-s-S_xsEs-`5OGDw|{t`?W#oOETm&MD86NZuzgd%B!hvVnbq^x_iHrp~a~|%4uhN znOYI(N$AY_@W>h~iHd*yG8eg3@iV@}Q2(^=fSa9lZD>^fre2Y$zaNA>ry;+GcH+cM z{oO0Oz>B~@Vi}?4WgSWS>rWsJ`}a62bUMQKk5xH$oM|p`TeHcUZ38X?a zLxjVn$RW1fiftXeTcN96To8^Uk^Ht@C?KUqtF+fj3K>ezqT-Y5`tqhB!H<>zJa$*r zZ8RCuEB87D#^{??8)5=O-ZO^V@5y1aov~)1*!l{kz!9?;b0s zl$unPs|2J*;SkSXkeaRQ&)8xDY1O|=hg}|sl+mEZ86E8?@eGJ@7&>R0Dsl$}xZk4{ zY~W?K*x@)~QB}q#=&?aV1S9HaMgdrPpvn)boVorCZOar-_@!Al)`GtC-E;6DV(q2K^+-w-idw>nfV}6bTY@eDT=B7V$V25T`KH}YU>FTyT*B$gSP{Co={WSQ zRB6Ztl8^i+>{^7?Ml99pH<~N|6)}l11zg%((Do~CLSK`#u z=~=KnF!o_Q_mMWg5`&YaS;ZiN@{-FV%-Bg7l8+QZBy;cYkvG4dv&irDbkC3u>4xC9 zYYbU7JfRY+P!Mp5AC9_gFIcNK3g1aps#r{-LsdnRr@geEO@KV*eaku%T|_l4%@SeTt>86brN+xfat_6^RU(=dVOuodY!sEMfnm z4A#^WGQq$_Ub09ZjP|~6;&eBi1VX=6MI5c(!R_efN3QKX3yXH~##mN~$X_r<)7~I~ z?z)Z>HEOi#0&_eTG74=hn_e+*2<@ktuwA7TcWtC!&Fbad+Z2f+ov0BSZ&|(Jl0m=V z^(JsX7bi4twU4=nB5=CAM_2-+Wx8$DL&rLfppfRu>P{!wx^6JI0p8=I_prNi&M zm}7kI)j5^=pq>y3<8)Q>zikE(-y%jI=&V^?gedBfrc%U?GYeSYUf|5d_UYrAFTmoM zj~1Tl!ry|l$_bBfIZs}ufoI(X^$}gBGLM#%&?yv*q|Oa`f7PGoux*>i_tQ#DE8wg*p7@v_da^5(yxk}iM3X83t=3Z;pc z)oNukU9Cf5#u#~b{w$;=PYxVg;%e$gm}5RZ+cJp2lt_wuMy@uV8#p$NaN$7hRf;N% zAWy2V7x|TNO^Oqp>}#XCGM2sW!SV)vHICZxNaZDbcqLg#Cy-o^DCiCS!&SrL5;r#2 zwsErWUTn-_PmHqF0#9?YmMMTe_wUt2gHyp}<=K#rf`+!U*J%u#<)gkWAiZRz3@)OtsH39X~-Q#%k%tdisMR6n-KQsqe7d4p|NlOE>KxNcUYDD>eeP zh@@3lE2aic*4Ge>o2E%GOf>3JE!8xWTjUNTXkmeh7%=+BNiwB z3N!0M;E@F3m}&s=UEqv8aJYO?z|2)-M?BC6j4h1#`hCq>-_h-;nKq^|+v00c_Y+1- zui5Q|3pkBIxezQ*;tnMQ@y~@ZOza3S2ZbXes!Xq6!QZXaEu)|q?zTSs)a$&;haWvL zdnAsazq(S0RKwCko9M2QUkvRc4wUoZ$ww4JVtA74cV)731|ibqwX*P3mHnHK9&;5X12J&W5#V zPZltGPkK{z;_!TPFWTP4=j&zJK+*n7zO5*VkfbD(cA)$$tNJ9`80`q{m}37X68}cu z99nNNX>=f?z4QeSeXR^SN;f_NS9+{@@<^E=`9un$`^An@X(o z5{uDlYdcLcZ}Ck zC0to4+1+$}0^X^yqaJ}UBq6R(oC4?q0%zVdb-8o-<~_`7PlVxMqw zP?_tqoJSU#BFlkUy1}=)A|PGlNFuPWgJWP0Vg=I_Ou_E9`&hn+#bUaE34i(o**?enExTY$(qT`rS9yp*2d69Biqj?8^~dphqt8O0M7v&2j<#BJXBeqPp1MkCfBw8&iaC12#W0vZ$r{9r ze1iBq{vZ^qm}iN-B_#_^S~BWn#Jh_0Wz_6@WMn{QGKu6jo-RLC>T)TyWUp0(gJQoH zE}OwAx=?D?gQON5lC`6bv^9@wxo7rr&RL!d(x{hjM?THtJgUoV%ezt6b=+Jk3m3=E z4w8^9UM@G=9(a}=W~|-eNORt<+C%CP^UFjES-odQ`b!YjL~!7v%`f47NS4@K0K7`Z zO2^U1l)+qwbbGS17&c(XCf107i3vBa%Ix|eRn|OwWj)1w;U~y6h5}Fzw`gd)#a9TWcI>{s zOC$&Q{sp{!S3$G35jTp%B-Z--d0Q}$b3xGcEDpuUT5uvtG!^xJw6yFreRu+=(=zfV z3+T$-E0mt|8`}r|_CQG71fr3iTpu8zqt)oSI%-=Ag+xl{*^pYYgU^O@Zmvk?qOQYh zA270+eh&#fA75l4Uw}7E2E?$vdFN z`nKJ73GR7=^;CT>cooU^HsFKKR$nz(w+Fs`8MW%AKBlQStEFLRg! zTOf{>L7vM<0_R{in-FoYA`;2*u+h&!BY=Y@L$;+d^u=@ZCqPy$S9g(=_c)Sucl_sh zG}lP6cqZHf4ztKM<4B$XT%Q*1bn^{iE{eo-eMJSITza}{lYm4$-)ec1 zPz_j|33GCsow1MLPCr#khf!$8F;-1zYlx6MW){_Aa>g+O{v##bu>LbY5pA&6FC-A;rAGGNAfp|Ft2 zX^zi%-7EXtr@>Q0~#pu}^%Nu7Q5k=|_?eQ-e?&jnbNEMGr zER2P*UUKH7u;d)6u;6T6a)}A5UJtcl^(S2^IQ==A_nn*#P_8%NdL7;5Sq!(ncYbuZ z9dnG15mT}+Zvb}hm@eI7yg9sY&+v^}Pn8ZKMBRFtYIJbv)=@17n3U_jzIe!8L(&YQ z5p8jz}pwHgA>O>w9xGJLS#27SfgSB7D* z1r7~Q6F~AIxu>tAW^c*;k*RE>_I5JJFfZ%EYJ5P|OQD19G=Ig_YQt~l9ID=9|sQgT7A zx$5R|5t3k|6ck-oXVT!#tKKKAKbjIA>~)BRIox3^Cjq^iAU4c*?z&8(yKJ$upQb~h@bRr2cqET`bf9I`Zz>$7vGzR1Iz_N z3#lKFV&enYwFHD#M?u?GK4Dt-7J^!#G7EyOv@Dh@QS+*-vdAnpF{`DKM60w=8!^Sy z+@%IFLBeja)>ftKh0J;J6hVGMoC&tk)uyfjY`$c%RqHESP@WKX!MhZ0kx9*{U&q<0>){_t#*vggB>KLjW1N7H$MchZ#2$MPNgOUj|EPp@{T<<``v77qF#MVVp(9{ z5uT$CrXykf&1|+}YzE{xFjS4JdH0trn+xurjT|2v;(oA|f}g4>(UiCz{1IZ{i}yvF z{uUWB%p(j3Eer?3ikta#$*@e2bJUFQfFw{-RKStbd&hLFOpP2E;!(XbQcrEBJ|))d z(|-QK4X!+;#p6(+O*)LYLUJT1J=DsHW2w=;|V*n)Yj!>z!RX7!KfvhpTaa&Om?}rLv;g#vX+ULN+&H#=RY zF0fviG^ewQMpWNveh{Wf5CDJNZr`BY%LY}QY0oLGwoTxj;oYpi>3i!McTMuhjN+FX zsl2q;@5@2?uu?m+yjWe|lrKF#gc;!dI%g%dAInTeK0|tWF4G$e8%EKr6R%dPIq%oN z>$D=(CA~BylC7W2pcETYeJ`2JACY|TFo2P8(uWdmX6=I)B8Za=5819%i=CT!b>NAo7E7aImVVf#sU={7b zQ!!j8q%~G29zkmmu&P6RkgF&U<$En7|%OX za!?pJD)pr%X5YGXR-9VByYPNyR}5To@32?~Q$WN&ahqQtPEVy#yqYhx45}hl42xO8 zHZBoZKM?Rhi*Ny56hv9Io}Ld;U0n-{}7{^46k z|C|g&;8;|gAV0&}Ii_XpI?N$%i~TEplOfP%qxKo0ONM)Ia&>&pL{NCS8=cM4euA}z zv?znYND;Fjn!-w{L`YsJF`7Smd%<8`j-k`8qEHOfanePy@w0tpKBP^0KqgwG3464! zHE@vsF+0~`G=yG2{2J8{b*-ZUI>&;;(3v?T^Os~JD>(mav&1pGpQgBiM9%CBJ- zyJP+{nmwZ1bR4R{VVy8Iq28a@IA7@(4pfx8js6-MA4ST zNQ|hz2vy6qo7_>PeKXrNdSrnRz!4QQ^AGG@_`qJ&rl(R*OLSy~G={qaHAbQ!rDk1X$LBRq7mI>(rto+9xATwG&MtMu7@hFFPZ&m z(20eaGTM4H_Wa`MP;9`DNii%&Ue`tJ+H0%YZbT#@i2z|LG*GiOs$^?S(fkBjlU;iA ztG>s4;)REg7X?`iq;3YO^Oq6_$Bxo=@RA_0q}W%SgO%Z$tY?vnpC1l)Mo>J zA_rs=pYruMd&+kzYlEEx&;oH@sr9c8q+dQLW!vRQb>skfq!()2z;k#R{56iS_INsN z@cQ_1If>Qx*+O~f#M!V{)$omcVS1o_e#qyZ5O185UxH*^qN)R)dp+vx1v1d~#1B3q z9kgf;FDN_n!DRd8kG+M;i?I)XhwcboLJOwUMs5Mhfvdm=TA>6*_d^8PcYJ{N!qE5{ zZAB@=v@P{C3c9mk4s{9@ALpL#-*kkU(^#ymM1QTl@+xUQCWvbGh4FemnIY~Q(}Au7 zgNVSXtJG2Pf+o)QoM)+dBS6gB(65y9Z4t=EkBBPtz+F7`IA!Fx$F6)POiV%?Ghs4P z+41hGHAP<=CzZMlryGfrfT*XF;l&caY#4m~wzL|4CD!JXK7=De9YAgk-7+z^qahgg z<-E;yeP3U&wdE=p{xRa6L1`pS)lASvx!_6O%C$=04BKM0ajBt&jw5R+*sxzqlw!9Z z`0)G+^-^SEWOsEz87ZOLHqU*oEqrlhnE(-KNql?O2;1+H&#s@__sx+{6_}^{YXb%* z&=mflj$kBwQK)(+F8we2OGF)Z^V()?Axza!gW0goYFbIjAVPPmP74W;^J&wQPn)vZCi`29&C7)6C{i zhH8$SV2t7Mu`KOFoLgX$nZ`w|_hRw?Y1k%_9DY9B@0>5lS*xw??3(8y*S)IUP*UQA z-tG&{9Qd;)E^bb~0lR(*uFb5SR_R;T8`ajlE$Wf3kw!tV#8w9F3J}M)CGIgZYYcNC z=X;SGXh?vA8KTOxrCzD3y{yp!lh8$w49W!YfEr{P%#Eq0&MX`9tT>s17FaPCTB*Ht zpnwzn#baBo#f)YyZUP>o+ZxGefNR*62)jU|oCya=-y`J6nB5uhZNW(y13g1vi4BC_ zpc7gGK~(gGaq+vVBqko6p5oe;>$h{BlE!ITuBQabHZpXxx8=T|U<4^lOz`%s`?~tX z>!9pYVg^sn&J()*vl+h9^f-y@>$F=gc09lmx#O=yRf!L6yHfxbjXIU_6>Gc#~>wM;zvC4jL5MptZyp+hG6`1CuFd!jKa zBqY{#OGOvZ^%z#8jkVeXE{S2Uc_7q~@MFXr=1*E6C!c+TEc39%J=b`6m}lrFxxpZu z#yrIu4s-qlF{S4+yHJ3pHd+Zi9to=4EKY{K#@ zSozVp(M*R?_i8=Q?97`X9a~Y1kF|`0kadKQBF>R)@)6QW$yxTRpI|5-t7GV#%qGp< z+UUSYkflF2QuD}nzG#`<3K(rk14qKhF3qp&ggSuVOfd#t6Xl8YX8sgH1#tie2lT{J zwN03APx;F4!BXC6CoJ6#?&0bVdvE5nR+s1D>^K#D@wCm&JzFIDd@GiPdpzfTB&c@B zGfaqDrD#t3dNJsMKiz|?@>6hW27dt=O#@`j#&{mXo3HR6jQezHPk*)iw96It0U_Iz;&vr*5~~#dxpVW&if`zQ6lnS4R!! z;r8mU8=kVUBM=?E3&w?59Wmqtv6+Efo7AKD)G zPHwos))X8?>lgRnbO3~Sv_ikBKbilT!2d67IA+BEFGVD+$bT$u_P?dn{LgFBPh)-N zzrwNp`*yX)k4r_iNz-v>l#-%(t04dzT~|%^9O6`}+8) z_oc(FSxgk3O7%Czc}-3Fv{3-HnQtvPMtyJ_Jqd457(G){?v}=htMRkw9-=ihEttsj z)<%dE1i?QE&ncZ&m7P?w8~V(rUH;NiRqg+;rwA-osOKO6yO}(1TK@jw+~XnW0X-J4ewrx* zcTm{8zLJN3!G-{X8wOMI%>7qF-`|EV|l-p_X6PNy7@VYXqQymb$nvu6RMr%L7YBJ`dg~U`)Et4+` z(%6AmGikz_n6S$p^pd}cf`=N@8_5_w&^aJjx&}t`DyKmUCrPwJp8yvIlm1w2HEIq-UemIdQY$Sfn%VZU)EAWN$S<9d2`EVx(DH3O{ktQLvvzPZ za|1*1R{7}9*zt^QWomc3-i;@S@S46TQJiLEmVUo-O+|fC3!}e?`qo+(199!cAXQ;E z@ddJZR_^Ca1~fPhO<#{DH}0EH*QKd%ozb~sPL_ma`)7YsH`f@FRgpdl zPqrgWe0GiO^FZE8A1{*TWR7?EE&ZHgcIT@berfTnmMv_ClFgGZ65VS<`wT28N1Epx zXweG2V16jJtT_arK=-Jl0#YcgF&_(p0aJs}7byR2_LB(dpIH9dzCR77lMzRg$n(lbW=Ropzkh zftClut<#z=PdCC2xbvGC3BJKb(U3t>Z9RA!1Ob4Z2n{-t4`Em+g0hIKV~`OSO7*4l zq%x{C{9v3fcIy!FSU=Rm$5}iI6k;$3Rwu)3V7|h|&0G+hDea6R@#E$9QWWs%&c;RfCTr>#LGq_UrkIw3+!!bP_rAWI+vEllfUiS9!>q zyMD%{_2c|ZB-3h5NlNrr%7r8bEE=baU)F6&^h^R%5Dq{FrX|$S&!HT%iCBcz9fEm4@YaJLkPLL6G((9upEAf@2q0XvQjtG=PBfVJ1`!ms z=cCr9> zOydSDAkTS4lS?xzhJPz$T96_y#rVADfJ#Dijqph{e~?zVHj2-S{yCh5@x+KrqgO$` z(Iqd=$?qy6d2RvrqDj>$8lg8TFLk#v5;sY93^F5=w|Y5C8cwEqjz@_)tRjsgE45y1+deqEnlc8veahVADwMPZVU zc&b)kk(2qLPWg1&M_Ot;nswgtT1UXeqb1ZGM=}nQUT(fS3wxtoQM%1EE?nH)+gzXK zF0WCsEZok$YH#f4aOoZ%%`Q3ZKCHkj zrqtRTDIm?c@K$xvZg3B7rhO=*fb4z^7hc^sD@FOfianLWlA2Voz1k&RiU~4E`g7n_s)q;K5ToVes96oc(0a)1ZI7R~~un@1R&nW%9cHb3^7OI%%Z2nXpGzz}k%uLzc zI|gqtX%K1_)CYYZjWpB24?3&u(@ZX<2WT+b7hg`tN=0p5Q7k9Xy6^f3+ZF_Da7FHMixE% z;(p6E#1fFZ^4>Nlr zT$!6Y?BezSnw$~MFE(0&Op%p7F&75;%FRlRL3+511S$ zUM`Xxoolj9&+?6wdQpnLJf&WZF>nO>hJwBvqt`OY)J{h(On(Bt5cp(Hv}7t4ZxHSzuotdM3RDHHT+;pAvUlRB=58?M#Bps)H8**tQ{)R~VjHmvu(N79|LQ^^;UXClRW~l%mf1$o8@fIoK8I%$>pHcJ9hzTCQE0yr6k%g)zo$w)4 zT`Sz9u0!GuokQz}rvzkuB?6;uw<~S;w_7Eg(dV*eoeC0w{3R>RbKZ+m!xxG63b?Gk zzPB9Y^{m9^x7{X}oyLtU=Lc;EEw7*L;@-$6L6DzQULsUvF`=fT>ufOfaBfLfYQN8+i=Q?9Jhnd(kONA(P-{B?lk{ zWitknxUz*`klUlq>-=-w6DnCCN)x{$EM9$4_r!kOyP7@0OJ7en9Ync4X%dBkfnY8L zxGF^Ak{(UD_*S>5u#7Ujb{X_l+RcN!!ZqvOqTy1N%kMnJ!01_JZnD|08xj^=4`f*pRQfxIs9Zr_Mj*lO z&-cMpA!{<{>$JkwQOX`Gu^BN1msYmj@xo9A6D~@MWm4oAFglfmUpSR-tQ>R=V01}2 z5lIF6VciCNtI)mXhUsb-HPGDB z7P( zLYAFbd252894$`cM-PG4V9x!804#I!PklE2kEO=7Oh!msf;BEUngH_mwx2U z@o%_m89f#-+MyxpHsEah97CLX<^O?Ww4bst39Z^&)X0(Oy4JY<>vnp(BXKZzm1|?0 zQ5fw}2t|c$US&(vc$28azeL*~&tuP$?*%sp88a+Bj19?--8O1^{ORlD4O^b879XRj z-!Zh=toT#jgA9z8>!pDV#iTe2+v`TNzuOQ_Z@cDUipv_$IOncZe~#uLLMl7nfE%u; zwJA+@N?o@jDAO_an?BWzXsF$y9jyH2`c{SGy)`!7CF#<5TTP~$>F0=!W1pcPhk0yM zyTj+>AWROZ$&s#_!e?#7O^l+ym!T zd!qi4w(tfNZC`T`haHz2h4tyHY~q)Dx=IQ*6sKKuPf=Yj{?hQ42rI6R>29@@1_}`l zfW^%VYr28;jkqJ(c!?Gz-m-BV8|iV1o-Bo0LIw}x(x;OWMYG{?&T{+1 zbMoQ_i)O%x;&avVyiE7O)%B&$Oq$6T8k*vP+YyItEK+2B4@Ph572& zY3A}$CU~`3CW3>y3yj^HZa zJbEkEHMy;wod-^EqBc?OCXp=SjYYF?^n zt~HWD9ydUynOnfV5+{5kSJCElL$`@-1*bX5YE|!b-&c?`qmAg^Zis)@Y1; zYppZxSnolCW}HHN+cH@X54=>Fjo@a61)KckwY_(a12sc;QJbt<|6UA(O!MrLqk@*k zu;W%cqSc55 zFF~s#;4hy22KAR;thYA->@7S=5a9~p8Ah)wu6M!I4I`zQ&OJ0B3!ysj6t|5Dhb_8< zG9SaQ>z#B(GrO|j_Nhbew>zrEm?bcPGtUjEG)LZWEMYIY-gMw)jJJ?Qd2>-~Zp#4h ztljZvaIuCP$qHs0H<_g<2G*}6=MgBvj$z;W5P&CjF7S#SK>fK5^j`3wkw2h-_&rI0 z5>aKL&pJ;b5;lAJK&H^;Okol(jss6VpLrz(9o@kovZbT*tluueRDI{9jtAwnxw2Z= zcCf=jD9$#I7e8c2nr0#N4EROKni7`)Www`{oi0jb8qb#2-$Fb&!{)h4<^;;LXud-c z`CZHN=V>62FuRV5xzi;}e@QK_U-5yQ-w84=mD%Tm@NyX<=lMT%6ERw_$LLY71ch0;#4 zWDAk9le8!;zcJ_B!$EPR`8^(=@B5$6=iStG?)zNlbzbMX@AJIx^I+X>Z!VROJLPWW zYq7Gq%;@qS{?{v(uK1d( z#j@n+LUXpg4=W$ZcLpl3ZecIF)WY<7H*e1j?w%P(V(x5^-m{E*#d*)|O%e;m27)=y zbKTmfAoQ4C>CWr>QOlyF??u&aj9<*wkh_U>(?|IQYI`;rux)e7p0n*_Y}!7jV@@q} z4H6}8^XHIHwfp|SNhnEf{IGMC0?SmEg`cZMPFsHobTZhao>0fBzpnAH+vz^ur=fkk zi!ZSI@AsEoHLLmfC09SE;0NRgp{V03AEZN{i;LLKvMx@k2u_vDQuKE{?NapoOjgIh zJ2;)pNYW^U50M6QJ%feM*z-H&k4q3oo8KY+H^1{=74(0l3L0&G2ZtZe@}lfBwFBSX zJP^5|J6B~<9M?~kY-lC8iEp1!=YbuD`so=KddfAOPrDL2m{+REu5dYWe->lRlBL03 zk{<#?>z{`n79cM!;y7eA?dMKQ7T2)mu$OijN^*UhuRA_2SbB47TK~d3;ezjJkJ`f?wnq#_Q{*$)x37wx|22iZd*>(9288T ze_tr6X4~hG^9^rNaHl%uN86pmbL9~Y>x_)PI*8<%>Z$kD#~oo>s=;YV-cz^vxY#9E zhYv?QRP#Ui;!1CAN~^#6Hg;WsLPYPY+pFx>D%$By?Oot{{pfX*!?x!d19eoAyp#0# zGa2sX2U=8}ET69+=)AM}%LT)lqVvu+YIR#ZuItGq(LKN1x?=N7RhQ4HfiJ{zpzDj4G zaPWsgXTmYZyb@;P3too^yL(nDl-RpSmv%CD<<>rZQ>!i->Ub*5I={KM^ZdodvMJ{m z_?3rCiq=P{G(@C0udRP@?u7k@JD&aV&u?xbJlwNmHqmowPeFWA!VdzrK)gT_<7R?;@Y(i$(J zb62Xl9>?yK7Z$bq@;EPMzsOldnX4|lXT5FWue0|0Kz!@)!|~=D-TDc@BxFv zM|N0T%9FV57RkOL-RY&Yx;aivgm3_zEeP*_GOpvv(#>j>zfBO`mLugo7=(QHuDSP zo!J`askGnwnONLQ10pMC3$_aa?eJ=F;%$1nYrkcX&(9ZSQRE?0~Rq$Z`EQSSiudXZ$VdHN%2*;T+ ze&I^q1KU$VNbKZK82j8B|dsOTN>c}DeCrt+v|_TA*j=MftEPdImIZDNT(U7MTm zF4rMud56Nze218o9dfwiGjGVpx17{LhUqsnfxyR1R z^6*P(S7rCGUvIjK+*Z`eg`4-kyCkX6f6Sv;M$~%qoXF@l?#OjWxmD z<=l5n?i7Jt-xx-#jsE{n3Xwl4K^$#Ti1^>6(0}F7|B-Tt{2khnWII-PT;&k;6P(kR zTqcw47jg&4_E@zm?Cph*_uFa3Ybm+O@q64Q+$}La#(O%LLwtc6AC5JIm2-E|k~vKY z`V_c5P5xcjzP%AU9~-fGMT?%Z$Fl7`)luK^{bqtm<#pdk%bR`8l35W(PHSQ_=gFwn zkv}cLvHQyFP-DDWdZzxbhd<9dp6UO3J>2JP&SM!Pe&K}mvkApQCk|)NDy@3hQBhUg z6QY_*boz9h!J%sX3BMeRiluY{xI7NS)V2J&b|>`P-;}S*da|`pLH)+NB97FD+sa+) zHYX;2A+|G~V>ms%_h~LZq4T;~5yqG}uPTA<)>++y?dncKw~mqMv*%R5!LvTS@k_@p zHK|!}?V0-W1pAsV=H07|4}a0lsJ?ETZX{}-Zf5+j*qzygP{i=FBHu-qu9{Tjecd`Z zuB^mad)_uB4*o;#&J2Y5(;W`=*LC}`A_{a4CKs;67ANqB#9%75#zs=?{lNfp*bt>v-+Dr2YF{UM+C z@U3FM<)SDTky^8>KeIZ$#ii)R6X#P#VqMXEXI{Nd>Rk6~!=A(CvbvuoFSeyEGjh9~ z5dLG~wFigDn|`Dk<-bXib)MrTvDJR@&8I{E^nYcgd+FX^W~S8I9HC}$ zFPhk;{3grz=k2;&uG?1Empv^%+*jJVL|3&$N#0!|ZH6XZ^{a47w>P(iX|5&LHD~;? zRzc!zuG&5LWizZE9n&@`KPW4i3@a`uXpEW$3>PYeF}44tX|9Z ze4*8*L-&`@VHNcK(Nnum!8iTo?cH4LI=6K#-XA{)e@cFDpa+q_2oTR%~b#v(^$?o3WrK*y*&sr_knTeTkk@+s1{%n z?A5$ZJJf}3CF@oOf7z2HV!Z36byD%YH`Jf{wH#U9dZX4@{gcu6+M{AuSFh4-dY#68 zXHlqUpr6-Gp*h{h*n1*w1vr$eRQbM)_q_Yb z>2%zC3Kx0p+tnQyba9(D!v<;Y8$A5nJ&L6Djk#vx%K#gl#+%{e*U%71#HBTJP|kU*g*)8s)ZDvo))kJoH`;P`sJK=fe3!Ji(0Ea}c*DoQ={Nml&8@r0F|4(GLcFrB z8tay0LtFz48fUXLFc&V~)NNe+O7~be48xoa>*hJR z9Fym_;5|M~si15B=kr@ypB>}%EPXWAK*WjHe|P@jaw^;F+FA1i`^JG9ME{=A zyPdJ3hMnxvjw}1av-|8@1^Zv+C6v$H`)XxtIWH$?0!B&QKe+tB1|xZ`j;|tNjek9R zL0x_+CwV%?Q^MD3ori5uy*ByMLokW@(~Zc0jp^!YGboV^TOo3YFo z<9}w8@Vd2WtV=vshVJUAW(hlPM(4*}Y2>{A{i4MtEj7kXm#u?0gnFyedoIQ3>853T zH*)u`x}KM{w3pRl*pwLKY*73bKAZp$ipm)~vHS*jK*GLx5BW@FT1q-B_6`#Hc& zYDGp|M$L7>cD2XhonLi4wUe?)RkdI33|li#@H6@q)qBi7kXWE3UhrUj`&NcH))+~A zWrVmD;MQ}v_Hy=IyH^A9dM zD7pUSInmSCOg+^Mi@!%GT|8aYT0CQ3-9@X7-{aS3dOg|bZP*?BmYx1-(<>`|udd~n z39KcJ9hn<3Rk2s^p0W?It2p*-#y9=ABPurxHaa+A56U`3@2hFMvsQtBUf)}ttt*(! zcD`C>s9ejgl$WBc$7#^=@TvXzhLlyjZ*RR4W{63Mli^R3O-=45zKu=}4{!9=mffi7 zaL;?)$@Ll`0ZZyUf2?rS%(?U}V10}#;Y)ExhG74j#}+>{OQ%$%%+p%%r0Y7jme-Gm z;vV8hp2UjXD4amfa10o<*MgdBr(< zPWe5dKJuoPKO8UC;tmB_v0r##MVkI_^(9%YTMplgwZwjj1b#J|Mem@-dYUskP2I{U zTE<5xlJ)1)6lVu5ddVA)M0eumCq0fxJk{i(?5wPRxnKB|UuM35(?yqC4{|@P3@HAx zKZfJXl&-nASf*GiRnHDR9m8<;kTAPx*esEgmd_MDByZsOZ!EWYkT|Pxg-sAU)Bf%} zkKC5^%2Q)?18wBF_Dt)QcLjl}hF{ zA6i;D^SdTv%CiGp8>f2)^1M!p_O|S*&f1rC@a}BOuBn#1%#|~_lyUEti!ZHSR%Z)_EivZzg%YH+pgE1>sOj z<|=jPP<(+{k1KBzz1F@~iTfL-G2>50>{_x?^i!x}N7?=rSFd^=U>f+R$(Fc-CH@Oq z_xElLf4(Tww{zc%-6yB1X3o*ptFibHLjLHvcGC-^(W;>T{}VCfuR)MTn}{L(Hxct+ z74(0k3Zkr}9Ja*(R%BdXgNWIp;_`|#cm34veFbZC50Ss*Io0QMMool`hS$Y=@fWf< z=P`v=HeNYsu9S4=GN#xn>=|8OLg@DSW&t`fE01}Fef_ZiOaJS4C$@)ncJDvJ&=;Ai zdVNLVC46wz9R@mYfhujM-jEsz)7jJaq+@z2RNf!GdpL&KQ)^b9l$*VNB&%+J?w#t` zmdJzezx-(CSv5lp=RE%{-?sL5-5z1gU-r^1{nESs7vsEs=Dk1i8Z^USBb85>@6z42*95P-^{+$TtX9&>ezWNA`he767s(?TrWTtj=-S_DH$FT4 z)6$n-jqhUR{(jq~{G?KxoLBD}&l=Ya@-y?UoP1w%|D5*T-SZuOo!Yfv)uy@U3LQ#V zJPP!uo%<|BFV4oWCf(JcD&1^T`t(Ih1$Sr^F5cJLWg~jt%C*vQPs(ZU_$BH&7IT;v z*aWI9d0a2!(UH~Mma_bWC*KqQP&@iX?}Zqb-K6*Mw7hxu=ZBRpxyh|2jq_^PFns8* zo3G(`cGhn9SgUr)c~|nV{W&)trnVV)KDs4q6QdIJl@3ZxjTBq2E zrqr=!?48;4#aN?@RGC$JZ+~Y!UV0Hu#P3&@S?!C@1%9o%vi{R#@fZ3s&FqPi)6##; z*tKrX0@LryzOl1D2xZ;0!ngaF!1s!}0_Tpd+F8G9U%lKzKD(^Jk>C{I-}^tcm+>16GcTnd|*}Iy8^WSTu*f zqpfFo^D6v?4<*}9=UGS{U{sSmm+SNRdDP|)mn`C*yjS$hKdte4vmdY6VkMG5_4E$E zWUco{rhU4ma_&d{W72AZcGa6pA*+P>J$vTW(evRXLqAHf4|+e%H}rHwa&1W zj(cZw_*B-;bHje%Z>e6u{q)r$qfo+hk-*~UAlZ^eqDbp1zso7sOxS{4>iv{J(l^Pl^79 zljAupG_AnVvhuviyYwSD$|+`3rTtv3Hosh)E1=-UyxQSvj6E^AbXwB1bjFJ2HMfh7 zKRGVt(QuSc|c+Sj)qzqmweP=_HUjca)LL>i+Dtb#mL#$Z=LX#nMcwpNZWR-p6;`#_|Z;*3)wTQ zl6Ex6fkRrRVVBIYs=1f#gfZb#w_nskI;Opn zDcbUvfFrY*-a2}#qC8t&D~#a*BkXpk><{X!RFQv~sO%WP6c{!gE2$owrcLkq^s{iE)4fLCfZ10<^Zk2I9{4)d`@GS8 zfw~7wr;LhKl3LT-3WE(7hO#`!ObD{sW9}y8ZN7&tc2_37&fZV=9=-ExSQn_lE93$kO9#QlO z%H?785Le`RzUPalSy0I8^o~PWBAxYYidT!jrmlIjp`5c@rBWv1{wAxIZ>CJ=Y%xC$ zxvpy5S}y4($(&lOpLgv`!Rsv1yox>iN}gAaZ#wR~kz>E{sRl86WknJC+yk>$(ZA)R zw~p*xksDrYawYyD-Sb>jC-{${-J(b9lO%QMk3@-sO&u63$Uk1_BIKCgIl zS4*sNc&0KxhTrC0An(^kC1p!xi;kb3Mafoone^pE)WrH%-Vb@H5_B(G#;7;$tM!k= z*m_BEm%O=aVyy!7;#W%4wJcWFVA!*uWX&Eug+o|9k$rC}Q&J@vcWF#J&M`mOqOz%R zcdKY$vx>}@{AmVmye({g*;f=*8H!Zr_0gZ6Glh+RIh{rwokP^KMBiTVJ)f`D*(B$` z^XCYsm#E{`*>gYt_=U%!FG)Q=UMKHixxrTTYlgu?Tc+Ec!N1rAHKm(<{C%Iq+~{%O zEb2{`E$7!yQgVviGWC;CPw6S&y(_-mn(ZLTyg-0n6MxcvU$R`Eh+pUHD>w7J-}~In zHoTn1Ac@_$`fT#{O8J|azchZ%TmU^2 zE4l7c9*Kp^D{P8YnMig??sFonitP!u3#Z>ex{3Ko=wW8A`(lH z4z5T(mVlMZXo)GmSZd~*Cb0IF!Q*|t0t*tk)vul4P+#26p?5rbhJ6}bHBd!p>M5i;U8wiqeyq!EOmL_e+uBIaglOM)?$>bq}UqLU&C_@IZ z2~M2;?Pg`8PN9;&ZX!mVLdD2B+Bv#tJDHk6duq$Nl6XW0UU3cIcY-|gIym?H-|l7q z?OygjynC70C=;wW9EmuN3Dz6%&_cR)s!ED%%q+ic-R3*+%RIAW8{)&Z#^prmpA72c z*HXKl_>$Yk0Y?l!Lmqpq*j3RmD>G0|vZ>jEx5wvZW;VlFldJ%>2YbFh)th&n^f+5i zIYZojPdb0)&BC`*H}&(Eh_CHr{MMV@u*G2^DNBlQwfYqHxTW^n-9Dc_>b&f4!+5;C zmH)-tr`-K*YkR6)7Sm@H-M!jUA9g+eCi^(U^JXOZ`vw<6cGll0I#c_wP|D+_e5Q*{5rFNp*Im4ZBjb&thUt;qDJ2Ws;26-;O^hl{!^` z<=L@QC8;k$RVJvQYuB4^OYB%5Z~L~OPh_X}^WH1A&y^plW$)YTDc2#NEf&!qe^tNt z^{u(@oZc2+tvVyvc_Q0`{4t2lB;H)BH*{N{X=pUpDMfFMe|~y>6CJ04&RWIn&dTUr za#LF0yk1iNn62|rlz;M+g^C`}+8?_9)VqG=C0pnXCB@gmXOA`B{a%(ApS{J`onFzn z;gImLrX)vhj*r*4XK3ZBY$mR6PnfIkg2f!rm$VXVj}KSRty+2MLjF^)hWlIdXLDqp z`f$DF`NC-nBiPMT&eZC-`$*g&iFDqLD)3LUYALW?I#u7^i?lAb2r^X&^- zpBHfHi9yYY+$C(=8>+Zct#pm!>KQP-d8!Ok)mPSgO0hV^E#|Gc`{S2)^?rVIOAI>yq3%Zr_w29BwzL*`ZOz5^UGkfqWYNTG_bcRt=7Srj zwmp{1+ji3b?6RJ{Z;I<5i-b(yC!;QXM^-mCZ&`k)EUSFpQ}t6X)+Arx$?f7iVez(j z#Zz{zH(OTZ=Oru5I1(3k=$qy{{+)gwE(U6|UrE^9qtf~645|9cHsgvL7nFt1{!*#) zJ5buf{Bf4_$_up{4;nspqHkh2I|9T*_MgIxzwJ{-Vx{D<5tv#;r+<6ThzP_o9Bo6(y&+ zjKSAPo;ON48~nG{3#cW_@wMK_Wd2@q_t91F%nIL)?mQcqwZG@j-y3yUsxHUjlX<%4eNe)dH*FsJS^Go_(=$>`N8wm$lfurg7`ONniH#%$HY`AxF>9;pbHO=eel%ply-Ci9Z&Qa)jjJ}pjx20G#P@$N_AnA;; zjGN=Sk`Wub*-*#zSl_1AHLDr*=c@;;IHF+2YtJmi<$cp!=S1y{#fMJ!e0r6ZbmfF* z(ZfspACdx&y3u{IYMZ5ez;Et{0GH4DoGGWzb6GbPer;G-I{yWuIl}#3oBrp5J%zY4UR;JV`PAEY8lLVb?W{fR ztsvTi>nh&WCEq09b28SK@9U%P;@NyD8|2vPcw}E0*~eWC780mSnH`k9M(;>yz>%5r zU+IKseyw5g1cHa%LrHE zLhocdl^remY`IeL$!E(`)?#y(u6Pq7w&~0hmEIdm-}$~&I{6}rKhrfjZoe9jbp7hj zahjXmiMDZzn;yA&DxNrG`|!zpcb~eW32x7n#C~DVm6r9ieQUf%STEIj@rzZtWLd+- z6&g)ymy#^p=hg1Gl1)vv7559YE5$hvv?K{3Nu5}VuJv}IXc(3=B&i>-di7h5(Tgs}fPV7l~{xkXF%8049 z?E!)r4pQHPu6Z%W9c~G;Z`sP|Ofpz-@E6Yp`@ly@%pp@;4;|h9jPV<k6+tjZ1mCPrquGLIG#;{sld=HtVHi^7}4hI<7~*yodQP)~a}B^bDqkzFm)w zxZUSxDKTQ(czlC~(w6ANK9;4N@pK0>x{~Ri1t|)*H_DvKeJ`Lt`|MnLTuNHuWe$TI zr2C&D6EEtg%HOj)*YZR@Op@#M4Ca08+0OayxNBZ?o6jDVHfotJQXsnMn&PHI6{_|x zvgl2+o=>xC(Zd?f$Y?xpl@QP5Epw!GzMdk!QAF`&_klK><=(31c?(aU3f2snUM6$= znD9r1gqS4-$yvEtr*h-WH(w%UUnwoeVonZ1VP(*cTHc(aG0DG-M;tK%S&E# z?WzG=+vYB`yklOA7g+M*r+wbL_$f@A_qFQkPx=l}wcFpQVdDsqvFEv5iH1I0r zrF_#)<$t=Wc6duHLEwhTwBY0ih05DB?3v_c@&(f+(~mY*NDApPtSwk>A!=f9K3kvr z(lfsqUZH#m1tLN9XRA-&_CLtv=xw{G!12CaG^6lW{*W_7lZ;(X3pRct^k{$5+4Su4 zUO(@e_w{1Sw$;()y_f5ap}VLN61m%_rT>cOnKM_~uJ*qFkh3=Y_QUp$54*mpX2q0* zC%;Np=i2E$1F9$(`VY)-m$LISaSZ$_lH5B=PCAao!hf3 zr-V3@BU`DvXj_PGbVuuw@XZy!-d@>}ZB&}eQkS*s?dOUMC;TIty2=YLFu9m@?5dWs zzT_dr(#xfFwl(Vg^}7xc?Pe#s-J4VsWif^35_aEeH|1B|D>*6=wmo2x7j|c_`yuUT zDq0W1&hQ$34E5KrPO^MkuHrIh)g2{F{^qlqrjHzj*WWBOQ|UF_(HygK?NKK!mgNHU z`aMlN;;RI8K1rN?tebGnYuZchayi%jV6~a|*32wa30q~B8f1H)y{xvf-?2T(@%ao9 zKYJDN!)t|K?6}8Vs+8doH1}!ivJ<O-DT(<84{Y z82GN=P0nvj&9AF>;7tFt(dooG-ZZ`gD~g|8j}HC#y3bN9%)9+l45JdG;l@MF8k@Ir zgtE~SlIwn5P4=kGFkSs^#*YATw^mJ=i%T;0@yZ{Z-%`f2qu4jK*8qwJl*@7>s*&g$ZyUf>}9_!Gu`9U2F*=pSE;f-+^=M1UnwQCGeN|x zS1j^n<>GC-!%%uJDZYwjxT@PIe$!k=vg z`%?vVOf!R|9keWVdodj5)GxV&|D=vFm*SZDq@$Q4bvxGdTPgeAhgVBNOniCk(^r+< zj!FOY@oroBuRAgGUTA79S<+p-6O!d#=0m51+k-*g4u=MQ@?bQ|^ku>1H<@iE=G zYYGg#Js8tNCO!DKr938S+nZ```qhTieeWcwRaU<)x0C+WsnDIRBGl9;(|4!a*t_f# zFRuDX{d1osmp!&UxyaLCb21|QqYx(4M515#cKG6Fzr0seJ@@*SyJt!2Vs^>hPwR5N zRJk;{KE@KRKMYOelHasF^23YHmfh?2wiIDfN<+@C|FY3=n$j^&$uIlyQMlb{YLMcQK)dwvS&6d*Ug(}xTZ9vop?9pvd^RW;T*Ql--W+DWkc#uFIsq1-nG_b zY3WkVUAv|0`Z{Es*p#Ebzi#OXPvoysIQ5iUVDVY8#;ZG7W#5LjhAt^=RXS;UH@&J+ zvcB|92A1#MTy;{wzC*zh_3PSH9twuMx@e`(cIWk`go~^ivBKTnm}LP3MmG?t79q3SOpU8oWx2_1nKt=xnS5=jl1c#~=9YQD*X0l3E{{ z7XKl;+Tv|>m*f;@%S$&B+IGvW6cF8^B5bZM(&3}hCX;?_vG?-Isz{y%QXgawyGUeR zu3MPy}^1-Mk^ znBvGVosy-NQOR7iouGRTqZIb-($*VCw_?+;6K3j2 zCWoyK6feBLEiTL<;JN%fId$xX?IqonQY-~MpWl7!^zS_XW{&5jQ$IcVl^QT^`()}U8WFlsvp+(vl zx~0|pSG+-o!0~8ftHOrl zt$W$yJN1um5Nikng#Z& zUHzLmIt(7(kAJu&EY;+3*-Ok(Am0)*2Ivs8>rGS$oZ}SoLC=YIaw^l|S7PY8TVN&9*GR)1^ zN6z`4lgx2^6;vj;G4rt44@SD2ZSr~FZ}xsI66k)AY_pQ#s}6TYzl2(8phBV;*ZuwA_&~vV_`+9#(6@#W`iJ9hOzYTg1IDPA{ zkr?-B>w2AjcS5+|H%Gxu!|jX-q3M>|tR-Ier^&zQ-sk1U%5kq@W5oG3(HybL_fr-v zF|~i;TD(lUm$mKc*`SmiS?e2#$$ai*-5)BMl+XHQy*F9fplsa6$(a7DXt(j4hLaDS zce&&n)33h8EOLc4O=#Y#hB>^;0)*J2F zS90p=uZzl6$BgeA-G8i4lvsVFO;0R1C+T!$SA3g@>T!Bmi5+S#Vg4C9>N8l#pRFt8 z)-?@fb`zXE?Zjf;xTyZrKxviomvqag?b>QcYS8C9aD~z6a^U?(HS7%U=WmPMN_K zw^na8ERK&4yZV8in6@!~Zgbk5jj#MGH3SZGFBUX>{a`~<0^hwyGN(mYU*tR}l{Y-|$eI_#NFZ!2=rd->)=)A1z+4FiX)6RO8oz?2nc=K9d z5#NJQhlgwqVPU)T(@vDIUt5sAES%M;azXKpZjM!(ZFGDzKm9a(*>RIF?QFAwlTLB5 z?0(J7x1*=o2uln@+#h$?jZ`T!kH<1Altt!L%Sb<=2w^?q&4*+LYQ%n{QXxdG5_K zGTy%L!KN=H)d){^ff*a6J>7^eb|{`}QabW9@2fE11&cuXCyDl#_dH-Z8N9`aB&hDk z?b~j_`m@u`*i!w77mW14licliHydUvM8c-_pUMh0Qmrsy&}^Knk+J(*C|vX?yMxHYe-a^#RhRCwr1 zP817V#u{>n@C+_m89B%x@rVjTqZ7nOj75cqzJ~g581dgQ;(vJ{H#6<4@KLQpc%||i8&AED9?IHn~#dU}vIk|n9-6v@*CyEU-nwczBE5C1gbVr}HIX%O*z;@s?hNA;lWT9tLm zR-difzh3evVJR`hIB#O`!oH&4_Vv;ygZQ1F_iZYEcSK~b>v79$#K#*cWkC+-jDn zVtVM=?|thYtPmh%#@%2@Dpl#0sNK}}PX5-4_W5f&Oqq&=AC!yUdu3+o&m3`SN%Z?& zBA%PO)Uvf}%x-oaXAk|)~;W8p~y7IlenoE$=_vfZ@h;ZjHb8z(DBf95efv zJ7;1oauj$4mI;@}CmwmE^NCIB)69a{#3;7|?n0Jx^V{whzgyO=5L2YT+*IgUXz25_ z53B~!B|8jtqt?nr5QCip7Qeq`l^QJY#$#^LjVp#F;wv*EQwdW;?%l6Y(YnyjXFWSV z8pHVNkr92iN|Kn7^we875y zX!@qvy=>}eXOMFsPkWzIcWr?r1f`kI5!St@w>rZz&Pbawg`{^9C zy}=`Pjcet61><8Ga)Mb8cwQ^1L zFR3cKa#cFrWT}v|{mZL6YTky;ylcNCT=td5)>Dt?Yj10~$Dqf~9+1fSX~#{Lwaew|(N{zoHSxAL;sTURkT zHE9~pcfaCLH;Fl0apCR@9i}qfGMVgV-1Ta%86Mw-c7HqEFOWNB^ZdhZqdj?slKUv0 zJcEP~b&6|L=tqo4R74m|WRd@cg@gIP-6l$5eZYP9-!taFXUzZbGe%^TsVWgs(Q!Ou zRMk@%_ivcj@AqZ)0{8cOJY7CH+%RD}t$s)CeByk2<2DniyA_L+8T^kOJ9bIa2U~pX z5H~3|&xTt$`N_q7iT7WWdujSOh~l~o-<$W9s2gjou`gLmcfPEufRFne_}GTVB1Uq{q~Eyv{VMR&^vZ+ zb?hicA~K;8b~Mir5f&z!#%P5p`P)^459|L-<3H2*Up9@QZ=rN{I$7{wHk#U5x;Z*n zuu%Vt@;li`v@FcYw+!??38Uy@Vc|gjBlP|VBV*@o!6S-=9>V0mG~G%56GYl#WOtel z{7X1c&D6@m!Oe6qRNunR&e3x)SjNuOY{y`qDqq~DS%h0xlmM{}-ON1nZ z$Bo?o3Oy(_nff62ArDwcaXq9AXQ)>lqxVd7zhlG9uye#!;p(k zIpnx{|Mvo;^!9Jt8n3_xGJ(FW-wO=B@rR~v=u>q38b&WL)DDJ4Iv5t=U^s+>;Sdf6 z0tW>KhXR3tU|3)vnkq2(hoM=bp@UIQ6#YdsR20{4&h)RkSZ_`N);H=!9et&z(zP2<&fyJguLkEd_+=u z`?qb4S74LvV7LJvK|CTU*+qXk=mmz_!Ei_i!yz0Dk8m(N!ofh`pumPX7zl2g4&A3@fnXpoIC@ZEBOHu!$Z_@l?`tqhZ~wNf@d|9R9SlFh!6?@T z{pp|=7-|Q@BOMHna4=DXgNY&>3Y`BBLhZ~xufxe*6(u4#?>FwXPHC};Dwu4c=h>mzfQj&@ObkGY7wS$Qw9ZVGA zU<8DN!KVdJQ-Huhfemvo5DW_pL{lAXlq}J(2BVxP`YVDI^Ed@Y$prege(zwEPY)sl zMoA|6CQu6u@tx;!jUwSsFN1k7%14)}^I!x-4MspX7zm^a41@v)1HnLG!yODh+z_zKh%5U71(4u808aBNP!Jx7k%o`3kU zIT#3r1qPz24hH`)G)pveFvJ&W{;|L)nV3w0QMOt_I2a|F=$k<8V2BO=|Cl!5U@+GV z1V-70pXy-nokIT0ftTGRgoA-Vs=z=fa4--I1UB5k;KL0O80C=Yvos+GLws-GkD2;= z2cu*H{dxV~!3M~lVKc3iY@%-iy~0pi7`)LjRbdDV6GK=SWlLD9g@M39g$=VX5DY5} zL{lvc{$Z%XXlP-Gy`2BC!YG+QfA#;Qun`YQ#D2ZwKOfWzL+rKp$98~+!MouBg~9d< z^Auu;DvYu-7*$~)kg6~c3Oo!11BDIuF!*po6h=8D`YSOZ4?}F}_s2~Ay@ydUf&RSy zps+!l84x>&ZQI6wKIj#O+QZ;22B-=f>R|-fjG?C_fwFhNpuz?Why15Og&{qR8Vo6n z8Vx)Q{4i8uH1sga-U;ZhI#SK!o2h^@fxfLjDQvihLD@v#23my?gwf9C6DZ5@$wGmk zLjq+X8~KkECX4{DE&~c1T8B{sfx@Vvu!m8Dfx?D)7=f}%ZD_R$9TI((kXLm53PUW}m}pz$ zRoJ9^7)(qJ@i4^lknx`nY7Y}Z?O}khhdm5|<`WQTJ^_K|6F}gg!iISm2!<5~qNyGR z|1dO5w5!7iloLhoD@ZkuQ(^xA%^y*R(TL3_pl0(40I`P^1^|1g4#Pqx0(%%1;b9<< zsxS}=JPZT_g$?&G_;5oMMng8AKtnd4K*qR1%IXgS2pm+{Fb@O4u);tz)x$=>`OqQJX9?*m)2A%%fJs=`1h@GuYz6gJ$$;KL2M4{1o} z6KF{16DXOORE5D%%h24>$ipZL1IBeO@Qf<~Q1(D!2oD2+2ku!j{kY(9(t$bO(O z5DY5}L{mL%1fCD|Wn8`g!z}1HJ&cBUK4H@Fd=Uy3f*2*yh|edW=JN>vvxgN1AbZHe z0Add-40a(%VIYv|VIY*MFt~^V3LEZWFz!F(KBOU^PoN>6PoSg`{hjlNrzA|R49y*l zJdCn5U|i<{JPdI5Kw$_E1B^YSFo4*@3LEZWfb9ng1HrJuKs43EMgaN*8Up$R8Up%+ zNeA>rU~FZG!e~V36HpWS1OVE@3ImuuGKuP1c?t8@3{|_EUd2f$+O410?Cy1gRO9Ij!C=B6YfU<`a1|WOL!$9Dm z!iJ3{K``uLAeySM5r{s4a!B-7VnSm{8Y23HNk{ZW1~;q+??Y(B=o3&g`UHU5!wLhS zJ>+2kvxgOi@GuZaRTu~b9tMJe!r8Z!C>N+!_XIluQXEd2U-i2qYo zJfLp_^?Vp*{mHo60d*K)?SaA&9tJpjNMQi8hdc}f4k~Pzhk;;NVIZ2Sun~|xfpW-k z^&aswnUIIk5Yi`1I;4*sLGKV~MClVyQ~Cq|+rtV2s6FIi0JMh{hVU>DNL3gJ1s(>1 zfx?D+*a%7=>I;n&Mng)UFzJ*&c5vr9@RX!v6MgPbdl+g=p8#lkpfH4o0n#2)7y#`d z4+DXN3LEBOAQ)B{h^Bhj2uvU93;HZg$irxe=@TX$)5pTE?1nrgX~gLhP;>eOfZM|g z1F${hVF0y<6^8II5J*)R2n8Mnf`P(@d)Nq0ALECS3LEBOAQ)B{h^Bhj2u>e5B>F5Nulo3& zlF*6%ZCm41*rap%Sjx=$&`KY=IOxv@wZc$y`b2=+Lv^r60>zY-Hu*g$Xpwykk`*rap%Sa_;vNQFTo zPM?UH(Lr$MK z>6|`x1Y1F*WD|YvP(LM6bNWPp+XICmJPe@rkir0I4|x~}98}ma4+Ful!ay|D!$xrW zP+!nzX+j=GLr$MK>6|_mo*5eAVKn0OiKsb!BEaoog#p+e@-Tqf!wN%q7zm^)41@v? z1HnLH!#!*Srw{doMhc@Lr%#-8P9F(UA~}5`fbAiL0n{GyFhJTv9tHvj6*kPnKrpN@5KZ;45u85M7g{N7ptpb9 z);PzKlg{bm;DP)Qh0%!9C!*%`i2%2UJq*D1u)+`?21t8IVIYvIFc1nn3_$)sVZ%La zcoa26VKn0O ziKsb!BEaoog#p+e@-Tqf!wQ2dDM(=;kg6~cN>v!r!@yqrg9;nrVU$DCNMSVO^of(s z>ElL@l4!)~6H#;eM1b1^g&{l)p!Sf$0BH{^Yc zVKl76CY{sAjT|M>h|?#c=JbgGw}%x5V0*~J0BR2_4B=rQkm_L|l&UbKhrw7rW>8@x zJdAQk8Yzs1oIY{VIepy7Q4)DNL3gJ z1s(>1fx_VEL4}R*Fv=lmq%azC`ou}+^l>9cNi^d0iKsb!BEao|!iIVn3Bl=;5S%_W za8O}L52FS{3Zq5?g@GT2jE5+Fp_RgD=V4GL(4W`u2}In8)yz;f(YJy2%{K`(r%yt1 z`XmIWPeO3|Bm}2V4Fn3KhQc034F(Du=3(G)g9?KVi9SmcdGihR_HWx7-&-Rn6X@Ie zgTh9PlAvs&Zv(x;&~o}DB&Sb8aQY;G+EbpABtY6z>M&~Hpu&cE7zl05^7GL z1aNy;VF0#=JPe@ru)+`?1_G%H1EIjfKrm3)a1R^7=|g>?k-})m>60d%)5lZlZKT2m z(u+QKsGpLkIeikq?SaBzBZ3qLP8{uJ;i-SIQs67ldr%wX7Jy00J!vJazc^Dw=ArAwA zg9;nwVIUaxFc3{u*a%J^>I?cTO~}J&$mx?Nozurt>TQI=XvFE0P;>euB&SaTus!5q z0JVn|hN#0pAXQ-?6nGd21_~QqhmGL$p}x>aVKn6QNt4d$<0!fq~cuKvE zP#7hf=+6iBQxY|&PXf3-tS|uELmmcDdstxz4+DWzg@I7uVIUYNY`BMwAW)#bpwH5T zo{}`=^huM>>ElQ2fk>ic6MgQ`D-89VK9bWX0oWc=7(neIg#pqY@-PrMsIXxk27+OQ zfoQ6SjUZ4+G~7=gI#Kjj1gYk6df23M`glscjqor^HqoCCYK5WZ^hrogp9ElgSYe2< zBp~e}g@Hh-!aykSFywyvBoIBQFv!$~j3sHfpFVV==c6gH4X^lklqP9IOHw~-2? zQ5}Yw(HM62R?Yg#p+e@-PIaPXeSpq%aUj z^)L`hRTzSCrA7}bY=no=kkcp8kkcnkI;W3^Yu=#>qmhT9=JZKOPM-u|dq`mbwTCR}+1sxYL7f#^YnjqorUa{441a{8o6=k)P#%{x?K zH1aUioIVNQ_CR6qfDlp`K|r39s<4p+3Jv$uCsBHf z{+>tr)29Xw zDhxRvMh%8Mj2aCT27VZtr2$(+e;*=!Wt?M48t$hLWdi+q{b9BOu6YM@2W1m|8)!XD z3^k`OhUE0c5S+dkg3}j6aQf6hpfGAE>|xYkpfJd?sOu%c;f7|3cKcR9y+waTkZK;^ zQxeJq`nLX{Fu3L&nmgKfm>7i{8rQkN-5Bo_ zo>GU20n{E=80?Dt$2or!NLjdq`n`w1*WoY%EC)1quVfu);tz)x$<` z`cPlcUx|q+Y`}5QMe=?qA(h9`eLX#eKCOB!wLhiJ>+2kwTBgk@GuZa z^)L`hRTyGEObo{I2kWpAoIcc-zrE_?^e`H7`eKvL>5IZ8@lb`)s18HT>5Bo}9w=<+ ze3%$O?IDE$(jM|K5ICr?VRaY?hCK{KQ$1`1rw{doRtlq`hfO-CFFLY@r4gquhMLnC zLvs3J0Jeub450R~!Vn$?0;viEp}@mHFi_a=I&8##`cPkJq%azC`eKvL>5Go6VQIwa zk1}YH_i|Izb~AOeV8Lih^SHUV5B!H3kFbz1mIb4s$zy41=Su#`(Fy#QhNc=1d8j6% zh~)uKG!~4mtk%#!Zq(rsg;8;g&d|RZv~5a3hg8cy>k7;i|E?>e82i8L3bfJvZ@V&b z#&4{yK$nbseW3ps@8y9h*xz+z6hV&FkqIjW#wCB(l~Gn0{JXCF`SOgiW&A(u3JhTV zE-Rz#n*Hy(^5?9K0_%>|l?jTLg6M0p{4OV>aF%0rWWu7Qu-t#>%E+Sh-*x5BmuD2J z>YsH5{wCz_F3>33Wd6IZ{5dP5Pyzp}D-_=B_gWd{HR!+V%Ad0`$~(=mx-!9AnL5Cg@$>d=<*MJ8D-Owe|C-F4IqAJEFz;! z|NN`I5a6u>e&3goFV)8C%fxP?v3o*0wGiOt?Z3?m4J%3lyb${LeHm~;ba(Uwuh3XM zp{zAU*OQ6*9AT^x83o9uQD4Rwl8H>9rkrqI#uy5TjIy+5towPweHmjcBr?kKo3Z*b zLFJCw6ZAvXiD%`{Rg1_dnEF^*nQ&jm7?+8R0yO`-zKoHVQ4r35)|W8`L?WXAnPc^3 zg32AMC!=fJSdCOQ?nXqoh7`0+Y+2-Tl^<@lip<$Iv9Angq9c3GYvGOu8<&N1C8rIvy zF-EOe%9?W8+(pDO#)?=PR+hvu#){ZcmeTzrwT#&lkuiJ@c9O|>sX2C9Xg4S#jxmJB zPGBx~qNYn6V+f5M<%Bd30Hsuv*4=rHG@zel+UK7z0<_1d7WE=Vgq6D~@uPq07qzl{;onXz00P z3|w(EoX#au_DT8u)BB|TW4MT;AteBPP45raXq4~k{(r}~f1@iCu^5;PsZUUw5M70Zj_2&z@9Z zUdE`r@id&&g?3T?y}#foD^qB6jmD_F@ieStbQ*=IFw+TH4%ky9JMuot?X@o6EpYMys`q*6@&ogvtL(+TG21;2$}e zn(^41I*@-+vv4z&Gj%iN8L@62$rB=5B}`VU@TU|87nUKJr=hK4C+}QGd{a{dIcGhz zS={6`D>7o`pa^mvc4)ig#rTtzWD!a&K6E!|5lWRxRrk<#$yD;BwL9V~1R|6Q<2UW% zCav8Od!mX^p5UXkD}t3)*WMzpHEC^+*vk<6duk^_9@;MX^V^fw?uh-Tv6P(oQ#(5>c{dLWC)aTprQR4e3GY@u zE zn*zL;C3ai zk;3zc;Y5s~zg9Q3C$}Z9ATK8^Eui3H>afGk#zE21&DzFHaHEB($4(ZElAEcWjhVEA z6}c7>CNDX6v#{UHBO*p(!RW!AAaBF~{k{?UUDn#vMccxSXEnx^Tzyzzq%o=(M~pkh z2IGp6!MI>dF%B4Wj0MIXvmIlHF>|!HH^uD0xM8d@+89lY5=IRpk5R|SVe~Lg7A`i9 z<`_o@3yc}Y&C?O%X6<5Ofw6RScfnX;ENwh2Fgr227*`uFj4Z|j<7(ky;eheNIAJK+ z!DwI{Y{;RzELr;51IEeJ#lpeP!qN?6X=lU&{n2G0>6l#@WwLV&WLLq)&H_hH=fI22p*Ifn3%H=< zf8}Q3LcXMSY7t8Cl0ZQJH5+qP}nwpZC)Rds9cultPdKIdYL`!8l>&Jpo9 zpL`?5BdnFZ^Whn}hSp6qJX+1G5UiDTpMG4$2vcRy4?TyUN@wNlmV2)`DVGUT8TkzS=V??9MN0 z-&a2`uJx3dytpt$6qJYxiO@qrrlXnuL_$Ns4$q59^$?D-i`F)(uI+$E6c$lFFNhs( zGorh7b3NJ8!HQ+)?>;@Fya=+VXBB8_eh@{IqLK;e_J}-A+@S%Vg3hLk%y8_WYf!j!rHTj?aYTCnLd< zCX#KwaEb{LDUnO9Dczy%lQ5%9fVGMsZAi1C0W)H#lb@!nP@q>hIUj}i4J$n5Yn1dw zFM}z)+P7Z!DZqJ(-GET$7YP{Vy85C>pD|=+2qjB}!ZWmyFgaHCaBiA+ zmRu096WZ8p&UoW?l62S=+ufCN322si9k2$#BJ9v|0H#o#QO6i97Pz{;uSfwVYD&I2 zu7{?mi%=a-gXn;Uoby}(`@7Wu+>BMkksPhHTxV08?FGqR8Z9_;*!1?v4SA}c&gV1_ z?5lIoEVBK{cNkDU$O*TAN8rr%SrBi=*m>DK#t!#t7bmm#q$jqd&Sx>#m746QiQ{B< zP#nH_pC0s1&K|$~-|9LD!}5!Gf-oC|NkgC!UPD29#LsX-@1`awJs~O(1+F|Htj# zf4y%UKVJm*pi|-RiJcwq$1zWMKrqjJcEWA959@I2#y8T)lujbs1B=dKP~fVrQFsJ^ zO9QLjItC$%6KXFk)1M2>7PyVlC+rROlOTNb-$L!9yj-oD5|Itbt4@`|a3h;p1;yM>7L~q)c7WYqwk_Mnh z+s3pHv))MYBbWl86@Vxv0b4jyENsf<0m*+nvn(-B3d>V`KSD2sZ*oxMTq!9z#a1mg zYkjmuWN1hdt;ftF3OMXTUMt=EPIh5GeQJO6Qe5fFIR>( z9-t9Vk@{RPMI)=p<&CBZYll{dV#N4F0VafXxBm=4StfnO>>#Z!lcY!KsoDmXjce-} z*{a$W#ON_xjNUtV`zKfX(65nu&!D`Fw*IfRa&__T^&Gkalf#hU|%upxD;o4#*C-oDS&bz6Q=s|wKO5vy$ zTr}y)Qz!}>i10ZH36k#mJsyOSg3If&BF1R<*YhR3T1d@4eU5K!z*-1`xG*zn_DLbW ztUDS6GFV53r{>!Rljj@QH>j1QT(jTAZm7v6)kR3u_H=f4s+OZ_Df($CBwKMJ1O5`# zvY$M)=Z4>$4PQDvoHxlV)A<9UE*-5~7!Vk==zs+aqq#f2?4aNYkv+>0qw#|G8lX6S zpR?w&oG=s}18x$-;1w34Jwwr<;+V43>ejxM=;z5v(1z2e;LSR*8yIWc?{Acb+}(0{ zsTa6sZx=mgd8YXJkyg{xyHQ$`QA5br#6q#6d^$+m%`-&%G#Q;jVZgb zrX|gGfL|kli3HrHob)S2HMQkiZ4ztpCN;E&%Ad;!BzMB^qj?A^n<=6oIQq?-(i`fw zD>wc7nVX#k=TZ5E`;eQU;x+_HY*Vl7qW0>)po1JpYXC4kf7>8~MEVKJ7v^E@2mmA_ z@IMLR2@6GZ?c!#nsmaB{ZKHm9e@soDX5_B)M7K@ChlH?rI<$oabj=@D6s(Qj^#%)Y$;CsK#ibwxv71o&-Pprr%J~FKbZnH-8b>U|wR^vEP zAtq@W5yAOUva}L#C@sf#j~LxbTyiIZVD5a9+Jp$iTxx4NeyRbQWi;NrB?1Lww%99( z;9MRJ$b{E=u~?`;2qx?=;R29`fom7i1h1PZ;>(3%k3L!MDv&p;{*5Nhq8N``&=dl+ z75*gJr6AR3d{4uMhFOZO%l6w(;J4pp<2u=YmjUFe*~Mz~J?opsm*Gxgn1cpE^{zH_ zP^i?SG=geQ0z0Q=oSShIt@GhJ%>utdmgM7Q4v9j`(Q&t1eN*_9V{R-?Yr$@oKAetr z@o`<(K84xYqIfo)E2y5@xb^jPF?tiwyc}c3K~vUY_BvDrvTRU;54J7=$o|}&Vz;O-qoOze z(31Ow&L$IZjkF$PI}sl#d_b${g|NnzJ|L-8x$?NLH zS6Nh(+NzE{3E{j3f_n`-Rzg6)PjY6k4&}xw;GW8r;7?2KE8n3`lZRB5EVMj0{w9xT z1YyQo=3UJ1T6le_^4eNbUViEv2(CZ)a%xvcLL^K!Mb~;jn%_3fs7uiq8gGgs8fPJi zlE#Yj&w4di|Jo$l+)arLwK_9FQv)gJ98V^~dvv^*X1Ws<7^J&n)q78t5VZKyiUtX~ z=_^(^(>1u#rR`jwNyZ$WOZ}=KEEJUZH;4o|PoEE#28l=tiGrd4vA88kI5|i^GXPle z*%ay0fdvncd~MV;VgRv01{|he8^XrEC?y2h&|Mc%t3b0?+zSo>x_6K zg-+ZQ5%jER?x8o7Z4Ku^xM36picU2A^Nz5M8V( zcfr7?>~VXIo&wU|cyB1YAyEva!mz%U7PyMFz!YotN~PjpP>x9!QsL%`_QoC%l2h$K zoBT!W5zsX4yQ|(GNVUc5L%7m#L*ua)i;aqJ(Ms#PWgNW)r=cs%IvuL{GHOm=SZZ3i zsXByNTpC#gDN&pT*PD8}12ji5;_Bh?Y|}#HJ`6AFp1)3WcX){UI-^*u)ghS2L~DC- zHt~nTsFZVxH>0}gY_JukV0xH+?kU4GW-vlHY=At#qfCHdc?Mgp3I%UL>_IYz;fj>@ ztREmixmeOK?ID7a#Q*dMW~8`Y54dG`2LZ%J%jQ$4*#r8v=O+kS3(p52c~2+{E2DZd#x2l2=CU^gwjI-Y}sdk;Fo;pkJ+5)VQS#>Y6)zlDIqLojWPTF zgXPP_s7grwTu1+1THl*(i?NT-08dchVC0o3L4JooY#~C1u5_*-R=bBZSF5U$%0om=XtU3jw#~4Q0Zyke5&w zdzO~uTH>hDe{z0A8PExm1F-@o{!q!>|EXcHT!sf%X4mzZ1usgu;&&maG{S6voJlIZ z+JcOc_KO=c1VgxUgJq;SX@K+l45iNP?Q) z9N+q=Z0(_@wV!?Ji*7(@Mo<0+Jl7%lqa9bX`tg5gu`&Kob0qcs_G$~32xY~Px*mGD z*AaVB33K!Xr0i4@W}hty?|mvd1<2krUxbk4F3gi|4=D_)B7?IngIDt}#GW}$-g^a9 z?c+SS4X8p3FWff%Lj~#(F&PmNQ3;Zozo7Pe40%X}yH*0dDE$kdag0X4*ayRp4af8& z4eT1HkKkYKLBs((api z8)H0duCaQEbUS743{+;d0iWMzH5+Ly6BIBO*Iov$IxDT!TD9$Nda{^&Q;*0?3_I?6f4S&3tHG)yeoa*dvk9bTqV3O`B%={3WltQ?e@=C6`?R6BE z?DUg6-w#0M=*oeLzJm=LTa$R}h6``ZJWE=SwguwEpoCsj@WkTiRI5SH=J@MayP#vf zrz!4dL~yzAgSfU&Wd=^G$xY!%OEjOt1;dAI=Wony?q|7i%7z*}pUK~>of$j%CM-YlDN0ZFKKG$VvtN4pwc*?MX`H*u@z$X3X0YKTfzh$E{*f*` zYCyePQDLUMuP^4P4K#|h=C1ioFkjt+yUHlkFfq%A!AX@pKVq$kp4mIub#7;Q7cN6v zA%_Up8W$^m3+vT8rPN$+*^UhI4DxdJ@Kp#AFuv9~-X6&{mar?I|V^Pq1Dw2bK8HykduXN5JLLSj>Ch z)zG4PG%yZIJSj!nGz0V1Fwt6cSC+3L<43ar*b-uQd?83AbFFX-H~%vM+vTjT$5#Glc> zIFf_;fB(?X|BW=WGyZ7rf01U^pP&Crnwgk6{!^O&CBgqini+pq_(z(5-dGd-Vr2T? zq*+jiTE@cG!p@fVA6owJ#7xWhBiH{RGy8urW)_wo_x{(kH~};B&%XW#F^m3ivcV56 z+x@7n(+@Pe{1CI{j}8B*@eeWE|Io7Wzq$E8Kw0evi-mq%`d^0p9{}zCpFS+}W6}Q> z<9}RO@du)nf5=zXmx9nWf|kmva6}CPQpO8bJt>fI6%e5QM~d|6rM55^E%AD4+w)3UeLN zvn3ORsDe?=(=3j|we*|)7*2Y5u2DYI8J`=UQ{NZw-ItHgYqy(2eLP!?utCHsc=cY} z>5X06h}fue|`-yzj3?*7;hP&To5tP$YhUboJ|YLX`u9D#(r>Afsr38lr9VpecZwcCi;6rx zJk;GKo*`a5r#EEn#yiemk7DNJvro5u1LHv^*I+})+O^%wM(xAhDrgIc0;Kf~$Mc|n zOsntsrDA1jk}ZoF=X1&IJ+ugqfKHLrx9kKX2#68FfC>(PW)}O3-X#9A*%SA=mm#vS zYs4)YR}+s@MX3&ng^$r2TB%GE>86&Xx9?8dFDc3cRFi0ZVg~NmmP&=#vWk6TvSkl;`Hn#(8KxB(Z$G zTWsuGuw33nm`KqQiZ&VjW&*1RSxvtAt-0O@3OOIHno-1|anGGE9Cpft77*|&K>F8v z_+9|bc7K;WN!iVl{_~}7Bj9r25hzf^s3OS*_la%)uDT9YG;O*Ol4Kxhg$qG z-&-71$T7C;bFXR+c1VX{z_Ia+%dK6j5KdG$M<6nu)+e|{e^_l`I_WzDqZZZY(sFGcf^Shg}J3LEbc zL-O1{czcyw{#u>l!mA-hh?4EF*!wFpE`^Z5Wb?|1_F z9#{3-fN&dY+7l!0Wo1X#Rka43O@#pcPghUWmCF(H|Uy7dX zS_db;kKg^FItnWhvE3}CVYN8ZV4%@IR{T_}QLB0jX^E+3+bv?nH?3sty9^NCQq)yf z7WwW5DFeKHBFyF1+l(@ebg!fAB%6dvma(^}>i7#-4ir}DS-iie{v_$c!@5O#w~K&` zgCkN&WaMnH1b3jEl~>Fnrz-m!mo;A|6DugQm3^3dx)uMHZACcARAY(Fz|g2cXeZO1 z=(?gLglmCe>t*V+;a)vh#yDonIYi!Hy1y*UJ0e}q;=EFZs1;^ zI~&J3>?yE-z?H=Du%dQ!yL5~&4PuQTKB#lH>ZSly`6NK?AqL1aY9~ z`*PA?8A@O4q&{e{tEqF)%zARj>`%3ZGg$t5`n|)sYE5<-m&UfbLVtC+1(lbu3vyI; z1EVVRs77;K^WCq?(P)@n0d3yIOikI;Qq;-OnZQ4W<8GwnZJ5Fhnw2tn?$U-L3s&sS z7d?ix^(?G@ufv^}7P$5R^?K9a_jrHr=rEzPc>?)NmW?&bCcL)IW)_THP7Jse(9+{&OfINn zQ5ISG*8pq1N|-&(N-$xtGNM^4lwd8EO#Lj*;5?n?Y=`ciG*&8VDmgF8%FwcH`PQ8d zxYgu_1S0p&2(w!PD>U&!qx#5ARcbWMQNkmwSMmBu+>N8?hwH{By_drr))tBw-u z$)u9&6AxUhHujfSFMG>`rrX^&8G(>*I^v=i0-1%Q1U@|2cxExvyHEMMI3y^Vos02H zW1m%>we!M0Y61~T-X1G(6p(uBJSIgzhjiQ{HY1}dn9DC+CYJc-%(9*WC&G%KS8Q!J z6MA-JCv=nXqRH&|bqSd`sd+fW1VTpGcPsNeuvyXf7UH}*-f)GCv0(zk_(^x4JP?|h z+dFH&Z?8`9-qV_UY9cJl`nhs4J@;%ahlM*llAY*QlY^kQkkc zXBVEcQ@QY4pY@RMdX}{lNEj!-h1{FLSd()M0$_6-HvaCVEgwlgSZx1s?Wi8!PIoP? zJg9I-2L%znc1-XhaHAWSfZHbui1!i)A~^yQu+4{r3a?|3bXivEyr3dbb+g)DzOFc& zLO)&G_@{Ovh!9B`tgzF0J2x=q(*zV2M-k7QP^uL~Fi+E! z^fz3zTlG$u_7@udZyk4_OD=EgLC+OayO2sV&oy&{+=tj)4kuKLsG~#(+8Vl{!~6Ae z%G*$p92{az*iTCa8047i+WzxS#ZI?+Jq+JK(rw6qxq_U;U;Gtq z0GnZcjN3bwiWU8bx^2e~VKjPo`j)QTr4&)!JcOs+=4kEbk|A#P>#vuTnMwS?^N_@3 zrSH|^ohwyLhAq4n{qvXBNJl`NZ-g3@?h!CT!@_HJKsn)=0T^JV4Kkuyu}Rj6wulJ| zI7~UMYRW+rC=FyBWT=0ZkO)*J&rzX*<0midQ|3q;U1c;)N7jPA?#K(}^X{xZRWZJ# zdsnUt5-N%I1>&4+VIF=J198nQVQW5W3Rf~}a;k4j#&$z+IhLKN!;MMRZmFUN&5;@h zp{GCsS^d557d23R+iu~~5rv=|_6ymG4xy>=ia8hK>2yN&^|JRfHF)b| z_4kdC>zXjcSu^WoVLSWoKsU$6Z3ZSX4qQ~z9pS_q<(cR~|9LhX$&p4uJMlMaPY(O7 z{vjr(9bdO7WmU{dvqgi0&@f+Xf1h166b-XdV;6~D+sF6ni$nD={I6R742i34xt^c9v4OAXJEpe5q`X1dg6g-ds1lb6)P4zmK@BbI_U<=`PcU!DFH(Hj zJ4iTEhvNBsu(LvXefsH2W*7&C9kD+VV*Uc+ja+2gVA7j{M@q4t9buQHxTzV%Xj2bI zu6}&{y|fTZ46>WspQZdSlo8cH)Cgz}nt*y1)eZ*Ej^OL|pKW``GjryzUyfVI%FbEV z`s(Dgzm4>*7yNd?Ea1X5uU&k?qRltLCK&cd)9=88e(U5k$^x63*NhYKGq#KI6D?~Y zJYE7uJc{F~lFL^X@fRerBY_Aa2sa0ZL|WpaNG)Yo`+7Y2-5ka1PN0IMtqT3Y0BzkB zvzm7b;M+D*z8iLg44r(8)s*K*c@lJXurF(!G!cl-)}f*{UCy#x@sAbV^iMbGs}>>W zU9b1z(;`8DY&SuH-32|^0V}pfZ}p@`$n}#F!hEYlx_=QdX2}U8mr_FCveLrca5$`* zDP{HWnc?99&!!YF*raPTXc2fwhMZ{gat=(z2Wk9h)H3pm^4ET4221^&LO*;ihk1Dg zumIdzrcoN0baNbGuH$ASm90m_$0-K}s=7#m9!S%l(vVZ8lf4sS#HjwMZJ9W@g1UJVRF}qYEiG+*9lt`=V%AH$wD#vL)=Px6y2bL6L`4{6o`8iaVb1Jhj z)KkFEJ1skrewV0OG}KlF{J$b|s`(F;@QN*(plWhPwjyJyW^wUPO~w(C7f`sjWJ{9| zen8h39h*;J?u?-F&tPr#oAq(ue0_o6Kt-KJ!~x6124*SxZ;Bw?=;HdyCz9>$1a$1K z#O<-oR{E2L%&8w;zR$~V^QXHFDUByzV`Qxfg)pxdT2Y^5Et0GG3r0#lZ(0J>Z`Zbt zDzdl>!s1va>O^*5XnA@B5v$ZYg^{xtBHqIk+?Ru(0q}nn#P)CU%rJ2SK?7W1V!E{~ z22aS`=Z`YX@3-Y9Udf_RxS>dxjWehqCV#jM><3LhU38t|K^D1R#Cv7ugNs@h09%>Ls@jW zihckGX%^ow-&g>Wp>6T8lGsqFBj@!2#+>0amBPEq#&`2vD=ZD`>XE2`!zH*GTfjPJ zzDP%fWoZiDXkHN~p0@WVOnj8qZJ=)-?ceg>^+LUHWf|uLtk-K(nEH8prF#DgK_?@Q zZ15=O0`&U+!2n?^+$S7aTG9O{Vmv?X;_gLpiY-dXp30hSf84!+B&7Yw_93Ho<7=G7 zqk6E0(0I*8;exTdJYf#lrdzjM?ShpvXrqj+$(iC&99+R>&nOxEpm34jspt=VlSYtZ zc-Z`^#H^4b)8+GDc64I>wxqkg{!cEUwvRmcBv-SSY}1%WPA_n6!+?-#GMEXtp!qx| zN||t(^c$KHriIB@?f9H+d%-bDu32nqQ#lmNHkGQt#ESb!q$_(&ts3&AM9-qo_;4!? z(h2C~LFM}zIJD(egRB0It}j02)ek!*6AWBnk!G8Nhqt;$zN8TJ1c>$uYcFPE9RgGo*^FG4eWX%Qz5Rt_4q zohnaAqmalQZ6q`DTDt)|vdcM6a1wQe(X0nfF;an-sb5sa%;;6Z<)O}m)(#^fc|c`L z1p9w=C3ZH+w@sK!i>f8P7{Ekt(V?#Pp{S`+)wFlP*A}Ww4HX%#E~by^86@k|D8TG8LSYB}X1|SI*{D{5i8meDJuBl?^xoc&LZns{gk92GMJJ zGLsZSJu#QXBQPCs3-t>b+|Wvs2C0YeGxNUZ?Z0 z*GtB07l1nkVFTcNMIP!lQkyfa0qf_En|Yh2g;V_7mDiy3)Hp90DGH^1aKe>(ZKA93g z?MuVt4Gu^g%s4D=llMIJfmBh++E;uaDf2QFU@7y{*zu1V|0K;SKS{ItPi-vs z#lz$99&GC zoPYS7Uh*eumilR{P27#F4SqK0;9_7+Z*Ah_MDJw%uiNc^4u<`+ma(Dr{~G)|Y5w;P zerEsKgrTE>k(J5MVY8pu`9H@0T=+RwW^7_(;Ar);AESS-Y4)$fXC{vH8vg^r|L4&G zj{o*0(f_9cn*A61zi9veseq1Fv64sDK)WV$M$%I-&kTrlHM2)kL-dxWJQ%AY5_|&- z7Ay=bQy5VC&5tlAOpr$qcZ-4=zRv>{IEE4xS=ROnAW^LzRTT-3lfA5oIa#rIIlO%p zef)({>Dqd(y4!QQb5rTm)3MwB%hW1p|JQZhhFf!7ZSDn_Nfi^_3axxSJuj!W$+iIp zUG3sal8$0*$Rc>QUhy!=b`e)q4GY~FrHhwwTW{R&0M77BoL})2vtCwuOxqo z^5lRCmdY!hh;$p3BwFiBFXJbf1`_oWtrAFwSM$p_iVTMq(6FeG&5H{*jO$icp$nB%(C zbX1fpsNiB2D^e0yESqU8Fr8RnryGll&&(fP8A{Cu6S34|aGYSvnqtQc@2P_zOBn?I zx-pD>L$Q%$5@kYqVQgRNc{mpQ)pJW~K}2gea-=LRd7j^dqhrgh6&85UENhJYkbO>& zHpY6KgtlNpDZ&Ut{t2u>rb`A= zelAvMkrgod7e63LYoW0?l&Ay+DT<Tpxh^5}KG+la93`mA^t|4z(HAEN*~iei9$)uv>A5alav8j1fnXGMKUMf)HA zW~O_8Dnq-NcN}T~rO~Y>chWS_pnMdH(IeqJ1WLXM$cUN%uMPiPKd=rnAaVNAttAG0 zb^S{Hui4tlIqxAN)tHmc#w|XZ`7VT`DDC)3l_Thfz9*{JKN9i)vxU0oFHuGN>E0hR$BUr4#cg{8n zK}p`*yVxNN#*Li6^qrh-LPB{I%lL9E=Sqt&n4d7;wRIdS(!8_P*WK$>Cai#LakHrD zB?t5RV0ckbXwZCD3f5@euhnQ@541T}84{=sPx3Wt#zeeZ6VE;TPIYd|eu29{S08V6 zLiRT9F}$k*hL2d6Q!L3IrM6~uQGnhpvtHwId2|0I_REwh;T_G0VNGST*uDG8sNswJ zUeegy7K68Yh2$6sIahRLT&@fBcQ!~L_C(*K&yKGgrsoFVMh0xPo(h1HOT9n|8``Ca zr*06T!lK1+0LM;yc1I!We!vt}?^=n^7^{k?0$z{$;)0c>J+3A-i!prse8rwn`hp^3 z$FCh{uP3j}kkl%w)l8+klXz4gkc>oX>qPU3@IgP7)}-+k!Q_eyEgm0M8Q45-f9qD1 zhfK|Ta+)JEYhwHkKa^(_V1pNWm8<)(LrBp*c>Qy*p@#{D1Mm&5g%?kJM1Zruqm;_^ z?D=uMi|*jB4%kt6B8o2*n-tAgyaMXdb7|A&-JNh1=U!(-*=_B$Ci-&`7T6d4 zGRMwZZ+#>&C|jnvBv888j~%u4?7%lII6q)x8g2cRwG z1U1jl`X;LRg>|R-Epc-7k?vyA>F{Uq2}N9c6yAo(4FmDT?{h}uRiBz;sV}`v%$>z)H$38D%=m;h z5-dG-hzIfM3}wrs>wy70;;m1;smzI$;a>p9dT-HD~hwK2WNkztaR9?&nc5zMK+Oi<`%fOsN zNK@A5@$Y^1Z+?m!Z5e2GnJBX$n9%;sjZA_;nyq-hHUdlcS$YG0Tkr*NAY9gR^Hq19 zp#qk{4QFy#;S3SR_I!_Waw=QSiBp0^K}o@PpS0d96obD~zEF;a}5c$)X|-rV5*(6`Ypgqmr}yPeojY zELh~}Q+Wt1qVr{C(O{^kL$D@FDDf${fL^UvxaMq(D5NoS6p=({ZHNvL3H`Vt!lOet zVq&NyaTx;fhl{Ze- ze2$17NN$J7hmmm1{~Byomvl}gMDyIKAi3Hk*<`p+Y0v*Wk5{E)RFQ&(VSqXGKLDlD z;ZwsBZm@-)oyv6%B=>O(S^&it|Yxr=6`*Mu|fIi;!rMOh`(6LY<09>SZ^v)F@3z_@&zYa^A+z%@% zJ&mpw3>r4qhfp=XR&y5Ka$#b3$$h*#n0OIoJR5{GCy9)ZV??(}Ia*`k(!715Ug99& zc`_AJ!=iB+Q+M+rZnumT1=h!iMrps*HkhgqoJK)E=o6~fFoi<5_rQpcE6(#C%1g`>^#B}DC}Z}6ERJ1 zVyUEPXUJl9uk2CP+0m5cFhgd6iBHh+aqOlu_|3`&a6u;e(uY-(REQ6>J!@4^3CBvq zu|m`8?;pUA5bp*vktawAzF%vf0C42fmkRMdZ?`u?aF%JOpO1WqXBX_avJC3JMI4Ob zP6?!k1fn|W(ikjq%yd69>xp!Bpg5Bl@TqOuXT&o2IW+qe?DH`6=Sx!VTkV}Of&R}E zo-RU88zCcJEqZ&b%M1R+m!H1wSYzrCea|Mbwd3Y7YBL;@Ja!AIVj`EHkg~XA{#55k zLvKM!VNDKg4*)Rc>s>Q}^+hx1^Ksv87a%?O>k;gkTOeM^;&ko!mUF^79kG|M=m|4= z`V|dFkDeaIIwNdJ;n`pm1;#Yeq%>wr2)SC*9xu$>(yr3uM) zyPirlUqED{0G-qfTQN!n)>3na z>fxtg*~1EQ{PEWQIAY%M1y4-y{98ZUQT{wgn;~rL;A{b-d7luRtQ{=G^oXB&-4H*L zjl)KKWb6JKUxiU?(X(fJQ6jm`2QI||c%R|)4RiWnwx zv_TI{qLqXhK`$)*9@Bw;iKaq=piQdHWX4F|Q&BCabT)y)FsT{+lHm$eN|uQ@mBLlY zQu8_TEN0!op46$?uS#yW0~{L{vDCajg!rHGW4%GOkV%1H`RQlOC{Qq-_<{z2(ZTz5 zU<32wf92v)60`A$Slp&Y%^|Q@p~zJ*yx(34VFD3n=k${Z?tqZwqFMks?M-2?0*XEa z)dzR`DUHvi2z_E+|BR!G`}?A|v61l3Tkp{5+&GYKFRIoorb^(i;bn)lrrWW#RMksa zs!h{Fp%FJmpZ#s#y->d&^z9v-qD6h9Nm}kJ@4+VA_u|CHJ}xbLI;dP#eG@entBOvw zmDDVaL<&Q~=9WchHhCL2QGB<19s?F=o_wL(!UZo1r6PPptp~+4DbJEys98E+JG_7w zbuqpyu;q-+=@@PzWv@LU(VqGn$YE%lfT&ZuKEGaTmmSIeaAu#%L29$sx=Qdi0u*~~ z9ZXp;P**@-HO{u|%0XUwq}^>8hjHe&0|piPex0jAoUPqE<`BZMY=2o0+~YmV`#I@I zX?9!mGAT!mz1;cm$Wbya8hPDRG?IxteD z#A@UE0*+v(FozgV>H);2KxTJYa0Nv*-IuKQSUP_jh~E*?)>NXAE~~NLv%yOr-1&Yt zRtVR2gzcNDQ|0SGaW<{YLQCUjXMo|x`02>XF3Y!|9$7TZ*pn7E zokoYPgJSqEcT6`1fsDBrUngJ*bD6vQ@ z>}xdj4V}g`3Su{l43&_~#nTV#3?95HdD>`e2Wz24kqLhTvWYWkE zxy<-mz=coT>7p)oS}=^M<5Jkg{-d4NJ)SNZt9t38WJL1h;>dG3!ZD2-8*&2w*@X+j zwe&*`nMeOmCSx@FSTD3g4{B2ca$>8cX(}aK*)qA4CV3R>kWdB9KwHs9_i8h!fDw*X z&x74;@hQI?r#bC8>*sRTgCq5bkGF7a(?ADv?VC<|utDuLu-rYH8<-2aXHpRX-^Hnp zTO;HiJa$CboInsvrpPZ_p(!$tGU}NHb*2>rn=MsE(-(_&mse4t%|CInAZx@@>{Jhh zDiM};m`U|V&Q2*N!y&gdyup^d<=n7!D})w=DROf?sKLzr2x&W8NE8`!`VU<7EzW^n(Q3k90RuYM-H+Nh}(+laYUgT(ys*J^X zJK4kWrmc3$2me(JH*@T^MS2J%B)4!OK1xLC14nJIj(_AEsN^XtXO7AovA0uWr*f-R zy3QVNZr1A5YPQyE(YouV(nM(83o2D1@DDZMhn9{_NBhLb(9MV4y9wXngUMRZS0>oO>hr%3}b0QKqcNacP=&JbFJhk}9)ee;xo@&P;M92V@OCs4gT9aU@?5xbxcymy0)7k_cPo4>`v;G#k5SJ*O;?~+ zbdS==*0Mb#_%|DNC=$Pt{?`asa*CrBc1Q$jYn+oS5jqynvWw?Z01m~WaY{KgFL|5b zn+d`p5OiF~COPg)pW_R;D(I9>}QgW8FF%({FUKp|3`~OQ>I0 zI-zQqkFGMPlJwUvgQ8NS)k0|4mX+nKTH`aW^dej#SUoIX_QKKDb_p0NQjtpVNN@Avo*la5?XrG<&}-&{(fY**oQSNVGa?Ouyd&(b z%%>?4T;4>f#T`*wPcr_-`Jj8UpYf{uRlXuU+XFwh!tU_jAmLuLt!ft}9K-U@?ejJYdS$qg*l7E^+y&>9`F_;c~vAX^X;F zfR~D1{@4T=F-Qv#od#%Zkesi}D&oW-4jh@68a18~Nh+whxZj{avbuyA?0)63uaQk8 zY)nFc=6zZAub|u7NOLYJ?z_=IomtiHwwS=I4Smj`!2YM-d6^U2l0q{qZHeu|cDYKE z!j+?!Dh}drjAza`F34K1uiLGlv`2q+cTOZ!(Fop`C{tD-Xnt@WFBKB&lz}0nmtj z@1gr#Z=|#S5`j8)oL%yWq)`e5$opnVwT`H~;^<2K5tS0;^=qL)yiqUm+sDgGWdS2s ztIWpw&$2p3*cB;^Y)a3bxsx0x&buRA_~%DR^}w*CDz)JICCUn%b{4%Xg?QcY3P~0$ zQo^d#^k~svN4M517p_qtRoN7YUA_r(-RCPt*|^GSoD{VkhWq3t{l6GH$LKf|u5C9-W7{?wn~iPT zwr$%+W81cEqe+uAYHWVfa~|t^|0Of|F|)F=viI!kzHZ5Q^6%o%ibKalw^1a`fLL`> zQ5;0+Eq6Rk%cm~?*GlfzhL66)w;t%x5w1IOl{nXqjq_(;FJ1}bUib8Q9QA6LgP5_6 zu9~I>EyY}i2-pm(N6%fRPo5qw`zMRXEBY%W4?-bwP(be(xh?zzYDnyYhW@wn(zoje zu4Zs<$$K#i?lQFxD3@>-4Y=qpe17GQ=$ZZJ{?6NGUf-CB=u!xMq<{)?pyoAYku7q#H>DzJD%;i=o<|uN4Ozt@$fAgXvv2wh$yG~}d zVBbi0i3^h&-wPem>Hf6xDI*U4lP#SkR?4~ug^=HYs z$9e(G;ZZ!_(~5f;Ncg+NDgB5PNCjdn*r$;isN!>jM`Qs zz*xXFw{$qxXLbDz4&X>+Mi7(B#4CK_6E32DC10j!yd3 z+nU9(jo04k?M-YVnIhH6PKt@JP%FPfV_wMV$Wq=$ck9-4>Fned+0NDjFQJwPbcPc# zdTnUcA0IACr#_D8tk$3XqRfHpK#Kl2ga7FAOxStwkH=R)mK{+LB`Wbabq zE_xBb$(d6Wdhn@@ctZaH?ELd8__lgcXuqXsH(m;>Gh-46#|h=T$2PrRsE_QVziQg4 z8XYt6}5<5m=Y-vlf2FB?vkXRbnel+g=8Ox&aJ@FGa@k8CgjPuQ^Q zWXL%V-qxR|&B;sa(^q;qX?(hEdw&SdW(uNr-ebGmV>kb>8{L#tW3IRGaSX0(ZqgsY zDTdkLY`5MOo?kd4ZMp=0suVPFQ4#A^Xci1zb(%!PX)kZVByM}l9LBWqLak~pg{%^< zDwmhgT&;DUa&XQ}Q6iFF&N2K3!R2*N+p)@q+I0`A=89X1`P%JzJy@CCy*eE-CeFgF zABB+AToqDNy*kvn){4$Ax&vHT9D5sT{fhCzreqyX%4Cpne||V==D^_r3bBS$+LAxD z%M^}^;34d()TXG3KBvD;VM>Dop^f$qVy*Xh!Ki+kPNNa&k5BkfHXTGBZ<41zav$CK9kY;#pzj-lRYfF0et-?!d^xJ7vJSq9Y5`)EP(_>X3 zC9&GiIP3gbXEi|b8A?&8{D;e~%!SIU729QYrSvFRIU}XCx~@;P`>F!g0)k4pHIhnW zh?M1}naMC3@3YcTWaw4hcMd&Bivob%iyEbjiqGEK6S3%YFZehe*z2sZCh#pKv{0fz z_qxc1P>i@|RZ*?(#%zD#CJ|{#*CVMdkkbXCrl$I_j7jA1ogDv~<$_VMZ>y-cRHEmd zWm_Yj4`JWXbcAAqbdkZwMfTsK{$`5#P$LZCsdgA^LaXC^)Wx^j(9_!~-+E8Nyuxz;A0gl$SE9|&{n7CZ67 z!P5$E-Pq-HL%Hv|FSb;$I6o!fq%-i#3v6_lxQRt2;%Lt7lQ=g)o1@V_$KIDfuCo|B zsLNHF+a^;I1jOLZt!`d@+e+nQ^a4j4Z7$Rk0X$uagPp8#I!_7ITb%^|XqU3**7vlW znxo1yvwAe_ab?n_4$^TiLFh=2f?Ld!Hl|!Ns;vZ)lusj(PvQnphZcwMtR*13d%SOx z&r;jD)wYgUIE8L<=(fBx6y>Ff%;B4i(?9)d$ZVjie{p$IG)d1iL}hlis-4Fh)NK-j zYSKP2ra}AbwH9zVuHK9k^#nqjYbuE9&ZdCjEF5{u@y1^A20wcTEt87SwK}=9HBg!j zg|$90V+t%Hc<7ceAyN@4f*nVrjgzpdLuQ6&U!f~ph-H;Bq!Iv)BD#R$zzzPo3U*G9RD}PN2}BG!FlO&`9zn!d16umj&}Ut+dO^Fo=)zHZjz7 z5FxuerY6QFR%7bzf;7k#g$@SlF%mS1DU&*HgfabBu8F{uj(gAw+xl#^Z**03sYJOa z(qE_e?#{8NTL|D_R#+6iA+o?inY#x|G`8-0&qc6U@*)|FO%#R43Uy#xkQnbFgq z$lv%M`Kk*k6p7I&h>aIXBnuHzqL!iTDTp_z$&(U|3vD3NDTRNXJG6>d(`nC=3oE25 z5>r>LOiGa$f+`bw;Zh|AHk%lrPErCzQCa1&ToW%9Z!+xg(qU@j|@ByhC49pD+ z7b1eVO;1oQ?ihDG>SW-|MgG*5i-Vk-uha`5a!TfIb$aD#wyX-ME=9wXkhRk9P(z@E+Yx{SJY{#&__E0?33MVFnXC8oW$~oNzJy2G_%Cp@ODjlW5r- zR7Bx~QBJEpyk0IX`fJR#i{b!#nyD$^^Lp1P8UH?YLtD=IRjdpXPLn<1GFo4~fGbCy zt*vUj+p+ZeXsh{ro>TkwfMr7$q%$MYnJR&-IU7}!=wS*`l#6W5!6Tw^L{@O8qIaB6 zln?w7mn*mN!f7NkIg#fYW3%iR&H;`gF?Uej?j5 z@JAYD0L3`t{e|d)vud>tjK6X0^ml)`$~Nd|Q0qeiJcef&&J5ZLrPO z4lbm76;)TGb5+4F*vYL*q;!kOn-S6Ncc;P1(^-nXAUD0&mIY~CZ9cF9Xc`sD{bZ`% z7o*v>;4+3GaE0RDwF;3LljmtWTXUP?flpT>p_<NpB(eW~V0WbMZe8hkdkqrW#c{ z{WDWO@>jLx74uFy?a)A(s>K`QIQ{-M?LO42&)R7ukAv#*2I$*uKnp_3kb zvl;fzk5kyY{I_gr85K__jTQg<$61igf+W~B`{A|OFybC2d#<&{xL7M zCwGzOOf?EK2zvG>c`I`^j$z)laeLF!`QS?t>Nc@FF;mcWA3CdGSbh5yjJnoj+^QP* zxK1uIP`YDS?YbwjLFhnN>?8Zuy@xy;=Rq7cyE_sEU(nGz-vM9CR6-t$FZjl*9RkOe zI>#Gsx;I&0dL+a1}ICw z@t-)h`r(_~R5`a=5&slx&5S?S>$Xnn1zws2EF-Qiu7GQ8q`KLd%jPcLXXv;@w(_8O|r0maV)O|H+#TDqnuM%Q4vHA zo((I7j;ROB@1yP;Lm=)>YgO(BvI|4 z)NXCJeY-i;jg5{qOr?tj+K##mjp&H1Bkg#!-j#7BeII+kapMzbu zt{YK71ZyCzR$%-Q^C{x96oRSV@FDVXLAz67T z!75pYaHF2z%`Y2-=miuIMvBBDJXi63id+}&`-m;f$D8MFtFy^N2~Fqz07zP3I8e1| zFJc1=^d{?ggG}t$u7M zAD3t_+u|svH=nhK$T@=CnrAi)$iW0YfW(2D->_5T`~scAT!Jm|JsCWi^v9J5YVXDwAMVV^spQkJh%$KhDU}5p!VShmJyJLutyhE zB_&H!Lwp-McRO7ygEYPG9(a>JpzQ(4E@oI_ng+tQrpX01c;6ks!}R@?156=2D(n4g zuv^=*s@w2K+j44pusZCjc+&B75J%m#?CxWME{EI7Zphr2nT>2;6?MZo*EV3)Ab!%uJpO)ID^ z&%usO3H6P}kM{95jR;nJ$;Jo|2)FUaa!q&3?_OCdFTu+%nq17Rjt#@Ge1QTDFblN| z!19Q7DoM{uO3ub>%xkGF$OuaaiwjMFaJMnFcfs}vPfduzk4lKjh|SKs?s>3It`17V za0+n@atVQmbbA4Ikiv6TQlw`Pf$;Zn4fMnIjLM0}kIINliZ2^_D8@*O&KNYohI7t) zbVz&%P1MK(d&o_vHaLIuqBwwcfE|7o^o z`G=|Xx6=2&>YUmB=WPF54g43K^S`jwfVT55jDY?Z26{l51EApI-)4IW$-mF`3bud( zi2uS?|I=X43XppI$yWcT!Co3Lxf}lB*l+}Z&`yBy{@VE08~~O6t#ft(pwoa! z|4(tVHDKWXi+0%!pxgK@b@l*I(SKJf{{t@V3Rn-s0f_T&8}y%$_HTOI9l$sL7H|A! zqW>VZWdRg5z{l}h>HHh>R{lqr+Jf#cIJJotfTk9q0|4Cs|MS1>7_5Nb%|E%CnSVd> ze^GV-%CrA}r1I|_Lumzdiwej)HH(eS)zv2O9E}y|sxL*S zS@5P+4Kv#xZyO)Zc9RPr1NNJ24vzc9Uo=yP%HYbKPO>(?$2v491BBvHn*JRi+*{D5 zFZoSJld^Yw!4U*g*csl_;Ikh&p@{4`x(4fMnW~lY_@lFw=p{7r)iBU6=?;m{ei|j5 zrBW2rl9H-Lg_LZE7S{qv9~HSumdR8_WWW40DkK*Qi>REjlr1!xB@&A!rB&Yr!e$}i zlM&@5lx0q?wW1ZO7O0w@#x$JEHHzd*%msO$=~)dnJ|Ktf^z{qDSw}!_t_EM}qx$Kw z2GI1?2>ibc)#}O8B=z>wTLt1E_fKIo%Y5>4H$b96spy~9pRq%HXVr<=xeB{~1VNP5 zx`(-ry7!`pK-)s`rK(H(to}CaL)ULvvZ8BpH|1k{KbU27>~$RW0Chp^DERaKiRS8Q zrPKdO^04KLT34>P$%FQ(=5fp71@;HYhxilJ6FX{6FX|AGl%KW!dB22{24}y zB58SkbJ{jTWfg=B$vo?p*^XM2r}+_1WYLFBj$5_r%*y8*eE~K*~P(t6q2bt7BsGx|52~hy?yDtj+7BO?>%P^F3?Z8{_ic(<9%PUX*rD_!LP_(R}bijNRv4 z3LrEFrAM$kGPt7e-b=M<3YmbzbwLt7*%BDFPrf?+x|+;O1ko1U0xeO*G~bc1F{x< zn1|C?i2_OlnUK;aq9!aU?agik{S;EtJX&svm@_KBxn79_GNroSz+SEn)2$oPD&k2N zOab>6SO8!5^eoX{OVj5uD`XL*YuEJWUt)2AZFJy}@z9xEJ zEspd4n&jujZ*S%FevUG%RW7PinSO@4v5qBUzjzS~$3=$17bR4s+sSO_NfWp&%8)OJ z1o!IB|Db6SQ+?XlE~5}k73z(%bb)er3-9Zm2wZc=7OXA_EvmQ2jME)5 zkk}EvgDgjz6!pkXCp?7#-RR#BQunqRzkqXK(Y1Z55cT0=Yb5l#Z0C(>JIB=2mes`i zU|01KkK83)g7QF1MyuULefDebS0_`txC@%Bosv$n;1ZUhWW3{!1#Let1Q5fN~0;z6dWgOTgV00M8vr3=i4T(o2{J<4#^B(lFY} zl9Akpk`SHuNevGATLAdz_vlhvgl1Y|N<(<-m&vQw@v4~-TaF7Ha%>V4Nf9nl!kb&9 zwb3i+t#6b%FmGPkZYE*~{Z3!E`No{tT|2Mby2NF;jziw9y+dw4x z0fv4aPbwLc37_O?DTiPyRO;D_w!R07PfXCa$ktfh<>A)xD;r$y zTvN`nFq_5tLfkPb5pKk~Hig$M*X!x=cbg4$JTQ+_lQfAnO-hT22Y2hxzy)Xze8TDm zAPEzCcvz@;9(AX-KXux55)@Xo*jZUdg7H7*v^Qm2*<^kt9ZfU;NzT~wJ^Ju-R>?1{G}tsY0~rJD-U!+U*4hT5AYN(;W9txzzEgW97g z)Km=G767V~68EV02__=h0kvDWa@=VN* za5lAD5>v@Wj3Zu#Q^tp^g6V71FFl0~L&LaMZEJd!i7QIwr_Gcu6<<0t{Ncifd`>RY zfK#}j)u22;<_GenQCyI5VAhxiIrm?JG^r>LAYcgT?O z?%~;tJf^KCwvvX5TQgP1uGdkn?ujgl`5D1!i;2CsJXC!Z5c6Xv1ri{L0^0C{UA52d zt0O;emB}oy&yHDGPLC-`FSboLF81zEf9<*Pxp;Z=_WkytnVM|R+RBgk$qPhxz_3W$ z*N^S^;o_5jG&0L90aVfe4H&MKq8}f6Nn8xVTk0-1ZV%x)*s7mqDcY|>0@TRqq;di^ zjoiZ`YGAY>`()q&O}D@W>GjE%A*g2|+HRPXgUFE~#OL@&7sFNIXZCP5$bMe<6qbuF z94$Q|Q#`NaWeQP#FLh+ua0S9HFKRo7=GwR9gBcyJ+ ziTl&HYk7G|8XQtMyOVI>KOB}Eqi@A!w8eYJ3he^l326P?Y0iU`zN~jn`AeyCVYG^k zfkRG-_CFaft)T8qrG+4B)v+MliVU_X32(RJpA|JcRI6kicswFpaxsCxsVRT0dQG7K z3!$P`G?rgMc!!?H=yJlogjavxHoW-s#o0OEw1`AK-iGUteeTSzg9-a2+15e5G0%>r zSzmzI7S#R;*n*izFf;? z*to?{L$24H8q(fD0jGp~#QmKp#a*I4f@KzU)Cr8ANMMXpEcbET+u7FR!RgUp2E{{r z*-Wr5W_Ow&sTxOi1&ElpdQBgkMN9mIJuM3n{dkO;yEP=%Q<5<}rA7-Ir)b}Bkb}L^ zLZQPIYFKZ)Fv3Dk09{qEE=ieF6)m~8vvfIEn6~@XiU_tUJ$}Pf$!w~JiHh6A6xpyL zMN$|qt2571$0tm9M~0zlP_utcu#oBdF>aob6zKQ6_H@b6{Zv&0;JaG>=z`@rnXwBb zAbsxHvBuCDNAd6|`p z(3np@8NL*M&rLz?xZlQfX?gEQ^IfFQdQL!wVU~7<$l_aU_w+pXYy=hO3 zdZAOS)~?PS6+dV^B%a#t=lxGTIj4+Vl}<`LMS*r=15H9iR#!{1gjE~AIpwji%`Pm4 z{aChy6j`w9Zhd__ZXA76C7&ZtG`+M)6l1Z-7O+yx;ahIUOwLp*Y^FmsmFL^Gw{x5e z*HfEW1d|5w0;hDNbu*9>c4=SohEPji4|c_}ouz>0`M?}+xA84ix~mOV@R`LRst`mC zTq%9I*z|H^F>ktK+`8WuF(V3I1~$_}I&J{;YB5Rqo*!?gnoR+$2bj6m=5vTi9}owz zrE&;7iSmQkne;l=u$|#8_R+O?g)}dAOZBjn6B&`Y5NZu-bevq`rX_JlCHtyjkPL)F zn2n@7=eFe`m98xwByUum%k{lRrjBck^}IY>n&ZWqJ|OV;eYQ0Zg3h18)02pYZ=b~LfF^9r7XmPraZvQJ6l&OEk&8Cz6mp)^$iD9R9M^_%EnEi;{$;o z3u^X&8F5{LJe%rYo1mH7UKaL(8nkq*y4t0crzTc1TieU1hi|oWkIH2QlQP85e{|p zW8@Jt^op(`_A9`HHe;Rqta=-#n~h`LWaD01ip>#G*FY2r1tvm4rl&}_f(@$I#jF*= zB2E!IG-*`)a#ZpKsi01qk0a^?>8K;pJRE$L1@(H=7?bXFoGPZ)7D-;!vUlajov8%Rt#lzCVh4Vwd3SZzdF91)Ctb>RW0q0M`BV(^a z;j0ONY#o5v0eqdc7ZhLz!r(%MAz_H)bH+iA6lb0k}O z?_IG3-e7`)DgMpDx5b4kNBDC&UA#xFx&1EZWj(#m-onyf0`ZUq8e#)s43Zz1y3liM`=}^w_hPg~3?Vrw*cbGD0ZUVCE;?Q2OuVcz*VOT|6+v~cMc#Nr-zEP4%-dKso z?!taFM2B@h>FCbRK=hq|MgMUmx1x-;E@^K3%YWo3o$fG&S5}7&n^PTzHBm_zuIPrT zD!f_J$X8sRg05+BYAho?X>h;fsNXwz(~mTT6|ebFFI>n@!mLQp8jh#pjJSOQiu2~U zL8Q7mYAe2m*JgC)39-oQ=RH^>Ei29QI>zqyd>i6$7pQ9<`tS&y9pUqbm8!cP@=w$e z`+a2zd5AKyv50dMBw2{Uq-OoxM38v_f<$&m3@bwz*3iECI;*V*Z;uB}@n+Js>*%`5 zfs|-%Y>?qqt-jCws0(ppapkiBL5BH!kdHx%%uAJ7@lyfu8|AN;uAQsx?$0WR3-qi# zHl#rWe7 zF=+6Ds1wz@TJmlxtX4tq`eSESz{$mJF&f!^T-Kqgs_6tTS|A`(Wv-X9T(_ub724KE6s>&`e&K5faJRqt6fE_w>cfaa{E93}r;aDkedyg%&)N$v) zlKw$!yTbYq677cCT%1wTPy6J422osi=d6-HZQ)#TTt7J>c%AzYc60e;8(1#49-yQ?@#6Y_HAV5sq-7ItY*D!Y4ocH5t- zm#B{m8+PYUzsOaQ&LVK0VnX)2-@Cr(C%`e!0?ql4H9rDf>*+e}lWg-luW^QLaKy{Y zGQrc7Q5QqHn16L6eqYXbz256&8#1Mn5iKztt-(iwy5P)k`PGZwsnu!azWtb*I!)r~ zB^1`SO@FuxO*Z!#J!@C%J{6^rSS6J>6}5b2Loz#S0_>~UB9=q=Sm>8DsL?Hz{xe27 zR>ZhDjdL8yteXW$r0Ij=_MG^99&46I0nBv+ZT8ARI9*PMv&g(xSBOD(=Do;>eEWzP zqL3vWo(v!)x~-$KpPnbjdGv6Sb+(ez4SewwCrT7?nG^e10r{Oi5qkrfSsb914b^m0 zvC;2Lr<{|A0zDFHMdc|HhV^F5c;O?cbv*m@n#4((%M?4Vd0<#zp9lt~8ozvH<-|xw zG}VSEnKUQjhRYU}z46B!Ws1IiLLz#!FyRuPy;WjF`$j$J3Vzg$#yvG~=A-mR(cyd9 z_qs}vmF$dULdS2#bFbGVr&3XxK!P%7#*7wSzGvVNRE3&S%9a7e@%b(gf}cW)3&dy? zh{~G%#nsCH&f4&cyrEJW3{hhA)%xh6b|+IoAn}{g_1BdrOE-;7N{q5o*`H*3<}{~V zN|s*~L~Pt8Tl^KtHe-|4G;PZW@m=&Z2%I+{8x)1pg};J3X$f|Hdp>4|1l1BnQ4DNV z@sN&U8gvEy>I)6$$gtYCyc2!XUMKO9qvOr>!kqO`Ns}Li!TDsZKiUI%xf`A{>?3ag zq@w(EVq1Y)aq~^uw$HC)?guHO0(aUCpAl#|wBPL8ES%=Y0#=$16E(ij>``QOP>YVOWc`P5@R53opg{-mm)BvROOjzGokzY0g zq3h0C>4!2(#ndooK#XP}O%_>Iy-AZYCGmFYOTB(c$_pkLiuZ|8!awZ}CZoU*^;PW0 zTv+`12JO}SaNF7KUk#WqKmxQQDKXBA?YOdXG$P=mz9wG{tJ7T%FQCLaR^jk`9a(*| zF^VBW5GJD=DK>$_?ZQ#-@Mm(j9bBPqA41*up$y~=vZDo`aHP7l`c0BoQ;xRblx1{% z!w71R_+YtDnMk}zw1kvjr+Z35Yo?UGJTz13 zw3sp{^*Kt-Q|I^61N@={u7FQAMovi$!LbIIzjkfb%4FfCz3V=JN*>efpsiJ#i5`s~MMy2;;@x%O z;5xMW=(}f~)HMSoSwi4lGb>p8fiq-#xSyfrq%5;s`VUJBv$Zf_aGoz4FB*?FiEq(F zpegp{pzWA%vI%Dwf=f2))CQC`=z(AeBM4zwZ|knPB&ju)!}m3V76L`o1B^83kJl5X zXnfHp-=DYlles9eZ;n5|V(>N`_5i)vJ7{Fg9UYmKRQk-DK42!ZOB!luggczji+RBf zR)#d2SUC|I5;HOhSjfr2PTFAcJAxilWDr~!iY6?O8*HiAgV(W1TZ3KBn@juhD*xlmb{hVUnvdrEXj8*N-nM%1f3E0?-cjLX}3ZvK2B^1qA}?k z?k)w(Wa!Ff8!_>NJgRiXYdC&Al!s*ueNhKe z@{HNYKgbeM<6pQI<=gIg1QA7THo7PK^R%LkX8Xbr+k{so4L2@wFw7!_An7?b7oB-Z7!2^47O^ zV6#a`ggp)>taPGOc~>GY|C1tlDtT!)gVokLvDkcp^`fog=lQ&3=Kl3Ene{yLvC1#K zD3PBg#y8;l?~FriLZJF#Fhcud_b6B5O7**+u=(MH&CynpdwRHLo=%8(JYr*?S4~%^s7N; zTJ>HlypS_D8x4)bI!AoQvVC&wI3de~I_bw<>Dl)=Uet~UQ)v<`80P!_?qv~h6AEra zpScSmz$faVsr?-MY<|3tp z?S0!LyNOTswU6FDpZkN)*$$#{q&{Kr#;di##?Iy58wwwM;07z-3 zNT@s;0|(ES4)u|lq#WIDg?76a*Jrw0E1D$d;Q}&J-Gm0KZZZkX&YtaW(k5QqoG`M2 zc)YUv^Pq$iDx8$J5GOv6SZ|o8?c}x=_hY&jP1Q|>x#-^<^I4jxH6%2WkO+C=F3l9} z;K%1T!pH|_ClU0f`HZ>lWb9NLi@nLLyDT#6`S#`6Ai{!JVJKp)gYjcGfWl!PaUHAfubl@#kTI%ZdsCox?$V+$;zsxX#Gb4F4kVtvsjDo>7; z3;r^53vdXteJKJt!9`1$r2^KeEcTVN1f#~}zTg7EP~8_7H=1KWQhge!8+qJD09$Le z4WjDw#f{nG1h<=7*^SqH965QQ`DJobxHT4t%(Fmi)}I$k1$&3wFB*N1nux? zrN7%k#8s22T{tW7wb2TZ-n9?Zj&P(`vUQ114Z*b(*1V&3ya)}g$=F5lVH)KrUj&6# zQFv)@&($DF(&e+a*62k%_lL3U-Gp}N<`;D!4g%0*dv_%$Qy2j)nqBcGK~SW@wJ|}P zUZv6}Aa&F59h#?Z*wtrsyhWnS;E9Bf5C{#GNOB5>~utk(#8+s-cQIWvyuPl>df{Jcg+8Nb^bqAJ20{W8qEQgt$(a{VE${7 zFat9i0Xq}@zh0gtghc*o^%AhPGWsuPX9h+9L;5$Ml=&~5sTiOR_uqk1YrvHmz>5N| z&o+NZxJ&_;W=FuS`FGoc3*f+P@<(~F8{kmv3OE^B z599yKQ00~Esf4VGH$omnPwZSWj-kq!BPFA$x>a7WXkC}HgjyD1=C5|?PZawZkY*l@ zj0+NyBBO@zkGl+^AgbZVyLPff)m~l}-J)Fzp#F8=xV(gC(P66XYhPlz6@I^Zu0E6F zY4YBB^Ro5wwt4aP783dyjDQ<2*3EK3Q|aYH6#EowO1YL+!MINiXJkeqIiDh-Ql;MDkp6*7wni`^ zoh<2sv54i~tbvrAn37pDJ|#OhYD`U%0IRN!RK_RyC4PMA+6$NM#mO^V;EQ;?*|nn4 z^;wcv5eeJdN7b$37(^^KL=3?Mq7h4gklrXOP(6q+nnRq}r+(2xVu^k1oW!5dt9W*S zA6UNJmjQagy;vkr5s(IRQcj$L27LNsk(WJgirv! z(-O_;@kJ(aLCqggF~_QiDbuLzl76f{ytSuTaoeEJ$VB(hB%aw@b`j}#06N%U)B1@- z2YicDja8)_{y3lw0isW+*p_z_>3+>)L32p@N&TGJ!CT(R#00OHK@BFDXvwczUFs+U zOAGcuX{jvZKEz}4S6S6%+?#bq_9Bo{nPz5o>BwFa){ss7t<<8@f|~C}E_=&(Ca(AJml!c+AF% zjYRl8^o+AxCIw}DYBS$3xlBzflM+(RH_n{X2E1F_Wr8YbTJ#OFMtZHfZ4tlsPr?+D zCQErZe-iuNOe!Dr>#zSE`_`kg`GlrYs0LjUWedNi^JwY*{Q1ursIlSXEaRE!tAPEf68 zv?v!wL#O|q7(P_Nlx@bt6JiYyKZ!#XO}K;kfrepvwvlQb#e}K23&UqoA00(aogE4L z37vD~!8|t2izOUK18qhnW7lZ8R{ua~U-SS`j&Ai@U^zZwGNmG8_4%>8%o% zR3fs?(9KXw?i?yv@8FL5LosXl?7mFpo*tSZpI#D0k~5}X^`{J(A=5L6#|rZK(v;{3 z=-R>o@N4n8ZW$@-gA!)?vuxTTDXdl zU!vKQzcJ>PJ%pVa4#Gl~s%bz#19ic2L#XNCOH$5DMvN}@hlH%3oQR++@7bqviW^v* zZBM#?U60g^>|E?<^h?9Atmar(Su=B``_45poKAO6wm zr;vG&u^)is7~DR5#L#pEK83+>tLbR3RXi7js%~Y{6}Eur$^h&`d&oTW=tK8f+tKpk zq`KKW3KPu8anmolC%Yyaq$T(BYM@!A{6#O4Q!ptl@lj-OTJfS~iFIk|5&0AgD|>+C z-OusIdvpmY)0B3hvfqvVhogi@tc3XpTD7)+Hoqd3`Oj7eiP@ACI9V=^#l)6u1J_)I zP{UZh{{Gwx?r1TAi(h!U>9y3Fc?dtO+$euQukiT^6Cz(ivj*L~ooCwyD`dpnn=Ub$ zIgx7j8S{K?NiUeJ3#CW(7*bKWZVr32fqDOuM441(PM%x>hH0WFH&&?dsBFXU^mz5d zyvLGG6LIwvkXWgHgVg7-M?>O>t2(?pG~ydYeTEE60m&nN!)9eVN-4o6LM=TFn~=8- zl4G?2dJTb`=W>>b)b!+Lu5hJ1PZJ#8v@>AB3<7zd(IxP zVF|*zVMLPlh%B2;vK_Hw4M@DN!Iw$qd&7~~5p=3>|0P?r+wGo(&6LPpO{BNBV5;+& z{nG!zFl_Is(4Xr*F#WA@Y%&HVT=pOdy8P( z(PH=25+-K_uVf|5sT3zNt3ui$swmZxiZht99)kv~@apFhmUWsY`xvb~oN&ZlgvWwq zRGj<^X5v@-F`gfmOpPj40#>ysD5%`z-<0_}WSIlW_zEm8_DW@(c?;Hm#n$FOI#0ye zP9x0hAhrai!JpX;6YC|bq!_yRqn zyMff|ek2xAyi%(S^rkpo9xOID$7urkL(?QD5f#wV&DN9y(@S z%{-Z>#Pu+kI|Hga34no{R`6RGNP-$cKJaMJ5SesGd?u!;C^)6iBg2oAuYe86IBKiQ znwkT-9Vw$vqm-fqatcaq=M~)g6Oq1e-KC}@O+$oYbybVh=gpbe6qcWT5Y}({u2cP> zw-NN1wl{psYg#kU%)(;IPSq=3qiYYQnZu-uGW)8hIi=ta^rI0sP=}%@OGnm{E(r|^ zTvJ1$<|hK^l-S|0Ute!fTKdpndO9WF)Zk}rlj~nz(uahRSNLw*n<{r9OOyHV z0}8=hcFB$H#-BhEiOIlV!X2?lAagu=biA#8z9wXAG)!Wd-#tZoYfnvW?5tB5%B}NW zO{WFcPgQ2HF>`gO;%&a!UAc)@NTy#KvwWkQywOdUg)&HnkJ_A9FQ19zqU|BSZ^gdd z^Vu1h4-fk;g+$lSKgs*PX>V=_UTwCK`Q64opan6ut9#LroEKNxONMfsOL72}(y-wr zlsPba6SwMYcQn@Yi}8D1p>fTO#$j2b@_Xc?u=5^tbOc2%__(A<;zHpu^FC`+ZAi=W zww*W8x!HUe`rAA(_KizfJZeqPyp!xGxv87P9Q#C3u?hPg2={I>RTTCnYfCbL8`gz! zVrr8e{>oEKyG$g~7m=(FS%H)Tnx%ryK@d)MAR|~iodYr)o#6H0j$rKYM~STO^2E`q zucWM#QMaYfviF^=rLJCUSE0wOiZJ$TW~3t56hc2v&(gRyz(Qwr3t@OYi6#UT?~LPC z{5C337RCm62PNqYRrwn}zw~TR(To^OnwcKxx&_} zVWlwdL>L9@jM~V@M5Zm_OGPukuo;b3`%!!#cuY2q7_tWhuY{$Avd5r%NZwH7dV-fHjXXWqD9@GIkA zAEcV3pK3mVe0u3Yz5GvW)&IRQj~TGk{Jk-cjq#rv^M3c*{R#83{L@Co_&cV@&Q8Dz z_=1D+UsHM_V*EnXQpQdI=dP%&lbN~Ue_5!Q0cCQ3-KSU>|HkqD-mLyLp!XLx*9fpy zIRRi@E5I6M09dFT0I9v-E7sr8T4y>VTPuK-neI1-`-e{XPdN84K<}T7E`ZwAcQCg3 zLmm7NFz?@`%D=(gzlfFr+ndE-bj&UQGxDD{V>`fZ=kYf=F#zoac#Dl442^97Dq?_@ z_)n9ujkC3Zv4f+zsm&jLV=Y*^zj}!E9eR_6#0)I{_8h?KIIO8kS*z)ZHxe~!qC>i7_e*#{v&z(Hz%_qzy>W1K%)f! zc4jdE?)>NL7Y2~cA^>ptPgCvctQc-V7S~su)sQQpdq>S5g>2`LeoI}SEEAG0pM%OEmRiABKbrhbGfiE zjrkM;?gS8}`r%F00Rr4e!s9g~q4u7u?A-n9nPUoHO z&;dUmX=FyHW$345XJjN;*MDV=?(NYBv(K;bpeJwCvMEA9*!wHBKocKZz>*DIrR~q& zMnxCzH;J#|8Aku$c6w(jmW?a?Cfq@2nfT*yO9+PYYxQ?b0RX1QK6*l=xoOQhNgik`nLC&?_lZ1Oir)=F< z`9d>tuP`1VN{$?Esb^M)jCplKyEW%#m1_?)&1{M)da8FFoi=cnj_Z@UnA3mF|+*I3c_HRLL zYHV&>05g+G7Zry>6?PZn!NST_w0xrGom%>eS9`II%VwBbra5aKS@JU>^o5VyE#Y}Z z2t|NgLt$cEg2vdGk~BQLj50h+Ln=_agH&sDCYnzX6M=|7PD?x)l~6?h6-d%gYwd`3 zZM&gVzXR1trBmpYA8u#8{20P1^ear;*4Iyh#l%~_$wj4!r9}GcnTUh&J0i0yxeGR1 zwoTvIAvrs)*~In7JX!@Y#P&ZnAOySv(V?F<+Sus@T4t$7hurE?bsQ~*>JEIBw{%eR zVb;*lFh`{A*yH5{1O(16C{yCT-InI6(fZ6$+3JcasPx19jH}Lp&L5&^>Dm2$n*X)dCsr$s{F+_zSss4!@Uu!gGqK6?kyYmponEL8GeF+N)QSU^syxQ~JG zAjm|0_;cC{P9+X~1Y64gkFv9jigQWSHSQAJ-Q6u%aCdiicZcAv!6mr6yF-xR7Ti6! zJGYa4&&=#SbLQ^L4;K9`Slz6yuBz{;R}=xYM9&YxGz!9NW)3y9$nXMfN@+PD1onb_ z8`+<#asu~Uv}ojoNr9(lP zZQ$pUx8+Wh<-QDXIn7j+vn_7WW>LrM>!@6orA@ZzAJ+{y)u(N4ffkg9oc6(1d}GZn zHEyFA^dBpD>zw6!h($XynvV(tk|m=LYxbro9jOfD1Juwi7w}$3py+t8a~lY*cG(C~ z6u~J`OYo;IoqNBZ)AzaSE8B43uO1ue2Crd`E1V89jS)~aS%6=?tvk`hE)h(MOy1qX z>)wPX9}DbEUyMN&7zsyE%$wqSx^wnh4FDNLt{n)(=jidjfVFx~KD(cYeWyuZu-K6v zs7Mb-@aBmW9|l9zy8YS=28;B^8>{td3lul?(FtLU*{r$ zO7nIaH*9;b;M~ETVtz(#TY)kBZT+1s9&Dac@^eYb3*@NE*`XA&YnX(vKQI1teCVWy zc2wdAg}bdb;i6l_Y8DhhhrJ_+rl#4?9p8fFZnbbV6f(+WMhTNu=c=C|VV!Y?d!fHQ zG{%Ojr=fqT;Dv|=!^N~e`XtN*JvK11YT-bq zliKkV7cbI31;vUCP5FM5S=_@G0NT>E0P3F!nleZ$Jr(dX#&i*^%Ua{8DAUj@xhaij zou+KBQ?WzTTqUosnI$}uRNeYAsB-|1M|+ozA6f%s4vGt89v1cRXuZjbLAQbK5*x4V z{tlt@DkA@DuMLoA9-raN++YfKwvMIy)kB0YacI}4dh;?j%Lt~iSOKAB5ChsMTf3Cy z+9Hc|kpQ-@JZr9zz@Zv8;=#jMMB-#v2U*ZI(g!C${CXpWJYG`#!yz8sZk}crCP$Z2 z+|KxT%ITgDIM!lQi}3J{)LJvBXv$3M!(fFbhHaF2iF;b}o7yfb&|A+kLfLZ=m*h|o zd^4(EMd9+YRXQNHJqqt{(DoM-*|Z%+wT~?qxVzewtjzEW7MGfrCb|H%sEE2$Z^OgD z06AdKa_gid!z|GK_cz3Qw}{ff8ZAo+Z~8ZFTpB-mBz0$j*C8nd#8ps>G)ZVS+{q|3O=6e11_aM3Ued~)pTZc26cAt6(ZeIs(;@VSU?#y! zohsvG^i-P8mRAVv)yinePNg@tixl`GZ}?VPvFloM+K$mzbUSG&sVUZ4WZU@|?v$L0 zEWOsx;627T$>y8U!Qm5zZ1K|}520m2a6hoaDieTRu(Af0U)|34PkJUfO{-Z7Z{+k*3l9IlBZUI2fU!~39kws$aQTr6xInKlPx3qdHuO{xL5Q+F zxmS)>wXRy<_myxstg#PUf;6QWWSrANHf)CQel6N=7~U!ux(lz;ct5@(lYXo_l!?UN zXIk6HI#}F_{gt?4rEBh{}LV6E>i#%u%`ftX@m6AH<{jKY%s zaNftw1tT}TP!;nG4caCpI5ff@#+>YjgU8J;-WgM^Cq4>py#X;}t~6qR8XrO9`<`&% z2JK(f3gwYkC(HcJgXyG$F!Zsb&P1d9d*nLH?UQE}=`8~lWaF1v17MVd3g}yd&M#HEty<5qx#R|u zRoLshs?_L&5%yxRNa^8PHH4QjM`)wGR@XlDubd`Q*XvgTmO?68ju_lvO11*Dq{J&* zxvJ+2%4;_>()O_A?m327>q(*;qo#dP8z3boC(^F}>Z0Ww z9#;)d68)npA{}1ETM5mDjl5PDCPMv zChKt59uN9z`t)#h@^dSZoDPpuoGlXo63;#zIFyRhP(Z<)FUx zl+3;~2h}h&!Ee44AQS~G6*d(dDiwW(-Q7+H?!6J%o=NadnFX`Ze|tDfx$eAodXP`V z1ebQ@M%g;S+59qw*7sR6?k-)b>mG6`g|Y#0_?H;ft`{6s=H)Tz$|mCa zwkLNHm)jF5@-K z-9+SFETQ*Us_jlk$lbUWj4y)iQb}XWBC-fH+7wcnw-5A4$Y_;xasFZ@w%FYP-`=z+ zGIRq6tv#T@;?L$1q^;;gcIcxPK4(#-^|6?`2|FSWn=K5vi8D_$$SC6gq5>ualhBe0u^O@i9>mHuY7WzY00_?=uTC8%=J1Rrz_dL%9&g61xA-`#+=2ng*W6@#4U3$Q9lHFa-91?hLm zhPv7j!qvHiIX=$Fu|nu5^304taB^nill(@PZQJ-$(4Pq6L7bV6v+H(7S0T<_aqC=| zohj7!&-K;SlGY~lY7334`rKWJ{VtdRbNinuWkg(N{500B0!m`+aj23OlZRoj7+*%@ z*F{=PZv3+ll!?~9c3n0Qw8K$Uf8zvk`uUkpfwr>hz#$uCLT1J`d_0QWyeORz%)9%C z+iFQ9)W_a;O(8X;t3B+ZPt2h47iWQyAqn$H&s_0m-*M}jS8Do5;+2kF1L)91Qu1lo z*e_F#foTM*UIgRn(w1emhF&x2Uq52!Mux0v|~^CtPD zI=>;Tb~4^rK3Wtjy%aH5AJfkl!UpIv*vi->Xw;z!ReVGFVqp9<4DYOzkJFV;G`T3o zTK4ga=b6v!x>COgUS1!IQ9kHW$vqTDHouT%Xwo^N7R0$N%j z&?_pjG76m8_77((koV_!dl42UcM1)K=|@>Y;BsF}Hp4WTUSm1>>kHEH&`D;j_xzME z`Uwspw%`Gwfdy}>kMX0}BM{ag6$ZRu1-=yqdseMzP^#_sVt6%a6*I(bv8S*1YUh64 zhHFE2$R&gUG61(ywz@vpkxw_w?$K)(j4}6Xmwv8QeOI4?oV}+fZe6ZMOe%7nnul;xd~0{O-}m;eHu8O)>p?OE_ysv& zeO_`ep0Do@`VfN{ywxDn6JLCI+b;q)+}?uf$lv7`U!JMB<+t}^Uz$jA%sNq{ zrZDjme_b$rA8(<)=C&% z`E$>cTci8NM)MKecw}j$oFUNKC4HstDRa)v=I%U-%gV3*Zq&uKZrxh*!vX2wz0tPY zR`VyN!S3%oPYBj=W8inrKGZsWnS}|-2-wYb|gcTFoax$WjrW6lS) zpsBW=FCW_(`{YLmP(+}eL%J|1kQMvXxUbDd`!>>MyW|c{pR=ZIHpXK}`+(86R>vA6 zy{;|szv@W2yZdz@0YfnY<#ipr{09ol#`G^@jsGfcVdn&x^#4g=e?R<3TpAO{uOJ0$ z12ZQ=mR~&9&emB_(9WGui;jt%6~JKu=nW8;#tMi_WBrS;MO+wAS10OdU~6ShQiUk10ngB4Y6M%>s06?rUK<8o( z0JP2kRf{PA(f(gKUiW@9rG+OG+G_jJ8sG1yfI?5I;mX{XsiV(S zrE7#XRQMR-pF1n~VvL1-qbrNlKRaFu!IVq*!%{tkMl@q)EZMqV#Ez{1GR)9jHMzz7 zLk0~!^DZ{6M;-e|Cczh8g3IP0VWX-N47!kc(X>HBag0iIpEiT6^#rPP7Gqfriy5tG z(=U8d(zL_u#)q?Th6C@QBgdcl%VG)lV(ndscqse6M{hz4l7>yQZb>1(!5A_N9rBSb zAO)on!ay5h2ndhhk!V9n-bs^oks=_m2~%9AM-lUrmFwi`u(vfRP0x`BH*YJ6)Pfv+ zctXxMy&1z8^Zho#ql!FwG%CI4p|-#_)VMJ|Yg4+Sw`vPV6uJw4WKXcy)!(^6GBx{y zWut!Xy7m|}DZ9+D#IVG`e61$OpvWLv7hjjAqwAvVPVm;-C8kYct^BQ;{8M4VN8LCd z1}bs-+Oe{z$ z(1)RKxKDZmIoVTL?|9%&c*@;TPtdCjf*&57HnV|zQ3S~H&$eo)abvr1A&PP)m2rE^ zBewJ!Nl&T@^_!go26@IJfi>m?@ptF*XcNnbhq*(enyt8)EkP+}*OI>~QbK$02 zaSr!9c>_Z%*ID(TT%H4!Y#$*cc`t=v7RZo^5b9L*cR~=+-XLb}Fi9p@p?D1CL6PQy zq{j~wYCebfWI7##hTA}BL!=W~Usy@z*@P|lJ%7FwmRC*KDG<omkGDpHW) z)z!yWu-Ii2sG*x1=h=o(5mY#B1@2ig5oNc~xqA<-fb<{Sz-P0W>c4^B!;Gtf$ zeNoofM@H2NJt|sCYKjg5oK7V#S1wfySEBk%-7=*|cIytOs<4p#@(y?wq!hGooLP2S zavW!+rPd2g%QJ$rw53?!eIbpd!R3w9*L%snDUiJ`Gh(*|yVP#_X&hjIc?f8V5hVkj z#qqjev5e}_9x$uldf1OhG-W%1@s~E`5U%jzJJL$L#6oPzjZa)Xkg|5L%D>ny3hQxs zpNa$Y`fD9Pq$GKRN3e1Y#;{xHp3;v$A5t_iLGfetLG1IhNiedEHCqK2p}AOjjMq87 zO#{V8?~b@W>>-e;NG6?3eyf4abFHAaxl$xz^WI6czzu2IrWFT5*kzjz`0;R1l7^bj zN%w`pSYMcHppW)B?FQV-1J1dq{^4=I5{yAm18aXiaf- za)vpFbKcREX9MFsl&<5)TZ$&HDhxnz-sJvN0!<(v=6>XUrMXLzQboL`uxbkpef>R#E-u=EOsPD*<^D^!?dKxVt2v#A)~q&Y?1lHu*F-Z-@y32+ zC`cVt>A|Fjt;1SQkWl_Cpp*V@Uu=^4*daQbiVR61Eb>thR>#l?!N}{r^x56;mNxQw z8OGkie#PU{;KNMShP9^Cph}WYx`;@Uw9F!dJClF8%h%MskzTe^6Z#g}Lw<2GePg-2 z$vS2zNBOSw;B#c#Wqi=9^Zxd2UO~a9G!nE?J=XT2cg`O7>twTa&N*6kxkrIb>8xC= zo{e@gT}9ngtrd*gpgonO%y~c5!q7c<{%A6Xs|Vexk9K19Td^_~WD5<$Iwu63or^Py z6KL}61>(1m??<)}2ZB_Qr4*2 z+_{Ku0&r%&(Zw?7uma`i}}<*2gjEaUoVa;C|bWeg44q*`f@iB(0>LCu!cMdH@1 zL6C=ziA$Iupl|fJE}HfG=m+?QvRqZlMwlt*@kFhhubsIne%Oa^&Rq@JtCLIV=Q^#F zEwxPMUDnDW_G4sgADiFh&B+KrGY^fRvUACrLU6TKE4!F*^8ju0u9Mn_ekb^@f{!|w z6^u7@R$D>WRDk!xxq7X{N;?qwGOR5gB>&lkmXjX?uxJQIxdQj^L;V zpW?9e<33}CDA>lMYl8{dz%(M$aa5OXs5f@^DvuM)>YP6ucb<2iH!cmFbg-S5UW5v= zhOfE^EP|y+LO`eupOxGI_`APD)!LR^nB#4{NJ6J z61Pc&q3a@n7pW-~V8t>%BRho>gdp}Os$vdxdCBOIZU@tY(DlTSvXPHTZdO_(rw$;b z1qK+1&wV7J%|PlWMaMg*x(L$IZ^punr})@}M-##8nA&H2y$6Aj+c;zZOY7gw-YdIk zegbvbF}QZsa^fB)Dg`n{-w=~kd~r%diGz++{E3?`WHPzmrY0T}AJxhwQ`D!vKJZMI zag^0Ma3emC1ny%n77O@!fjqimK<|)MY-}a* z)Uvgy5sUV)t_FnJd5B3@2!FnQY9%n=MZ5urA2;D=-H^QzOgB2yhg_XSMc+TY zC(a<382A4)Rx?R?S7_`jys=-xJ7^231dITjksF6&tH6Ogh@huaV zC9@lyG6BMB-#(Z{G|V#h&~)zzkO{lt#TigPxBMEtN89w)S`^5{?F_PsAC>1vH-l;hMXeY$p6cF z*6jj(;XP9z=w8-G*&iBHD{>iLMnwkk_Hwj`4wR6{t!bX|?Nd^V3HI3MsRyP{dj_=_ zX>@c9lWYnOPWJ~gRBU0yK#Ay)kqRzs348f#5YBex6#U^HV8bQu%;9wSs zyX}(=F7yvQmdKn#rx$M)Be_iP>47mJE-&FOZ`ZJ zf%7)~JWuG8x=!HFh2qfiMp&KX(oVJ4bIcPpsWIxav`XuFJ7W8e6 znJQV2-q-FD(93sG?6rF|hkmv2`{K;dDM1L0b1^v8dO7^u?yWC^tc*`**rB<65#mT7 zaHb_KeDgdZqXL<%yB$0V6Cs0;WW$)Gk|Blf(`ZN37lSHQr52{?jZ_9I+8)jZ>YVT= zd3TKOT9B9x6KEPl$D1k`g&YT^wy`HhqUYsN&9&x=#Wta&ap{m0L`hBkr(@o5_-hxB zlf<`D@>|fWVC*yfBSS)WEV{almEo%rGBHo|bRS47sO>}0)NQ9j@WT2o)%b#j2xOU;`G zdKDa((9@Oz>N%#A;Z@y1@IERYn{zA#A_+w~b0Us-8lSo4tJK1EQ_SU8 z?MxG9v-+ejC+k3=0>Nn&1!ZMFUC68tT905|xFWghxF_-R^JiuZCu=N_#3n)+*UfvA z1SWX&1G1ihp%m1k}E zvy3&#ElpI#Q5;$gHwyz-B%hsDv3tut7)JeJ#?jicxD`pup5#P2m`CE(w#%>CrdP-Y zIo~JM$LSp)Uz9%GEEQE}u~Qdp^L}pZB))wX)Ltc3gPwQqs-rHCm~Kk6v}_sWeq4q~ zpFy8!^^R(|-SKn}a4@44n_%?kAI=OrC4GX>Ap%SB7-&NN;7|5~QX1yrZ5j%#3#U~R zwwxy7tV{D6ZHAis%0rsr_x(*)M&9NX6G;?d9N99jw5GQ0YbBMM3S}CgfF{4%p%D7< zN*z1;N}j}GT;&IQ-7Q+#D1@j+bzF+Wd(0?wWR3y`qE13GtPZq{wNr;(C5MsQ+(Egz zE#D$}kFe+qFL32T;*=G;E=wUqEwvao?SZXa|$Ta_|5PCATAG+2jMZMcl6@ulbydZaj zJCmrE+tE9r4DKV@9#27yot$$0tclm0laibi@UQf&DiaXo*>TT|R)+6#&W$0$NFrNJ zr|V2wjjov`S&I@Rkx)uu#7e|oZH6X93e!T@^MQAnUGn<~54jdWOK8`ngZ2vbX6j_@DfEzSn#f^kyJ9 z!8v<_jydo2rrm^HwtMD&$uiub=_rR7UrA_nj-75NjM~aesh5=d$$oni==C|in^M~1 zG5KES1tI_A=XQEGYnvq3CzxZHpXi?C)@3X1$6crXqsHf1yjC4|T`Y%EN11n|Ob*}n zA9fE!h(tWgbIQ@~lW;SPEHow}5|h_KU6a>)&xqNH%Wj>*z~}LyX%O?J4}yn~ok0|- zKyXr2{Y#Sku{(Ro8n}9_52SSGv6UYhrWPfQ8mNV&r_pfAMKdl!B384&0e6}rCav2s zhUXq4ikfBgk2X0)3Q1a88EapyCJ|R@yUF-|wk@q$Z+d9-IjNRe%Q{z@YHmRk9fdGl+Z%Nm4-8QNS)spk*)}n z_iOR8qg)t=?yKEzPVLz zM$@_7xUk#=t62WN`#9SRwO`Q|2~}1aE}SlrDL~C%|Jes3!x^}eFkXkXN8q!xm=K6{ z-($_O`8m#I!_eN9_zOzXj$Ye6*P1Mo zSN~b2qQyp2`U}Y*(mS-Ii8^GRWf?g=i$gD(fSU;tMvUoIUkje{SRhRMYo#$fHRrNY zrN17FzZy#*hc!}(vOi67VzUA z$o4NGxP){}tSp3FoJ@qA%zyPEN(f8H(r6mkn+jXlni(26JN+-5_D}j)0}htIpviwL zq+t8og%lhBneTrklZM9n28Q~^#;6W1*UpzWvw(gGai@_nDLF}6Du{5JmpFqLqKPY^ zWU-2$%~#c9*%a#Ca$E0wI-Ae5y;K`+&`gXh%ykt@@#eNCnR@aXiD_RI@^a!UO7+bx z49Y->$9oIFQyY}+rAOo>RiLV9=_SVLR4>M)CK#xP86;^XWTutm?Z-wGfHLGOz#-jJ?(tsm9Tv>;6){1W@Kz)Vcch81ok0%^+DU1Tt6G<_q8_FzMsu{G)rET zi|s!1<6V5TG<&;Ay?nlhWB&}$Ue9n^3IC_D^S6VP{~y%a@#8R-Ro#!d zOey~KHucw)7vJlQjZChC=hsXY$RQAA%$OY_sl4cKnEfZ_?Nr<(vk9GZ>Fx6gPXWD_ z<6%-G4ZFM0I~vy}5Gl97=MZJPrT$;01eNc^MhIr17oy)AGhB?6@;Bx_0T0!8qgF67M13cqeMh9TbGRU1r%$Deh|pQ=J6M*{ z3ZnhO8`xY#l`hG+l4wyfgJ_Uk3y>l zh!{VS#?i^oLImh2eB4AMv#&UZcN@lDY~N&kPJR+BZ?}TA$F&4}^|hM6@7F1|o2yse zTIUKXpt?#9BZjvciCN<s;T;N&ZeE$KD?6E&jEa$lLJnRJnilCQW`VI z2Vwe11a_0P@=Rx=ok2Fyo*BNJik{Mo)}IRnukuiw>p$0*n8(Mp3;Qw_ruh|0)aPc! zBD|WZ*A=S6<(ag^uX{T2LKMyI73fl{cg9M5FlR}0AZNr}lED+(6qJwg;U|);)|{2Y zXvWJ<$*4O|LcplM41;&vnYh_F7u8)fT;DaJc|l>>o;nFd8;+%S)OqHtcYu?bN^0{= z4}>-=MRtV2RFwJviRGieiA#Aa>7}740gHQS*8!_q*@sXa5+Xki>p<_1g86h$AjsUC zgXJymfK-r@y%a)af|O=mM&@$Wd0l(^6>Qh==mu$X!WM5TX;CLERx_eJ)W^8$cyvL( zho;wF354iAnx_mCH3&PF`$-1h)}UEid+t4V{=+u67H58mIZ*Q?nj7=HqT+%9ztG1y z9qp6-l3d#aPk9Ro8W*PCBPX*&Cxh?jv4c{MJkoRK9wNDY;ALKIx!hYjFxRNTVYM(4 zLa*9@vMjE42RO!U`pU%ivB1%*S)Ktj{V8-PL z=Y^CwG0N1&;@(#;$O~bVYj#AR9AVeCgW&j5mL}jAg(UYnN(VkWg51ckPgQ5T-LJ8 zx)NPuqqu8Q6HCv@cG+R#i(;!QZ)YjzQrajvx1x1<+U_{T#J+<^^tqmGZX-Lm$KI4{ z%2}H*y!`g9UvXnf0R;AUxpt8|LmQ`4mHmqx^7cfijSkvnruA~DSej>o(w_0dZ(bp} zC&^Dv`Zu#Yh)TZ3zCoW&3AHlEOWCxGv`Qq)BX}4+j8v|M)DB(W28kzo+A9`R=WJ9>kALvSq0X)&_^iqr zYV?-MB2&rT}-7D|9&YV(n~UZ|(7ywe#QdAK3nG{sZ%GKh=L*I)82Di~(D@T_>08>noQ9 zgsL%_(MjNN%C|Vv-CN`S&8YJ|K{)BCsIA(GNAM(( zv?DAs80?XBn2==jqK||#xYC*d;!>dCLy0d1%E6nX+X-{4hTxMOyDxbGFL?tAbEv%F z;6s_X;5E>LFe0Ucr6MMu6iQe=>w|;tpvTG3CT~1H_@2DzdL&(X?YQg{(D*4w7TG-L zJhUIWZQbWJG@OHfV*g+#{*18e2N_|vc+tM;MMR@FpP5}W>nAp@?=^87fkW5>q|vR@ z{-4Ii-!{hmKgY(OcV)jEaa@EP02u~5C)ZzO7{U^OPGu1nM>~51XCw3fWn^&vFC#9UBrCA0e--RL(d6# z)O{2IzeT(UM#{Y}LIwf>1}38yva|R2?JpxNC1m2_;v^KXx3@MS6tc6icLCVi2qkQd z=>PG*0s+2=fBhX;&XYI7V}Q~4z4rLn_`SwB@aZ(@qwd2R+LRc36%`H@r-isUfsT%i zijOQ54}_xv_%TF;e`J6^wtu95ls~=*grg$(6-2shsY^1Cu4IINS5)qGJRI?q46gQtt)QA@Fk)jnF*a;h+y-Hevt62x9-+q8^U_YOQ1h zyx)J^A^u9NVFkD!|8W2C3;VBznE!f{X&kF3 zuH=9^c4`S`e=wQof6Sr%_sS8X}N&rk?S4D;6 zFgocOu1bGuulf>v4S(oOGW$oGc9{oR??J)kt`P`?Zq#_icoz> zbI)ykzH%Ad!>Awcn9~(i)e=cFjE{0P&#bDQ(>{7ZqrIW@-hY_Y=>2drwzS6Ay4yAp00@DUUMxp*{!I8O$Zew?P({j2;Dr zIkz|i$cH$If01e^p_+XdQWRKP`Xs@`MJscFx)S(jjjDemEXs(raxB3BH2fmhBUBwHw5)5>Q7ccc&e2pCijAZz+x3w!KLK^O17WXQ1RciKKaUq zI`m46Rymw~;MpOJ{Qi^#WJc@-!Rj68O?qd1Q|d@>$uWa&IlR+$DsN~!bwcl{apz_0 z$ckQgK9{i6NdP%aqx55k1?I3&^*9A~Y~ibIq~=Xat-!F2uA5VS-Q|q;%WHq|;Nio3 z7n5ek&`&Ny8Mt+XsMQ76uECND`fwpE^OSvb406r%v)OaQT?(t$8w0YyX09l#Nb%+ZGLvie0#gB0A1VAP*cD=q`j&F73DUrwe^Y z1Isp&7xgTj@raL+C02VwyNhtvT&7GWKrpezJKGp{cKqudIuT{JBn51{P3ehjud7bj z`@Pa5Pa$9jl&)}sex!ISB-TO8>Fy9)s-&RpBoxGHnWVMRIB}A8k|r;cnZNo`jlEeT z{?pv>x3LjB7vKZ`PjJM}4%iL+L+}R(u==05f#omwi2c{Rz{CmIfiN->a&rB}c`YU@ zE+|H$Y++;KMEAD~lzw-R{@#-Or9kOddy$2!$?wXd-v;Y{HXQwy)BV=X{d2EO2I!;v77-I!36*f>;PIp0{}X3Vo(Jr3IA|cD+6?d zzcR8E|1#zL8`lD;AOD`@j)jB$*Sz=Nc0<<6R?13h*qtf%=imdJWV%5(UMMb_sEMJm zAfO)!b13Jwwm=6}LBZfbrb&Yc1%W(*F;P(yftm$A;gbZQH3X>RX;zw4G#+nSSvTS} zkg(9@>uku#`AW~+4ZWngEIj#o|2(O`=QGPj9LmgM#2pf0vf>!1(*4=25Kp4UAfdQF z?1*Or&G5~`&dj%}odQOzm7m~Y>C5LAjj6|P!>bx(_^Bu{1bcajUa-m$I_+#T!AFq= z0=Yyq=-ieU3~X}>LZF55Sfi}1tgW9a;}1#-e>%=4m32xcNs~-oq)3v~*B45}pv=vX zwrW<*EVp-4##7HJrYYwqm<&4^m+>l^6tU{Ym(QV|BuSC{kThw<0+vitHW(_so|%h) z3zja7D}R0e0Uok~u^(Y%7l#>Wbj>t|0Wc`jLiHze8T4WT49a;DCpy5%CsAw$sj;to zjKHG$TdCMMgSuM^?hJ2z7M)75JvtvKFj2kFI|d&ikYqB6tc^h)!(ejwoO^ZHTPB=r z9DVkh=1%Qc3{5f3US@TU_?Vq~#|*bJ6mykJnnHGWNaVm74dHVYK79hZ5T{9xFr(6-FOVwcFd)7Co1YB@DDZr4G!ELiayoWxtj zC4uCqIO3=ZHb$a54i4E4*{X&sk|L(q$nX_YoW0o{q5Zo`z|}zVm7)+5 zJ|IjF1aDPS_!;(a9jb2Dk(CZJgf=Q8tF3sFlMik#AjKiqvY5AagH;NI2Yof8G*IB@ z_gDk%@}%r0c|uO^L3xr=5;N(ZFyZ;>UJwy34tsBgvTJl64$HPTN;gTpLIkzi9sIa? zJAtK9E_^dSeqB7FX998W8+*7|xMVK-(W;8LZA=J}eDMB>qZmxM0Ahc6T+m>ZGduO% z;RQF5|HILPHD$rZHi}!^A*>cL5~NS!AqlE$Hu4dnb-G~f4l6Z9E}ZTMaz%C49>1#( zkZ(;u3zxCx;zT&HSh4ex6TWJya=4UKG)oksj>uajiImkgUW?Xh**gp_}@Qq*# zMNQq$Z(UCp11)MAJg{`2}JwIJf4o-VnVi#ZI0hU9KlT zge`h~@a@d)%oUhfpZ05zqup(=zu-Av4Zi0Iy`t)E81Sc40C1ok&2nq&+j zI-iOh22Y))sRYGP|B@@%IQ=ze)Y+~DLbWYNQ%`&J?8hif-N5x#kIVKsg`PM3x@ZHL z05Kc`FfcBN|B%s#FxNiqhj`Z^S~E=u&wH2s-4bQ5U7uj|@Zo^C>-QsAkJaJc1p!|X zKHH`$G<6QAo0#RiZ@g~t;qT>YeBsR2o@+5D^Vmsl{7Pi2^J%PTtXMbf_nN z&k95X5S?fglTwD?a6vtbudNyGNhk}#w<8NmS4K@A&X3~-w&UEvGdUAK9YNijK>I)Q z!!**GC~#1DR^;2JWPB&a3m`6Q@Uu@n+bXH)FI>fdvo8E5Eg!;1q7P1$URQV}cXVcS zs|H~p%XZZSd%*_wgL7<_hTy5SIW&Vr$Wk7$(Yn^lJiAf{NaHhUyxeuy@#&H zkuNl+E5r@i3n_w$9AMlLeyYPS1-hcx7&{3?2A{STq<-iR&|>J0{|v|b4CI}Llj0?& z7YiBORD)OW;W!%iy_)C+6qd3`z#t8;uh`z%zVd7P;DuPV;^v&n=S*3Sc|#LH{ogWtHhs6$@Y=@lQ!c@fRT~UHC#dwA5fK&Ocre&c>U;o0ZLCp8BTc z28i&n178J72s*XuPmR5#u|#vt3?7vj2$lOXez3I0=o}+0d64rWPfr)M>NIlUOkZzS^CuqYe5=L5$}p;n^_BK#M-BD-Tcj#Js1M= zyPdIezgEYy8z3APM2*9~p97+PN63e-nIoQ;bE5tHWypF9$>h6Z9?pZ*jsFsm7B`7&K z(q0VKnX#|zW$FuSj#rJFQbSh0By%YA9UL~dV4bVo2?61Xb<1C;ZKVqy2S@%8w+LK(OYf9zE77#AgcgtNbJiOKl_rVvj@f z<03S!T;B#}YCw z&i?rtk3rmdlb~*$@{P@WY@h~t>JfYKGY5XmWXu-_&(z!oa_G)FYKNKhfueIV-4W65 zS!Mi6(u`yyvCDnIYafWRsX{dQOGqX{wc%UH!Entke7R;?PwVmN%td*o*_BE z)57|5WA;i=vxT}fF? zp})Xo3hhVEIw@6_BH#zz54F(o*{v2rJZKf$mm`rSzsu})0Rm_p?8UY?A~^(d8EAxr(ZSTLaQ z@{zm(Tu3q3lzcN6qp#y8IQ07rrHjQjb?aD+p)?tt85VL%$i}(bO)bYVGqFczh~Ra@ zQF)kho~%upPk=u$7*4X1R0b#bh4=h9YsM z`V`^P=v19`1VyN?kZ&6`JB>q}adtZ4iQ5SSf&Gla#F~l}bEEBVg+O1F5%#!fZEYe16 zgmvG!8ZDVRFGpMQ9t??drlxLmj2;lpGxtF*<;{YbH%F}t(3lTUDx49$q1+0bjo4m< z6=kP==0Dn)1XB;ik9DOZJM509-DqIRwO5%*KmfWsmd3J?BU$vQyuBNvXo?P5J60mh z)r52^OVilehF}pPQ=2VgJJOG<98@z+nforz#&lK@%;OGeRqjlSRxFN@Ik{t0NW`M^N9hS* zo{`Jj5grR0pyuJNeT0h3!$Zewrd;y7OyV+=C%tn=h^m|(Zn*Scb=1#+BoN2eZi6Gt zv}E+hJMshnMV3hEI8<|G-d5h-bL;80Y&?r}>yKh@4(Cgk=EqXS2H%`~CvouLN^ zIM`RV&@lb? zfB+lkf9K=k;r}CaNpy9&zea$XLJ%L5pdA_e{=;Q-QsR*I6As$RBgaR z|9#3JW%Pm~GV)?-&I1gzL#iHH#bH`iab-$LnMr{Bg-%jNfs#s6T4G#=c2sp(PU!-; zj1t&V+1^=Ad`xP3k^%7BRH~HpGSm~&Bhs{^(sT<>SN9IR`__c^W?`oK5KpoG!3N;@ z*Y|u~=ZJm`U3WXTwdZ`zSbimMW5|`2N9JYm3}q5DmR8j^)C|=nP4_lbm9^v5Qe~4C z)-(z3-}di9b9<|aI>?k}+R7SQCEHpo@2(&o%VLrno*LR{N0N`~xy{6@dAb~)$shO1 zIdC)U-7bSwHXbQxIj=f(wz>INf(B=kU8EXiOe@di&3`5ze|>en6KFO0V#c6O-)U;# zdWrj};Zwmqlvx6uEE}7 zO|Vz&e!tm!51g}mrR06z=lQTCebMCQilsAGFQ_~4_W|AS zJ)XI%!HE+%!a4NF?M7$r&)j4VPg-|v@GpszU)=89b==!KE9P~J+8OCHXq{I~qk)ZL z$~K8_*5YEG?MK4=fAc*v`@r$If1Y&({tz5A^`Yvij;-6Zm{sfirOQ{&UpjR9;^}Lb z+}gJ5e8#U@*U6U}xP3RMQ^4L$#ln8aO@YN$431n-cKzJm`t$LHA02;Q>QUFD`!>cu zOc|M)n2-}*!UuicpL8UpSze#yy@Yg?ce<1+R}d(AM=qrbPoY(Bydb$3a61s6Ei3qBiHl(YQ0m+ z(thlxdw;!mKY4ZEzSQ4Z5f6RtQl8@-%i#UrRU9Vr{5@bnD<)RSk8Z zk`XanX;gmB_3INEXr0u`AkvCyAK#tzF6J~LB4rCn>KBo>3TX?@@>G# zg@4}sbFpsWPa$JA<~pWzDtf*~P^ntgYL-~GJS3Md_6RD*lH79&lsMKDgWAca$8e=z zZExSE&6>B38r3OJiF5nzSXEIux6eIr@15!Q%8AMM1|6Os*d;#o-TPk08rOWio?&RyS-ky>qh+F;aeWJUh)2iPP+@=iuv~S+~|UHYaRIXJgU;YU-t|gpeu56 z!jZZ=bL7mIqhqf5g&goN%#Uz--+t4r6RR$hNvX{E(XM=M~Z#iCd0 zPw!?;n)%xGr(^TRDC1hF?KG}6q$yF-=ILA;N~^E-6%gA2taP+(jC6uRAeKt#DiJR% zoA{?KutekVgb*CF5RRpk^wk-*SYtcez<%y+Lv?eUQrj4dD)DMM+?FlfaO*2(VM&)k zvLYu2gEccjX)_g}(c^BZ}s3IF+iy928dX4LGowaKcrFDl%B^{HK#?#J^9);dKU}M{dO>Q15~HTAb6%I%QsV8m_a2NJRCP`M=Qo~CG_N`O$GKG{zBp^x zu=}>^;vc8lRyq3ht;pp8e+L!nT4kK~5uYhX`-Uc$+wSLfdD`r`%l+O^~pV}8XxNpRO@wfeBw9Ot2b-Ur8v&@z<`(}K9 zA-d9*V*3W&8M@}>-o^EPsW_l^&V9qS{r>%cX2aIp{n%;!;ODQNj;eRFZoW5V8qE82 z@cF`fmP+Fne3k2mb{^|*>@58#_(gP!adS( zYSAJ0pqBY}lv(s9=VjC0z^sQzs*c8|K+Hq?@Hfab|}{J=63MQvu&y^nOvj8qVM}I?S8%1 zclA~szZ&26Q+2OT&ZVL@Cx%De{nNWv-rG<1uNdC7$lsCYUpCo4;_>xW0V9?bKDX}o z-76pD+uZf`fE*J}9(LbyZS#zVgHJR$eR%AY&`l}HCk{Qie5mNFuRKkAhc)^zxzNRB z--Op}P`mo$3Z@k2w`ZcqMP63ruTrRf=*y}*S{7fmsM3qag}as=z4yy6gYvZ){UNYM zzQ#3c_wMsUr$#4s3@lRR^`MVkqxTl5(v+Lc)NCTu3`h$)|nX7zPo$G$&1a@&P~VP zYCht@&X3+sXFGOJY5sWknnM$vceL+)bnJ2e853row1h4)mage;y1k*{=+M`$bAN5o zEy8W#4Ii_)ZM_Feszkj!|1q@OGmnj@>W&&PzQ>houY46A4!(`PNUHp{-le%! z^354Iv)rdbxpE8+Zrs6Vi~G0J_f|N3sZ~;yj$P{aX;-sN%!r0LpEMf2`(FJcEa~-qYxo!VZe#@G-_^0kMk3z{kzFFFLW7B5| z1!~{iXnyc#-_940?CrnjK~iMlp(l1sSmfOzszkH_H-@9iSL+g7^ z3|ihk)#pga`XOspq^zF4Vy(}k)C%LhYMp9$>x|FJq&u_cJ$UZgB(O{F(MKxHx;4l5 z!!K9-Tb@d+UiRSP?tlEV&?m=CRi4HE3#RR>SFT~poWoBPT_0S&ZLiJex=!8ww)yRi zfA5Qp&3*OilC>%87nHM{e!AtjdB>vVfqp5Ca$8f1?YP@IV)(?@J9l24=F_X`^gC}| z-5$>PYWav_&5!mdU8D97GwQz$3ifSVFsAsQ35^05{Ig-{@B6kjIKNPvvh3xkFQUA9 zUEXmfsBy3H0nzVGe?L8!GIhFVvHTC}7h7ijr`C%zJ&L=x`SGFq{CVy7zJ0oVe))&{ zbN;yMS?#MmdaddiuzU2?P7Q*#cBx-w%U2tlM_r4$G^=qh=adaQyU$PuZ5(`J@xX`s z;y>(v)8yv@hP&r(HLf}%`Bv!EiQ77z?vT{9bm`y{)%DM>cKhdWt#z^8UE3db-*F?U z`hjyz+IPMjKA}+l3(4E2Z+rA;_x%Fr##P*3tAN+9Q(rutGt4dcO5*6QMFWp+d~wQm z%fVH5x0dQvyZhXt1^o|)H<)vO%Ed;BYa4Dj6c>8tNJR4;J0FEQb!|E4WL)&*%Rk19 zoN}R9g^_=cIXV9LuW#EJ_Eo(3>;Ru6cbg=d09j@0F-k@{{V2wP)!*KfNgbarfkv4d!(DW3u&X z#aFwY&VDfLbR_kfc%R+-W|tY-aPoznue=v6(>)G}z4l~K*Ac(%DOJM1r8!s?Ijll(V==OHo z#ZECp-xNQ*OE;uQxdT;_REJtQzZ=%`r!9j9ctk&3{&lsw#zJpGW>(m^YFWeHrSCr~ znryyMKBE4}i`R{&q)A62FB(h}QifmMHtJNVQZqxVC5~*H{N~K6PiMN^Y318BvBUn- zw=4$>uY3A;|F_*9{@LmN-afNy_MCUA(q%ulioZDJU#!X>P&9v)0tK3SH*8qQziFOg zGm`S>DKKtdvA$kE9q82Zo@!j7VeiiLTRw5g^ZxUW#@<~v|6~8hm9IxXPQ7~FxB0Om z)y)syzyF|qR^r=5$%guEOAqu|KQsT>R~>gf-F-WEVBc;kLd` zO8+GhN$Vd(e(G1JcEqzm%_6r?9kh1pwsW1&xA^Pq`Wp9oe+oZ0_4|PZo=?hGq{sdT zZ=P3;PwHv$5A~c~YWRVf{a>sf;q~}fyRY9>Iyfct_C$+0MPKaccOmBv|Fg&Ub?t9@bh&6z&wn;(2dt{JzVMTcSI^ycJFp;cP@Yx8 zb=!CLAKQ4;+9#I5rAMUJ{p&!jk57L}da}-Y*M(O+&JbE;2qhHE(nE_r`L^MiN89zQwNuD*WE#XG|$h51$*<&w8% zuH>QR)`k!I)N4Y|MKveZ8D+X3JInXywcmWZcw}hlOXJSvYxBDK*=^fG7M8d>@qN$j zO-rsR`9uC+T3u*k{xk7-qhG3Co^5_uX>;ngbsiMBubTAf#@?4dG!44bab<^P9=n?S zg}$_G3_i1QXyUj}NgEUUmhanT`jCYFM`Aah_AWi=#WJtp zhJ8}X*7R91=~&f?x3?}$p0fV?Ap^Y=3irzs5pZMAk@$en!Yj_lR(f^i>v1Q0w%t_K zbAeZlXSe3P(*2xVGxAfO#Jp7&6e(6CvT%`+mv0QpTcM}!^3L%e;QDHz zH~%c-fCdvgh3Srj4!AU}wqfMd`eSxfKK|~{=@)9OXfbx;yi!H|n)aJK<XqG zjk})n$&iv;*Irq4Veb5Csb3!0(o^3y{9LK2uLnQ=6xILFIl;$kujp@iZRk|5{IMc+ zD*UR=d;G}2fb;FQ8d_SdFO%OaeR{D#aM`YF!>5fb_WEJZ9+d}oKGo@Z%Z^>&ZQe4t z`KC_Io3yMOyrS8$qQ8CmQU7=O>ZTojaV!4X zIcaae$KUtev{aeB*nF>axu2cCE;qPvui1UJZYZDgpPai~dnLP!Ilby)wD!xH{Wm<^ zv3%_h-NshzIB0X9iwBa5sb8n=Keo-k*rYw>2VL8DsdTZ~Q9eG)L+(sFlQ2Hfsbr`x7txz9uQ=}Y^My*=Usk+5&@!WI`5{HOZreAy#AsdN9_zPVE!EX; zN|ByP@6H6yEx3DQVRMn_r?c*+JiYgD>Bv ztI6}0v+~xj6_S5ux0^5b7Md|Sypej8fBjC|zI;<QPn4?z~jC z#e1jPozCPsdhFrgihtcSmb#@%I5*|>^cdGx?i<#(8vIMQ&@Ugp(|5X2-t*^bbv(^^ zcGPn#jOmD5%i~*CFIulzk+k~w)D<=LEqcsdxOGY2Qo~<{&%0W%ZbaYl?Wf;3S^lrC zzvt-OuGE%qoCM*gXdN%z3_1HUuREx{f%W} z>3mC0EIsGey4)t8HD9~eu^1YE-TL54{q&CIe*5~Hso(tZCXZFKrc27qhWqR2R+s+q z(uFQdOMbs%#OW%<{1$2FM86pIpn_>j{4Zq-w>Vw;LV;bgj#e`kTX(MWlfgL}=iL6W z-o@e*i?@62pIV?~_t41Dgz`hi&PbXwYwP3%l`p04%IlFYNEO$tlSlsI6WfP1bNjx0 z-!ThkO{{!3_0yOMd5f>@IJo1mjwACA{9@DmaS@fH8oW#DUatH60qgE0r+%55_hhAs z`HDA>wZ@wh%MF;&W7}`bmfiiMQsLA;CieZ5bJ>s_pK>@4$+0+oVSKSv=TooUcNCvn z{K}87T}mz(zhy$w$eG`koz`ZWaiaGmeVKvddd`|NWnt>K4=QcDv}E(VpYu=1_tU#m zdHataH*iMz8MEf^*jTyv-0gc()v4`omiwvy@*WYx68lx^xn)#Hx%TyI>fhz8RD5-> z)OUF&jKxi>X;&bN>O|6*tq|%8DaRts7d_AT_>YI{Sjz}5( zK0$P)$zy2K9cjGV6Ke}$(J`^)u2NAfZ8O|ql=jj-EGRZKM%CF2cQ4#zjUwPg#SV6r zx_wxLM?_4R1aMY2^p6RqMGBRg-*{qMydcM1bXZhuWVFg^Bp0>ZZ|it*GozZ)aj9uF z)#>2*ld7sm__Q8-c8vI#@SQ$p13uW|#eSnFKGJUl(_t?LJqhM4{gBy{6=u&QPwQ+U zAWBU8*s)>HGqw=fK2$>ky(1mLEqI!dk3P->q%SNnC6EGY(;a=27|`i;I*4Wx9=EF=9ug`fb+NCnV$A|(5r3I>eQu)^?UH3H0;Jo6d- zWi0^}N1yaR>Pg!lp`<@&`Xb@A0p)M3W=J6=m!9?t*j}YX%98En+aA*YQhw>3?nxtj z&Iq2@#df+LBFPEV|FRT=bp zl>tj9^syKWDw1}c!Kl*XojwM=PGy3_TnFOoO-9=j?RJ(jW%i_u^r1qek6v$5Ih*mH z3D}Kh+&G8RGtBVF8x1;Kyln;d>mayhm0qufKpXM9nF+PUY*r!2fqk5f25im4i%DZa z^-+ih)u%2o8dX*eu%YTkEGZbV?aJ016o@8KEz(5AU^XB#us{S1RwTf>mJVy01}$o) z!FOcP;mBtLqYE$tkx{3^yACw4ATx-lH|kY-R9lCQb4FB`h)RNNfVLw7>a7Nbnf7={ zHJ}d2nj}c<=IF^vkh&l}0nyU-M`-BJnZB@&q>g7m18Pg(_zxwwrAVux?Nv&sEZJVZ z?IHay<(J-#s8F_~q@kyDce}I@LnDlQB+>IDiQ@(Me>ak_rm~(zFG9J|hlz(qr^3EI zJ3j&bS@E!Ek}`kp=}WyF~;My(Np0K~&Y;$gyvI364g zQL$hbv)Q1<$Eb2PVplPJL97oroWz9W2C@b2wz9&J$qEEkFfd6wL`PyyCLTHj0vUjT zFd9f^bPx+9(jk)p$9)*VF7c`Z5i#nZ`TlDnLR4j2 zyqMAj^*}RpP`b29wKI~s!zX(K3r>ai4T}hijBxV{4vE8cnc|QF-cSxH^5BhsF{Ef| zPg~lM0u`wzg^p%QABzQ?i>@Yk+6ORVMv5aK7(I13^Tt`ql-ZMIKqe|g`cNLo3=I!7 zU}?eT_)en&z8k@<1ee!@ekVAI0>SCyOo>@0`;XE)Wo8MfaQsFesybnpo~#D+VnB%o z6P_4@2&hMUbtqkG7Ja7=rK2Yyq?*t>qXA{6OzeXK=|_d~%+LaF5qlX?`b($nZ`=LQP|pIWNJXiZdN9|xR3B>j&#fsv7M0+^G7K!L1+yX0@mA<93$&;i8W%GGum!1JXiFN>O|S>3`osxLh9x%0kQG?tVH{AM z2tBSzWhkjfjj(ZaRxR`kR3_f(J0cPooKz^P0P4Yt(38G}Uez;O2MJ(?Styehg-}7n zV`zt*8A(L`OX^eVKuI~F8zE+P)d@88=S=trza*OUW|wT@1=)v^(>u#%d)Qv3L~@wz zJ8KFfy8SowLwX@n8bS#XRtQRFwzyBzbV;#qt>w)Orl93kIBYmaK`L366s-=iB567k zeW%0VOp`1cL+N9|C~pS)F-ZZX^!OMcugrQwb@cc!6CLB1vy>^bCuN|IWP;OEPd2O> z`)y5NQ4`u_!Z8SD8ojaY-w5e2qYuqw1>v1+TodeFHe)40z_4hB1&;Y5lq4e0{vwnZu;!|N)W)4<|@$|ue~vg=h5x^#0J&gUA#`L}D7=CW?v57($~K)-w~1^U5k~QvDl5iprHz7t zFKaTE?$-Rg2SjrG7)VFir9tw%Nx#uk`i;KpXpV#@IT*7{d#Ny~AbOG(WzIqx;F%u@ zB{GK~-f6B#-|0i{N#=pW@1!kh(jxul%ra9#0@@RpP%^P3dVP+UVG`303YUk1x)g9(v#+l^dZc0Z!5k3muwV?wCT2h z8O^r+5gPh);4GBrLP_KwN}iTYUW$}R4zqnHTA&n}m0~MEDn?30iR9vv;ULhc@#pXQ z;^l{3OD4BdFj{6;SYVi>jTR(0(qLi6=uD&Tzx_D>+l*2^g;i%YlN#VOjDu5l1q#^} zlU&0Hn~fYtApbk#PU4pT(=awA@jult3Zcr-xXbh;U4e0I{Fc7g0497EWh>p-%b-eW zww~?4FBu*-mP)bO|H40`(_&Rml45Cs^>3eSlJ{>jQ@;Nz;Qwgwzvly57LqFiT+ApA z7m71I1$nn;kPj3z>6eeLTFiR0JG?4vQLPpmMI_Ob?3aK0%(5-|IRyWIEkMZ#_9=!u zUg2|xF7iCV4v2)!A>#?y%SxWm!#DV!@q`)kb%`fPQpl}mfLDvGMrQq!yAp<&7Py%M z74PgfxI(1#^d!3}>rPa=Wyky}?`=9oL(?(t^dFP73nwT@CTgU zu>@uFyOWQUzBAX5{YS~2E@h;GsM@T_aMn<>oY@O}r}RQqlAZ)-?FL-35$T=2Gj}?^ z(|Z~XCf9{#J1QMF`QfPi+1wuK4W;_>ga15Zp zq`Xs~76<<`j?~Gf0TPEvt)VCNw}raS&aG09NzPzKbovd8h-tkcFTl}v#=^)%g-9R9 zk%Wmc3~?k@>Zz~O-1_#uXC6QqM@kDklo#POW>#I+_Yy}^A%L^Fo5YS8yY-Qi{G*H| z@tvM&EQxot0>%CIfGQv{RB>7IG6jKu#6rCI{Cku51hQsfa%b;-wYFZA*?~I|LZszs()HWWRj<$ zxDB?{Ns5|rKY7>QNv);bEtyP_t&U$u{eModL4mF5I)q`VV5$*vBs~f64(Nf%Y-xw^R_QpxQ zK3KU^H&gpMt1KFIOL%S7e(KihHW;wg9dNynIw0CVuvc(wcyNzcbpXEFs%nR_v%#Ga zt*efU2m)0CBcsV5k3H%EIO;bDJJx%sL!8y2*vsBi-3uGldt)1Wq%*d<_rYPnG1&AT zhr@p3oz)4rJg6VT6-<~^TAk7MW;<+NYtW|k0INx#xX9RGbcgh_!S=JQK3!#NVKygV z*7{tl#&ue0Jr7@Ex-PLz4zpH_#5zz5MzwUc16P_jl4iz;pJOkGxtg8U&gibPTGfHD zP;}}ZD$E?!u^e7`ymy9YUqJPt^)a#Fq2A6;-aoWybu?nQrs&S+CHsdb58pE~PqqDv zye3Eg?df}I$1gKWtSoah$@AmyJ50XGxqH;zq2Ez%+^hB9T=38N^sdXm{dwQ+DK`l> zhLu~i@A>ytrhcFAx7AytQd(JyR;%CbUfx5)AG-W>-)m>m=R zuea~2>$}(0ZYK13RKCfkf=f>szF*(M>)q-r?i~tsy;y(di08hl{KfZF+&9K#y_Xc5Eitr&^Zho+1=LZ>rw9g$Qoa=)t3sQ5u65B*#x$K+qDEKON8 zRd;1`&$U;rQGQGFC3%i||1Q^rwJAd;H>mV(^P67=|1f93OoO9~oVsaQin; zJLcLq=ZyJ88D0KUQy^_)wD&G?W8)W8eQm3YF_tWSLMz( zxbExCcW~L|?c#^y3-{ffXNk+9Z6l_;?Jeoj;?$-aJAHSwUo+1)&+NbaI~O}qZ$i#r zn;)Juw@b0esDz05m6CHGHupU||7%N^IVaauD08mN;Hbtv3%~6ZWpPUEr+u1yEdPe+ z!F!ID`tnkWx&QqeQ9m54T7FK^U)zQKeWg|IDeo2(e>h>=#8;QsZ);m~y1LcS_w_4p z#!a-X2Gtl&w6YdlbGE&;(HNJV>Kdauyq)pYpuA;rY|-`V=YUqs)gWo93~6ODaI|Xa z+hV_}=x@(!-Q9LD_p;Tfxh=SJk9b`|rL8J}EfX5veyzs4{5Mdfp<@klqHt#kT)F?Y_6qs5|nKGY1KHhx#@ z=mH;e?QrQcxbu}9gI|{W?U%0}G{1RkYNcP3w@1!Bm9NIauy1eee*JWNy!yk4-L0=* zzxB_}qJNYa=iBexwr$-OJ$^Vwb#!sg?YnyASo3i~VB8~1k(8fPYqu|zH|Nyk`h9YJ z-D|QX=hK?cYd)*aJ4LDqL^cvm0oA(xnoNttzQZF%S zyzh?(D^57@b81B2KFbm=Ou~JBZZC(t5-BSB?_2tZV1RB(H)GH+1u=%V$1gZ0G7eTi zjLN=t0*{-V=K4&EXa4aZaEM}G2B!Lz|v|O=vO`C3!YaPT_X2MlkOrZH< z`To*6h|kNkSb+%G4#0I8Q-;#WoF#tMvM@djE@_OQwX0Ye5txF^pjgE6*_xa#TUvN^ zI4TI?{#pl4Fa;GHmMf5f#sA7RmX_(oY}OY6rCfdO>Q+Vv#m#sQ$m^)SEb>P|Ut!a! z)LIXW-}mrXjrVa!OA#%DV0`{K%F z8ZMjVBE*|3*RDC!`Ao+)0cNvYyH=F-o826hmCMv?cFPs&Yd1+{kB<*`x#0t#bXVvzw&bIW4bA$`Z_4r z!s~S%i|vr>GaWMsvstc{ACGB=57%!@=ViBCp}x!*mDg9#bYAw#)nm(vQr`4-<1)S9 zXa{G;dPk(Mp6Nh2Kj_)+WJP_kr8fKJ^72M&%u4#w7Lsh2%Yyq9^|fnG867g!lMd)0 z=t;exC-n}tcqqnW2XaB%*tmYPYff2xGqWf4qCKe>>`A>~PwF$XCmoi{+mm|1o}`^g z8TOl_agnSqt$uUz#x!yUddFe8LVfL;Ue<3+oU&Q2-71yUmsz_CIxyXz-ExKc zG6#dAT&DXoD%Y;EKra{3xFv#TA^SFo!Mf?aLM z%$4h~T!FrVH`l;MkZjU{#e~VnH-mj-lF>Iaw}zwo3VsdR#L4j)Vnwpe4}!DUARPTc z+ha2<*MLwM#;ob~q``s1Sg3DiE@MaK3Ql8#;59ZN3Mbq3Wn-73-w@Bi(U;lu8SsOn z`m(W0QLa7MRmKmQ`AZy@%iARe!Cyir*JPUxg1>~$@8Rgc9L?FJgA^y8HjkxKQ@C<7 zb5A>>gJcS(mn(Rv4Vleb9F{B4SD3fZuJCNrSD3dLgn5f0vv~^z1o84__jk+muP|>h zW;SneP_9v!w-|+a3q{3cNC$`I^5eYG?iEj$3ks0ScDeRZC!G#PyT>QJTr1-ciGN$G z)Lt^@npI&8HIM6!xF!lFWvbL*taGDl-vndP&;L;mHyF4S~Xw4L{>-ObSVP4J*I;lD7=4M(&Y=$Hvm00;Ua|(wC zus7SPh#$(gzuV@M2!pXz(dOC5@3wWxEY-*6Cd{BhTHBzbvN_CAxJ`xQX-8^va;UVn zRWdy7m9v?cDy_|QWAWr!C6diYlR>3$uL+}w&Q1ZF7tjy8l5PD$Cy7uO+Pq?T+9q`f zS+sSu&R%(&S0`&dXPa4o8F2^%w^h9+vZpJ-8QD+Y5(1(vk@)H-m}D0Hj^l$O4$@E zj;XNAmQ78u4Ib2ObmW}vY5(0Wkv1a_zuOobPxgD3DrFltGN_czazf#D5w}?;c(-{6 z@w9cLZKMX=wuH+zNwCV=Rs-080N0Qpe;SS z%JHVtlIqu3rEyaGHbf>{7JEjmjun75vu9TnYqc39PU`lQ7(vS_MX^LnsSc=SXD3@r z{G7TXV3ppO@Hr{+Q2$7Iym})Q=&ZoYzsqyWtRb|Zv8soEcuX+9A+{BpFu+-I5;3DE z4Hc^o>wMJCw>9E1*;wVIwvA>!kpXSOD4sUW$Ws)RZY4OWJy=mp)KQdY1ijh}EWEZ; zY2C41LXnx0+Ufyrqu5`>{CXh*m}4Itz2K%XxM(ykxGBvyGAOeoEu$lY;sS9=S`ClD z=*R&7SXCO=sf_L#ccZEY4(!DlHDM94kujkt)FUo76rdV@!Eph>5vr#C_#ql_Rw??S zakPK$U|;`UDAeq(siVSS0>RPkqr>PbHk{exZg$rqd7Cgq9jj`z42}gnCNiSCcW^`m z!kZJ_10o}PxytMpD|3lRZMRX{H#pWm$UoL!wk5xVZ!;WR5F8N_8wxAIVxbbG2-ms| z5~5h3vnn7sBrKwyi;F5OsGduEqp!v{$}>1L%)4K7aO-}}+XVLO6=)4|Q3WK%2FKKM zK{;lZ2KDPk2lc4q=hax1&^tULrViffxrD~XM%7WP>FHEI_d9_e&Tis|+bh>VM+ z+A_qBb4LaBKz6-a!h-kA5+X?*IS=cIZrS>PmF4#rINTt350F6#PDtP8VC+64b7ThG`#5busj zD@*7fWg~4cN#5tEhV(?(upWt-rTPq+SOIn!$e@V&btxgEj*YoI!eeb;!o#Rdb;A84 zLh89BxCI6G@Q(|Rb*cXu64q6d2!w~#w|!y7sAXldpJn9DI>DpjqQjZ^1O=+GJD@kk zRf6c+G=2^WOrv=QX@dgm1d>*aj22i5KgE)=$(TP_3n1h5({%+#)_N|{kbft9v#Szm zv~@7`^@KhOkHm%uTC0h{)*%{8$RMz(Dhw7j#}Wold}pSGEp0RZfZ*^Lj6OD4`k0## z9oz$3ORczn6Qi>IA8p=(ldT7KrQ#n>iDcmr^j#HUgVA>iBc*>bn1!a*au}>VEm=Su zjF~-3m{vnG84hNlHYj1ZI$D6~*@Q%%4tBPMmJ#GIjRx}(KCfA0Br92&PQ!LTOQ#GgU>eM|MOs0` zxc&eRBQ2lF%hMqAhvuJh7;w;0gbEnaS;z@0Pp8r008S1D9AUU9?X_TEDW6W@dkx4!6Hj@0n5nWoy>b}v(g|aVbjZt2 zS(c{*UMnpQ%V9{zbh846X3(;R90nY8(4+#ULHF`BHQ*#RTAG*V)fljMjHe3;2*(G& zLECB-dEw=@ke^Im9%kj>awSZIv$=V^sEgPiM0}n%aDXRGaTPdl8Yl$@$ziCUAk!Lf z1}!bg(`j&oz99SPaSFzjr$haib4w1>7_mE$YcJF;b419~p}9r}^uv5wi34@E(z1&@ zFUkW|c^LYGOGovi8KN?;k>>au%xtAa4tY8~u2kU1ON|j*tU1~P2Siwz7wH6@sKG(1 zLQFs8nac@brzg(z{$BD$C(KI0WHq+sm20T!pj@Bs5_vGh3ss3{WLi9TA+&s zh{d|FfFgNbC=Cm5>j7fs?KRMVIqBqi;ZUHv6_jUQxg_aE|bH4m21YP@zbNy6AYlfpivrT*a0bf$!nB$FQd?Pm4jBuQPD4bp}E# z&5w}ILe6g`3Uaf~7z@UjpPB@PG!*Kb-Zc8N4K(-k<1 z@{mqP%c+X;0OVd%XW2#>%{a(ee9Sc@|-whtor} z4&(@v7e235&(Duwgkj#UOsB`CTKpJ*bXwkyKzq%+4UBYFUf+|&N(+6;_R{i#5(di$ zQvoFmc}=wXD$fhN779$1!(hCKbis8}ylz6SCY(R(U%B6YL!1wetL|#VV!1SD5$kGzFiUc^*g93pADzFV?E* zV0uMev{;Pf^#ST<=I6SAS@^agFY__U+olCWQwXmdhPr^%N*K~vcpn8sRm;!CDVd;i zV4?Fm5jZf(;c&pb=WPZpIEWtuFa<+(_`Eo!nv)seV8Q9~wqXsA?nhFzS4$=hM`z$* z8wZqmEyBDJstKcyvOM&!g)fil!jIF)E6l~=q_OgL1nNRJD=F#>7@f_efMI|a>4F&| zKlY$5bj1jl7xPeFeleDbvS1bE$Os1lC#%3A_*D=V0q+ur7hV-!e$h4yKVOAnvhqBx zHQ{0@js|G0&>vd(hr~X@+)AhmY;TS(D31=vQql_c5Z_*;gHlwc0}bdPEiNzQoYOB@ z7^34y73n|&c6bc|B^v}Bj$w~Whhc%&2hiDCem)Hxu*j8p;TWcy?-Y1ZXJO1kIzhka zGEbpapH8EK08!3zQkDq+~I2d@kdgYa{0LtTWq z8em`;AupZ5rogL%fbhNostZ33A{{(Vd|oRUO9|6kKrF7$$+X~g32+ELZln{&eHhAu zjsOmLP?dO*&cu%?z=6S*PY3@qS7&4ud>OD$1-}&VvhW@`uOTm;b*H2$D9YP8=ySSM zNRbZp!{lBGquC%o4}}>^t zs;7X#tV2_Hm<2<+5(d0xUjONEB_?kx0|%`{aX2t7t(!&)Fem(*eS;OU3OC_%3w9ouR^NF*H# z99DijqLp$H24|_z4%9`Um09RF9Cj<%^5mir+u>l{87?EC&tc#5eh}b*D@jQ|9c)5g z@4~cjU@OBM;@bgL!u#-mgB?>LrymaS)e1V+0xu6&9<3$|vTwokl9O}7!NU*?F4zo+ z{BS@6aXlV*>25(KUtzg|=QWfk@G0s7R#oQ3D1(pz4hD}j@6Q2V!R99|?x5eGi1_j_ z*X8@tie(K>K440L5%|0?&bac>4pDc4>jfPFKR<0hl=m-iz=NuU;d)&(Lr+I2gq@(L373~EMVg3uJ zqoA9x5rOWYRpbS&jJ!TTI?URY>3{>3R>I(b66Vu1BJ(m09KyJTbYK`|d4z+v|BwzV zP0Dn7EH3ive!wBDVIUpdPp@b%20Sc#DPejn%JK6uC@{Lij zN6rGSKd>qZ>q1!e~(B+4R4nK2KOPKmmK{9OkD3qWFs%XC=XVqkk`!H3`mC&Nl0hqbvtITSn}r6 z83ex%(qT$1q@zo3Il90s=5#yqV)Pc$32T8!C(1rfz~|R6uu!Sx{W*XMYe0apO{L0y z!;mM`87waFpHWy3KzYJ^i=y@TF%K}hRhgp;hF^gvA(yS zhS5Su2ZhhUV8A$l3AO+x#CicQ+#rH3fm#!Ei5@-x5ieFhg}SgCb`>&+0iB;i;5Kc+ z2LPC0{{bef5ddZs@oGh#Lj$l-XP^~eaI*^SpaF?*8x%g@A5db#SW5~^!~yS!P@WKn zg2jC+AOA<548a~JVhK1fnh7}IcNAep-WC83!AAy|FlPb`LddtnAnF{T73@En+6#4t zV^oCE6(36ZfaE*CE38E$>Pxg)u}UY{D)4Ly@&<3Bh!-wtq0bS^DbyMFpolPW?8Y%q z4)9t9Ima@XDAQQ{6mYzTc zh`xXWQ#BC=t;6F$2#W|aiE@s)vsj)GW35MorXX(yRGG&CN(pifmzyBdh!}GKL*zBr z4g)5lBFrM#0$9NnWEz^-0Zc2%8&s2s7ehSXAF$R0nMSyo0~mse_;zT8HCL!VY|7@- z=|q_}z%|GB5hDErc{5Z}#(J3`=LQg3pbMtDB8;5{ps-aiYZT-hE1wQv;yOFLry^d2MGCaS z@GH>8NVnW8$2{!e5akW~1B7-!wTn1JnTG3CkbR6~qP#(E2smK!3pikA3w6dqi3k(z zaX8!^;I)c!PJ#72UCe?n5;JGa{)BX*9f1`fQO@Dh7je*Knp}UFg>?;>8=@V7HBwQ| zu|O!42RDca6MX;%Z1@w}hM+*9KM+PHmPZ$Ya_xYlS||@wH4!HG{wZ2slxYeK7jT$F zd2_H<4i|tho|8M9FAtLH0LG4&Rmd;gbpl>mPv&Vw;qoF57zkWD;EoXF4I(YbIif8D zImi06Ak!G79l(S*WH|psJHiO_N@#}|_W*-cSn~pmT?nA06^3rU&ruUW&Jigj$g~kF zrvk0OLSlKM9YJgFLOaOQ%F`YbDG`Q<6(OByN5Cr}$T`;X1(`;?qXQTgF?bv>21FP< zKSDZDrXB1rLn9EZA>!__!y7BeIYROUImc#i5igJkIN&!EXm1qu9b+{f z(WZPm5ELW8OhPOecG5bKX-q=}ykIr4JkgFobeJgT@SBO{iGDq}1VuSFi*^KJS4BC; zG*rL=casPc)*G=wOtd3FQc=zw#OF|atbhaSE&{D!K8r9I9DKiFcoWM*u%wUT_2*Vj$hk?3jUtbhAp3C33vv$AR>TVj7SC6R zJrZOZ`}`fi5D3rH3gP?$43lR82PUTiT`>6*VQ_WvI5343VZu2WZ~}`mja@N&`xYC8Y_z;4AU6_2jc2Q z7+hF4NFG0~j0wLSE61z|Ijt&Ov!Wrm@4_0gPP=qp&yVm<|Ci{ANNsXwj9g zpBU4NRdxs_m(GIlU4AVPnv;)Pf&&VIq|6I}VVB^^>kJqu$fv`>E*uW5zE?6ZUEWChXxL_aq-@gy;xiFBv?Hf(;C!fIB$4 zz^BT`#9-$u0=fBg#C%Kb=j6*98QdjN&;h5 zov{zq9dVRsqZKDlqA#pCLRW7G!A0PXJrh=ISCzVTTtIAMR4~ekjEaj=*^f!}h=@Ql zam*c^t4HU00xP;R9cx2&elDWe+-ct~g8ba+SSzb49j_dTgPX8b>c)}Lz1dNrsHsZb zBsvo4sX;hJy-l=#L`)Q2@f?_lTBxK$L%}L)U;o(XFr3{>xp1N_`^dh_n?x9-7IkP5 z(32=bZHkG-IfT8Pof76YI`&PmA*w=+PR}p<>PfpNU*{~lchsM`%BOZe+~gPUK3^Yc z>oj87gd6p53=69Hr_)#NkNy7KGHZ3^;rX3Qe*Ep@z<_v~~0Mn=~-SCDa}*S!M9ow z@34^2aC~B=P84Mx)Pnty&acv?>nzls*EMwhpGm1}2!y5BZ0j1}C5@WaeVnq<8%fz9 zblIkCcr5=dWkXjsXF-gz!NF~h)hi5bGwQE-Bffc&$G4YjgVKIqblLey<^7W->B-XW z-5TfGd#2K!fkQ6WsFJ&v$IzqSl#Cd?r)RSfWoy3PZd$N@$Ao2(4d0gRHYo4$jhb_J zm#M}sDxK@VtFo&P7HxHY7&On^N-n(|$^$40i~WB{(fAwz&K4OwOsd5 zA7oAUpcE3l&nTZXp>iYw>B`3_DH@req`{bOfjYF(T^TkJwUq|PiB<-ar8Ai2%FLE7 z4QAI>1`{bWoCAW>^4-Z92X&SPv!_WDU|AXoCMq=P7e{T)rb2@SCv{C{$zYPSyuIJ( z{t_GMyQUjIwp&Kh^bymPI1Si-@k#mxF*uIJ)@hEf7)UeLq-zXhx5_cMKJ~Y4M5P0Y znXMw(4$KmCqKaspooH%{{l>De1v1b~Dr?$Lve~2rqh(>qN>77f&MLqVA1c6PCsj&$ zfjuosSb|{zL?{nSbs|i5qMNgmWN9;d_B$BSH4@HR6PJxC+vjrAp%sP&?D*iS5<%#D sx%my^MhExBy%%IGV^oyc=`b_Men-a|8BNnoYbQ_k diff --git a/doc/team.yml b/doc/team.yml index 382d84efa..2169aab60 100644 --- a/doc/team.yml +++ b/doc/team.yml @@ -1,7 +1,7 @@ -members: - - name: Andy Alejandro Castañeda Guerra - github: Yumenio - group: C412 - - name: Richard García De la Osa - github: Regnod - group: C412 +members: + - name: Adrián Rodríguez Portales + github: adrian13579 + group: C412 + - name: Rdrigo Pino + github: RodroVMS + group: C412 diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..4531e801c --- /dev/null +++ b/poetry.lock @@ -0,0 +1,167 @@ +[[package]] +name = "atomicwrites" +version = "1.4.0" +description = "Atomic file writes." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "attrs" +version = "21.4.0" +description = "Classes Without Boilerplate" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] + +[[package]] +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "ply" +version = "3.11" +description = "Python Lex & Yacc" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "pyparsing" +version = "3.0.6" +description = "Python parsing module" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pytest" +version = "6.2.5" +description = "pytest: simple powerful testing with Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +py = ">=1.8.2" +toml = "*" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[metadata] +lock-version = "1.1" +python-versions = "^3.10" +content-hash = "f576a82b5e6c2b19c78eb67cb6508703b706de1eca9d33f7bc29c732a6b070ca" + +[metadata.files] +atomicwrites = [ + {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, + {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, +] +attrs = [ + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +pluggy = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] +ply = [ + {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, + {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, +] +py = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] +pyparsing = [ + {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, + {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, +] +pytest = [ + {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, + {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..1cc2c14dd --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,17 @@ +[tool.poetry] +name = "cool-compiler-2021" +version = "0.1.0" +description = "COOL language compiler" +authors = ["rodrigo-pino "] +license = "MIT" + +[tool.poetry.dependencies] +python = "^3.10" +pytest = "^6.2.5" +ply = "^3.11" + +[tool.poetry.dev-dependencies] + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/requirements.txt b/requirements.txt index c250faba6..9eb0cad1a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -pytest -pytest-ordering +pytest +pytest-ordering diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 000000000..9221b85c5 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[flake8] +ignore = F811 diff --git a/tests/boku/test1.cl b/tests/boku/test1.cl deleted file mode 100644 index 22f339fa2..000000000 --- a/tests/boku/test1.cl +++ /dev/null @@ -1,20 +0,0 @@ -class A { - a: Int; - f1(): Int { a <- 3 }; -}; - -class B inherits A { - b: Int; - f1(): Int { a <- 4}; -}; - -class C inherits B { - c: Int; -}; - -class Main inherits IO { - a: A <- new A; - main(): Int { { if true then let x: B <- new B in x@A.f1() else 1 fi; 0; } }; - const(): Int { while 1 loop 0 pool }; - test: Int <- let y: Int <- 1 in y; -}; diff --git a/tests/codegen/arith.cl b/tests/codegen/arith.cl old mode 100644 new mode 100755 index 0d9f5dd33..af5951cf7 --- a/tests/codegen/arith.cl +++ b/tests/codegen/arith.cl @@ -1,430 +1,430 @@ -(* - * A contribution from Anne Sheets (sheets@cory) - * - * Tests the arithmetic operations and various other things - *) - -class A { - - var : Int <- 0; - - value() : Int { var }; - - set_var(num : Int) : A{ - { - var <- num; - self; - } - }; - - method1(num : Int) : A { -- same - self - }; - - method2(num1 : Int, num2 : Int) : A { -- plus - (let x : Int in - { - x <- num1 + num2; - (new B).set_var(x); - } - ) - }; - - method3(num : Int) : A { -- negate - (let x : Int in - { - x <- ~num; - (new C).set_var(x); - } - ) - }; - - method4(num1 : Int, num2 : Int) : A { -- diff - if num2 < num1 then - (let x : Int in - { - x <- num1 - num2; - (new D).set_var(x); - } - ) - else - (let x : Int in - { - x <- num2 - num1; - (new D).set_var(x); - } - ) - fi - }; - - method5(num : Int) : A { -- factorial - (let x : Int <- 1 in - { - (let y : Int <- 1 in - while y <= num loop - { - x <- x * y; - y <- y + 1; - } - pool - ); - (new E).set_var(x); - } - ) - }; - -}; - -class B inherits A { -- B is a number squared - - method5(num : Int) : A { -- square - (let x : Int in - { - x <- num * num; - (new E).set_var(x); - } - ) - }; - -}; - -class C inherits B { - - method6(num : Int) : A { -- negate - (let x : Int in - { - x <- ~num; - (new A).set_var(x); - } - ) - }; - - method5(num : Int) : A { -- cube - (let x : Int in - { - x <- num * num * num; - (new E).set_var(x); - } - ) - }; - -}; - -class D inherits B { - - method7(num : Int) : Bool { -- divisible by 3 - (let x : Int <- num in - if x < 0 then method7(~x) else - if 0 = x then true else - if 1 = x then false else - if 2 = x then false else - method7(x - 3) - fi fi fi fi - ) - }; - -}; - -class E inherits D { - - method6(num : Int) : A { -- division - (let x : Int in - { - x <- num / 8; - (new A).set_var(x); - } - ) - }; - -}; - -(* The following code is from atoi.cl in ~cs164/examples *) - -(* - The class A2I provides integer-to-string and string-to-integer -conversion routines. To use these routines, either inherit them -in the class where needed, have a dummy variable bound to -something of type A2I, or simpl write (new A2I).method(argument). -*) - - -(* - c2i Converts a 1-character string to an integer. Aborts - if the string is not "0" through "9" -*) -class A2I { - - c2i(char : String) : Int { - if char = "0" then 0 else - if char = "1" then 1 else - if char = "2" then 2 else - if char = "3" then 3 else - if char = "4" then 4 else - if char = "5" then 5 else - if char = "6" then 6 else - if char = "7" then 7 else - if char = "8" then 8 else - if char = "9" then 9 else - { abort(); 0; } (* the 0 is needed to satisfy the - typchecker *) - fi fi fi fi fi fi fi fi fi fi - }; - -(* - i2c is the inverse of c2i. -*) - i2c(i : Int) : String { - if i = 0 then "0" else - if i = 1 then "1" else - if i = 2 then "2" else - if i = 3 then "3" else - if i = 4 then "4" else - if i = 5 then "5" else - if i = 6 then "6" else - if i = 7 then "7" else - if i = 8 then "8" else - if i = 9 then "9" else - { abort(); ""; } -- the "" is needed to satisfy the typchecker - fi fi fi fi fi fi fi fi fi fi - }; - -(* - a2i converts an ASCII string into an integer. The empty string -is converted to 0. Signed and unsigned strings are handled. The -method aborts if the string does not represent an integer. Very -long strings of digits produce strange answers because of arithmetic -overflow. - -*) - a2i(s : String) : Int { - if s.length() = 0 then 0 else - if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else - if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else - a2i_aux(s) - fi fi fi - }; - -(* a2i_aux converts the usigned portion of the string. As a - programming example, this method is written iteratively. *) - - - a2i_aux(s : String) : Int { - (let int : Int <- 0 in - { - (let j : Int <- s.length() in - (let i : Int <- 0 in - while i < j loop - { - int <- int * 10 + c2i(s.substr(i,1)); - i <- i + 1; - } - pool - ) - ); - int; - } - ) - }; - -(* i2a converts an integer to a string. Positive and negative - numbers are handled correctly. *) - - i2a(i : Int) : String { - if i = 0 then "0" else - if 0 < i then i2a_aux(i) else - "-".concat(i2a_aux(i * ~1)) - fi fi - }; - -(* i2a_aux is an example using recursion. *) - - i2a_aux(i : Int) : String { - if i = 0 then "" else - (let next : Int <- i / 10 in - i2a_aux(next).concat(i2c(i - next * 10)) - ) - fi - }; - -}; - -class Main inherits IO { - - char : String; - avar : A; - a_var : A; - flag : Bool <- true; - - - menu() : String { - { - out_string("\n\tTo add a number to "); - print(avar); - out_string("...enter a:\n"); - out_string("\tTo negate "); - print(avar); - out_string("...enter b:\n"); - out_string("\tTo find the difference between "); - print(avar); - out_string("and another number...enter c:\n"); - out_string("\tTo find the factorial of "); - print(avar); - out_string("...enter d:\n"); - out_string("\tTo square "); - print(avar); - out_string("...enter e:\n"); - out_string("\tTo cube "); - print(avar); - out_string("...enter f:\n"); - out_string("\tTo find out if "); - print(avar); - out_string("is a multiple of 3...enter g:\n"); - out_string("\tTo divide "); - print(avar); - out_string("by 8...enter h:\n"); - out_string("\tTo get a new number...enter j:\n"); - out_string("\tTo quit...enter q:\n\n"); - in_string(); - } - }; - - prompt() : String { - { - out_string("\n"); - out_string("Please enter a number... "); - in_string(); - } - }; - - get_int() : Int { - { - (let z : A2I <- new A2I in - (let s : String <- prompt() in - z.a2i(s) - ) - ); - } - }; - - is_even(num : Int) : Bool { - (let x : Int <- num in - if x < 0 then is_even(~x) else - if 0 = x then true else - if 1 = x then false else - is_even(x - 2) - fi fi fi - ) - }; - - class_type(var : A) : IO { - case var of - a : A => out_string("Class type is now A\n"); - b : B => out_string("Class type is now B\n"); - c : C => out_string("Class type is now C\n"); - d : D => out_string("Class type is now D\n"); - e : E => out_string("Class type is now E\n"); - o : Object => out_string("Oooops\n"); - esac - }; - - print(var : A) : IO { - (let z : A2I <- new A2I in - { - out_string(z.i2a(var.value())); - out_string(" "); - } - ) - }; - - main() : Object { - { - avar <- (new A); - while flag loop - { - -- avar <- (new A).set_var(get_int()); - out_string("number "); - print(avar); - if is_even(avar.value()) then - out_string("is even!\n") - else - out_string("is odd!\n") - fi; - -- print(avar); -- prints out answer - class_type(avar); - char <- menu(); - if char = "a" then -- add - { - a_var <- (new A).set_var(get_int()); - avar <- (new B).method2(avar.value(), a_var.value()); - } else - if char = "b" then -- negate - case avar of - c : C => avar <- c.method6(c.value()); - a : A => avar <- a.method3(a.value()); - o : Object => { - out_string("Oooops\n"); - abort(); 0; - }; - esac else - if char = "c" then -- diff - { - a_var <- (new A).set_var(get_int()); - avar <- (new D).method4(avar.value(), a_var.value()); - } else - if char = "d" then avar <- (new C)@A.method5(avar.value()) else - -- factorial - if char = "e" then avar <- (new C)@B.method5(avar.value()) else - -- square - if char = "f" then avar <- (new C)@C.method5(avar.value()) else - -- cube - if char = "g" then -- multiple of 3? - if ((new D).method7(avar.value())) - then -- avar <- (new A).method1(avar.value()) - { - out_string("number "); - print(avar); - out_string("is divisible by 3.\n"); - } - else -- avar <- (new A).set_var(0) - { - out_string("number "); - print(avar); - out_string("is not divisible by 3.\n"); - } - fi else - if char = "h" then - (let x : A in - { - x <- (new E).method6(avar.value()); - (let r : Int <- (avar.value() - (x.value() * 8)) in - { - out_string("number "); - print(avar); - out_string("is equal to "); - print(x); - out_string("times 8 with a remainder of "); - (let a : A2I <- new A2I in - { - out_string(a.i2a(r)); - out_string("\n"); - } - ); -- end let a: - } - ); -- end let r: - avar <- x; - } - ) -- end let x: - else - if char = "j" then avar <- (new A) - else - if char = "q" then flag <- false - else - avar <- (new A).method1(avar.value()) -- divide/8 - fi fi fi fi fi fi fi fi fi fi; - } - pool; - } - }; - -}; - +(* + * A contribution from Anne Sheets (sheets@cory) + * + * Tests the arithmetic operations and various other things + *) + +class A { + + var : Int <- 0; + + value() : Int { var }; + + set_var(num : Int) : A{ + { + var <- num; + self; + } + }; + + method1(num : Int) : A { -- same + self + }; + + method2(num1 : Int, num2 : Int) : A { -- plus + (let x : Int in + { + x <- num1 + num2; + (new B).set_var(x); + } + ) + }; + + method3(num : Int) : A { -- negate + (let x : Int in + { + x <- ~num; + (new C).set_var(x); + } + ) + }; + + method4(num1 : Int, num2 : Int) : A { -- diff + if num2 < num1 then + (let x : Int in + { + x <- num1 - num2; + (new D).set_var(x); + } + ) + else + (let x : Int in + { + x <- num2 - num1; + (new D).set_var(x); + } + ) + fi + }; + + method5(num : Int) : A { -- factorial + (let x : Int <- 1 in + { + (let y : Int <- 1 in + while y <= num loop + { + x <- x * y; + y <- y + 1; + } + pool + ); + (new E).set_var(x); + } + ) + }; + +}; + +class B inherits A { -- B is a number squared + + method5(num : Int) : A { -- square + (let x : Int in + { + x <- num * num; + (new E).set_var(x); + } + ) + }; + +}; + +class C inherits B { + + method6(num : Int) : A { -- negate + (let x : Int in + { + x <- ~num; + (new A).set_var(x); + } + ) + }; + + method5(num : Int) : A { -- cube + (let x : Int in + { + x <- num * num * num; + (new E).set_var(x); + } + ) + }; + +}; + +class D inherits B { + + method7(num : Int) : Bool { -- divisible by 3 + (let x : Int <- num in + if x < 0 then method7(~x) else + if 0 = x then true else + if 1 = x then false else + if 2 = x then false else + method7(x - 3) + fi fi fi fi + ) + }; + +}; + +class E inherits D { + + method6(num : Int) : A { -- division + (let x : Int in + { + x <- num / 8; + (new A).set_var(x); + } + ) + }; + +}; + +(* The following code is from atoi.cl in ~cs164/examples *) + +(* + The class A2I provides integer-to-string and string-to-integer +conversion routines. To use these routines, either inherit them +in the class where needed, have a dummy variable bound to +something of type A2I, or simpl write (new A2I).method(argument). +*) + + +(* + c2i Converts a 1-character string to an integer. Aborts + if the string is not "0" through "9" +*) +class A2I { + + c2i(char : String) : Int { + if char = "0" then 0 else + if char = "1" then 1 else + if char = "2" then 2 else + if char = "3" then 3 else + if char = "4" then 4 else + if char = "5" then 5 else + if char = "6" then 6 else + if char = "7" then 7 else + if char = "8" then 8 else + if char = "9" then 9 else + { abort(); 0; } (* the 0 is needed to satisfy the + typchecker *) + fi fi fi fi fi fi fi fi fi fi + }; + +(* + i2c is the inverse of c2i. +*) + i2c(i : Int) : String { + if i = 0 then "0" else + if i = 1 then "1" else + if i = 2 then "2" else + if i = 3 then "3" else + if i = 4 then "4" else + if i = 5 then "5" else + if i = 6 then "6" else + if i = 7 then "7" else + if i = 8 then "8" else + if i = 9 then "9" else + { abort(); ""; } -- the "" is needed to satisfy the typchecker + fi fi fi fi fi fi fi fi fi fi + }; + +(* + a2i converts an ASCII string into an integer. The empty string +is converted to 0. Signed and unsigned strings are handled. The +method aborts if the string does not represent an integer. Very +long strings of digits produce strange answers because of arithmetic +overflow. + +*) + a2i(s : String) : Int { + if s.length() = 0 then 0 else + if s.substr(0,1) = "-" then ~a2i_aux(s.substr(1,s.length()-1)) else + if s.substr(0,1) = "+" then a2i_aux(s.substr(1,s.length()-1)) else + a2i_aux(s) + fi fi fi + }; + +(* a2i_aux converts the usigned portion of the string. As a + programming example, this method is written iteratively. *) + + + a2i_aux(s : String) : Int { + (let int : Int <- 0 in + { + (let j : Int <- s.length() in + (let i : Int <- 0 in + while i < j loop + { + int <- int * 10 + c2i(s.substr(i,1)); + i <- i + 1; + } + pool + ) + ); + int; + } + ) + }; + +(* i2a converts an integer to a string. Positive and negative + numbers are handled correctly. *) + + i2a(i : Int) : String { + if i = 0 then "0" else + if 0 < i then i2a_aux(i) else + "-".concat(i2a_aux(i * ~1)) + fi fi + }; + +(* i2a_aux is an example using recursion. *) + + i2a_aux(i : Int) : String { + if i = 0 then "" else + (let next : Int <- i / 10 in + i2a_aux(next).concat(i2c(i - next * 10)) + ) + fi + }; + +}; + +class Main inherits IO { + + char : String; + avar : A; + a_var : A; + flag : Bool <- true; + + + menu() : String { + { + out_string("\n\tTo add a number to "); + print(avar); + out_string("...enter a:\n"); + out_string("\tTo negate "); + print(avar); + out_string("...enter b:\n"); + out_string("\tTo find the difference between "); + print(avar); + out_string("and another number...enter c:\n"); + out_string("\tTo find the factorial of "); + print(avar); + out_string("...enter d:\n"); + out_string("\tTo square "); + print(avar); + out_string("...enter e:\n"); + out_string("\tTo cube "); + print(avar); + out_string("...enter f:\n"); + out_string("\tTo find out if "); + print(avar); + out_string("is a multiple of 3...enter g:\n"); + out_string("\tTo divide "); + print(avar); + out_string("by 8...enter h:\n"); + out_string("\tTo get a new number...enter j:\n"); + out_string("\tTo quit...enter q:\n\n"); + in_string(); + } + }; + + prompt() : String { + { + out_string("\n"); + out_string("Please enter a number... "); + in_string(); + } + }; + + get_int() : Int { + { + (let z : A2I <- new A2I in + (let s : String <- prompt() in + z.a2i(s) + ) + ); + } + }; + + is_even(num : Int) : Bool { + (let x : Int <- num in + if x < 0 then is_even(~x) else + if 0 = x then true else + if 1 = x then false else + is_even(x - 2) + fi fi fi + ) + }; + + class_type(var : A) : IO { + case var of + a : A => out_string("Class type is now A\n"); + b : B => out_string("Class type is now B\n"); + c : C => out_string("Class type is now C\n"); + d : D => out_string("Class type is now D\n"); + e : E => out_string("Class type is now E\n"); + o : Object => out_string("Oooops\n"); + esac + }; + + print(var : A) : IO { + (let z : A2I <- new A2I in + { + out_string(z.i2a(var.value())); + out_string(" "); + } + ) + }; + + main() : Object { + { + avar <- (new A); + while flag loop + { + -- avar <- (new A).set_var(get_int()); + out_string("number "); + print(avar); + if is_even(avar.value()) then + out_string("is even!\n") + else + out_string("is odd!\n") + fi; + -- print(avar); -- prints out answer + class_type(avar); + char <- menu(); + if char = "a" then -- add + { + a_var <- (new A).set_var(get_int()); + avar <- (new B).method2(avar.value(), a_var.value()); + } else + if char = "b" then -- negate + case avar of + c : C => avar <- c.method6(c.value()); + a : A => avar <- a.method3(a.value()); + o : Object => { + out_string("Oooops\n"); + abort(); 0; + }; + esac else + if char = "c" then -- diff + { + a_var <- (new A).set_var(get_int()); + avar <- (new D).method4(avar.value(), a_var.value()); + } else + if char = "d" then avar <- (new C)@A.method5(avar.value()) else + -- factorial + if char = "e" then avar <- (new C)@B.method5(avar.value()) else + -- square + if char = "f" then avar <- (new C)@C.method5(avar.value()) else + -- cube + if char = "g" then -- multiple of 3? + if ((new D).method7(avar.value())) + then -- avar <- (new A).method1(avar.value()) + { + out_string("number "); + print(avar); + out_string("is divisible by 3.\n"); + } + else -- avar <- (new A).set_var(0) + { + out_string("number "); + print(avar); + out_string("is not divisible by 3.\n"); + } + fi else + if char = "h" then + (let x : A in + { + x <- (new E).method6(avar.value()); + (let r : Int <- (avar.value() - (x.value() * 8)) in + { + out_string("number "); + print(avar); + out_string("is equal to "); + print(x); + out_string("times 8 with a remainder of "); + (let a : A2I <- new A2I in + { + out_string(a.i2a(r)); + out_string("\n"); + } + ); -- end let a: + } + ); -- end let r: + avar <- x; + } + ) -- end let x: + else + if char = "j" then avar <- (new A) + else + if char = "q" then flag <- false + else + avar <- (new A).method1(avar.value()) -- divide/8 + fi fi fi fi fi fi fi fi fi fi; + } + pool; + } + }; + +}; + diff --git a/tests/codegen/arith_input.txt b/tests/codegen/arith_input.txt index c431a225b..83e05b1ea 100644 --- a/tests/codegen/arith_input.txt +++ b/tests/codegen/arith_input.txt @@ -1,13 +1,13 @@ -a -1 -b -c -0 -d -e -f -g -h -j -5 -q +a +1 +b +c +0 +d +e +f +g +h +j +5 +q diff --git a/tests/codegen/arith_output.txt b/tests/codegen/arith_output.txt index 476cb3bad..44b4ce73e 100644 --- a/tests/codegen/arith_output.txt +++ b/tests/codegen/arith_output.txt @@ -1,158 +1,158 @@ -number 0 is even! -Class type is now A - - To add a number to 0 ...enter a: - To negate 0 ...enter b: - To find the difference between 0 and another number...enter c: - To find the factorial of 0 ...enter d: - To square 0 ...enter e: - To cube 0 ...enter f: - To find out if 0 is a multiple of 3...enter g: - To divide 0 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - - -Please enter a number... number 1 is odd! -Class type is now B - - To add a number to 1 ...enter a: - To negate 1 ...enter b: - To find the difference between 1 and another number...enter c: - To find the factorial of 1 ...enter d: - To square 1 ...enter e: - To cube 1 ...enter f: - To find out if 1 is a multiple of 3...enter g: - To divide 1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number -1 is odd! -Class type is now C - - To add a number to -1 ...enter a: - To negate -1 ...enter b: - To find the difference between -1 and another number...enter c: - To find the factorial of -1 ...enter d: - To square -1 ...enter e: - To cube -1 ...enter f: - To find out if -1 is a multiple of 3...enter g: - To divide -1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - - -Please enter a number... number 1 is odd! -Class type is now D - - To add a number to 1 ...enter a: - To negate 1 ...enter b: - To find the difference between 1 and another number...enter c: - To find the factorial of 1 ...enter d: - To square 1 ...enter e: - To cube 1 ...enter f: - To find out if 1 is a multiple of 3...enter g: - To divide 1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 1 is odd! -Class type is now E - - To add a number to 1 ...enter a: - To negate 1 ...enter b: - To find the difference between 1 and another number...enter c: - To find the factorial of 1 ...enter d: - To square 1 ...enter e: - To cube 1 ...enter f: - To find out if 1 is a multiple of 3...enter g: - To divide 1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 1 is odd! -Class type is now E - - To add a number to 1 ...enter a: - To negate 1 ...enter b: - To find the difference between 1 and another number...enter c: - To find the factorial of 1 ...enter d: - To square 1 ...enter e: - To cube 1 ...enter f: - To find out if 1 is a multiple of 3...enter g: - To divide 1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 1 is odd! -Class type is now E - - To add a number to 1 ...enter a: - To negate 1 ...enter b: - To find the difference between 1 and another number...enter c: - To find the factorial of 1 ...enter d: - To square 1 ...enter e: - To cube 1 ...enter f: - To find out if 1 is a multiple of 3...enter g: - To divide 1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 1 is not divisible by 3. -number 1 is odd! -Class type is now E - - To add a number to 1 ...enter a: - To negate 1 ...enter b: - To find the difference between 1 and another number...enter c: - To find the factorial of 1 ...enter d: - To square 1 ...enter e: - To cube 1 ...enter f: - To find out if 1 is a multiple of 3...enter g: - To divide 1 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 1 is equal to 0 times 8 with a remainder of 1 -number 0 is even! -Class type is now A - - To add a number to 0 ...enter a: - To negate 0 ...enter b: - To find the difference between 0 and another number...enter c: - To find the factorial of 0 ...enter d: - To square 0 ...enter e: - To cube 0 ...enter f: - To find out if 0 is a multiple of 3...enter g: - To divide 0 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 0 is even! -Class type is now A - - To add a number to 0 ...enter a: - To negate 0 ...enter b: - To find the difference between 0 and another number...enter c: - To find the factorial of 0 ...enter d: - To square 0 ...enter e: - To cube 0 ...enter f: - To find out if 0 is a multiple of 3...enter g: - To divide 0 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - -number 0 is even! -Class type is now A - - To add a number to 0 ...enter a: - To negate 0 ...enter b: - To find the difference between 0 and another number...enter c: - To find the factorial of 0 ...enter d: - To square 0 ...enter e: - To cube 0 ...enter f: - To find out if 0 is a multiple of 3...enter g: - To divide 0 by 8...enter h: - To get a new number...enter j: - To quit...enter q: - +number 0 is even! +Class type is now A + + To add a number to 0 ...enter a: + To negate 0 ...enter b: + To find the difference between 0 and another number...enter c: + To find the factorial of 0 ...enter d: + To square 0 ...enter e: + To cube 0 ...enter f: + To find out if 0 is a multiple of 3...enter g: + To divide 0 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + + +Please enter a number... number 1 is odd! +Class type is now B + + To add a number to 1 ...enter a: + To negate 1 ...enter b: + To find the difference between 1 and another number...enter c: + To find the factorial of 1 ...enter d: + To square 1 ...enter e: + To cube 1 ...enter f: + To find out if 1 is a multiple of 3...enter g: + To divide 1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number -1 is odd! +Class type is now C + + To add a number to -1 ...enter a: + To negate -1 ...enter b: + To find the difference between -1 and another number...enter c: + To find the factorial of -1 ...enter d: + To square -1 ...enter e: + To cube -1 ...enter f: + To find out if -1 is a multiple of 3...enter g: + To divide -1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + + +Please enter a number... number 1 is odd! +Class type is now D + + To add a number to 1 ...enter a: + To negate 1 ...enter b: + To find the difference between 1 and another number...enter c: + To find the factorial of 1 ...enter d: + To square 1 ...enter e: + To cube 1 ...enter f: + To find out if 1 is a multiple of 3...enter g: + To divide 1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 1 is odd! +Class type is now E + + To add a number to 1 ...enter a: + To negate 1 ...enter b: + To find the difference between 1 and another number...enter c: + To find the factorial of 1 ...enter d: + To square 1 ...enter e: + To cube 1 ...enter f: + To find out if 1 is a multiple of 3...enter g: + To divide 1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 1 is odd! +Class type is now E + + To add a number to 1 ...enter a: + To negate 1 ...enter b: + To find the difference between 1 and another number...enter c: + To find the factorial of 1 ...enter d: + To square 1 ...enter e: + To cube 1 ...enter f: + To find out if 1 is a multiple of 3...enter g: + To divide 1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 1 is odd! +Class type is now E + + To add a number to 1 ...enter a: + To negate 1 ...enter b: + To find the difference between 1 and another number...enter c: + To find the factorial of 1 ...enter d: + To square 1 ...enter e: + To cube 1 ...enter f: + To find out if 1 is a multiple of 3...enter g: + To divide 1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 1 is not divisible by 3. +number 1 is odd! +Class type is now E + + To add a number to 1 ...enter a: + To negate 1 ...enter b: + To find the difference between 1 and another number...enter c: + To find the factorial of 1 ...enter d: + To square 1 ...enter e: + To cube 1 ...enter f: + To find out if 1 is a multiple of 3...enter g: + To divide 1 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 1 is equal to 0 times 8 with a remainder of 1 +number 0 is even! +Class type is now A + + To add a number to 0 ...enter a: + To negate 0 ...enter b: + To find the difference between 0 and another number...enter c: + To find the factorial of 0 ...enter d: + To square 0 ...enter e: + To cube 0 ...enter f: + To find out if 0 is a multiple of 3...enter g: + To divide 0 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 0 is even! +Class type is now A + + To add a number to 0 ...enter a: + To negate 0 ...enter b: + To find the difference between 0 and another number...enter c: + To find the factorial of 0 ...enter d: + To square 0 ...enter e: + To cube 0 ...enter f: + To find out if 0 is a multiple of 3...enter g: + To divide 0 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + +number 0 is even! +Class type is now A + + To add a number to 0 ...enter a: + To negate 0 ...enter b: + To find the difference between 0 and another number...enter c: + To find the factorial of 0 ...enter d: + To square 0 ...enter e: + To cube 0 ...enter f: + To find out if 0 is a multiple of 3...enter g: + To divide 0 by 8...enter h: + To get a new number...enter j: + To quit...enter q: + diff --git a/tests/codegen/atoi_output.txt b/tests/codegen/atoi_output.txt index c51d7bad6..51b815a48 100644 --- a/tests/codegen/atoi_output.txt +++ b/tests/codegen/atoi_output.txt @@ -1 +1 @@ -678987 == 678987 +678987 == 678987 diff --git a/tests/codegen/book_list.cl b/tests/codegen/book_list.cl old mode 100644 new mode 100755 index d39f86bbe..025ea1695 --- a/tests/codegen/book_list.cl +++ b/tests/codegen/book_list.cl @@ -1,132 +1,132 @@ --- example of static and dynamic type differing for a dispatch - -Class Book inherits IO { - title : String; - author : String; - - initBook(title_p : String, author_p : String) : Book { - { - title <- title_p; - author <- author_p; - self; - } - }; - - print() : Book { - { - out_string("title: ").out_string(title).out_string("\n"); - out_string("author: ").out_string(author).out_string("\n"); - self; - } - }; -}; - -Class Article inherits Book { - per_title : String; - - initArticle(title_p : String, author_p : String, - per_title_p : String) : Article { - { - initBook(title_p, author_p); - per_title <- per_title_p; - self; - } - }; - - print() : Book { - { - self@Book.print(); - out_string("periodical: ").out_string(per_title).out_string("\n"); - self; - } - }; -}; - -Class BookList inherits IO { - (* Since abort "returns" type Object, we have to add - an expression of type Bool here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - isNil() : Bool { { abort(); true; } }; - - cons(hd : Book) : Cons { - (let new_cell : Cons <- new Cons in - new_cell.init(hd,self) - ) - }; - - (* Since abort "returns" type Object, we have to add - an expression of type Book here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - car() : Book { { abort(); new Book; } }; - - (* Since abort "returns" type Object, we have to add - an expression of type BookList here to satisfy the typechecker. - This code is unreachable, since abort() halts the program. - *) - cdr() : BookList { { abort(); new BookList; } }; - - print_list() : Object { abort() }; -}; - -Class Cons inherits BookList { - xcar : Book; -- We keep the car and cdr in attributes. - xcdr : BookList; -- Because methods and features must have different names, - -- we use xcar and xcdr for the attributes and reserve - -- car and cdr for the features. - - isNil() : Bool { false }; - - init(hd : Book, tl : BookList) : Cons { - { - xcar <- hd; - xcdr <- tl; - self; - } - }; - - car() : Book { xcar }; - - cdr() : BookList { xcdr }; - - print_list() : Object { - { - case xcar.print() of - dummy : Book => out_string("- dynamic type was Book -\n"); - dummy : Article => out_string("- dynamic type was Article -\n"); - esac; - xcdr.print_list(); - } - }; -}; - -Class Nil inherits BookList { - isNil() : Bool { true }; - - print_list() : Object { true }; -}; - - -Class Main { - - books : BookList; - - main() : Object { - (let a_book : Book <- - (new Book).initBook("Compilers, Principles, Techniques, and Tools", - "Aho, Sethi, and Ullman") - in - (let an_article : Article <- - (new Article).initArticle("The Top 100 CD_ROMs", - "Ulanoff", - "PC Magazine") - in - { - books <- (new Nil).cons(a_book).cons(an_article); - books.print_list(); - } - ) -- end let an_article - ) -- end let a_book - }; -}; +-- example of static and dynamic type differing for a dispatch + +Class Book inherits IO { + title : String; + author : String; + + initBook(title_p : String, author_p : String) : Book { + { + title <- title_p; + author <- author_p; + self; + } + }; + + print() : Book { + { + out_string("title: ").out_string(title).out_string("\n"); + out_string("author: ").out_string(author).out_string("\n"); + self; + } + }; +}; + +Class Article inherits Book { + per_title : String; + + initArticle(title_p : String, author_p : String, + per_title_p : String) : Article { + { + initBook(title_p, author_p); + per_title <- per_title_p; + self; + } + }; + + print() : Book { + { + self@Book.print(); + out_string("periodical: ").out_string(per_title).out_string("\n"); + self; + } + }; +}; + +Class BookList inherits IO { + (* Since abort "returns" type Object, we have to add + an expression of type Bool here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + isNil() : Bool { { abort(); true; } }; + + cons(hd : Book) : Cons { + (let new_cell : Cons <- new Cons in + new_cell.init(hd,self) + ) + }; + + (* Since abort "returns" type Object, we have to add + an expression of type Book here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + car() : Book { { abort(); new Book; } }; + + (* Since abort "returns" type Object, we have to add + an expression of type BookList here to satisfy the typechecker. + This code is unreachable, since abort() halts the program. + *) + cdr() : BookList { { abort(); new BookList; } }; + + print_list() : Object { abort() }; +}; + +Class Cons inherits BookList { + xcar : Book; -- We keep the car and cdr in attributes. + xcdr : BookList; -- Because methods and features must have different names, + -- we use xcar and xcdr for the attributes and reserve + -- car and cdr for the features. + + isNil() : Bool { false }; + + init(hd : Book, tl : BookList) : Cons { + { + xcar <- hd; + xcdr <- tl; + self; + } + }; + + car() : Book { xcar }; + + cdr() : BookList { xcdr }; + + print_list() : Object { + { + case xcar.print() of + dummy : Book => out_string("- dynamic type was Book -\n"); + dummy : Article => out_string("- dynamic type was Article -\n"); + esac; + xcdr.print_list(); + } + }; +}; + +Class Nil inherits BookList { + isNil() : Bool { true }; + + print_list() : Object { true }; +}; + + +Class Main { + + books : BookList; + + main() : Object { + (let a_book : Book <- + (new Book).initBook("Compilers, Principles, Techniques, and Tools", + "Aho, Sethi, and Ullman") + in + (let an_article : Article <- + (new Article).initArticle("The Top 100 CD_ROMs", + "Ulanoff", + "PC Magazine") + in + { + books <- (new Nil).cons(a_book).cons(an_article); + books.print_list(); + } + ) -- end let an_article + ) -- end let a_book + }; +}; diff --git a/tests/codegen/book_list_output.txt b/tests/codegen/book_list_output.txt index ced587a4f..3408320b2 100644 --- a/tests/codegen/book_list_output.txt +++ b/tests/codegen/book_list_output.txt @@ -1,7 +1,7 @@ -title: The Top 100 CD_ROMs -author: Ulanoff -periodical: PC Magazine -- dynamic type was Article - -title: Compilers, Principles, Techniques, and Tools -author: Aho, Sethi, and Ullman -- dynamic type was Book - +title: The Top 100 CD_ROMs +author: Ulanoff +periodical: PC Magazine +- dynamic type was Article - +title: Compilers, Principles, Techniques, and Tools +author: Aho, Sethi, and Ullman +- dynamic type was Book - diff --git a/tests/codegen/cells.cl b/tests/codegen/cells.cl old mode 100644 new mode 100755 index bcd891498..9fd6741bb --- a/tests/codegen/cells.cl +++ b/tests/codegen/cells.cl @@ -1,97 +1,97 @@ -(* models one-dimensional cellular automaton on a circle of finite radius - arrays are faked as Strings, - X's respresent live cells, dots represent dead cells, - no error checking is done *) -class CellularAutomaton inherits IO { - population_map : String; - - init(map : String) : CellularAutomaton { - { - population_map <- map; - self; - } - }; - - print() : CellularAutomaton { - { - out_string(population_map.concat("\n")); - self; - } - }; - - num_cells() : Int { - population_map.length() - }; - - cell(position : Int) : String { - population_map.substr(position, 1) - }; - - cell_left_neighbor(position : Int) : String { - if position = 0 then - cell(num_cells() - 1) - else - cell(position - 1) - fi - }; - - cell_right_neighbor(position : Int) : String { - if position = num_cells() - 1 then - cell(0) - else - cell(position + 1) - fi - }; - - (* a cell will live if exactly 1 of itself and it's immediate - neighbors are alive *) - cell_at_next_evolution(position : Int) : String { - if (if cell(position) = "X" then 1 else 0 fi - + if cell_left_neighbor(position) = "X" then 1 else 0 fi - + if cell_right_neighbor(position) = "X" then 1 else 0 fi - = 1) - then - "X" - else - "." - fi - }; - - evolve() : CellularAutomaton { - (let position : Int in - (let num : Int <- num_cells() in - (let temp : String in - { - while position < num loop - { - temp <- temp.concat(cell_at_next_evolution(position)); - position <- position + 1; - } - pool; - population_map <- temp; - self; - } - ) ) ) - }; -}; - -class Main { - cells : CellularAutomaton; - - main() : Main { - { - cells <- (new CellularAutomaton).init(" X "); - cells.print(); - (let countdown : Int <- 20 in - while 0 < countdown loop - { - cells.evolve(); - cells.print(); - countdown <- countdown - 1; - } - pool - ); - self; - } - }; -}; +(* models one-dimensional cellular automaton on a circle of finite radius + arrays are faked as Strings, + X's respresent live cells, dots represent dead cells, + no error checking is done *) +class CellularAutomaton inherits IO { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + self; + } + }; + + print() : CellularAutomaton { + { + out_string(population_map.concat("\n")); + self; + } + }; + + num_cells() : Int { + population_map.length() + }; + + cell(position : Int) : String { + population_map.substr(position, 1) + }; + + cell_left_neighbor(position : Int) : String { + if position = 0 then + cell(num_cells() - 1) + else + cell(position - 1) + fi + }; + + cell_right_neighbor(position : Int) : String { + if position = num_cells() - 1 then + cell(0) + else + cell(position + 1) + fi + }; + + (* a cell will live if exactly 1 of itself and it's immediate + neighbors are alive *) + cell_at_next_evolution(position : Int) : String { + if (if cell(position) = "X" then 1 else 0 fi + + if cell_left_neighbor(position) = "X" then 1 else 0 fi + + if cell_right_neighbor(position) = "X" then 1 else 0 fi + = 1) + then + "X" + else + "." + fi + }; + + evolve() : CellularAutomaton { + (let position : Int in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) + }; +}; + +class Main { + cells : CellularAutomaton; + + main() : Main { + { + cells <- (new CellularAutomaton).init(" X "); + cells.print(); + (let countdown : Int <- 20 in + while 0 < countdown loop + { + cells.evolve(); + cells.print(); + countdown <- countdown - 1; + } + pool + ); + self; + } + }; +}; diff --git a/tests/codegen/cells_output.txt b/tests/codegen/cells_output.txt index 9d06c27bc..6304902cc 100644 --- a/tests/codegen/cells_output.txt +++ b/tests/codegen/cells_output.txt @@ -1,21 +1,21 @@ - X -........XXX........ -.......X...X....... -......XXX.XXX...... -.....X.......X..... -....XXX.....XXX.... -...X...X...X...X... -..XXX.XXX.XXX.XXX.. -.X...............X. -XXX.............XXX -...X...........X... -..XXX.........XXX.. -.X...X.......X...X. -XXX.XXX.....XXX.XXX -.......X...X....... -......XXX.XXX...... -.....X.......X..... -....XXX.....XXX.... -...X...X...X...X... -..XXX.XXX.XXX.XXX.. -.X...............X. + X +........XXX........ +.......X...X....... +......XXX.XXX...... +.....X.......X..... +....XXX.....XXX.... +...X...X...X...X... +..XXX.XXX.XXX.XXX.. +.X...............X. +XXX.............XXX +...X...........X... +..XXX.........XXX.. +.X...X.......X...X. +XXX.XXX.....XXX.XXX +.......X...X....... +......XXX.XXX...... +.....X.......X..... +....XXX.....XXX.... +...X...X...X...X... +..XXX.XXX.XXX.XXX.. +.X...............X. diff --git a/tests/codegen/complex.cl b/tests/codegen/complex.cl old mode 100644 new mode 100755 index 9edb6151d..0b7aa44e9 --- a/tests/codegen/complex.cl +++ b/tests/codegen/complex.cl @@ -1,52 +1,52 @@ -class Main inherits IO { - main() : IO { - (let c : Complex <- (new Complex).init(1, 1) in - if c.reflect_X().reflect_Y() = c.reflect_0() - then out_string("=)\n") - else out_string("=(\n") - fi - ) - }; -}; - -class Complex inherits IO { - x : Int; - y : Int; - - init(a : Int, b : Int) : Complex { - { - x = a; - y = b; - self; - } - }; - - print() : Object { - if y = 0 - then out_int(x) - else out_int(x).out_string("+").out_int(y).out_string("I") - fi - }; - - reflect_0() : Complex { - { - x = ~x; - y = ~y; - self; - } - }; - - reflect_X() : Complex { - { - y = ~y; - self; - } - }; - - reflect_Y() : Complex { - { - x = ~x; - self; - } - }; -}; +class Main inherits IO { + main() : IO { + (let c : Complex <- (new Complex).init(1, 1) in + if c.reflect_X().reflect_Y() = c.reflect_0() + then out_string("=)\n") + else out_string("=(\n") + fi + ) + }; +}; + +class Complex inherits IO { + x : Int; + y : Int; + + init(a : Int, b : Int) : Complex { + { + x = a; + y = b; + self; + } + }; + + print() : Object { + if y = 0 + then out_int(x) + else out_int(x).out_string("+").out_int(y).out_string("I") + fi + }; + + reflect_0() : Complex { + { + x = ~x; + y = ~y; + self; + } + }; + + reflect_X() : Complex { + { + y = ~y; + self; + } + }; + + reflect_Y() : Complex { + { + x = ~x; + self; + } + }; +}; diff --git a/tests/codegen/complex_output.txt b/tests/codegen/complex_output.txt index 7d6173685..18b77c1fc 100644 --- a/tests/codegen/complex_output.txt +++ b/tests/codegen/complex_output.txt @@ -1 +1 @@ -=) +=) diff --git a/tests/codegen/fib.cl b/tests/codegen/fib.cl index ced8cee48..08ceaede8 100644 --- a/tests/codegen/fib.cl +++ b/tests/codegen/fib.cl @@ -1,29 +1,29 @@ -class Main inherits IO { - -- the class has features. Only methods in this case. - main(): Object { - { - out_string("Enter n to find nth fibonacci number!\n"); - out_int(fib(in_int())); - out_string("\n"); - } - }; - - fib(i : Int) : Int { -- list of formals. And the return type of the method. - let a : Int <- 1, - b : Int <- 0, - c : Int <- 0 - in - { - while (not (i = 0)) loop -- expressions are nested. - { - c <- a + b; - i <- i - 1; - b <- a; - a <- c; - } - pool; - c; - } - }; - -}; +class Main inherits IO { + -- the class has features. Only methods in this case. + main(): Object { + { + out_string("Enter n to find nth fibonacci number!\n"); + out_int(fib(in_int())); + out_string("\n"); + } + }; + + fib(i : Int) : Int { -- list of formals. And the return type of the method. + let a : Int <- 1, + b : Int <- 0, + c : Int <- 0 + in + { + while (not (i = 0)) loop -- expressions are nested. + { + c <- a + b; + i <- i - 1; + b <- a; + a <- c; + } + pool; + c; + } + }; + +}; diff --git a/tests/codegen/fib_input.txt b/tests/codegen/fib_input.txt index d43401489..f599e28b8 100644 --- a/tests/codegen/fib_input.txt +++ b/tests/codegen/fib_input.txt @@ -1 +1 @@ -10 +10 diff --git a/tests/codegen/fib_output.txt b/tests/codegen/fib_output.txt index 2552f4479..d402da6af 100644 --- a/tests/codegen/fib_output.txt +++ b/tests/codegen/fib_output.txt @@ -1,2 +1,2 @@ -Enter n to find nth fibonacci number! -89 +Enter n to find nth fibonacci number! +89 diff --git a/tests/codegen/graph.cl b/tests/codegen/graph.cl old mode 100644 new mode 100755 index 59e29bbf4..8e511358c --- a/tests/codegen/graph.cl +++ b/tests/codegen/graph.cl @@ -1,381 +1,381 @@ -(* - * Cool program reading descriptions of weighted directed graphs - * from stdin. It builds up a graph objects with a list of vertices - * and a list of edges. Every vertice has a list of outgoing edges. - * - * INPUT FORMAT - * Every line has the form vertice successor* - * Where vertice is an int, and successor is vertice,weight - * - * An empty line or EOF terminates the input. - * - * The list of vertices and the edge list is printed out by the Main - * class. - * - * TEST - * Once compiled, the file g1.graph can be fed to the program. - * The output should look like this: - -nautilus.CS.Berkeley.EDU 53# spim -file graph.s (new Bar); - n : Foo => (new Razz); - n : Bar => n; - esac; - - b : Int <- a.doh() + g.doh() + doh() + printh(); - - doh() : Int { (let i : Int <- h in { h <- h + 2; i; } ) }; - -}; - -class Bar inherits Razz { - - c : Int <- doh(); - - d : Object <- printh(); -}; - - -class Razz inherits Foo { - - e : Bar <- case self of - n : Razz => (new Bar); - n : Bar => n; - esac; - - f : Int <- a@Bazz.doh() + g.doh() + e.doh() + doh() + printh(); - -}; - -class Bazz inherits IO { - - h : Int <- 1; - - g : Foo <- case self of - n : Bazz => (new Foo); - n : Razz => (new Bar); - n : Foo => (new Razz); - n : Bar => n; - esac; - - i : Object <- printh(); - - printh() : Int { { out_int(h); 0; } }; - - doh() : Int { (let i: Int <- h in { h <- h + 1; i; } ) }; -}; - -(* scary . . . *) -class Main { - a : Bazz <- new Bazz; - b : Foo <- new Foo; - c : Razz <- new Razz; - d : Bar <- new Bar; - - main(): String { "do nothing" }; - -}; - - - - - +(* hairy . . .*) + +class Foo inherits Bazz { + a : Razz <- case self of + n : Razz => (new Bar); + n : Foo => (new Razz); + n : Bar => n; + esac; + + b : Int <- a.doh() + g.doh() + doh() + printh(); + + doh() : Int { (let i : Int <- h in { h <- h + 2; i; } ) }; + +}; + +class Bar inherits Razz { + + c : Int <- doh(); + + d : Object <- printh(); +}; + + +class Razz inherits Foo { + + e : Bar <- case self of + n : Razz => (new Bar); + n : Bar => n; + esac; + + f : Int <- a@Bazz.doh() + g.doh() + e.doh() + doh() + printh(); + +}; + +class Bazz inherits IO { + + h : Int <- 1; + + g : Foo <- case self of + n : Bazz => (new Foo); + n : Razz => (new Bar); + n : Foo => (new Razz); + n : Bar => n; + esac; + + i : Object <- printh(); + + printh() : Int { { out_int(h); 0; } }; + + doh() : Int { (let i: Int <- h in { h <- h + 1; i; } ) }; +}; + +(* scary . . . *) +class Main { + a : Bazz <- new Bazz; + b : Foo <- new Foo; + c : Razz <- new Razz; + d : Bar <- new Bar; + + main(): String { "do nothing" }; + +}; + + + + + diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl old mode 100644 new mode 100755 index e06954b10..0c818f908 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,20 +1,5 @@ -class Main inherits IO { - b : B <- new B; - main(x: Int): IO { - out_int(b.a()) - }; -}; - -class A { - aa : Int; - a(): Int { - aa - }; -}; - -class B inherits A{ - bb : Int; - b(): Int { - bb - }; -}; \ No newline at end of file +class Main inherits IO { + main(): IO { + out_string("Hello, World.\n") + }; +}; diff --git a/tests/codegen/hello_world_output.txt b/tests/codegen/hello_world_output.txt index 9c1c7a002..349db2bfe 100644 --- a/tests/codegen/hello_world_output.txt +++ b/tests/codegen/hello_world_output.txt @@ -1 +1 @@ -Hello, World. +Hello, World. diff --git a/tests/codegen/io.cl b/tests/codegen/io.cl old mode 100644 new mode 100755 index 42ee6854e..7f0de869e --- a/tests/codegen/io.cl +++ b/tests/codegen/io.cl @@ -1,103 +1,103 @@ -(* - * The IO class is predefined and has 4 methods: - * - * out_string(s : String) : SELF_TYPE - * out_int(i : Int) : SELF_TYPE - * in_string() : String - * in_int() : Int - * - * The out operations print their argument to the terminal. The - * in_string method reads an entire line from the terminal and returns a - * string not containing the new line. The in_int method also reads - * an entire line from the terminal and returns the integer - * corresponding to the first non blank word on the line. If that - * word is not an integer, it returns 0. - * - * - * Because our language is object oriented, we need an object of type - * IO in order to call any of these methods. - * - * There are basically two ways of getting access to IO in a class C. - * - * 1) Define C to Inherit from IO. This way the IO methods become - * methods of C, and they can be called using the abbreviated - * dispatch, i.e. - * - * class C inherits IO is - * ... - * out_string("Hello world\n") - * ... - * end; - * - * 2) If your class C does not directly or indirectly inherit from - * IO, the best way to access IO is through an initialized - * attribute of type IO. - * - * class C inherits Foo is - * io : IO <- new IO; - * ... - * io.out_string("Hello world\n"); - * ... - * end; - * - * Approach 1) is most often used, in particular when you need IO - * functions in the Main class. - * - *) - - -class A { - - -- Let's assume that we don't want A to not inherit from IO. - - io : IO <- new IO; - - out_a() : Object { io.out_string("A: Hello world\n") }; - -}; - - -class B inherits A { - - -- B does not have to an extra attribute, since it inherits io from A. - - out_b() : Object { io.out_string("B: Hello world\n") }; - -}; - - -class C inherits IO { - - -- Now the IO methods are part of C. - - out_c() : Object { out_string("C: Hello world\n") }; - - -- Note that out_string(...) is just a shorthand for self.out_string(...) - -}; - - -class D inherits C { - - -- Inherits IO methods from C. - - out_d() : Object { out_string("D: Hello world\n") }; - -}; - - -class Main inherits IO { - - -- Same case as class C. - - main() : Object { - { - (new A).out_a(); - (new B).out_b(); - (new C).out_c(); - (new D).out_d(); - out_string("Done.\n"); - } - }; - -}; +(* + * The IO class is predefined and has 4 methods: + * + * out_string(s : String) : SELF_TYPE + * out_int(i : Int) : SELF_TYPE + * in_string() : String + * in_int() : Int + * + * The out operations print their argument to the terminal. The + * in_string method reads an entire line from the terminal and returns a + * string not containing the new line. The in_int method also reads + * an entire line from the terminal and returns the integer + * corresponding to the first non blank word on the line. If that + * word is not an integer, it returns 0. + * + * + * Because our language is object oriented, we need an object of type + * IO in order to call any of these methods. + * + * There are basically two ways of getting access to IO in a class C. + * + * 1) Define C to Inherit from IO. This way the IO methods become + * methods of C, and they can be called using the abbreviated + * dispatch, i.e. + * + * class C inherits IO is + * ... + * out_string("Hello world\n") + * ... + * end; + * + * 2) If your class C does not directly or indirectly inherit from + * IO, the best way to access IO is through an initialized + * attribute of type IO. + * + * class C inherits Foo is + * io : IO <- new IO; + * ... + * io.out_string("Hello world\n"); + * ... + * end; + * + * Approach 1) is most often used, in particular when you need IO + * functions in the Main class. + * + *) + + +class A { + + -- Let's assume that we don't want A to not inherit from IO. + + io : IO <- new IO; + + out_a() : Object { io.out_string("A: Hello world\n") }; + +}; + + +class B inherits A { + + -- B does not have to an extra attribute, since it inherits io from A. + + out_b() : Object { io.out_string("B: Hello world\n") }; + +}; + + +class C inherits IO { + + -- Now the IO methods are part of C. + + out_c() : Object { out_string("C: Hello world\n") }; + + -- Note that out_string(...) is just a shorthand for self.out_string(...) + +}; + + +class D inherits C { + + -- Inherits IO methods from C. + + out_d() : Object { out_string("D: Hello world\n") }; + +}; + + +class Main inherits IO { + + -- Same case as class C. + + main() : Object { + { + (new A).out_a(); + (new B).out_b(); + (new C).out_c(); + (new D).out_d(); + out_string("Done.\n"); + } + }; + +}; diff --git a/tests/codegen/io_output.txt b/tests/codegen/io_output.txt index 870cffce6..f846f596d 100644 --- a/tests/codegen/io_output.txt +++ b/tests/codegen/io_output.txt @@ -1,5 +1,5 @@ -A: Hello world -B: Hello world -C: Hello world -D: Hello world -Done. +A: Hello world +B: Hello world +C: Hello world +D: Hello world +Done. diff --git a/tests/codegen/life.cl b/tests/codegen/life.cl old mode 100644 new mode 100755 index 7d7a41fdb..b83d97957 --- a/tests/codegen/life.cl +++ b/tests/codegen/life.cl @@ -1,436 +1,436 @@ -(* The Game of Life - Tendo Kayiira, Summer '95 - With code taken from /private/cool/class/examples/cells.cl - - This introduction was taken off the internet. It gives a brief - description of the Game Of Life. It also gives the rules by which - this particular game follows. - - Introduction - - John Conway's Game of Life is a mathematical amusement, but it - is also much more: an insight into how a system of simple - cellualar automata can create complex, odd, and often aesthetically - pleasing patterns. It is played on a cartesian grid of cells - which are either 'on' or 'off' The game gets it's name from the - similarity between the behaviour of these cells and the behaviour - of living organisms. - - The Rules - - The playfield is a cartesian grid of arbitrary size. Each cell in - this grid can be in an 'on' state or an 'off' state. On each 'turn' - (called a generation,) the state of each cell changes simultaneously - depending on it's state and the state of all cells adjacent to it. - - For 'on' cells, - If the cell has 0 or 1 neighbours which are 'on', the cell turns - 'off'. ('dies of loneliness') - If the cell has 2 or 3 neighbours which are 'on', the cell stays - 'on'. (nothing happens to that cell) - If the cell has 4, 5, 6, 7, 8, or 9 neighbours which are 'on', - the cell turns 'off'. ('dies of overcrowding') - - For 'off' cells, - If the cell has 0, 1, 2, 4, 5, 6, 7, 8, or 9 neighbours which - are 'on', the cell stays 'off'. (nothing happens to that cell) - If the cell has 3 neighbours which are 'on', the cell turns - 'on'. (3 neighbouring 'alive' cells 'give birth' to a fourth.) - - Repeat for as many generations as desired. - - *) - - -class Board inherits IO { - - rows : Int; - columns : Int; - board_size : Int; - - size_of_board(initial : String) : Int { - initial.length() - }; - - board_init(start : String) : Board { - (let size :Int <- size_of_board(start) in - { - if size = 15 then - { - rows <- 3; - columns <- 5; - board_size <- size; - } - else if size = 16 then - { - rows <- 4; - columns <- 4; - board_size <- size; - } - else if size = 20 then - { - rows <- 4; - columns <- 5; - board_size <- size; - } - else if size = 21 then - { - rows <- 3; - columns <- 7; - board_size <- size; - } - else if size = 25 then - { - rows <- 5; - columns <- 5; - board_size <- size; - } - else if size = 28 then - { - rows <- 7; - columns <- 4; - board_size <- size; - } - else -- If none of the above fit, then just give - { -- the configuration of the most common board - rows <- 5; - columns <- 5; - board_size <- size; - } - fi fi fi fi fi fi; - self; - } - ) - }; - -}; - - - -class CellularAutomaton inherits Board { - population_map : String; - - init(map : String) : CellularAutomaton { - { - population_map <- map; - board_init(map); - self; - } - }; - - - - - print() : CellularAutomaton { - - (let i : Int <- 0 in - (let num : Int <- board_size in - { - out_string("\n"); - while i < num loop - { - out_string(population_map.substr(i,columns)); - out_string("\n"); - i <- i + columns; - } - pool; - out_string("\n"); - self; - } - ) ) - }; - - num_cells() : Int { - population_map.length() - }; - - cell(position : Int) : String { - if board_size - 1 < position then - " " - else - population_map.substr(position, 1) - fi - }; - - north(position : Int): String { - if (position - columns) < 0 then - " " - else - cell(position - columns) - fi - }; - - south(position : Int): String { - if board_size < (position + columns) then - " " - else - cell(position + columns) - fi - }; - - east(position : Int): String { - if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - cell(position + 1) - fi - }; - - west(position : Int): String { - if position = 0 then - " " - else - if ((position / columns) * columns) = position then - " " - else - cell(position - 1) - fi fi - }; - - northwest(position : Int): String { - if (position - columns) < 0 then - " " - else if ((position / columns) * columns) = position then - " " - else - north(position - 1) - fi fi - }; - - northeast(position : Int): String { - if (position - columns) < 0 then - " " - else if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - north(position + 1) - fi fi - }; - - southeast(position : Int): String { - if board_size < (position + columns) then - " " - else if (((position + 1) /columns ) * columns) = (position + 1) then - " " - else - south(position + 1) - fi fi - }; - - southwest(position : Int): String { - if board_size < (position + columns) then - " " - else if ((position / columns) * columns) = position then - " " - else - south(position - 1) - fi fi - }; - - neighbors(position: Int): Int { - { - if north(position) = "X" then 1 else 0 fi - + if south(position) = "X" then 1 else 0 fi - + if east(position) = "X" then 1 else 0 fi - + if west(position) = "X" then 1 else 0 fi - + if northeast(position) = "X" then 1 else 0 fi - + if northwest(position) = "X" then 1 else 0 fi - + if southeast(position) = "X" then 1 else 0 fi - + if southwest(position) = "X" then 1 else 0 fi; - } - }; - - -(* A cell will live if 2 or 3 of it's neighbors are alive. It dies - otherwise. A cell is born if only 3 of it's neighbors are alive. *) - - cell_at_next_evolution(position : Int) : String { - - if neighbors(position) = 3 then - "X" - else - if neighbors(position) = 2 then - if cell(position) = "X" then - "X" - else - "-" - fi - else - "-" - fi fi - }; - - - evolve() : CellularAutomaton { - (let position : Int <- 0 in - (let num : Int <- num_cells() in - (let temp : String in - { - while position < num loop - { - temp <- temp.concat(cell_at_next_evolution(position)); - position <- position + 1; - } - pool; - population_map <- temp; - self; - } - ) ) ) - }; - -(* This is where the background pattern is detremined by the user. More - patterns can be added as long as whoever adds keeps the board either - 3x5, 4x5, 5x5, 3x7, 7x4, 4x4 with the row first then column. *) - option(): String { - { - (let num : Int in - { - out_string("\nPlease chose a number:\n"); - out_string("\t1: A cross\n"); - out_string("\t2: A slash from the upper left to lower right\n"); - out_string("\t3: A slash from the upper right to lower left\n"); - out_string("\t4: An X\n"); - out_string("\t5: A greater than sign \n"); - out_string("\t6: A less than sign\n"); - out_string("\t7: Two greater than signs\n"); - out_string("\t8: Two less than signs\n"); - out_string("\t9: A 'V'\n"); - out_string("\t10: An inverse 'V'\n"); - out_string("\t11: Numbers 9 and 10 combined\n"); - out_string("\t12: A full grid\n"); - out_string("\t13: A 'T'\n"); - out_string("\t14: A plus '+'\n"); - out_string("\t15: A 'W'\n"); - out_string("\t16: An 'M'\n"); - out_string("\t17: An 'E'\n"); - out_string("\t18: A '3'\n"); - out_string("\t19: An 'O'\n"); - out_string("\t20: An '8'\n"); - out_string("\t21: An 'S'\n"); - out_string("Your choice => "); - num <- in_int(); - out_string("\n"); - if num = 1 then - " XX XXXX XXXX XX " - else if num = 2 then - " X X X X X " - else if num = 3 then - "X X X X X" - else if num = 4 then - "X X X X X X X X X" - else if num = 5 then - "X X X X X " - else if num = 6 then - " X X X X X" - else if num = 7 then - "X X X XX X " - else if num = 8 then - " X XX X X X " - else if num = 9 then - "X X X X X " - else if num = 10 then - " X X X X X" - else if num = 11 then - "X X X X X X X X" - else if num = 12 then - "XXXXXXXXXXXXXXXXXXXXXXXXX" - else if num = 13 then - "XXXXX X X X X " - else if num = 14 then - " X X XXXXX X X " - else if num = 15 then - "X X X X X X X " - else if num = 16 then - " X X X X X X X" - else if num = 17 then - "XXXXX X XXXXX X XXXX" - else if num = 18 then - "XXX X X X X XXXX " - else if num = 19 then - " XX X XX X XX " - else if num = 20 then - " XX X XX X XX X XX X XX " - else if num = 21 then - " XXXX X XX X XXXX " - else - " " - fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi; - } - ); - } - }; - - - - - prompt() : Bool { - { - (let ans : String in - { - out_string("Would you like to continue with the next generation? \n"); - out_string("Please use lowercase y or n for your answer [y]: "); - ans <- in_string(); - out_string("\n"); - if ans = "n" then - false - else - true - fi; - } - ); - } - }; - - - prompt2() : Bool { - (let ans : String in - { - out_string("\n\n"); - out_string("Would you like to choose a background pattern? \n"); - out_string("Please use lowercase y or n for your answer [n]: "); - ans <- in_string(); - if ans = "y" then - true - else - false - fi; - } - ) - }; - - -}; - -class Main inherits CellularAutomaton { - cells : CellularAutomaton; - - main() : Main { - { - (let continue : Bool in - (let choice : String in - { - out_string("Welcome to the Game of Life.\n"); - out_string("There are many initial states to choose from. \n"); - while prompt2() loop - { - continue <- true; - choice <- option(); - cells <- (new CellularAutomaton).init(choice); - cells.print(); - while continue loop - if prompt() then - { - cells.evolve(); - cells.print(); - } - else - continue <- false - fi - pool; - } - pool; - self; - } ) ); } - }; -}; - +(* The Game of Life + Tendo Kayiira, Summer '95 + With code taken from /private/cool/class/examples/cells.cl + + This introduction was taken off the internet. It gives a brief + description of the Game Of Life. It also gives the rules by which + this particular game follows. + + Introduction + + John Conway's Game of Life is a mathematical amusement, but it + is also much more: an insight into how a system of simple + cellualar automata can create complex, odd, and often aesthetically + pleasing patterns. It is played on a cartesian grid of cells + which are either 'on' or 'off' The game gets it's name from the + similarity between the behaviour of these cells and the behaviour + of living organisms. + + The Rules + + The playfield is a cartesian grid of arbitrary size. Each cell in + this grid can be in an 'on' state or an 'off' state. On each 'turn' + (called a generation,) the state of each cell changes simultaneously + depending on it's state and the state of all cells adjacent to it. + + For 'on' cells, + If the cell has 0 or 1 neighbours which are 'on', the cell turns + 'off'. ('dies of loneliness') + If the cell has 2 or 3 neighbours which are 'on', the cell stays + 'on'. (nothing happens to that cell) + If the cell has 4, 5, 6, 7, 8, or 9 neighbours which are 'on', + the cell turns 'off'. ('dies of overcrowding') + + For 'off' cells, + If the cell has 0, 1, 2, 4, 5, 6, 7, 8, or 9 neighbours which + are 'on', the cell stays 'off'. (nothing happens to that cell) + If the cell has 3 neighbours which are 'on', the cell turns + 'on'. (3 neighbouring 'alive' cells 'give birth' to a fourth.) + + Repeat for as many generations as desired. + + *) + + +class Board inherits IO { + + rows : Int; + columns : Int; + board_size : Int; + + size_of_board(initial : String) : Int { + initial.length() + }; + + board_init(start : String) : Board { + (let size :Int <- size_of_board(start) in + { + if size = 15 then + { + rows <- 3; + columns <- 5; + board_size <- size; + } + else if size = 16 then + { + rows <- 4; + columns <- 4; + board_size <- size; + } + else if size = 20 then + { + rows <- 4; + columns <- 5; + board_size <- size; + } + else if size = 21 then + { + rows <- 3; + columns <- 7; + board_size <- size; + } + else if size = 25 then + { + rows <- 5; + columns <- 5; + board_size <- size; + } + else if size = 28 then + { + rows <- 7; + columns <- 4; + board_size <- size; + } + else -- If none of the above fit, then just give + { -- the configuration of the most common board + rows <- 5; + columns <- 5; + board_size <- size; + } + fi fi fi fi fi fi; + self; + } + ) + }; + +}; + + + +class CellularAutomaton inherits Board { + population_map : String; + + init(map : String) : CellularAutomaton { + { + population_map <- map; + board_init(map); + self; + } + }; + + + + + print() : CellularAutomaton { + + (let i : Int <- 0 in + (let num : Int <- board_size in + { + out_string("\n"); + while i < num loop + { + out_string(population_map.substr(i,columns)); + out_string("\n"); + i <- i + columns; + } + pool; + out_string("\n"); + self; + } + ) ) + }; + + num_cells() : Int { + population_map.length() + }; + + cell(position : Int) : String { + if board_size - 1 < position then + " " + else + population_map.substr(position, 1) + fi + }; + + north(position : Int): String { + if (position - columns) < 0 then + " " + else + cell(position - columns) + fi + }; + + south(position : Int): String { + if board_size < (position + columns) then + " " + else + cell(position + columns) + fi + }; + + east(position : Int): String { + if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + cell(position + 1) + fi + }; + + west(position : Int): String { + if position = 0 then + " " + else + if ((position / columns) * columns) = position then + " " + else + cell(position - 1) + fi fi + }; + + northwest(position : Int): String { + if (position - columns) < 0 then + " " + else if ((position / columns) * columns) = position then + " " + else + north(position - 1) + fi fi + }; + + northeast(position : Int): String { + if (position - columns) < 0 then + " " + else if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + north(position + 1) + fi fi + }; + + southeast(position : Int): String { + if board_size < (position + columns) then + " " + else if (((position + 1) /columns ) * columns) = (position + 1) then + " " + else + south(position + 1) + fi fi + }; + + southwest(position : Int): String { + if board_size < (position + columns) then + " " + else if ((position / columns) * columns) = position then + " " + else + south(position - 1) + fi fi + }; + + neighbors(position: Int): Int { + { + if north(position) = "X" then 1 else 0 fi + + if south(position) = "X" then 1 else 0 fi + + if east(position) = "X" then 1 else 0 fi + + if west(position) = "X" then 1 else 0 fi + + if northeast(position) = "X" then 1 else 0 fi + + if northwest(position) = "X" then 1 else 0 fi + + if southeast(position) = "X" then 1 else 0 fi + + if southwest(position) = "X" then 1 else 0 fi; + } + }; + + +(* A cell will live if 2 or 3 of it's neighbors are alive. It dies + otherwise. A cell is born if only 3 of it's neighbors are alive. *) + + cell_at_next_evolution(position : Int) : String { + + if neighbors(position) = 3 then + "X" + else + if neighbors(position) = 2 then + if cell(position) = "X" then + "X" + else + "-" + fi + else + "-" + fi fi + }; + + + evolve() : CellularAutomaton { + (let position : Int <- 0 in + (let num : Int <- num_cells() in + (let temp : String in + { + while position < num loop + { + temp <- temp.concat(cell_at_next_evolution(position)); + position <- position + 1; + } + pool; + population_map <- temp; + self; + } + ) ) ) + }; + +(* This is where the background pattern is detremined by the user. More + patterns can be added as long as whoever adds keeps the board either + 3x5, 4x5, 5x5, 3x7, 7x4, 4x4 with the row first then column. *) + option(): String { + { + (let num : Int in + { + out_string("\nPlease chose a number:\n"); + out_string("\t1: A cross\n"); + out_string("\t2: A slash from the upper left to lower right\n"); + out_string("\t3: A slash from the upper right to lower left\n"); + out_string("\t4: An X\n"); + out_string("\t5: A greater than sign \n"); + out_string("\t6: A less than sign\n"); + out_string("\t7: Two greater than signs\n"); + out_string("\t8: Two less than signs\n"); + out_string("\t9: A 'V'\n"); + out_string("\t10: An inverse 'V'\n"); + out_string("\t11: Numbers 9 and 10 combined\n"); + out_string("\t12: A full grid\n"); + out_string("\t13: A 'T'\n"); + out_string("\t14: A plus '+'\n"); + out_string("\t15: A 'W'\n"); + out_string("\t16: An 'M'\n"); + out_string("\t17: An 'E'\n"); + out_string("\t18: A '3'\n"); + out_string("\t19: An 'O'\n"); + out_string("\t20: An '8'\n"); + out_string("\t21: An 'S'\n"); + out_string("Your choice => "); + num <- in_int(); + out_string("\n"); + if num = 1 then + " XX XXXX XXXX XX " + else if num = 2 then + " X X X X X " + else if num = 3 then + "X X X X X" + else if num = 4 then + "X X X X X X X X X" + else if num = 5 then + "X X X X X " + else if num = 6 then + " X X X X X" + else if num = 7 then + "X X X XX X " + else if num = 8 then + " X XX X X X " + else if num = 9 then + "X X X X X " + else if num = 10 then + " X X X X X" + else if num = 11 then + "X X X X X X X X" + else if num = 12 then + "XXXXXXXXXXXXXXXXXXXXXXXXX" + else if num = 13 then + "XXXXX X X X X " + else if num = 14 then + " X X XXXXX X X " + else if num = 15 then + "X X X X X X X " + else if num = 16 then + " X X X X X X X" + else if num = 17 then + "XXXXX X XXXXX X XXXX" + else if num = 18 then + "XXX X X X X XXXX " + else if num = 19 then + " XX X XX X XX " + else if num = 20 then + " XX X XX X XX X XX X XX " + else if num = 21 then + " XXXX X XX X XXXX " + else + " " + fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi fi; + } + ); + } + }; + + + + + prompt() : Bool { + { + (let ans : String in + { + out_string("Would you like to continue with the next generation? \n"); + out_string("Please use lowercase y or n for your answer [y]: "); + ans <- in_string(); + out_string("\n"); + if ans = "n" then + false + else + true + fi; + } + ); + } + }; + + + prompt2() : Bool { + (let ans : String in + { + out_string("\n\n"); + out_string("Would you like to choose a background pattern? \n"); + out_string("Please use lowercase y or n for your answer [n]: "); + ans <- in_string(); + if ans = "y" then + true + else + false + fi; + } + ) + }; + + +}; + +class Main inherits CellularAutomaton { + cells : CellularAutomaton; + + main() : Main { + { + (let continue : Bool in + (let choice : String in + { + out_string("Welcome to the Game of Life.\n"); + out_string("There are many initial states to choose from. \n"); + while prompt2() loop + { + continue <- true; + choice <- option(); + cells <- (new CellularAutomaton).init(choice); + cells.print(); + while continue loop + if prompt() then + { + cells.evolve(); + cells.print(); + } + else + continue <- false + fi + pool; + } + pool; + self; + } ) ); } + }; +}; + diff --git a/tests/codegen/life_input.txt b/tests/codegen/life_input.txt index 1dfbde620..07e016726 100644 --- a/tests/codegen/life_input.txt +++ b/tests/codegen/life_input.txt @@ -1,66 +1,66 @@ -y -1 -n -y -2 -n -y -3 -n -y -4 -n -y -5 -n -y -6 -n -y -7 -n -y -8 -n -y -9 -n -y -10 -n -y -11 -n -y -12 -n -y -13 -n -y -14 -n -y -15 -n -y -16 -n -y -17 -n -y -18 -n -y -19 -n -y -20 -n -y -21 -y -y -n +y +1 +n +y +2 +n +y +3 +n +y +4 +n +y +5 +n +y +6 +n +y +7 +n +y +8 +n +y +9 +n +y +10 +n +y +11 +n +y +12 +n +y +13 +n +y +14 +n +y +15 +n +y +16 +n +y +17 +n +y +18 +n +y +19 +n +y +20 +n +y +21 +y +y +n n \ No newline at end of file diff --git a/tests/codegen/life_output.txt b/tests/codegen/life_output.txt index e804b2382..5a9b9f73d 100644 --- a/tests/codegen/life_output.txt +++ b/tests/codegen/life_output.txt @@ -1,778 +1,778 @@ -Welcome to the Game of Life. -There are many initial states to choose from. - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - XX -XXXX -XXXX - XX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - X - X - X - X -X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X - X - X - X - X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X X - X X - X - X X -X X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X - X - X - X -X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - X - X - X - X - X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X X - X X -X X - - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - X X -X X - X X - - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X X - X X - X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - X - X X -X X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X X X - X X -X X X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -XXXXX -XXXXX -XXXXX -XXXXX -XXXXX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -XXXXX - X - X - X - X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - X - X -XXXXX - X - X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -X X - X X X - X X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - X X - X X X -X X - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -XXXX -X -X -XXXX -X -X -XXXX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - -XXX - X - X - X - X - X -XXX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - XX -X X -X X - XX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - XX -X X -X X - XX -X X -X X - XX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? -Please use lowercase y or n for your answer [n]: -Please chose a number: - 1: A cross - 2: A slash from the upper left to lower right - 3: A slash from the upper right to lower left - 4: An X - 5: A greater than sign - 6: A less than sign - 7: Two greater than signs - 8: Two less than signs - 9: A 'V' - 10: An inverse 'V' - 11: Numbers 9 and 10 combined - 12: A full grid - 13: A 'T' - 14: A plus '+' - 15: A 'W' - 16: An 'M' - 17: An 'E' - 18: A '3' - 19: An 'O' - 20: An '8' - 21: An 'S' -Your choice => - - XXX -X -X - XX - X - X -XXX - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - --XX- -X-X- -X--- --XX- ----X --X-X --XX- - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - --XX- -X-X- -X-X- --XX- --X-X --X-X --XX- - -Would you like to continue with the next generation? -Please use lowercase y or n for your answer [y]: - - -Would you like to choose a background pattern? +Welcome to the Game of Life. +There are many initial states to choose from. + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + XX +XXXX +XXXX + XX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + X + X + X + X +X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X + X + X + X + X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X X + X X + X + X X +X X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X + X + X + X +X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + X + X + X + X + X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X X + X X +X X + + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + X X +X X + X X + + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X X + X X + X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + X + X X +X X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X X X + X X +X X X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +XXXXX +XXXXX +XXXXX +XXXXX +XXXXX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +XXXXX + X + X + X + X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + X + X +XXXXX + X + X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +X X + X X X + X X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + X X + X X X +X X + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +XXXX +X +X +XXXX +X +X +XXXX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + +XXX + X + X + X + X + X +XXX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + XX +X X +X X + XX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + XX +X X +X X + XX +X X +X X + XX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? +Please use lowercase y or n for your answer [n]: +Please chose a number: + 1: A cross + 2: A slash from the upper left to lower right + 3: A slash from the upper right to lower left + 4: An X + 5: A greater than sign + 6: A less than sign + 7: Two greater than signs + 8: Two less than signs + 9: A 'V' + 10: An inverse 'V' + 11: Numbers 9 and 10 combined + 12: A full grid + 13: A 'T' + 14: A plus '+' + 15: A 'W' + 16: An 'M' + 17: An 'E' + 18: A '3' + 19: An 'O' + 20: An '8' + 21: An 'S' +Your choice => + + XXX +X +X + XX + X + X +XXX + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + +-XX- +X-X- +X--- +-XX- +---X +-X-X +-XX- + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + +-XX- +X-X- +X-X- +-XX- +-X-X +-X-X +-XX- + +Would you like to continue with the next generation? +Please use lowercase y or n for your answer [y]: + + +Would you like to choose a background pattern? Please use lowercase y or n for your answer [n]: \ No newline at end of file diff --git a/tests/codegen/list_output.txt b/tests/codegen/list_output.txt index 00d68ed23..fca724903 100644 --- a/tests/codegen/list_output.txt +++ b/tests/codegen/list_output.txt @@ -1,5 +1,5 @@ -5 4 3 2 1 -4 3 2 1 -3 2 1 -2 1 -1 +5 4 3 2 1 +4 3 2 1 +3 2 1 +2 1 +1 diff --git a/tests/codegen/new_complex.cl b/tests/codegen/new_complex.cl old mode 100644 new mode 100755 index ad7035b56..a4fe714ce --- a/tests/codegen/new_complex.cl +++ b/tests/codegen/new_complex.cl @@ -1,79 +1,79 @@ -class Main inherits IO { - main() : IO { - (let c : Complex <- (new Complex).init(1, 1) in - { - -- trivially equal (see CoolAid) - if c.reflect_X() = c.reflect_0() - then out_string("=)\n") - else out_string("=(\n") - fi; - -- equal - if c.reflect_X().reflect_Y().equal(c.reflect_0()) - then out_string("=)\n") - else out_string("=(\n") - fi; - } - ) - }; -}; - -class Complex inherits IO { - x : Int; - y : Int; - - init(a : Int, b : Int) : Complex { - { - x = a; - y = b; - self; - } - }; - - print() : Object { - if y = 0 - then out_int(x) - else out_int(x).out_string("+").out_int(y).out_string("I") - fi - }; - - reflect_0() : Complex { - { - x = ~x; - y = ~y; - self; - } - }; - - reflect_X() : Complex { - { - y = ~y; - self; - } - }; - - reflect_Y() : Complex { - { - x = ~x; - self; - } - }; - - equal(d : Complex) : Bool { - if x = d.x_value() - then - if y = d.y_value() - then true - else false - fi - else false - fi - }; - - x_value() : Int { - x - }; - - y_value() : Int { - y - }; -}; +class Main inherits IO { + main() : IO { + (let c : Complex <- (new Complex).init(1, 1) in + { + -- trivially equal (see CoolAid) + if c.reflect_X() = c.reflect_0() + then out_string("=)\n") + else out_string("=(\n") + fi; + -- equal + if c.reflect_X().reflect_Y().equal(c.reflect_0()) + then out_string("=)\n") + else out_string("=(\n") + fi; + } + ) + }; +}; + +class Complex inherits IO { + x : Int; + y : Int; + + init(a : Int, b : Int) : Complex { + { + x = a; + y = b; + self; + } + }; + + print() : Object { + if y = 0 + then out_int(x) + else out_int(x).out_string("+").out_int(y).out_string("I") + fi + }; + + reflect_0() : Complex { + { + x = ~x; + y = ~y; + self; + } + }; + + reflect_X() : Complex { + { + y = ~y; + self; + } + }; + + reflect_Y() : Complex { + { + x = ~x; + self; + } + }; + + equal(d : Complex) : Bool { + if x = d.x_value() + then + if y = d.y_value() + then true + else false + fi + else false + fi + }; + + x_value() : Int { + x + }; + + y_value() : Int { + y + }; +}; diff --git a/tests/codegen/new_complex_output.txt b/tests/codegen/new_complex_output.txt index 831c23af4..0e8da112c 100644 --- a/tests/codegen/new_complex_output.txt +++ b/tests/codegen/new_complex_output.txt @@ -1,2 +1,2 @@ -=) -=) +=) +=) diff --git a/tests/codegen/palindrome.cl b/tests/codegen/palindrome.cl old mode 100644 new mode 100755 index 6acbeb731..7f24789f9 --- a/tests/codegen/palindrome.cl +++ b/tests/codegen/palindrome.cl @@ -1,25 +1,25 @@ -class Main inherits IO { - pal(s : String) : Bool { - if s.length() = 0 - then true - else if s.length() = 1 - then true - else if s.substr(0, 1) = s.substr(s.length() - 1, 1) - then pal(s.substr(1, s.length() -2)) - else false - fi fi fi - }; - - i : Int; - - main() : IO { - { - i <- ~1; - out_string("enter a string\n"); - if pal(in_string()) - then out_string("that was a palindrome\n") - else out_string("that was not a palindrome\n") - fi; - } - }; -}; +class Main inherits IO { + pal(s : String) : Bool { + if s.length() = 0 + then true + else if s.length() = 1 + then true + else if s.substr(0, 1) = s.substr(s.length() - 1, 1) + then pal(s.substr(1, s.length() -2)) + else false + fi fi fi + }; + + i : Int; + + main() : IO { + { + i <- ~1; + out_string("enter a string\n"); + if pal(in_string()) + then out_string("that was a palindrome\n") + else out_string("that was not a palindrome\n") + fi; + } + }; +}; diff --git a/tests/codegen/palindrome_input.txt b/tests/codegen/palindrome_input.txt index c49a0114c..8e1b64142 100644 --- a/tests/codegen/palindrome_input.txt +++ b/tests/codegen/palindrome_input.txt @@ -1 +1 @@ -anitalabalatina +anitalabalatina diff --git a/tests/codegen/palindrome_output.txt b/tests/codegen/palindrome_output.txt index e93d36585..7a0095959 100644 --- a/tests/codegen/palindrome_output.txt +++ b/tests/codegen/palindrome_output.txt @@ -1,2 +1,2 @@ -enter a string -that was a palindrome +enter a string +that was a palindrome diff --git a/tests/codegen/primes_output.txt b/tests/codegen/primes_output.txt index cf5d78d49..a4d0fcb3f 100644 --- a/tests/codegen/primes_output.txt +++ b/tests/codegen/primes_output.txt @@ -1,96 +1,96 @@ -2 is trivially prime. -3 is prime. -5 is prime. -7 is prime. -11 is prime. -13 is prime. -17 is prime. -19 is prime. -23 is prime. -29 is prime. -31 is prime. -37 is prime. -41 is prime. -43 is prime. -47 is prime. -53 is prime. -59 is prime. -61 is prime. -67 is prime. -71 is prime. -73 is prime. -79 is prime. -83 is prime. -89 is prime. -97 is prime. -101 is prime. -103 is prime. -107 is prime. -109 is prime. -113 is prime. -127 is prime. -131 is prime. -137 is prime. -139 is prime. -149 is prime. -151 is prime. -157 is prime. -163 is prime. -167 is prime. -173 is prime. -179 is prime. -181 is prime. -191 is prime. -193 is prime. -197 is prime. -199 is prime. -211 is prime. -223 is prime. -227 is prime. -229 is prime. -233 is prime. -239 is prime. -241 is prime. -251 is prime. -257 is prime. -263 is prime. -269 is prime. -271 is prime. -277 is prime. -281 is prime. -283 is prime. -293 is prime. -307 is prime. -311 is prime. -313 is prime. -317 is prime. -331 is prime. -337 is prime. -347 is prime. -349 is prime. -353 is prime. -359 is prime. -367 is prime. -373 is prime. -379 is prime. -383 is prime. -389 is prime. -397 is prime. -401 is prime. -409 is prime. -419 is prime. -421 is prime. -431 is prime. -433 is prime. -439 is prime. -443 is prime. -449 is prime. -457 is prime. -461 is prime. -463 is prime. -467 is prime. -479 is prime. -487 is prime. -491 is prime. -499 is prime. -Abort called from class String +2 is trivially prime. +3 is prime. +5 is prime. +7 is prime. +11 is prime. +13 is prime. +17 is prime. +19 is prime. +23 is prime. +29 is prime. +31 is prime. +37 is prime. +41 is prime. +43 is prime. +47 is prime. +53 is prime. +59 is prime. +61 is prime. +67 is prime. +71 is prime. +73 is prime. +79 is prime. +83 is prime. +89 is prime. +97 is prime. +101 is prime. +103 is prime. +107 is prime. +109 is prime. +113 is prime. +127 is prime. +131 is prime. +137 is prime. +139 is prime. +149 is prime. +151 is prime. +157 is prime. +163 is prime. +167 is prime. +173 is prime. +179 is prime. +181 is prime. +191 is prime. +193 is prime. +197 is prime. +199 is prime. +211 is prime. +223 is prime. +227 is prime. +229 is prime. +233 is prime. +239 is prime. +241 is prime. +251 is prime. +257 is prime. +263 is prime. +269 is prime. +271 is prime. +277 is prime. +281 is prime. +283 is prime. +293 is prime. +307 is prime. +311 is prime. +313 is prime. +317 is prime. +331 is prime. +337 is prime. +347 is prime. +349 is prime. +353 is prime. +359 is prime. +367 is prime. +373 is prime. +379 is prime. +383 is prime. +389 is prime. +397 is prime. +401 is prime. +409 is prime. +419 is prime. +421 is prime. +431 is prime. +433 is prime. +439 is prime. +443 is prime. +449 is prime. +457 is prime. +461 is prime. +463 is prime. +467 is prime. +479 is prime. +487 is prime. +491 is prime. +499 is prime. +Abort called from class String diff --git a/tests/codegen/print-cool_output.txt b/tests/codegen/print-cool_output.txt index 3c8cd620c..2b58f8985 100644 --- a/tests/codegen/print-cool_output.txt +++ b/tests/codegen/print-cool_output.txt @@ -1 +1 @@ -cool +cool diff --git a/tests/codegen/sort-list_input.txt b/tests/codegen/sort-list_input.txt index d43401489..f599e28b8 100644 --- a/tests/codegen/sort-list_input.txt +++ b/tests/codegen/sort-list_input.txt @@ -1 +1 @@ -10 +10 diff --git a/tests/codegen/sort-list_output.txt b/tests/codegen/sort-list_output.txt index 7b1d40452..9878d57ea 100644 --- a/tests/codegen/sort-list_output.txt +++ b/tests/codegen/sort-list_output.txt @@ -1,10 +1,10 @@ -How many numbers to sort? 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 +How many numbers to sort? 0 +1 +2 +3 +4 +5 +6 +7 +8 +9 diff --git a/tests/codegen_test.py b/tests/codegen_test.py index e748bd2d1..598d7da01 100644 --- a/tests/codegen_test.py +++ b/tests/codegen_test.py @@ -1,17 +1,17 @@ -import pytest -import os -from utils import compare_outputs - -tests_dir = __file__.rpartition('/')[0] + '/codegen/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -# @pytest.mark.lexer -# @pytest.mark.parser -# @pytest.mark.semantic -@pytest.mark.codegen -@pytest.mark.ok -@pytest.mark.run(order=4) -@pytest.mark.parametrize("cool_file", tests) -def test_codegen(compiler_path, cool_file): - compare_outputs(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_input.txt',\ - tests_dir + cool_file[:-3] + '_output.txt') \ No newline at end of file +# import pytest +# import os +# from utils import compare_outputs + +# tests_dir = __file__.rpartition('/')[0] + '/codegen/' +# tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] + +# # @pytest.mark.lexer +# # @pytest.mark.parser +# # @pytest.mark.semantic +# @pytest.mark.codegen +# @pytest.mark.ok +# @pytest.mark.run(order=4) +# @pytest.mark.parametrize("cool_file", tests) +# def test_codegen(compiler_path, cool_file): +# compare_outputs(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_input.txt',\ +# tests_dir + cool_file[:-3] + '_output.txt') \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 561d8bafc..1f44eeb72 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,6 +1,6 @@ -import pytest -import os - -@pytest.fixture -def compiler_path(): +import pytest +import os + +@pytest.fixture +def compiler_path(): return os.path.abspath('./coolc.sh') \ No newline at end of file diff --git a/tests/lexer/comment1.cl b/tests/lexer/comment1.cl index 1b63af3c7..69533f23c 100644 --- a/tests/lexer/comment1.cl +++ b/tests/lexer/comment1.cl @@ -1,55 +1,55 @@ ---Any characters between two dashes “--” and the next newline ---(or EOF, if there is no next newline) are treated as comments - -(*(*(* -Comments may also be written by enclosing -text in (∗ . . . ∗). The latter form of comment may be nested. -Comments cannot cross file boundaries. -*)*)*) - -class Error() { - - (* There was once a comment, - that was quite long. - But, the reader soon discovered that - the comment was indeed longer than - previously assumed. Now, the reader - was in a real dilemma; is the comment - ever gonna end? If I stop reading, will - it end? - He started imagining all sorts of things. - He thought about heisenberg's cat and how - how that relates to the end of the sentence. - He thought to himself "I'm gonna stop reading". - "If I keep reading this comment, I'm gonna know - the fate of this sentence; That will be disastorous." - He knew that such a comment was gonna extend to - another file. It was too awesome to be contained in - a single file. And he would have kept reading too... - if only... - cool wasn't a super-duper-fab-awesomest language; - but cool is that language; - "This comment shall go not cross this file" said cool. - Alas! The reader could read no more. - There was once a comment, - that was quite long. - But, the reader soon discovered that - the comment was indeed longer than - previously assumed. Now, the reader - was in a real dilemma; is the comment - ever gonna end? If I stop reading, will - it end? - He started imagining all sorts of things. - He thought about heisenberg's cat and how - how that relates to the end of the sentence. - He thought to himself "I'm gonna stop reading". - "If I keep reading this comment, I'm gonna know - the fate of this sentence; That will be disastorous." - He knew that such a comment was gonna extend to - another file. It was too awesome to be contained in - a single file. And he would have kept reading too... - if only... - cool wasn't a super-duper-fab-awesomest language; - but cool is that language; - "This comment shall go not cross this file" said cool. +--Any characters between two dashes “--” and the next newline +--(or EOF, if there is no next newline) are treated as comments + +(*(*(* +Comments may also be written by enclosing +text in (∗ . . . ∗). The latter form of comment may be nested. +Comments cannot cross file boundaries. +*)*)*) + +class Error() { + + (* There was once a comment, + that was quite long. + But, the reader soon discovered that + the comment was indeed longer than + previously assumed. Now, the reader + was in a real dilemma; is the comment + ever gonna end? If I stop reading, will + it end? + He started imagining all sorts of things. + He thought about heisenberg's cat and how + how that relates to the end of the sentence. + He thought to himself "I'm gonna stop reading". + "If I keep reading this comment, I'm gonna know + the fate of this sentence; That will be disastorous." + He knew that such a comment was gonna extend to + another file. It was too awesome to be contained in + a single file. And he would have kept reading too... + if only... + cool wasn't a super-duper-fab-awesomest language; + but cool is that language; + "This comment shall go not cross this file" said cool. + Alas! The reader could read no more. + There was once a comment, + that was quite long. + But, the reader soon discovered that + the comment was indeed longer than + previously assumed. Now, the reader + was in a real dilemma; is the comment + ever gonna end? If I stop reading, will + it end? + He started imagining all sorts of things. + He thought about heisenberg's cat and how + how that relates to the end of the sentence. + He thought to himself "I'm gonna stop reading". + "If I keep reading this comment, I'm gonna know + the fate of this sentence; That will be disastorous." + He knew that such a comment was gonna extend to + another file. It was too awesome to be contained in + a single file. And he would have kept reading too... + if only... + cool wasn't a super-duper-fab-awesomest language; + but cool is that language; + "This comment shall go not cross this file" said cool. Alas! The reader could read no more. \ No newline at end of file diff --git a/tests/lexer/comment1_error.txt b/tests/lexer/comment1_error.txt index 710483ee9..9fd7b8d67 100644 --- a/tests/lexer/comment1_error.txt +++ b/tests/lexer/comment1_error.txt @@ -1 +1 @@ -(55, 46) - LexicographicError: EOF in comment +(55, 46) - LexicographicError: EOF in comment diff --git a/tests/lexer/iis1.cl b/tests/lexer/iis1.cl index ca6b68ac3..12cb52beb 100644 --- a/tests/lexer/iis1.cl +++ b/tests/lexer/iis1.cl @@ -1,111 +1,111 @@ -(* Integers, Identifiers, and Special Notation *) - -0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ -5! = 120, 2 + 2 = 5 or E = mc2; p + 1 @ p = 1: for x in range(len(b)) -new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) -class Class if then else fi testing Testing ~007agent_bond james_007B0N3SS___ -loop pool while tRuE or noT faLsE let in case of ESAC - -(* -#3 INT_CONST 0007 -#3 INT_CONST 123 -#3 '+' -#3 INT_CONST 1 -#3 '-' -#3 INT_CONST 1 -#3 '+' -#3 INT_CONST 90 -#3 '-' -#3 INT_CONST 09 -#3 '+' -#3 INT_CONST 11113 -#3 '-' -#3 INT_CONST 4 -#3 OBJECTID r -#3 '*' -#3 OBJECTID a -#3 '*' -#3 OBJECTID self -#3 '*' -#3 OBJECTID c -#3 '+' -#3 '+' -#4 INT_CONST 5 -#4 ERROR "!" -#4 '=' -#4 INT_CONST 120 -#4 ',' -#4 INT_CONST 2 -#4 '+' -#4 INT_CONST 2 -#4 '=' -#4 INT_CONST 5 -#4 OBJECTID or -#4 TYPEID E -#4 '=' -#4 OBJECTID mc2 -#4 ';' -#4 OBJECTID p -#4 '+' -#4 INT_CONST 1 -#4 '@' -#4 OBJECTID p -#4 '=' -#4 INT_CONST 1 -#4 ':' -#4 OBJECTID for -#4 OBJECTID x -#4 IN -#4 OBJECTID range -#4 '(' -#4 OBJECTID len -#4 '(' -#4 OBJECTID b -#4 ')' -#4 ')' -#5 NEW -#5 '/' -#5 ASSIGN -#5 '<' -#5 LE -#5 DARROW -#5 '{' -#5 '(' -#5 TYPEID Int -#5 ':' -#5 TYPEID Objet -#5 ',' -#5 TYPEID Bool -#5 ';' -#5 TYPEID String -#5 '.' -#5 OBJECTID string -#5 TYPEID SELF_TYPE -#5 ISVOID -#5 '}' -#5 ')' -#6 CLASS -#6 CLASS -#6 IF -#6 THEN -#6 ELSE -#6 FI -#6 OBJECTID testing -#6 TYPEID Testing -#6 '~' -#6 INT_CONST 007 -#6 OBJECTID agent_bond -#6 OBJECTID james_007B0N3SS___ -#7 LOOP -#7 POOL -#7 WHILE -#7 BOOL_CONST true -#7 OBJECTID or -#7 NOT -#7 BOOL_CONST false -#7 LET -#7 IN -#7 CASE -#7 OF -#7 ESAC +(* Integers, Identifiers, and Special Notation *) + +0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ +5! = 120, 2 + 2 = 5 or E = mc2; p + 1 @ p = 1: for x in range(len(b)) +new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) +class Class if then else fi testing Testing ~007agent_bond james_007B0N3SS___ +loop pool while tRuE or noT faLsE let in case of ESAC + +(* +#3 INT_CONST 0007 +#3 INT_CONST 123 +#3 '+' +#3 INT_CONST 1 +#3 '-' +#3 INT_CONST 1 +#3 '+' +#3 INT_CONST 90 +#3 '-' +#3 INT_CONST 09 +#3 '+' +#3 INT_CONST 11113 +#3 '-' +#3 INT_CONST 4 +#3 OBJECTID r +#3 '*' +#3 OBJECTID a +#3 '*' +#3 OBJECTID self +#3 '*' +#3 OBJECTID c +#3 '+' +#3 '+' +#4 INT_CONST 5 +#4 ERROR "!" +#4 '=' +#4 INT_CONST 120 +#4 ',' +#4 INT_CONST 2 +#4 '+' +#4 INT_CONST 2 +#4 '=' +#4 INT_CONST 5 +#4 OBJECTID or +#4 TYPEID E +#4 '=' +#4 OBJECTID mc2 +#4 ';' +#4 OBJECTID p +#4 '+' +#4 INT_CONST 1 +#4 '@' +#4 OBJECTID p +#4 '=' +#4 INT_CONST 1 +#4 ':' +#4 OBJECTID for +#4 OBJECTID x +#4 IN +#4 OBJECTID range +#4 '(' +#4 OBJECTID len +#4 '(' +#4 OBJECTID b +#4 ')' +#4 ')' +#5 NEW +#5 '/' +#5 ASSIGN +#5 '<' +#5 LE +#5 DARROW +#5 '{' +#5 '(' +#5 TYPEID Int +#5 ':' +#5 TYPEID Objet +#5 ',' +#5 TYPEID Bool +#5 ';' +#5 TYPEID String +#5 '.' +#5 OBJECTID string +#5 TYPEID SELF_TYPE +#5 ISVOID +#5 '}' +#5 ')' +#6 CLASS +#6 CLASS +#6 IF +#6 THEN +#6 ELSE +#6 FI +#6 OBJECTID testing +#6 TYPEID Testing +#6 '~' +#6 INT_CONST 007 +#6 OBJECTID agent_bond +#6 OBJECTID james_007B0N3SS___ +#7 LOOP +#7 POOL +#7 WHILE +#7 BOOL_CONST true +#7 OBJECTID or +#7 NOT +#7 BOOL_CONST false +#7 LET +#7 IN +#7 CASE +#7 OF +#7 ESAC *) \ No newline at end of file diff --git a/tests/lexer/iis1_error.txt b/tests/lexer/iis1_error.txt index 12f62f1ba..8a81a2472 100644 --- a/tests/lexer/iis1_error.txt +++ b/tests/lexer/iis1_error.txt @@ -1 +1 @@ -(4, 2) - LexicographicError: ERROR "!" +(4,2) - LexicographicError: ERROR "!" diff --git a/tests/lexer/iis2.cl b/tests/lexer/iis2.cl index d42552494..9b25715d4 100644 --- a/tests/lexer/iis2.cl +++ b/tests/lexer/iis2.cl @@ -1,120 +1,120 @@ -(* Integers, Identifiers, and Special Notation *) - -0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ -class Class if then else fi testing Testing ~007agent_bond james_007bones___ - - -new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) -loop pool while tRuE or noT faLsE let in case of ESAC - -factorial(5) = 120, 2 + 2 = 5? or E = mc2; p + 1 resto p = 1: (@ for x in range(len(b))) - -(* -#3 INT_CONST 0007 -#3 INT_CONST 123 -#3 '+' -#3 INT_CONST 1 -#3 '-' -#3 INT_CONST 1 -#3 '+' -#3 INT_CONST 90 -#3 '-' -#3 INT_CONST 09 -#3 '+' -#3 INT_CONST 11113 -#3 '-' -#3 INT_CONST 4 -#3 OBJECTID r -#3 '*' -#3 OBJECTID a -#3 '*' -#3 OBJECTID self -#3 '*' -#3 OBJECTID c -#3 '+' -#3 '+' -#4 CLASS -#4 CLASS -#4 IF -#4 THEN -#4 ELSE -#4 FI -#4 OBJECTID testing -#4 TYPEID Testing -#4 '~' -#4 INT_CONST 007 -#4 OBJECTID agent_bond -#4 OBJECTID james_007bones___ -#7 NEW -#7 '/' -#7 ASSIGN -#7 '<' -#7 LE -#7 DARROW -#7 '{' -#7 '(' -#7 TYPEID Int -#7 ':' -#7 TYPEID Objet -#7 ',' -#7 TYPEID Bool -#7 ';' -#7 TYPEID String -#7 '.' -#7 OBJECTID string -#7 TYPEID SELF_TYPE -#7 ISVOID -#7 '}' -#7 ')' -#8 LOOP -#8 POOL -#8 WHILE -#8 BOOL_CONST true -#8 OBJECTID or -#8 NOT -#8 BOOL_CONST false -#8 LET -#8 IN -#8 CASE -#8 OF -#8 ESAC -#10 OBJECTID factorial -#10 '(' -#10 INT_CONST 5 -#10 ')' -#10 '=' -#10 INT_CONST 120 -#10 ',' -#10 INT_CONST 2 -#10 '+' -#10 INT_CONST 2 -#10 '=' -#10 INT_CONST 5 -#10 ERROR "?" -#10 OBJECTID or -#10 TYPEID E -#10 '=' -#10 OBJECTID mc2 -#10 ';' -#10 OBJECTID p -#10 '+' -#10 INT_CONST 1 -#10 OBJECTID resto -#10 OBJECTID p -#10 '=' -#10 INT_CONST 1 -#10 ':' -#10 '(' -#10 '@' -#10 OBJECTID for -#10 OBJECTID x -#10 IN -#10 OBJECTID range -#10 '(' -#10 OBJECTID len -#10 '(' -#10 OBJECTID b -#10 ')' -#10 ')' -#10 ')' +(* Integers, Identifiers, and Special Notation *) + +0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ +class Class if then else fi testing Testing ~007agent_bond james_007bones___ + + +new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) +loop pool while tRuE or noT faLsE let in case of ESAC + +factorial(5) = 120, 2 + 2 = 5? or E = mc2; p + 1 resto p = 1: (@ for x in range(len(b))) + +(* +#3 INT_CONST 0007 +#3 INT_CONST 123 +#3 '+' +#3 INT_CONST 1 +#3 '-' +#3 INT_CONST 1 +#3 '+' +#3 INT_CONST 90 +#3 '-' +#3 INT_CONST 09 +#3 '+' +#3 INT_CONST 11113 +#3 '-' +#3 INT_CONST 4 +#3 OBJECTID r +#3 '*' +#3 OBJECTID a +#3 '*' +#3 OBJECTID self +#3 '*' +#3 OBJECTID c +#3 '+' +#3 '+' +#4 CLASS +#4 CLASS +#4 IF +#4 THEN +#4 ELSE +#4 FI +#4 OBJECTID testing +#4 TYPEID Testing +#4 '~' +#4 INT_CONST 007 +#4 OBJECTID agent_bond +#4 OBJECTID james_007bones___ +#7 NEW +#7 '/' +#7 ASSIGN +#7 '<' +#7 LE +#7 DARROW +#7 '{' +#7 '(' +#7 TYPEID Int +#7 ':' +#7 TYPEID Objet +#7 ',' +#7 TYPEID Bool +#7 ';' +#7 TYPEID String +#7 '.' +#7 OBJECTID string +#7 TYPEID SELF_TYPE +#7 ISVOID +#7 '}' +#7 ')' +#8 LOOP +#8 POOL +#8 WHILE +#8 BOOL_CONST true +#8 OBJECTID or +#8 NOT +#8 BOOL_CONST false +#8 LET +#8 IN +#8 CASE +#8 OF +#8 ESAC +#10 OBJECTID factorial +#10 '(' +#10 INT_CONST 5 +#10 ')' +#10 '=' +#10 INT_CONST 120 +#10 ',' +#10 INT_CONST 2 +#10 '+' +#10 INT_CONST 2 +#10 '=' +#10 INT_CONST 5 +#10 ERROR "?" +#10 OBJECTID or +#10 TYPEID E +#10 '=' +#10 OBJECTID mc2 +#10 ';' +#10 OBJECTID p +#10 '+' +#10 INT_CONST 1 +#10 OBJECTID resto +#10 OBJECTID p +#10 '=' +#10 INT_CONST 1 +#10 ':' +#10 '(' +#10 '@' +#10 OBJECTID for +#10 OBJECTID x +#10 IN +#10 OBJECTID range +#10 '(' +#10 OBJECTID len +#10 '(' +#10 OBJECTID b +#10 ')' +#10 ')' +#10 ')' *) \ No newline at end of file diff --git a/tests/lexer/iis2_error.txt b/tests/lexer/iis2_error.txt index 988d0286e..922391a9d 100644 --- a/tests/lexer/iis2_error.txt +++ b/tests/lexer/iis2_error.txt @@ -1 +1 @@ -(10, 30) - LexicographicError: ERROR "?" +(10, 30) - LexicographicError: ERROR "?" diff --git a/tests/lexer/iis3.cl b/tests/lexer/iis3.cl index dcd85f960..0b965ddea 100644 --- a/tests/lexer/iis3.cl +++ b/tests/lexer/iis3.cl @@ -1,121 +1,121 @@ -(* Integers, Identifiers, and Special Notation *) - -factorial(5) = 120, 2 + 2 = 5 or E = mc^2; p + 1 @ p = 1: z for x in range(len(b))) - -loop pool while tRuE or noT faLsE let in case of ESAC - -new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) - - -0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ -class Class if then else fi testing Testing ~007agent_bond james_007bones___ - -(* -#3 OBJECTID factorial -#3 '(' -#3 INT_CONST 5 -#3 ')' -#3 '=' -#3 INT_CONST 120 -#3 ',' -#3 INT_CONST 2 -#3 '+' -#3 INT_CONST 2 -#3 '=' -#3 INT_CONST 5 -#3 OBJECTID or -#3 TYPEID E -#3 '=' -#3 OBJECTID mc -#3 ERROR "^" -#3 INT_CONST 2 -#3 ';' -#3 OBJECTID p -#3 '+' -#3 INT_CONST 1 -#3 '@' -#3 OBJECTID p -#3 '=' -#3 INT_CONST 1 -#3 ':' -#3 OBJECTID z -#3 OBJECTID for -#3 OBJECTID x -#3 IN -#3 OBJECTID range -#3 '(' -#3 OBJECTID len -#3 '(' -#3 OBJECTID b -#3 ')' -#3 ')' -#3 ')' -#5 LOOP -#5 POOL -#5 WHILE -#5 BOOL_CONST true -#5 OBJECTID or -#5 NOT -#5 BOOL_CONST false -#5 LET -#5 IN -#5 CASE -#5 OF -#5 ESAC -#7 NEW -#7 '/' -#7 ASSIGN -#7 '<' -#7 LE -#7 DARROW -#7 '{' -#7 '(' -#7 TYPEID Int -#7 ':' -#7 TYPEID Objet -#7 ',' -#7 TYPEID Bool -#7 ';' -#7 TYPEID String -#7 '.' -#7 OBJECTID string -#7 TYPEID SELF_TYPE -#7 ISVOID -#7 '}' -#7 ')' -#10 INT_CONST 0007 -#10 INT_CONST 123 -#10 '+' -#10 INT_CONST 1 -#10 '-' -#10 INT_CONST 1 -#10 '+' -#10 INT_CONST 90 -#10 '-' -#10 INT_CONST 09 -#10 '+' -#10 INT_CONST 11113 -#10 '-' -#10 INT_CONST 4 -#10 OBJECTID r -#10 '*' -#10 OBJECTID a -#10 '*' -#10 OBJECTID self -#10 '*' -#10 OBJECTID c -#10 '+' -#10 '+' -#11 CLASS -#11 CLASS -#11 IF -#11 THEN -#11 ELSE -#11 FI -#11 OBJECTID testing -#11 TYPEID Testing -#11 '~' -#11 INT_CONST 007 -#11 OBJECTID agent_bond -#11 OBJECTID james_007bones___ +(* Integers, Identifiers, and Special Notation *) + +factorial(5) = 120, 2 + 2 = 5 or E = mc^2; p + 1 @ p = 1: z for x in range(len(b))) + +loop pool while tRuE or noT faLsE let in case of ESAC + +new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) + + +0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ +class Class if then else fi testing Testing ~007agent_bond james_007bones___ + +(* +#3 OBJECTID factorial +#3 '(' +#3 INT_CONST 5 +#3 ')' +#3 '=' +#3 INT_CONST 120 +#3 ',' +#3 INT_CONST 2 +#3 '+' +#3 INT_CONST 2 +#3 '=' +#3 INT_CONST 5 +#3 OBJECTID or +#3 TYPEID E +#3 '=' +#3 OBJECTID mc +#3 ERROR "^" +#3 INT_CONST 2 +#3 ';' +#3 OBJECTID p +#3 '+' +#3 INT_CONST 1 +#3 '@' +#3 OBJECTID p +#3 '=' +#3 INT_CONST 1 +#3 ':' +#3 OBJECTID z +#3 OBJECTID for +#3 OBJECTID x +#3 IN +#3 OBJECTID range +#3 '(' +#3 OBJECTID len +#3 '(' +#3 OBJECTID b +#3 ')' +#3 ')' +#3 ')' +#5 LOOP +#5 POOL +#5 WHILE +#5 BOOL_CONST true +#5 OBJECTID or +#5 NOT +#5 BOOL_CONST false +#5 LET +#5 IN +#5 CASE +#5 OF +#5 ESAC +#7 NEW +#7 '/' +#7 ASSIGN +#7 '<' +#7 LE +#7 DARROW +#7 '{' +#7 '(' +#7 TYPEID Int +#7 ':' +#7 TYPEID Objet +#7 ',' +#7 TYPEID Bool +#7 ';' +#7 TYPEID String +#7 '.' +#7 OBJECTID string +#7 TYPEID SELF_TYPE +#7 ISVOID +#7 '}' +#7 ')' +#10 INT_CONST 0007 +#10 INT_CONST 123 +#10 '+' +#10 INT_CONST 1 +#10 '-' +#10 INT_CONST 1 +#10 '+' +#10 INT_CONST 90 +#10 '-' +#10 INT_CONST 09 +#10 '+' +#10 INT_CONST 11113 +#10 '-' +#10 INT_CONST 4 +#10 OBJECTID r +#10 '*' +#10 OBJECTID a +#10 '*' +#10 OBJECTID self +#10 '*' +#10 OBJECTID c +#10 '+' +#10 '+' +#11 CLASS +#11 CLASS +#11 IF +#11 THEN +#11 ELSE +#11 FI +#11 OBJECTID testing +#11 TYPEID Testing +#11 '~' +#11 INT_CONST 007 +#11 OBJECTID agent_bond +#11 OBJECTID james_007bones___ *) \ No newline at end of file diff --git a/tests/lexer/iis3_error.txt b/tests/lexer/iis3_error.txt index 3abc2b556..b001b6a71 100644 --- a/tests/lexer/iis3_error.txt +++ b/tests/lexer/iis3_error.txt @@ -1 +1 @@ -(3, 40) - LexicographicError: ERROR "^" +(3, 40) - LexicographicError: ERROR "^" diff --git a/tests/lexer/iis4.cl b/tests/lexer/iis4.cl index 5357ab734..9e7a9cb62 100644 --- a/tests/lexer/iis4.cl +++ b/tests/lexer/iis4.cl @@ -1,120 +1,120 @@ -(* Integers, Identifiers, and Special Notation *) - -new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) -0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ - -factorial(5) = 120, 2 + 2 = 5 or E = mc2; p + 1 % p = 1: @.@ for x in range(len(b))~ - - -loop pool while tRuE or noT faLsE let in case of ESAC -class Class if then else fi testing Testing ~007agent_bond james_007bones___ - -(* -#3 NEW -#3 '/' -#3 ASSIGN -#3 '<' -#3 LE -#3 DARROW -#3 '{' -#3 '(' -#3 TYPEID Int -#3 ':' -#3 TYPEID Objet -#3 ',' -#3 TYPEID Bool -#3 ';' -#3 TYPEID String -#3 '.' -#3 OBJECTID string -#3 TYPEID SELF_TYPE -#3 ISVOID -#3 '}' -#3 ')' -#4 INT_CONST 0007 -#4 INT_CONST 123 -#4 '+' -#4 INT_CONST 1 -#4 '-' -#4 INT_CONST 1 -#4 '+' -#4 INT_CONST 90 -#4 '-' -#4 INT_CONST 09 -#4 '+' -#4 INT_CONST 11113 -#4 '-' -#4 INT_CONST 4 -#4 OBJECTID r -#4 '*' -#4 OBJECTID a -#4 '*' -#4 OBJECTID self -#4 '*' -#4 OBJECTID c -#4 '+' -#4 '+' -#6 OBJECTID factorial -#6 '(' -#6 INT_CONST 5 -#6 ')' -#6 '=' -#6 INT_CONST 120 -#6 ',' -#6 INT_CONST 2 -#6 '+' -#6 INT_CONST 2 -#6 '=' -#6 INT_CONST 5 -#6 OBJECTID or -#6 TYPEID E -#6 '=' -#6 OBJECTID mc2 -#6 ';' -#6 OBJECTID p -#6 '+' -#6 INT_CONST 1 -#6 ERROR "%" -#6 OBJECTID p -#6 '=' -#6 INT_CONST 1 -#6 ':' -#6 '@' -#6 '.' -#6 '@' -#6 OBJECTID for -#6 OBJECTID x -#6 IN -#6 OBJECTID range -#6 '(' -#6 OBJECTID len -#6 '(' -#6 OBJECTID b -#6 ')' -#6 ')' -#6 '~' -#9 LOOP -#9 POOL -#9 WHILE -#9 BOOL_CONST true -#9 OBJECTID or -#9 NOT -#9 BOOL_CONST false -#9 LET -#9 IN -#9 CASE -#9 OF -#9 ESAC -#10 CLASS -#10 CLASS -#10 IF -#10 THEN -#10 ELSE -#10 FI -#10 OBJECTID testing -#10 TYPEID Testing -#10 '~' -#10 INT_CONST 007 -#10 OBJECTID agent_bond -#10 OBJECTID james_007bones___ +(* Integers, Identifiers, and Special Notation *) + +new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) +0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ + +factorial(5) = 120, 2 + 2 = 5 or E = mc2; p + 1 % p = 1: @.@ for x in range(len(b))~ + + +loop pool while tRuE or noT faLsE let in case of ESAC +class Class if then else fi testing Testing ~007agent_bond james_007bones___ + +(* +#3 NEW +#3 '/' +#3 ASSIGN +#3 '<' +#3 LE +#3 DARROW +#3 '{' +#3 '(' +#3 TYPEID Int +#3 ':' +#3 TYPEID Objet +#3 ',' +#3 TYPEID Bool +#3 ';' +#3 TYPEID String +#3 '.' +#3 OBJECTID string +#3 TYPEID SELF_TYPE +#3 ISVOID +#3 '}' +#3 ')' +#4 INT_CONST 0007 +#4 INT_CONST 123 +#4 '+' +#4 INT_CONST 1 +#4 '-' +#4 INT_CONST 1 +#4 '+' +#4 INT_CONST 90 +#4 '-' +#4 INT_CONST 09 +#4 '+' +#4 INT_CONST 11113 +#4 '-' +#4 INT_CONST 4 +#4 OBJECTID r +#4 '*' +#4 OBJECTID a +#4 '*' +#4 OBJECTID self +#4 '*' +#4 OBJECTID c +#4 '+' +#4 '+' +#6 OBJECTID factorial +#6 '(' +#6 INT_CONST 5 +#6 ')' +#6 '=' +#6 INT_CONST 120 +#6 ',' +#6 INT_CONST 2 +#6 '+' +#6 INT_CONST 2 +#6 '=' +#6 INT_CONST 5 +#6 OBJECTID or +#6 TYPEID E +#6 '=' +#6 OBJECTID mc2 +#6 ';' +#6 OBJECTID p +#6 '+' +#6 INT_CONST 1 +#6 ERROR "%" +#6 OBJECTID p +#6 '=' +#6 INT_CONST 1 +#6 ':' +#6 '@' +#6 '.' +#6 '@' +#6 OBJECTID for +#6 OBJECTID x +#6 IN +#6 OBJECTID range +#6 '(' +#6 OBJECTID len +#6 '(' +#6 OBJECTID b +#6 ')' +#6 ')' +#6 '~' +#9 LOOP +#9 POOL +#9 WHILE +#9 BOOL_CONST true +#9 OBJECTID or +#9 NOT +#9 BOOL_CONST false +#9 LET +#9 IN +#9 CASE +#9 OF +#9 ESAC +#10 CLASS +#10 CLASS +#10 IF +#10 THEN +#10 ELSE +#10 FI +#10 OBJECTID testing +#10 TYPEID Testing +#10 '~' +#10 INT_CONST 007 +#10 OBJECTID agent_bond +#10 OBJECTID james_007bones___ *) \ No newline at end of file diff --git a/tests/lexer/iis4_error.txt b/tests/lexer/iis4_error.txt index 8138abd07..f24076a8c 100644 --- a/tests/lexer/iis4_error.txt +++ b/tests/lexer/iis4_error.txt @@ -1 +1 @@ -(6, 49) - LexicographicError: ERROR "%" +(6, 49) - LexicographicError: ERROR "!" diff --git a/tests/lexer/iis5.cl b/tests/lexer/iis5.cl index f602488b9..d146c0547 100644 --- a/tests/lexer/iis5.cl +++ b/tests/lexer/iis5.cl @@ -1,121 +1,121 @@ -(* Integers, Identifiers, and Special Notation *) - - -loop pool while tRuE or noT faLsE let in case of ESAC -new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) -class Class if then else fi testing Testing ~007agent_bond james_007bones___ - -factorial(5) = 120, 2 + 2 = 5 or E = mc2; p + 1 resto p = 1: [@.@ for x in range(len(b))] - -0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ - -(* -#4 LOOP -#4 POOL -#4 WHILE -#4 BOOL_CONST true -#4 OBJECTID or -#4 NOT -#4 BOOL_CONST false -#4 LET -#4 IN -#4 CASE -#4 OF -#4 ESAC -#5 NEW -#5 '/' -#5 ASSIGN -#5 '<' -#5 LE -#5 DARROW -#5 '{' -#5 '(' -#5 TYPEID Int -#5 ':' -#5 TYPEID Objet -#5 ',' -#5 TYPEID Bool -#5 ';' -#5 TYPEID String -#5 '.' -#5 OBJECTID string -#5 TYPEID SELF_TYPE -#5 ISVOID -#5 '}' -#5 ')' -#6 CLASS -#6 CLASS -#6 IF -#6 THEN -#6 ELSE -#6 FI -#6 OBJECTID testing -#6 TYPEID Testing -#6 '~' -#6 INT_CONST 007 -#6 OBJECTID agent_bond -#6 OBJECTID james_007bones___ -#8 OBJECTID factorial -#8 '(' -#8 INT_CONST 5 -#8 ')' -#8 '=' -#8 INT_CONST 120 -#8 ',' -#8 INT_CONST 2 -#8 '+' -#8 INT_CONST 2 -#8 '=' -#8 INT_CONST 5 -#8 OBJECTID or -#8 TYPEID E -#8 '=' -#8 OBJECTID mc2 -#8 ';' -#8 OBJECTID p -#8 '+' -#8 INT_CONST 1 -#8 OBJECTID resto -#8 OBJECTID p -#8 '=' -#8 INT_CONST 1 -#8 ':' -#8 ERROR "[" -#8 '@' -#8 '.' -#8 '@' -#8 OBJECTID for -#8 OBJECTID x -#8 IN -#8 OBJECTID range -#8 '(' -#8 OBJECTID len -#8 '(' -#8 OBJECTID b -#8 ')' -#8 ')' -#8 ERROR "]" -#10 INT_CONST 0007 -#10 INT_CONST 123 -#10 '+' -#10 INT_CONST 1 -#10 '-' -#10 INT_CONST 1 -#10 '+' -#10 INT_CONST 90 -#10 '-' -#10 INT_CONST 09 -#10 '+' -#10 INT_CONST 11113 -#10 '-' -#10 INT_CONST 4 -#10 OBJECTID r -#10 '*' -#10 OBJECTID a -#10 '*' -#10 OBJECTID self -#10 '*' -#10 OBJECTID c -#10 '+' -#10 '+' -*) +(* Integers, Identifiers, and Special Notation *) + + +loop pool while tRuE or noT faLsE let in case of ESAC +new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) +class Class if then else fi testing Testing ~007agent_bond james_007bones___ + +factorial(5) = 120, 2 + 2 = 5 or E = mc2; p + 1 resto p = 1: [@.@ for x in range(len(b))] + +0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ + +(* +#4 LOOP +#4 POOL +#4 WHILE +#4 BOOL_CONST true +#4 OBJECTID or +#4 NOT +#4 BOOL_CONST false +#4 LET +#4 IN +#4 CASE +#4 OF +#4 ESAC +#5 NEW +#5 '/' +#5 ASSIGN +#5 '<' +#5 LE +#5 DARROW +#5 '{' +#5 '(' +#5 TYPEID Int +#5 ':' +#5 TYPEID Objet +#5 ',' +#5 TYPEID Bool +#5 ';' +#5 TYPEID String +#5 '.' +#5 OBJECTID string +#5 TYPEID SELF_TYPE +#5 ISVOID +#5 '}' +#5 ')' +#6 CLASS +#6 CLASS +#6 IF +#6 THEN +#6 ELSE +#6 FI +#6 OBJECTID testing +#6 TYPEID Testing +#6 '~' +#6 INT_CONST 007 +#6 OBJECTID agent_bond +#6 OBJECTID james_007bones___ +#8 OBJECTID factorial +#8 '(' +#8 INT_CONST 5 +#8 ')' +#8 '=' +#8 INT_CONST 120 +#8 ',' +#8 INT_CONST 2 +#8 '+' +#8 INT_CONST 2 +#8 '=' +#8 INT_CONST 5 +#8 OBJECTID or +#8 TYPEID E +#8 '=' +#8 OBJECTID mc2 +#8 ';' +#8 OBJECTID p +#8 '+' +#8 INT_CONST 1 +#8 OBJECTID resto +#8 OBJECTID p +#8 '=' +#8 INT_CONST 1 +#8 ':' +#8 ERROR "[" +#8 '@' +#8 '.' +#8 '@' +#8 OBJECTID for +#8 OBJECTID x +#8 IN +#8 OBJECTID range +#8 '(' +#8 OBJECTID len +#8 '(' +#8 OBJECTID b +#8 ')' +#8 ')' +#8 ERROR "]" +#10 INT_CONST 0007 +#10 INT_CONST 123 +#10 '+' +#10 INT_CONST 1 +#10 '-' +#10 INT_CONST 1 +#10 '+' +#10 INT_CONST 90 +#10 '-' +#10 INT_CONST 09 +#10 '+' +#10 INT_CONST 11113 +#10 '-' +#10 INT_CONST 4 +#10 OBJECTID r +#10 '*' +#10 OBJECTID a +#10 '*' +#10 OBJECTID self +#10 '*' +#10 OBJECTID c +#10 '+' +#10 '+' +*) diff --git a/tests/lexer/iis5_error.txt b/tests/lexer/iis5_error.txt index 9d6e1a738..b3dbadcb6 100644 --- a/tests/lexer/iis5_error.txt +++ b/tests/lexer/iis5_error.txt @@ -1,2 +1,2 @@ -(8, 62) - LexicographicError: ERROR "[" -(8, 89) - LexicographicError: ERROR "]" +(8, 62) - LexicographicError: ERROR "[" +(8, 89) - LexicographicError: ERROR "]" diff --git a/tests/lexer/iis6.cl b/tests/lexer/iis6.cl index ba93b19d9..1042f132b 100644 --- a/tests/lexer/iis6.cl +++ b/tests/lexer/iis6.cl @@ -1,125 +1,125 @@ -(* Integers, Identifiers, and Special Notation *) - -factorial(5) = 120, 2 + 2 = 5 or E = mc2; p + 1 resto p = 1: {@.@ for x in range(len(b))} - -new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) - - -class Class if then else fi testing Testing ~007agent_bond _james_007bones___ - - - -0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ -loop pool while tRuE or noT faLsE let in case of ESAC - -(* -#3 OBJECTID factorial -#3 '(' -#3 INT_CONST 5 -#3 ')' -#3 '=' -#3 INT_CONST 120 -#3 ',' -#3 INT_CONST 2 -#3 '+' -#3 INT_CONST 2 -#3 '=' -#3 INT_CONST 5 -#3 OBJECTID or -#3 TYPEID E -#3 '=' -#3 OBJECTID mc2 -#3 ';' -#3 OBJECTID p -#3 '+' -#3 INT_CONST 1 -#3 OBJECTID resto -#3 OBJECTID p -#3 '=' -#3 INT_CONST 1 -#3 ':' -#3 '{' -#3 '@' -#3 '.' -#3 '@' -#3 OBJECTID for -#3 OBJECTID x -#3 IN -#3 OBJECTID range -#3 '(' -#3 OBJECTID len -#3 '(' -#3 OBJECTID b -#3 ')' -#3 ')' -#3 '}' -#5 NEW -#5 '/' -#5 ASSIGN -#5 '<' -#5 LE -#5 DARROW -#5 '{' -#5 '(' -#5 TYPEID Int -#5 ':' -#5 TYPEID Objet -#5 ',' -#5 TYPEID Bool -#5 ';' -#5 TYPEID String -#5 '.' -#5 OBJECTID string -#5 TYPEID SELF_TYPE -#5 ISVOID -#5 '}' -#5 ')' -#8 CLASS -#8 CLASS -#8 IF -#8 THEN -#8 ELSE -#8 FI -#8 OBJECTID testing -#8 TYPEID Testing -#8 '~' -#8 INT_CONST 007 -#8 OBJECTID agent_bond -#8 ERROR "_" -#8 OBJECTID james_007bones___ -#12 INT_CONST 0007 -#12 INT_CONST 123 -#12 '+' -#12 INT_CONST 1 -#12 '-' -#12 INT_CONST 1 -#12 '+' -#12 INT_CONST 90 -#12 '-' -#12 INT_CONST 09 -#12 '+' -#12 INT_CONST 11113 -#12 '-' -#12 INT_CONST 4 -#12 OBJECTID r -#12 '*' -#12 OBJECTID a -#12 '*' -#12 OBJECTID self -#12 '*' -#12 OBJECTID c -#12 '+' -#12 '+' -#13 LOOP -#13 POOL -#13 WHILE -#13 BOOL_CONST true -#13 OBJECTID or -#13 NOT -#13 BOOL_CONST false -#13 LET -#13 IN -#13 CASE -#13 OF -#13 ESAC +(* Integers, Identifiers, and Special Notation *) + +factorial(5) = 120, 2 + 2 = 5 or E = mc2; p + 1 resto p = 1: {@.@ for x in range(len(b))} + +new / <- <<==> {( Int: Objet, Bool; String.string SELF_TYPE isvoid }) + + +class Class if then else fi testing Testing ~007agent_bond _james_007bones___ + + + +0007 123 +1 -1 +90 -09 +11113 -4r *a *self* c++ +loop pool while tRuE or noT faLsE let in case of ESAC + +(* +#3 OBJECTID factorial +#3 '(' +#3 INT_CONST 5 +#3 ')' +#3 '=' +#3 INT_CONST 120 +#3 ',' +#3 INT_CONST 2 +#3 '+' +#3 INT_CONST 2 +#3 '=' +#3 INT_CONST 5 +#3 OBJECTID or +#3 TYPEID E +#3 '=' +#3 OBJECTID mc2 +#3 ';' +#3 OBJECTID p +#3 '+' +#3 INT_CONST 1 +#3 OBJECTID resto +#3 OBJECTID p +#3 '=' +#3 INT_CONST 1 +#3 ':' +#3 '{' +#3 '@' +#3 '.' +#3 '@' +#3 OBJECTID for +#3 OBJECTID x +#3 IN +#3 OBJECTID range +#3 '(' +#3 OBJECTID len +#3 '(' +#3 OBJECTID b +#3 ')' +#3 ')' +#3 '}' +#5 NEW +#5 '/' +#5 ASSIGN +#5 '<' +#5 LE +#5 DARROW +#5 '{' +#5 '(' +#5 TYPEID Int +#5 ':' +#5 TYPEID Objet +#5 ',' +#5 TYPEID Bool +#5 ';' +#5 TYPEID String +#5 '.' +#5 OBJECTID string +#5 TYPEID SELF_TYPE +#5 ISVOID +#5 '}' +#5 ')' +#8 CLASS +#8 CLASS +#8 IF +#8 THEN +#8 ELSE +#8 FI +#8 OBJECTID testing +#8 TYPEID Testing +#8 '~' +#8 INT_CONST 007 +#8 OBJECTID agent_bond +#8 ERROR "_" +#8 OBJECTID james_007bones___ +#12 INT_CONST 0007 +#12 INT_CONST 123 +#12 '+' +#12 INT_CONST 1 +#12 '-' +#12 INT_CONST 1 +#12 '+' +#12 INT_CONST 90 +#12 '-' +#12 INT_CONST 09 +#12 '+' +#12 INT_CONST 11113 +#12 '-' +#12 INT_CONST 4 +#12 OBJECTID r +#12 '*' +#12 OBJECTID a +#12 '*' +#12 OBJECTID self +#12 '*' +#12 OBJECTID c +#12 '+' +#12 '+' +#13 LOOP +#13 POOL +#13 WHILE +#13 BOOL_CONST true +#13 OBJECTID or +#13 NOT +#13 BOOL_CONST false +#13 LET +#13 IN +#13 CASE +#13 OF +#13 ESAC *) \ No newline at end of file diff --git a/tests/lexer/iis6_error.txt b/tests/lexer/iis6_error.txt index 79a9d5aee..d7fad9c79 100644 --- a/tests/lexer/iis6_error.txt +++ b/tests/lexer/iis6_error.txt @@ -1 +1 @@ -(8, 60) - LexicographicError: ERROR "_" +(8, 60) - LexicographicError: ERROR "_" diff --git a/tests/lexer/mixed1.cl b/tests/lexer/mixed1.cl index d3e520a10..803d58ef5 100644 --- a/tests/lexer/mixed1.cl +++ b/tests/lexer/mixed1.cl @@ -1,14 +1,14 @@ -"lkjdsafkljdsalfj\u0000dsafdsaf\u0000djafslkjdsalf\nsdajf\" lkjfdsasdkjfl"123 -adsfasklj# -LKldsajf iNhERITS -"lkdsajf" - -(* -#1 STR_CONST "lkjdsafkljdsalfju0000dsafdsafu0000djafslkjdsalf\nsdajf\" lkjfdsasdkjfl" -#1 INT_CONST 123 -#2 OBJECTID adsfasklj -#2 ERROR "#" -#3 TYPEID LKldsajf -#3 INHERITS -#4 STR_CONST "lkdsajf" +"lkjdsafkljdsalfj\u0000dsafdsaf\u0000djafslkjdsalf\nsdajf\" lkjfdsasdkjfl"123 +adsfasklj# +LKldsajf iNhERITS +"lkdsajf" + +(* +#1 STR_CONST "lkjdsafkljdsalfju0000dsafdsafu0000djafslkjdsalf\nsdajf\" lkjfdsasdkjfl" +#1 INT_CONST 123 +#2 OBJECTID adsfasklj +#2 ERROR "#" +#3 TYPEID LKldsajf +#3 INHERITS +#4 STR_CONST "lkdsajf" *) \ No newline at end of file diff --git a/tests/lexer/mixed1_error.txt b/tests/lexer/mixed1_error.txt index a142c2edd..99af5fbdc 100644 --- a/tests/lexer/mixed1_error.txt +++ b/tests/lexer/mixed1_error.txt @@ -1 +1 @@ -(2, 10) - LexicographicError: ERROR "#" +(2, 10) - LexicographicError: ERROR "#" diff --git a/tests/lexer/mixed2.cl b/tests/lexer/mixed2.cl index cfb77f151..12039e123 100644 --- a/tests/lexer/mixed2.cl +++ b/tests/lexer/mixed2.cl @@ -1,21 +1,20 @@ -"kjas\"lnnsdj\nfljrdsaf" -@.$.@ -@*%*@ -"alkjfldajf""dasfadsf - -(* -#1 STR_CONST "kjas\"lnnsdj\nfljrdsaf" -#2 '@' -#2 '.' -#2 ERROR "$" -#2 '.' -#2 '@' -#3 '@' -#3 '*' -#3 ERROR "%" -#3 '*' -#3 '@' -#4 STR_CONST "alkjfldajf" -#4 ERROR "Unterminated string constant" -*) - +"kjas\"lnnsdj\nfljrdsaf" +@.$.@ +@*%*@ +"alkjfldajf""dasfadsf + +(* +#1 STR_CONST "kjas\"lnnsdj\nfljrdsaf" +#2 '@' +#2 '.' +#2 ERROR "$" +#2 '.' +#2 '@' +#3 '@' +#3 '*' +#3 ERROR "%" +#3 '*' +#3 '@' +#4 STR_CONST "alkjfldajf" +#4 ERROR "Unterminated string constant" +*) \ No newline at end of file diff --git a/tests/lexer/mixed2_error.txt b/tests/lexer/mixed2_error.txt index 37cb73ac2..097dc2a07 100644 --- a/tests/lexer/mixed2_error.txt +++ b/tests/lexer/mixed2_error.txt @@ -1,3 +1,3 @@ -(2, 3) - LexicographicError: ERROR "$" -(3, 3) - LexicographicError: ERROR "%" -(4, 22) - LexicographicError: Unterminated string constant +(2, 3) - LexicographicError: ERROR "$" +(3, 3) - LexicographicError: ERROR "%" +(4, 22) - LexicographicError: Unterminated string constant diff --git a/tests/lexer/string1.cl b/tests/lexer/string1.cl index c4dae2ffe..6c3c00833 100644 --- a/tests/lexer/string1.cl +++ b/tests/lexer/string1.cl @@ -1,6 +1,6 @@ -(* A non-escaped newline character may not appear in a string *) - -"This \ -is OK" -"This is not -OK" +(* A non-escaped newline character may not appear in a string *) + +"This \ +is OK" +"This is not +OK" \ No newline at end of file diff --git a/tests/lexer/string1_error.txt b/tests/lexer/string1_error.txt index 1dd4d70d9..078c12bbb 100644 --- a/tests/lexer/string1_error.txt +++ b/tests/lexer/string1_error.txt @@ -1,2 +1,2 @@ -(5, 13) - LexicographicError: Unterminated string constant +(5, 13) - LexicographicError: Unterminated string constant (6, 4) - LexicographicError: EOF in string constant \ No newline at end of file diff --git a/tests/lexer/string2.cl b/tests/lexer/string2.cl index cb3024180..3704b6ae7 100644 --- a/tests/lexer/string2.cl +++ b/tests/lexer/string2.cl @@ -1,19 +1,19 @@ -(* A string may not contain EOF *) - -" May the Triforce \ - 0 \ - 0v0 \ - 0vvv0 \ - 0vvvvv0 \ - 0vvvvvvv0 \ - 0vvvvvvvvv0 \ - 0vvvvvvvvvvv0 \ - 000000000000000 \ - 0v0 0v0 \ - 0vvv0 0vvv0 \ - 0vvvvv0 0vvvvv0 \ - 0vvvvvvv0 0vvvvvvv0 \ - 0vvvvvvvvv0 0vvvvvvvvv0 \ - 0vvvvvvvvvvv0 0vvvvvvvvvvv0 \ - 00000000000000000000000000000 \ +(* A string may not contain EOF *) + +" May the Triforce \ + 0 \ + 0v0 \ + 0vvv0 \ + 0vvvvv0 \ + 0vvvvvvv0 \ + 0vvvvvvvvv0 \ + 0vvvvvvvvvvv0 \ + 000000000000000 \ + 0v0 0v0 \ + 0vvv0 0vvv0 \ + 0vvvvv0 0vvvvv0 \ + 0vvvvvvv0 0vvvvvvv0 \ + 0vvvvvvvvv0 0vvvvvvvvv0 \ + 0vvvvvvvvvvv0 0vvvvvvvvvvv0 \ + 00000000000000000000000000000 \ be with you! \ No newline at end of file diff --git a/tests/lexer/string4.cl b/tests/lexer/string4.cl index 7ca4eb42b..f4d39c027 100644 --- a/tests/lexer/string4.cl +++ b/tests/lexer/string4.cl @@ -1,38 +1,38 @@ -class Main { - str <- "The big brown fox - jumped over the fence"; - main() : Object { - { - out_string("Yay! This is the newest shites ); - } - }; -}; - -(* -#1 CLASS -#1 TYPEID Main -#1 '{' -#2 OBJECTID str -#2 ASSIGN -#3 ERROR "Unterminated string constant" -#3 OBJECTID jumped -#3 OBJECTID over -#3 OBJECTID the -#3 OBJECTID fence -#4 ERROR "Unterminated string constant" -#4 OBJECTID main -#4 '(' -#4 ')' -#4 ':' -#4 TYPEID Object -#4 '{' -#5 '{' -#6 OBJECTID out_string -#6 '(' -#7 ERROR "Unterminated string constant" -#7 '}' -#8 '}' -#8 ';' -#9 '}' -#9 ';' +class Main { + str <- "The big brown fox + jumped over the fence"; + main() : Object { + { + out_string("Yay! This is the newest shites ); + } + }; +}; + +(* +#1 CLASS +#1 TYPEID Main +#1 '{' +#2 OBJECTID str +#2 ASSIGN +#3 ERROR "Unterminated string constant" +#3 OBJECTID jumped +#3 OBJECTID over +#3 OBJECTID the +#3 OBJECTID fence +#4 ERROR "Unterminated string constant" +#4 OBJECTID main +#4 '(' +#4 ')' +#4 ':' +#4 TYPEID Object +#4 '{' +#5 '{' +#6 OBJECTID out_string +#6 '(' +#7 ERROR "Unterminated string constant" +#7 '}' +#8 '}' +#8 ';' +#9 '}' +#9 ';' *) \ No newline at end of file diff --git a/tests/lexer/string4_error.txt b/tests/lexer/string4_error.txt index bf420217c..5ab0ea847 100644 --- a/tests/lexer/string4_error.txt +++ b/tests/lexer/string4_error.txt @@ -1,3 +1,3 @@ -(2, 30) - LexicographicError: Unterminated string constant -(3, 36) - LexicographicError: Unterminated string constant +(2, 30) - LexicographicError: Unterminated string constant +(3, 36) - LexicographicError: Unterminated string constant (6, 58) - LexicographicError: Unterminated string constant \ No newline at end of file diff --git a/tests/lexer_test.py b/tests/lexer_test.py index a21fd880a..7cc100b22 100644 --- a/tests/lexer_test.py +++ b/tests/lexer_test.py @@ -1,13 +1,16 @@ -import pytest -import os -from utils import compare_errors - -tests_dir = __file__.rpartition('/')[0] + '/lexer/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -@pytest.mark.lexer -@pytest.mark.error -@pytest.mark.run(order=1) -@pytest.mark.parametrize("cool_file", tests) -def test_lexer_errors(compiler_path, cool_file): - compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt') \ No newline at end of file +import pytest +import os +from utils import compare_errors + +tests_dir = __file__.rpartition("/")[0] + "/lexer/" +tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +@pytest.mark.lexer +@pytest.mark.error +@pytest.mark.run(order=1) +@pytest.mark.parametrize("cool_file", tests) +def test_lexer_errors(compiler_path, cool_file): + print(compiler_path) + print(cool_file) + compare_errors( + compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" + ) diff --git a/tests/parser/assignment1.cl b/tests/parser/assignment1.cl index e89ade368..75b4c5bbd 100644 --- a/tests/parser/assignment1.cl +++ b/tests/parser/assignment1.cl @@ -1,37 +1,37 @@ -(* An assignment has the form <- *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(): String { - Test1 <- "Hello World" -- Identifiers begin with a lower case letter - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* An assignment has the form <- *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(): String { + Test1 <- "Hello World" -- Identifiers begin with a lower case letter + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/assignment2.cl b/tests/parser/assignment2.cl index 7b8ed54ba..4efb96487 100644 --- a/tests/parser/assignment2.cl +++ b/tests/parser/assignment2.cl @@ -1,37 +1,37 @@ -(* An assignment has the form <- *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 - 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(): Int { - test1 <-- ~(1 + 2 + 3 + 4 + 5) -- The left side must be an expression - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* An assignment has the form <- *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 - 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(): Int { + test1 <-- ~(1 + 2 + 3 + 4 + 5) -- The left side must be an expression + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/assignment3.cl b/tests/parser/assignment3.cl index f54305e27..ff633f331 100644 --- a/tests/parser/assignment3.cl +++ b/tests/parser/assignment3.cl @@ -1,37 +1,37 @@ -(* An assignment has the form <- *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(): Bool { - test1 <- true++ -- The left side must be an expression - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* An assignment has the form <- *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(): Bool { + test1 <- true++ -- The left side must be an expression + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/attribute1.cl b/tests/parser/attribute1.cl index 59740336d..063a02c02 100644 --- a/tests/parser/attribute1.cl +++ b/tests/parser/attribute1.cl @@ -1,34 +1,34 @@ -(* An attribute of class A specifies a variable that is part of the state of objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - -- Attributes names must begin with lowercase letters - Test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* An attribute of class A specifies a variable that is part of the state of objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + -- Attributes names must begin with lowercase letters + Test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/attribute2.cl b/tests/parser/attribute2.cl index 337696859..c05211483 100644 --- a/tests/parser/attribute2.cl +++ b/tests/parser/attribute2.cl @@ -1,34 +1,34 @@ -(* An attribute of class A specifies a variable that is part of the state of objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - -- Type names must begin with uppercase letters - test3: string <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* An attribute of class A specifies a variable that is part of the state of objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + -- Type names must begin with uppercase letters + test3: string <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/attribute3.cl b/tests/parser/attribute3.cl index b29b4b26d..d858ae47c 100644 --- a/tests/parser/attribute3.cl +++ b/tests/parser/attribute3.cl @@ -1,34 +1,34 @@ -(* An attribute of class A specifies a variable that is part of the state of objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - -- Expected '<-' not '<=' - test3: String <= "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* An attribute of class A specifies a variable that is part of the state of objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + -- Expected '<-' not '<=' + test3: String <= "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/block1.cl b/tests/parser/block1.cl index f15872812..3613d9268 100644 --- a/tests/parser/block1.cl +++ b/tests/parser/block1.cl @@ -1,87 +1,87 @@ -(* A block has the form { ; ... ; } *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - pow: Int <- 1; - count: Int <- 0; - - testing6(a: Int): IO { - { - count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2 -- Missing ";" - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A block has the form { ; ... ; } *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + pow: Int <- 1; + count: Int <- 0; + + testing6(a: Int): IO { + { + count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2 -- Missing ";" + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/block2.cl b/tests/parser/block2.cl index 1f45fca4c..f485dd0b1 100644 --- a/tests/parser/block2.cl +++ b/tests/parser/block2.cl @@ -1,87 +1,87 @@ -(* A block has the form { ; ... ; } *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - pow: Int <- 1; - count: Int <- 0; - - testing6(a: Int): IO { - -- Missing "{" - count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A block has the form { ; ... ; } *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + pow: Int <- 1; + count: Int <- 0; + + testing6(a: Int): IO { + -- Missing "{" + count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/block3.cl b/tests/parser/block3.cl index 9b63b0015..ae1598c3b 100644 --- a/tests/parser/block3.cl +++ b/tests/parser/block3.cl @@ -1,87 +1,87 @@ -(* A block has the form { ; ... ; } *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - pow: Int <- 1; - count: Int <- 0; - - testing6(a: Int): IO { - { - count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - -- Missing "}" - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A block has the form { ; ... ; } *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + pow: Int <- 1; + count: Int <- 0; + + testing6(a: Int): IO { + { + count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + -- Missing "}" + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/block4.cl b/tests/parser/block4.cl index c144dae48..8fd883d02 100644 --- a/tests/parser/block4.cl +++ b/tests/parser/block4.cl @@ -1,88 +1,88 @@ -(* A block has the form { ; ... ; } *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - pow: Int <- 1; - count: Int <- 0; - - testing6(a: Int): IO { - { - count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - true++; -- Only expressions - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A block has the form { ; ... ; } *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + pow: Int <- 1; + count: Int <- 0; + + testing6(a: Int): IO { + { + count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + true++; -- Only expressions + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/case1.cl b/tests/parser/case1.cl index 35fe5af53..c2f508809 100644 --- a/tests/parser/case1.cl +++ b/tests/parser/case1.cl @@ -1,91 +1,91 @@ -(* Case expressions provide runtime type tests on objects *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 of - -- Every case expression must have at least one branch - esac - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Case expressions provide runtime type tests on objects *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 of + -- Every case expression must have at least one branch + esac + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/case2.cl b/tests/parser/case2.cl index 12cbb87b5..f9162e49f 100644 --- a/tests/parser/case2.cl +++ b/tests/parser/case2.cl @@ -1,93 +1,93 @@ -(* Case expressions provide runtime type tests on objects *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case "2 + 2" of - x: Int => new IO.out_string("Es un entero!") -- Missing ";" - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Case expressions provide runtime type tests on objects *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case "2 + 2" of + x: Int => new IO.out_string("Es un entero!") -- Missing ";" + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/case3.cl b/tests/parser/case3.cl index 8fd851836..a7eedc18b 100644 --- a/tests/parser/case3.cl +++ b/tests/parser/case3.cl @@ -1,93 +1,93 @@ -(* Case expressions provide runtime type tests on objects *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + false of - x: Int => new IO.out_string("Es un entero!"); - y: string => new IO.out_string("Es una cadena!"); -- Type identifiers starts with a uppercase letter - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Case expressions provide runtime type tests on objects *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + false of + x: Int => new IO.out_string("Es un entero!"); + y: string => new IO.out_string("Es una cadena!"); -- Type identifiers starts with a uppercase letter + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/case4.cl b/tests/parser/case4.cl index eb8a3d3a2..25ca3858f 100644 --- a/tests/parser/case4.cl +++ b/tests/parser/case4.cl @@ -1,93 +1,93 @@ -(* Case expressions provide runtime type tests on objects *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case true of - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - Mazinger_Z: Bool => new IO.out_string("Es un booleano!"); -- Identifiers starts with a lowercase letter - esac - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Case expressions provide runtime type tests on objects *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case true of + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + Mazinger_Z: Bool => new IO.out_string("Es un booleano!"); -- Identifiers starts with a lowercase letter + esac + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/case5.cl b/tests/parser/case5.cl index f0483f1f5..b36c663e1 100644 --- a/tests/parser/case5.cl +++ b/tests/parser/case5.cl @@ -1,93 +1,93 @@ -(* Case expressions provide runtime type tests on objects *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case test2 of - x: Int <- new IO.out_string("Es un entero!"); -- Must be '=>' not '<-'; - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Case expressions provide runtime type tests on objects *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case test2 of + x: Int <- new IO.out_string("Es un entero!"); -- Must be '=>' not '<-'; + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/case6.cl b/tests/parser/case6.cl index c49467a89..66e7df2ab 100644 --- a/tests/parser/case6.cl +++ b/tests/parser/case6.cl @@ -1,93 +1,93 @@ -(* Case expressions provide runtime type tests on objects *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 -- Missing "of" - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Case expressions provide runtime type tests on objects *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 -- Missing "of" + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/class1.cl b/tests/parser/class1.cl index 1c0641a94..f4815e3f4 100644 --- a/tests/parser/class1.cl +++ b/tests/parser/class1.cl @@ -1,20 +1,20 @@ -(* A class is a list of features *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - testing(): Int { - 2 + 2 - }; -}; - --- Class names must begin with uppercase letters -class alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* A class is a list of features *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + testing(): Int { + 2 + 2 + }; +}; + +-- Class names must begin with uppercase letters +class alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/class2.cl b/tests/parser/class2.cl index baf290822..f363b032a 100644 --- a/tests/parser/class2.cl +++ b/tests/parser/class2.cl @@ -1,20 +1,20 @@ -(* A class is a list of features *) - -CLaSS Main { - main(): Object { - (new Alpha).print() - }; -}; - -CLaSS Test { - testing(): Int { - 2 + 2 - }; -}; - --- Type names must begin with uppercase letters -CLaSS Alpha iNHeRiTS iO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* A class is a list of features *) + +CLaSS Main { + main(): Object { + (new Alpha).print() + }; +}; + +CLaSS Test { + testing(): Int { + 2 + 2 + }; +}; + +-- Type names must begin with uppercase letters +CLaSS Alpha iNHeRiTS iO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/class3.cl b/tests/parser/class3.cl index 5c89c5eb8..0c801372a 100644 --- a/tests/parser/class3.cl +++ b/tests/parser/class3.cl @@ -1,34 +1,34 @@ -(* A class is a list of features *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - -- Missing semicolon - testing2(a: Alpha, b: Int): Int { - 2 + 2 - } - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* A class is a list of features *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + -- Missing semicolon + testing2(a: Alpha, b: Int): Int { + 2 + 2 + } + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/class4.cl b/tests/parser/class4.cl index cdfbc313c..5c286b5e6 100644 --- a/tests/parser/class4.cl +++ b/tests/parser/class4.cl @@ -1,36 +1,36 @@ -(* A class is a list of features *) - -CLaSS Main { - main(): Object { - (new Alpha).print() - }; -}; - -CLaSS Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - -- Only features - 2 + 2; - - testing3(): String { - "2 + 2" - }; -}; - -CLaSS Alpha iNHeRiTS IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* A class is a list of features *) + +CLaSS Main { + main(): Object { + (new Alpha).print() + }; +}; + +CLaSS Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + -- Only features + 2 + 2; + + testing3(): String { + "2 + 2" + }; +}; + +CLaSS Alpha iNHeRiTS IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/class5.cl b/tests/parser/class5.cl index d6b5c5fda..3f40c36eb 100644 --- a/tests/parser/class5.cl +++ b/tests/parser/class5.cl @@ -1,34 +1,34 @@ -(* A class is a list of features *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - --- Missing '{' -class Test - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* A class is a list of features *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +-- Missing '{' +class Test + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/class6.cl b/tests/parser/class6.cl index af9ecbf15..8501d2593 100644 --- a/tests/parser/class6.cl +++ b/tests/parser/class6.cl @@ -1,34 +1,34 @@ -(* A class is a list of features *) - -CLaSS Main { - main(): Object { - (new Alpha).print() - }; -}; - --- Missing '}' -CLaSS Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -; - -CLaSS Alpha iNHeRiTS IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* A class is a list of features *) + +CLaSS Main { + main(): Object { + (new Alpha).print() + }; +}; + +-- Missing '}' +CLaSS Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +; + +CLaSS Alpha iNHeRiTS IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/conditional1.cl b/tests/parser/conditional1.cl index f03b9c4e6..4d546fc44 100644 --- a/tests/parser/conditional1.cl +++ b/tests/parser/conditional1.cl @@ -1,69 +1,69 @@ -(* A conditional has the form if then else fi *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - if a.length() < b.length() -- Mising "then" - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - else - if a.length() = b.length() then - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - else - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fi - fi - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A conditional has the form if then else fi *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + if a.length() < b.length() -- Mising "then" + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + else + if a.length() = b.length() then + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + else + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fi + fi + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/conditional2.cl b/tests/parser/conditional2.cl index 9ebd7fe84..4f10c2957 100644 --- a/tests/parser/conditional2.cl +++ b/tests/parser/conditional2.cl @@ -1,69 +1,69 @@ -(* A conditional has the form if then else fi *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - if a.length() < b.length() then - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - else - if a.length() = b.length() then - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - else - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - -- Missing "fi" - fi - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A conditional has the form if then else fi *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + if a.length() < b.length() then + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + else + if a.length() = b.length() then + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + else + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + -- Missing "fi" + fi + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/conditional3.cl b/tests/parser/conditional3.cl index ac143ad42..67e991ade 100644 --- a/tests/parser/conditional3.cl +++ b/tests/parser/conditional3.cl @@ -1,69 +1,69 @@ -(* A conditional has the form if then else fi *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - iF a.length() < b.length() tHen - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - elsE - if a.length() = b.length() then - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - eLseif -- elseif isn't a keyword - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A conditional has the form if then else fi *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + iF a.length() < b.length() tHen + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + elsE + if a.length() = b.length() then + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + eLseif -- elseif isn't a keyword + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/conditional4.cl b/tests/parser/conditional4.cl index 51337f874..0792fdc85 100644 --- a/tests/parser/conditional4.cl +++ b/tests/parser/conditional4.cl @@ -1,73 +1,73 @@ -(* A conditional has the form if then else fi *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(): Int { - if true++ then 1 else 0 -- Condition must be an expression - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A conditional has the form if then else fi *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(): Int { + if true++ then 1 else 0 -- Condition must be an expression + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/conditional5.cl b/tests/parser/conditional5.cl index 399515701..0c1e1aad0 100644 --- a/tests/parser/conditional5.cl +++ b/tests/parser/conditional5.cl @@ -1,73 +1,73 @@ -(* A conditional has the form if then else fi *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(): Int { - if true then true++ else 0 -- If branch must be an expression - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A conditional has the form if then else fi *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(): Int { + if true then true++ else 0 -- If branch must be an expression + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/conditional6.cl b/tests/parser/conditional6.cl index 8daa35d7f..02310404a 100644 --- a/tests/parser/conditional6.cl +++ b/tests/parser/conditional6.cl @@ -1,73 +1,73 @@ -(* A conditional has the form if then else fi *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(): Int { - if true then 1 else false++ -- Else branch must be an expression - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A conditional has the form if then else fi *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(): Int { + if true then 1 else false++ -- Else branch must be an expression + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch1.cl b/tests/parser/dispatch1.cl index 2eba9db03..2ca394716 100644 --- a/tests/parser/dispatch1.cl +++ b/tests/parser/dispatch1.cl @@ -1,45 +1,45 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - Test1.testing4(1, 2).testing4(3, 4).testing4(5, 6) -- Objet identifiers begin with a lower case letter - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + Test1.testing4(1, 2).testing4(3, 4).testing4(5, 6) -- Objet identifiers begin with a lower case letter + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch2.cl b/tests/parser/dispatch2.cl index 139eba918..0b57467a1 100644 --- a/tests/parser/dispatch2.cl +++ b/tests/parser/dispatch2.cl @@ -1,45 +1,45 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13,) -- Extra comma - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13,) -- Extra comma + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch3.cl b/tests/parser/dispatch3.cl index 0d88f5c23..9f1a5afff 100644 --- a/tests/parser/dispatch3.cl +++ b/tests/parser/dispatch3.cl @@ -1,45 +1,45 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).Testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) -- Identifiers begin with a lower case letter - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).Testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) -- Identifiers begin with a lower case letter + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch4.cl b/tests/parser/dispatch4.cl index dc13fd762..d1efc469d 100644 --- a/tests/parser/dispatch4.cl +++ b/tests/parser/dispatch4.cl @@ -1,53 +1,53 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - self.testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true++) -- Arguments must be expressions - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + self.testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true++) -- Arguments must be expressions + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch5.cl b/tests/parser/dispatch5.cl index b7bae25e1..63a5afa79 100644 --- a/tests/parser/dispatch5.cl +++ b/tests/parser/dispatch5.cl @@ -1,53 +1,53 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, ,true + fALSE) -- Extra comma - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, ,true + fALSE) -- Extra comma + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch6.cl b/tests/parser/dispatch6.cl index 6887c60cd..0a953e2e6 100644 --- a/tests/parser/dispatch6.cl +++ b/tests/parser/dispatch6.cl @@ -1,57 +1,57 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@object.copy() -- Type identifiers begin with a upper case letter - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@object.copy() -- Type identifiers begin with a upper case letter + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch7.cl b/tests/parser/dispatch7.cl index a9ff1b67a..3ecac4d0f 100644 --- a/tests/parser/dispatch7.cl +++ b/tests/parser/dispatch7.cl @@ -1,57 +1,57 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.Copy() -- Identifiers begin with a lower case letter - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.Copy() -- Identifiers begin with a lower case letter + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch8.cl b/tests/parser/dispatch8.cl index c1bb2abba..eef0455ef 100644 --- a/tests/parser/dispatch8.cl +++ b/tests/parser/dispatch8.cl @@ -1,57 +1,57 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy(,) -- Extra comma - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy(,) -- Extra comma + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/dispatch9.cl b/tests/parser/dispatch9.cl index 8914a18c2..5fdef22d6 100644 --- a/tests/parser/dispatch9.cl +++ b/tests/parser/dispatch9.cl @@ -1,61 +1,61 @@ -(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; - - testing5(): Object { - test1:Object.copy() -- Must be '@' not ':' - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* There are three forms of dispatch (i.e. method call) in Cool. The three forms differ only in how the called method is selected *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; + + testing5(): Object { + test1:Object.copy() -- Must be '@' not ':' + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let1.cl b/tests/parser/let1.cl index 0e5fc6d17..576ae383c 100644 --- a/tests/parser/let1.cl +++ b/tests/parser/let1.cl @@ -1,85 +1,85 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let Count: Int <- 0, pow: Int <- 1 -- Object identifiers starts with a lowercase letter - in { - -- count <- 0; - -- pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let Count: Int <- 0, pow: Int <- 1 -- Object identifiers starts with a lowercase letter + in { + -- count <- 0; + -- pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let2.cl b/tests/parser/let2.cl index 01d055dac..4cfaef0f8 100644 --- a/tests/parser/let2.cl +++ b/tests/parser/let2.cl @@ -1,85 +1,85 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int, pow: int <- 1 -- Type identifiers starts with a uppercase letter - in { - count <- 0; - -- pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int, pow: int <- 1 -- Type identifiers starts with a uppercase letter + in { + count <- 0; + -- pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let3.cl b/tests/parser/let3.cl index b2b2fb005..91e567fd8 100644 --- a/tests/parser/let3.cl +++ b/tests/parser/let3.cl @@ -1,85 +1,85 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int, pow: Int, -- Extra comma - in { - count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int, pow: Int, -- Extra comma + in { + count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let4.cl b/tests/parser/let4.cl index c7d0ea8e3..a716c332d 100644 --- a/tests/parser/let4.cl +++ b/tests/parser/let4.cl @@ -1,85 +1,85 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- true++, pow: Int <- 1 -- Initialization must be an expression - in { - count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- true++, pow: Int <- 1 -- Initialization must be an expression + in { + count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let5.cl b/tests/parser/let5.cl index cc4ed7a99..d974cc138 100644 --- a/tests/parser/let5.cl +++ b/tests/parser/let5.cl @@ -1,85 +1,85 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int = 0, pow: Int -- Must be '<-' not '=' - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int = 0, pow: Int -- Must be '<-' not '=' + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let6.cl b/tests/parser/let6.cl index 8bc8c4883..b6e51d7e1 100644 --- a/tests/parser/let6.cl +++ b/tests/parser/let6.cl @@ -1,74 +1,74 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int <- 1 - in false++ -- Let body must be an expression - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int <- 1 + in false++ -- Let body must be an expression + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/let7.cl b/tests/parser/let7.cl index 816c59845..6fd63e6a7 100644 --- a/tests/parser/let7.cl +++ b/tests/parser/let7.cl @@ -1,85 +1,85 @@ -(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - (* Missing "in" *) { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A let expression has the form let : [ <- ], ..., : [ <- ] in *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + (* Missing "in" *) { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/loop1.cl b/tests/parser/loop1.cl index 2065de506..7d0d7688f 100644 --- a/tests/parser/loop1.cl +++ b/tests/parser/loop1.cl @@ -1,78 +1,78 @@ -(* A loop has the form while loop pool *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - count: Int <- 1; - - testing6(): Object { - while count < 1024*1024 - -- Missing "loop" - count <- count * 2 - pool - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A loop has the form while loop pool *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + count: Int <- 1; + + testing6(): Object { + while count < 1024*1024 + -- Missing "loop" + count <- count * 2 + pool + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/loop2.cl b/tests/parser/loop2.cl index 70f8cd910..a9613c487 100644 --- a/tests/parser/loop2.cl +++ b/tests/parser/loop2.cl @@ -1,78 +1,78 @@ -(* A loop has the form while loop pool *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - count: Int <- 1; - - testing6(): Object { - while count < 1024*1024 - loop - count <- count * 2 - -- Missing "pool" - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A loop has the form while loop pool *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + count: Int <- 1; + + testing6(): Object { + while count < 1024*1024 + loop + count <- count * 2 + -- Missing "pool" + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/loop3.cl b/tests/parser/loop3.cl index fbb3a56b4..860adb4d1 100644 --- a/tests/parser/loop3.cl +++ b/tests/parser/loop3.cl @@ -1,78 +1,78 @@ -(* A loop has the form while loop pool *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - count: Int <- 1; - - testing6(): Object { - while count => 1024*1024 -- Condition must be an expression - loop - count <- count * 2 - pool - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A loop has the form while loop pool *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + count: Int <- 1; + + testing6(): Object { + while count => 1024*1024 -- Condition must be an expression + loop + count <- count * 2 + pool + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/loop4.cl b/tests/parser/loop4.cl index 47b0e5f4a..0a1194e82 100644 --- a/tests/parser/loop4.cl +++ b/tests/parser/loop4.cl @@ -1,78 +1,78 @@ -(* A loop has the form while loop pool *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - count: Int <- 1; - - testing6(): Object { - while count < 1024*1024 - loop - count <- true++ -- While body must be an expression - pool - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A loop has the form while loop pool *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + count: Int <- 1; + + testing6(): Object { + while count < 1024*1024 + loop + count <- true++ -- While body must be an expression + pool + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/method1.cl b/tests/parser/method1.cl index d86661430..fcfbbcd30 100644 --- a/tests/parser/method1.cl +++ b/tests/parser/method1.cl @@ -1,34 +1,34 @@ -(* A method of class A is a procedure that may manipulate the variables and objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - -- Method names must begin with lowercase letters - Testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A method of class A is a procedure that may manipulate the variables and objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + -- Method names must begin with lowercase letters + Testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/method2.cl b/tests/parser/method2.cl index 83648f50d..d5bdfd85c 100644 --- a/tests/parser/method2.cl +++ b/tests/parser/method2.cl @@ -1,34 +1,34 @@ -(* A method of class A is a procedure that may manipulate the variables and objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - -- Parameter names must begin with lowercase letters - testing2(a: Alpha, B: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A method of class A is a procedure that may manipulate the variables and objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + -- Parameter names must begin with lowercase letters + testing2(a: Alpha, B: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/method3.cl b/tests/parser/method3.cl index 428b25fec..1e5c9eb53 100644 --- a/tests/parser/method3.cl +++ b/tests/parser/method3.cl @@ -1,34 +1,34 @@ -(* A method of class A is a procedure that may manipulate the variables and objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - -- Type names must begin with uppercase letters - testing2(a: Alpha, b: int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A method of class A is a procedure that may manipulate the variables and objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + -- Type names must begin with uppercase letters + testing2(a: Alpha, b: int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/method4.cl b/tests/parser/method4.cl index 52ec07bce..019ada276 100644 --- a/tests/parser/method4.cl +++ b/tests/parser/method4.cl @@ -1,34 +1,34 @@ -(* A method of class A is a procedure that may manipulate the variables and objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - -- Missing paremeter - testing3(x: Int,): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A method of class A is a procedure that may manipulate the variables and objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + -- Missing paremeter + testing3(x: Int,): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/method5.cl b/tests/parser/method5.cl index 706a3145c..13127f664 100644 --- a/tests/parser/method5.cl +++ b/tests/parser/method5.cl @@ -1,34 +1,34 @@ -(* A method of class A is a procedure that may manipulate the variables and objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - -- Type names must begin with uppercase letters - testing3(): string { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A method of class A is a procedure that may manipulate the variables and objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + -- Type names must begin with uppercase letters + testing3(): string { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/method6.cl b/tests/parser/method6.cl index 26ce7f19f..d48cd1293 100644 --- a/tests/parser/method6.cl +++ b/tests/parser/method6.cl @@ -1,33 +1,33 @@ -(* A method of class A is a procedure that may manipulate the variables and objects of class A *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - -- Body can't be empty - testing2(a: Alpha, b: Int): Int { - }; - - testing3(): String { - "2 + 2" - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* A method of class A is a procedure that may manipulate the variables and objects of class A *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + -- Body can't be empty + testing2(a: Alpha, b: Int): Int { + }; + + testing3(): String { + "2 + 2" + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/mixed1.cl b/tests/parser/mixed1.cl index b13e679da..a27879513 100644 --- a/tests/parser/mixed1.cl +++ b/tests/parser/mixed1.cl @@ -1,100 +1,100 @@ -(* Cool has four binary arithmetic operations: +, -, *, /. *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 of - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; - - a: Int <- 1; - - testing8(x: Int, y: Int): Bool { - let z: Int <- 3, w: Int <- 4 - in isvoid (3 + a * (x / w + new Int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) - }; -}-- Mising ";" - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Cool has four binary arithmetic operations: +, -, *, /. *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 of + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; + + a: Int <- 1; + + testing8(x: Int, y: Int): Bool { + let z: Int <- 3, w: Int <- 4 + in isvoid (3 + a * (x / w + new Int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) + }; +}-- Mising ";" + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/mixed2.cl b/tests/parser/mixed2.cl index 6776fcc12..f5477e0bb 100644 --- a/tests/parser/mixed2.cl +++ b/tests/parser/mixed2.cl @@ -1,14 +1,14 @@ -class Main { - main(): Object { - (new Alpha).print() - }; - -}; - -(* Class names must begin with uppercase letters *) -class alpha inherits IO { - print() : Object { - out_string("reached!!\n"); - }; -}; - +class Main { + main(): Object { + (new Alpha).print() + }; + +}; + +(* Class names must begin with uppercase letters *) +class alpha inherits IO { + print() : Object { + out_string("reached!!\n"); + }; +}; + diff --git a/tests/parser/mixed3.cl b/tests/parser/mixed3.cl index f5271eb3e..1bdcad743 100644 --- a/tests/parser/mixed3.cl +++ b/tests/parser/mixed3.cl @@ -1,40 +1,40 @@ -class Main inherits IO { - main() : Object { - { - out_string("Enter a number to check if number is prime\n"); - let i : Int <- in_int() in { - if(i <= 1) then { - out_string("Invalid Input\n"); - abort(); - } else { - if (isPrime(i) = 1) then - out_string("Number is prime\n") - else - out_string("Number is composite\n") - fi; - } - fi; - }; - } - }; - - mod(i : Int, ) : Int { -- Formal list must be comma separated. A comma does not terminate a list of formals. - i - (i/k)*k - }; - - isPrime(i : Int) : Int { - { - let x : Int <- 2, - c : Int <- 1 in - { - while (not (x = i)) loop - if (mod(i, x) = 0) then { - c <- 0; - x <- i; - } else x <- x + 1 fi - pool; - c; - }; - } - }; -}; +class Main inherits IO { + main() : Object { + { + out_string("Enter a number to check if number is prime\n"); + let i : Int <- in_int() in { + if(i <= 1) then { + out_string("Invalid Input\n"); + abort(); + } else { + if (isPrime(i) = 1) then + out_string("Number is prime\n") + else + out_string("Number is composite\n") + fi; + } + fi; + }; + } + }; + + mod(i : Int, ) : Int { -- Formal list must be comma separated. A comma does not terminate a list of formals. + i - (i/k)*k + }; + + isPrime(i : Int) : Int { + { + let x : Int <- 2, + c : Int <- 1 in + { + while (not (x = i)) loop + if (mod(i, x) = 0) then { + c <- 0; + x <- i; + } else x <- x + 1 fi + pool; + c; + }; + } + }; +}; diff --git a/tests/parser/mixed4.cl b/tests/parser/mixed4.cl index 47e6ea5e9..e752253be 100644 --- a/tests/parser/mixed4.cl +++ b/tests/parser/mixed4.cl @@ -1,21 +1,21 @@ -class Main inherits IO { - main() : Object { - { - out_string("Enter number of numbers to multiply\n"); - out_int(prod(in_int())); - out_string("\n"); - } - }; - - prod(i : Int) : Int { - let y : Int <- 1 in { - while (not (i = 0) ) loop { - out_string("Enter Number: "); - y <- y * in_int(Main : Int); -- the parser correctly catches the error here - i <- i - 1; - } - pool; - y; - } - }; -}; +class Main inherits IO { + main() : Object { + { + out_string("Enter number of numbers to multiply\n"); + out_int(prod(in_int())); + out_string("\n"); + } + }; + + prod(i : Int) : Int { + let y : Int <- 1 in { + while (not (i = 0) ) loop { + out_string("Enter Number: "); + y <- y * in_int(Main : Int); -- the parser correctly catches the error here + i <- i - 1; + } + pool; + y; + } + }; +}; diff --git a/tests/parser/mixed5.cl b/tests/parser/mixed5.cl index d4ca68f44..c9176a890 100644 --- a/tests/parser/mixed5.cl +++ b/tests/parser/mixed5.cl @@ -1,20 +1,20 @@ -class Main inherits IO { - str <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; - main() : Object { - { - out_string("Enter number of numbers to multiply\n"); - out_int(prod(in_int())); - out_string("\n"); - } - }; - prod(i : Int) : Int { - let y : Int <- 1 in { - while (not (i = 0) ) loop { - out_string("Enter Number: "); - y <- y * in_int(); - i <- i - 1; - } - y; - } - }; -} +class Main inherits IO { + str <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; + main() : Object { + { + out_string("Enter number of numbers to multiply\n"); + out_int(prod(in_int())); + out_string("\n"); + } + }; + prod(i : Int) : Int { + let y : Int <- 1 in { + while (not (i = 0) ) loop { + out_string("Enter Number: "); + y <- y * in_int(); + i <- i - 1; + } + y; + } + }; +} diff --git a/tests/parser/mixed6.cl b/tests/parser/mixed6.cl index 0a51656c9..5da80da31 100644 --- a/tests/parser/mixed6.cl +++ b/tests/parser/mixed6.cl @@ -1,5 +1,5 @@ -classs Doom { - i : Int <- 0; - main() : Object { - if i = 0 then out_string("This is da real *h*t") - +classs Doom { + i : Int <- 0; + main() : Object { + if i = 0 then out_string("This is da real *h*t") + diff --git a/tests/parser/operation1.cl b/tests/parser/operation1.cl index d892ec8a6..d38eb72d0 100644 --- a/tests/parser/operation1.cl +++ b/tests/parser/operation1.cl @@ -1,101 +1,101 @@ -(* Cool has four binary arithmetic operations: +, -, *, /. *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 of - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; - - a: Int <- 1; - - testing8(x: Int, y: Int): Bool { - let z: Int <- 3, w: Int <- 4 - -- Missing ')' - in isvoid (3 + a * (x / w + new Int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a)/(0)*(((4 * 4))))) - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Cool has four binary arithmetic operations: +, -, *, /. *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 of + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; + + a: Int <- 1; + + testing8(x: Int, y: Int): Bool { + let z: Int <- 3, w: Int <- 4 + -- Missing ')' + in isvoid (3 + a * (x / w + new Int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a)/(0)*(((4 * 4))))) + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/operation2.cl b/tests/parser/operation2.cl index 1f167409a..2dc628359 100644 --- a/tests/parser/operation2.cl +++ b/tests/parser/operation2.cl @@ -1,101 +1,101 @@ -(* Cool has four binary arithmetic operations: +, -, *, /. *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 of - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; - - a: Int <- 1; - - testing8(x: Int, y: Int): Bool { - let z: Int <- 3, w: Int <- 4 - -- Type identifiers starts with a uppercase letter - in isvoid (3 + a * (x / w + new int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Cool has four binary arithmetic operations: +, -, *, /. *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 of + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; + + a: Int <- 1; + + testing8(x: Int, y: Int): Bool { + let z: Int <- 3, w: Int <- 4 + -- Type identifiers starts with a uppercase letter + in isvoid (3 + a * (x / w + new int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/operation3.cl b/tests/parser/operation3.cl index ef125927a..61d6cbfa8 100644 --- a/tests/parser/operation3.cl +++ b/tests/parser/operation3.cl @@ -1,101 +1,101 @@ -(* Cool has four binary arithmetic operations: +, -, *, /. *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 of - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; - - a: Int <- 1; - - testing8(x: Int, y: Int): Bool { - let z: Int <- 3, w: Int <- 4 - -- Object identifiers starts with a lowercase letter - in isvoid (3 + a * (x / w + new Int) - y - (((if tRue = not faLSe then ~Mazinger_Z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Cool has four binary arithmetic operations: +, -, *, /. *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 of + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; + + a: Int <- 1; + + testing8(x: Int, y: Int): Bool { + let z: Int <- 3, w: Int <- 4 + -- Object identifiers starts with a lowercase letter + in isvoid (3 + a * (x / w + new Int) - y - (((if tRue = not faLSe then ~Mazinger_Z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/operation4.cl b/tests/parser/operation4.cl index 2212740e7..bae7de5b5 100644 --- a/tests/parser/operation4.cl +++ b/tests/parser/operation4.cl @@ -1,101 +1,101 @@ -(* Cool has four binary arithmetic operations: +, -, *, /. *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - test1: Object; - - testing1(): Int { - 2 + 2 - }; - - test2: Int <- 1; - - test3: String <- "1"; - - testing2(a: Alpha, b: Int): Int { - 2 + 2 - }; - - testing3(): String { - "2 + 2" - }; - - testing4(x: Int, y: Int): Test { - self - }; - - testing5(a: String, b: String): IO { - If a.length() < b.length() THeN - new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) - eLSe - if a.length() = b.length() THeN - new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) - ElsE - new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) - fI - Fi - }; - - testing6(a: Int): IO { - let count: Int <- 0, pow: Int - in { - -- count <- 0; - pow <- 1; - while pow < a - loop - { - count <- count + 1; - pow <- pow * 2; - } - pool; - new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); - } - }; - - testing7(): Object { - case 2 + 2 of - x: Int => new IO.out_string("Es un entero!"); - y: String => new IO.out_string("Es una cadena!"); - z: Bool => new IO.out_string("Es un booleano!"); - esac - }; - - a: Int <- 1; - - testing8(x: Int, y: Int): Bool { - let z: Int <- 3, w: Int <- 4 - -- Double "+" - in isvoid (3 + a * (x / w++ new Int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) - }; -}; - -class Test2 { - test1: Test <- new Test; - - testing1(): Test { - test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) - }; - - testing2(x: Int, y: Int): Test2 { - self - }; - - testing3(): Test2 { - testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) - }; - - testing4(): Object { - test1@Object.copy() - }; -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; +(* Cool has four binary arithmetic operations: +, -, *, /. *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + test1: Object; + + testing1(): Int { + 2 + 2 + }; + + test2: Int <- 1; + + test3: String <- "1"; + + testing2(a: Alpha, b: Int): Int { + 2 + 2 + }; + + testing3(): String { + "2 + 2" + }; + + testing4(x: Int, y: Int): Test { + self + }; + + testing5(a: String, b: String): IO { + If a.length() < b.length() THeN + new IO.out_string("La cadena \"".concat(b).concat("\" es mas larga que la cadena \"").concat(a).concat("\".")) + eLSe + if a.length() = b.length() THeN + new IO.out_string("La cadena \"".concat(a).concat("\" mide igual que la cadena \"").concat(b).concat("\".")) + ElsE + new IO.out_string("La cadena \"".concat(a).concat("\" es mas larga que la cadena \"").concat(b).concat("\".")) + fI + Fi + }; + + testing6(a: Int): IO { + let count: Int <- 0, pow: Int + in { + -- count <- 0; + pow <- 1; + while pow < a + loop + { + count <- count + 1; + pow <- pow * 2; + } + pool; + new IO.out_string("El logaritmo en base 2 de ").out_int(a).out_string(" es ").out_int(count); + } + }; + + testing7(): Object { + case 2 + 2 of + x: Int => new IO.out_string("Es un entero!"); + y: String => new IO.out_string("Es una cadena!"); + z: Bool => new IO.out_string("Es un booleano!"); + esac + }; + + a: Int <- 1; + + testing8(x: Int, y: Int): Bool { + let z: Int <- 3, w: Int <- 4 + -- Double "+" + in isvoid (3 + a * (x / w++ new Int) - y - (((if tRue = not faLSe then ~z else 3 <= 4 + "hey".length() fi + a))/(0)*(((4 * 4))))) + }; +}; + +class Test2 { + test1: Test <- new Test; + + testing1(): Test { + test1.testing4(1 + 1, 1 + 2).testing4(2 + 3, 3 + 5).testing4(5 + 8, 8 + 13) + }; + + testing2(x: Int, y: Int): Test2 { + self + }; + + testing3(): Test2 { + testing2(1 + 1, 1 + 2).testing2(2 + 3, 3 + 5).testing2(5 + 8, true + fALSE) + }; + + testing4(): Object { + test1@Object.copy() + }; +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; }; \ No newline at end of file diff --git a/tests/parser/program1.cl b/tests/parser/program1.cl index 33cbcd02a..8e5cf617f 100644 --- a/tests/parser/program1.cl +++ b/tests/parser/program1.cl @@ -1 +1 @@ -(* A Cool program can't be empty *) +(* A Cool program can't be empty *) \ No newline at end of file diff --git a/tests/parser/program2.cl b/tests/parser/program2.cl index a281c6c14..f8b16779c 100644 --- a/tests/parser/program2.cl +++ b/tests/parser/program2.cl @@ -1,20 +1,20 @@ -(* Cool programs are sets of classes *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - --- Missing semicolon -class Test { - testing(): Int { - 2 + 2 - }; -} - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* Cool programs are sets of classes *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +-- Missing semicolon +class Test { + testing(): Int { + 2 + 2 + }; +} + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser/program3.cl b/tests/parser/program3.cl index 10d2dc71e..e27889c57 100644 --- a/tests/parser/program3.cl +++ b/tests/parser/program3.cl @@ -1,24 +1,24 @@ -(* Cool programs are sets of classes *) - -class Main { - main(): Object { - (new Alpha).print() - }; -}; - -class Test { - testing(): Int { - 2 + 2 - }; -}; - --- Only classes -suma(a: Int, b: Int) int { - a + b -}; - -class Alpha inherits IO { - print() : Object { - out_string("reached!!\n") - }; -}; +(* Cool programs are sets of classes *) + +class Main { + main(): Object { + (new Alpha).print() + }; +}; + +class Test { + testing(): Int { + 2 + 2 + }; +}; + +-- Only classes +suma(a: Int, b: Int) int { + a + b +}; + +class Alpha inherits IO { + print() : Object { + out_string("reached!!\n") + }; +}; diff --git a/tests/parser_test.py b/tests/parser_test.py index 166de45de..5c98fd1b2 100644 --- a/tests/parser_test.py +++ b/tests/parser_test.py @@ -1,13 +1,14 @@ -import pytest -import os -from utils import compare_errors - -tests_dir = __file__.rpartition('/')[0] + '/parser/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -@pytest.mark.parser -@pytest.mark.error -@pytest.mark.run(order=2) -@pytest.mark.parametrize("cool_file", tests) -def test_parser_errors(compiler_path, cool_file): - compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt') \ No newline at end of file +import pytest +import os +from utils import compare_errors + +tests_dir = __file__.rpartition("/")[0] + "/parser/" +tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +@pytest.mark.parser +@pytest.mark.error +@pytest.mark.run(order=2) +@pytest.mark.parametrize("cool_file", tests) +def test_parser_errors(compiler_path, cool_file): + compare_errors( + compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" + ) diff --git a/tests/semantic/arithmetic1.cl b/tests/semantic/arithmetic1.cl index 65719c064..bf94eb194 100644 --- a/tests/semantic/arithmetic1.cl +++ b/tests/semantic/arithmetic1.cl @@ -1,11 +1,11 @@ ---The static types of the two sub-expressions must be Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Int <- 1 * 2 / 3 - 4 + new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in x <- x + new A.type_name().concat(new B.type_name().concat(new C.type_name())); +--The static types of the two sub-expressions must be Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Int <- 1 * 2 / 3 - 4 + new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in x <- x + new A.type_name().concat(new B.type_name().concat(new C.type_name())); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic10.cl b/tests/semantic/arithmetic10.cl index b2488ad7f..bbfe6cdb3 100644 --- a/tests/semantic/arithmetic10.cl +++ b/tests/semantic/arithmetic10.cl @@ -1,15 +1,15 @@ -(* -The expression ~ is the integer -complement of . The expression must have static type Int and the entire expression -has static type Int. -*) - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in ~new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); +(* +The expression ~ is the integer +complement of . The expression must have static type Int and the entire expression +has static type Int. +*) + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in ~new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic11.cl b/tests/semantic/arithmetic11.cl index 05cec0465..fc067dc1a 100644 --- a/tests/semantic/arithmetic11.cl +++ b/tests/semantic/arithmetic11.cl @@ -1,14 +1,14 @@ -(* -The expression not is the boolean complement of . The expression - must have static type Bool and the entire expression has static type Bool. -*) - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in not 1 + new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); +(* +The expression not is the boolean complement of . The expression + must have static type Bool and the entire expression has static type Bool. +*) + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in not 1 + new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic12.cl b/tests/semantic/arithmetic12.cl index 05a2da918..2e012fc41 100644 --- a/tests/semantic/arithmetic12.cl +++ b/tests/semantic/arithmetic12.cl @@ -1,14 +1,14 @@ -(* -The expression not is the boolean complement of . The expression - must have static type Bool and the entire expression has static type Bool. -*) - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in not 1 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); +(* +The expression not is the boolean complement of . The expression + must have static type Bool and the entire expression has static type Bool. +*) + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in not 1 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic1_error.txt b/tests/semantic/arithmetic1_error.txt index 59213724d..a74ebf3da 100644 --- a/tests/semantic/arithmetic1_error.txt +++ b/tests/semantic/arithmetic1_error.txt @@ -1 +1 @@ -(10, 27) - TypeError: non-Int arguments: Int + String +(10, 27) - TypeError: non-Int arguments: Int + String diff --git a/tests/semantic/arithmetic2.cl b/tests/semantic/arithmetic2.cl index f1f0935e2..59532573d 100644 --- a/tests/semantic/arithmetic2.cl +++ b/tests/semantic/arithmetic2.cl @@ -1,11 +1,11 @@ ---The static types of the two sub-expressions must be Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Int <- 1 + 2 * 3 / 4 - new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in x <- x - new A.type_name().concat(new B.type_name().concat(new C.type_name())); +--The static types of the two sub-expressions must be Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Int <- 1 + 2 * 3 / 4 - new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in x <- x - new A.type_name().concat(new B.type_name().concat(new C.type_name())); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic2_error.txt b/tests/semantic/arithmetic2_error.txt index aebc7aab9..2c7952af8 100644 --- a/tests/semantic/arithmetic2_error.txt +++ b/tests/semantic/arithmetic2_error.txt @@ -1 +1 @@ -(10, 27) - TypeError: non-Int arguments: Int - String +(10, 27) - TypeError: non-Int arguments: Int - String diff --git a/tests/semantic/arithmetic3.cl b/tests/semantic/arithmetic3.cl index df64d8000..b208957f5 100644 --- a/tests/semantic/arithmetic3.cl +++ b/tests/semantic/arithmetic3.cl @@ -1,11 +1,11 @@ ---The static types of the two sub-expressions must be Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Int <- 1 - 2 + 3 * 4 / new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in x <- x / new A.type_name().concat(new B.type_name().concat(new C.type_name())); +--The static types of the two sub-expressions must be Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Int <- 1 - 2 + 3 * 4 / new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in x <- x / new A.type_name().concat(new B.type_name().concat(new C.type_name())); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic3_error.txt b/tests/semantic/arithmetic3_error.txt index d0af01bb5..81d88331a 100644 --- a/tests/semantic/arithmetic3_error.txt +++ b/tests/semantic/arithmetic3_error.txt @@ -1 +1 @@ -(10, 27) - TypeError: non-Int arguments: Int / String +(10, 27) - TypeError: non-Int arguments: Int / String diff --git a/tests/semantic/arithmetic4.cl b/tests/semantic/arithmetic4.cl index 68512ca44..2c7dd4fc9 100644 --- a/tests/semantic/arithmetic4.cl +++ b/tests/semantic/arithmetic4.cl @@ -1,11 +1,11 @@ ---The static types of the two sub-expressions must be Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Int <- 1 / 2 - 3 + 4 * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in x <- x * new A.type_name().concat(new B.type_name().concat(new C.type_name())); +--The static types of the two sub-expressions must be Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Int <- 1 / 2 - 3 + 4 * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in x <- x * new A.type_name().concat(new B.type_name().concat(new C.type_name())); }; \ No newline at end of file diff --git a/tests/semantic/arithmetic5.cl b/tests/semantic/arithmetic5.cl index 3a3e3f177..bc08c6e82 100644 --- a/tests/semantic/arithmetic5.cl +++ b/tests/semantic/arithmetic5.cl @@ -1,11 +1,11 @@ ---The static type of the expression is Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Bool <- let x: Int <- 1 / 2 - 3 + 4 * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in x <- x * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); -}; +--The static type of the expression is Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Bool <- let x: Int <- 1 / 2 - 3 + 4 * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in x <- x * new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); +}; \ No newline at end of file diff --git a/tests/semantic/arithmetic5_error.txt b/tests/semantic/arithmetic5_error.txt index 8c67c2f53..dd5346844 100644 --- a/tests/semantic/arithmetic5_error.txt +++ b/tests/semantic/arithmetic5_error.txt @@ -1 +1 @@ -(9, 19) - TypeError: Inferred type Int of initialization of attribute test does not conform to declared type Bool. +(9, 19) - TypeError: Inferred type Int of initialization of attribute test does not conform to declared type Bool. diff --git a/tests/semantic/arithmetic6.cl b/tests/semantic/arithmetic6.cl index d4da66a73..a0c3d03ff 100644 --- a/tests/semantic/arithmetic6.cl +++ b/tests/semantic/arithmetic6.cl @@ -1,11 +1,11 @@ - --The static types of the two sub-expressions must be Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 <= new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in 1 <= new A.type_name().concat(new B.type_name().concat(new C.type_name())); -}; + --The static types of the two sub-expressions must be Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 <= new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in 1 <= new A.type_name().concat(new B.type_name().concat(new C.type_name())); +}; diff --git a/tests/semantic/arithmetic6_error.txt b/tests/semantic/arithmetic6_error.txt index a0d67cb48..2e43dfc17 100644 --- a/tests/semantic/arithmetic6_error.txt +++ b/tests/semantic/arithmetic6_error.txt @@ -1 +1 @@ -(10, 22) - TypeError: non-Int arguments: Int <= String +(10, 22) - TypeError: non-Int arguments: Int <= String diff --git a/tests/semantic/arithmetic7.cl b/tests/semantic/arithmetic7.cl index b98a4b0e2..c00c75cde 100644 --- a/tests/semantic/arithmetic7.cl +++ b/tests/semantic/arithmetic7.cl @@ -1,12 +1,12 @@ - --The static types of the two sub-expressions must be Int. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in 1 < new A.type_name().concat(new B.type_name().concat(new C.type_name())); -}; - + --The static types of the two sub-expressions must be Int. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Bool <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in 1 < new A.type_name().concat(new B.type_name().concat(new C.type_name())); +}; + diff --git a/tests/semantic/arithmetic7_error.txt b/tests/semantic/arithmetic7_error.txt index 166bcc8ef..6f3537117 100644 --- a/tests/semantic/arithmetic7_error.txt +++ b/tests/semantic/arithmetic7_error.txt @@ -1 +1 @@ -(10, 22) - TypeError: non-Int arguments: Int < String +(10, 22) - TypeError: non-Int arguments: Int < String diff --git a/tests/semantic/arithmetic8.cl b/tests/semantic/arithmetic8.cl index f3ad37ec4..3210bdb8a 100644 --- a/tests/semantic/arithmetic8.cl +++ b/tests/semantic/arithmetic8.cl @@ -1,13 +1,13 @@ - --The rules are exactly the same as for the binary arithmetic operations, except that the result is a Bool. - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in 1 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); -}; - - + --The rules are exactly the same as for the binary arithmetic operations, except that the result is a Bool. + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in 1 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length(); +}; + + diff --git a/tests/semantic/arithmetic8_error.txt b/tests/semantic/arithmetic8_error.txt index 5a8814e1a..ebcaa3797 100644 --- a/tests/semantic/arithmetic8_error.txt +++ b/tests/semantic/arithmetic8_error.txt @@ -1 +1 @@ -(9, 18) - TypeError: Inferred type Bool of initialization of attribute test does not conform to declared type Int. +(9, 18) - TypeError: Inferred type Bool of initialization of attribute test does not conform to declared type Int. diff --git a/tests/semantic/arithmetic9.cl b/tests/semantic/arithmetic9.cl index 76f4a2b42..95579e134 100644 --- a/tests/semantic/arithmetic9.cl +++ b/tests/semantic/arithmetic9.cl @@ -1,15 +1,15 @@ -(* -The expression ~ is the integer -complement of . The expression must have static type Int and the entire expression -has static type Int. -*) - -class A { }; -class B inherits A { }; -class C inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() - in 1 + ~new A.type_name().concat(new B.type_name().concat(new C.type_name())); -}; +(* +The expression ~ is the integer +complement of . The expression must have static type Int and the entire expression +has static type Int. +*) + +class A { }; +class B inherits A { }; +class C inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + test: Int <- let x: Bool <- 1 / 2 - 3 + 4 < new A.type_name().concat(new B.type_name().concat(new C.type_name())).length() + in 1 + ~new A.type_name().concat(new B.type_name().concat(new C.type_name())); +}; \ No newline at end of file diff --git a/tests/semantic/assignment1.cl b/tests/semantic/assignment1.cl index 174f93e2b..19ab70219 100644 --- a/tests/semantic/assignment1.cl +++ b/tests/semantic/assignment1.cl @@ -1,7 +1,7 @@ ---The static type of the expression must conform to the declared type of the identifier - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: Int <- "String"; -}; +--The static type of the expression must conform to the declared type of the identifier + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: Int <- "String"; +}; diff --git a/tests/semantic/assignment1_error.txt b/tests/semantic/assignment1_error.txt index 9d05707aa..6eb883012 100644 --- a/tests/semantic/assignment1_error.txt +++ b/tests/semantic/assignment1_error.txt @@ -1 +1 @@ -(6, 18) - TypeError: Inferred type String of initialization of attribute test does not conform to declared type Int. +(6, 18) - TypeError: Inferred type String of initialization of attribute test does not conform to declared type Int. diff --git a/tests/semantic/assignment2.cl b/tests/semantic/assignment2.cl index c7f3d7873..cace221ae 100644 --- a/tests/semantic/assignment2.cl +++ b/tests/semantic/assignment2.cl @@ -1,13 +1,13 @@ ---The static type of an assignment is the static type of . - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(a: A): B { a <- new C }; - test2(a: A): D { a <- new C }; -}; +--The static type of an assignment is the static type of . + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(a: A): B { a <- new C }; + test2(a: A): D { a <- new C }; +}; diff --git a/tests/semantic/assignment2_error.txt b/tests/semantic/assignment2_error.txt index 55f5aa214..ed10b7f38 100644 --- a/tests/semantic/assignment2_error.txt +++ b/tests/semantic/assignment2_error.txt @@ -1 +1 @@ -(12, 22) - TypeError: Inferred return type C of method test2 does not conform to declared return type D. +(12, 22) - TypeError: Inferred return type C of method test2 does not conform to declared return type D. diff --git a/tests/semantic/assignment3.cl b/tests/semantic/assignment3.cl index 9d60a4b6c..eba0d69e2 100644 --- a/tests/semantic/assignment3.cl +++ b/tests/semantic/assignment3.cl @@ -1,14 +1,14 @@ ---The static type of an assignment is the static type of . - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - a: A; - b: B <- a <- new C; - d: D <- a <- new C; -}; +--The static type of an assignment is the static type of . + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + a: A; + b: B <- a <- new C; + d: D <- a <- new C; +}; diff --git a/tests/semantic/attributes1.cl b/tests/semantic/attributes1.cl index d11ea7cdb..3fa0440e4 100644 --- a/tests/semantic/attributes1.cl +++ b/tests/semantic/attributes1.cl @@ -1,13 +1,13 @@ ---The static type of the expression must conform to the declared type of the attribute. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - test1: IO <- new Main; - test2: B <- new A; - - main(): IO { out_string("Hello World!")}; +--The static type of the expression must conform to the declared type of the attribute. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + test1: IO <- new Main; + test2: B <- new A; + + main(): IO { out_string("Hello World!")}; }; \ No newline at end of file diff --git a/tests/semantic/attributes1_error.txt b/tests/semantic/attributes1_error.txt index 22e45b837..9cb8460c9 100644 --- a/tests/semantic/attributes1_error.txt +++ b/tests/semantic/attributes1_error.txt @@ -1 +1 @@ -(10, 17) - TypeError: Inferred type A of initialization of attribute test2 does not conform to declared type B. +(10, 17) - TypeError: Inferred type A of initialization of attribute test2 does not conform to declared type B. diff --git a/tests/semantic/attributes2.cl b/tests/semantic/attributes2.cl index 85c791b5e..7937c2cc8 100644 --- a/tests/semantic/attributes2.cl +++ b/tests/semantic/attributes2.cl @@ -1,13 +1,13 @@ ---The static type of the expression must conform to the declared type of the attribute. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - test1: IO <- new Main; - test2: C <- new D; - - main(): IO { out_string("Hello World!")}; +--The static type of the expression must conform to the declared type of the attribute. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + test1: IO <- new Main; + test2: C <- new D; + + main(): IO { out_string("Hello World!")}; }; \ No newline at end of file diff --git a/tests/semantic/attributes2_error.txt b/tests/semantic/attributes2_error.txt index d7694b0ad..6d601b7cd 100644 --- a/tests/semantic/attributes2_error.txt +++ b/tests/semantic/attributes2_error.txt @@ -1 +1 @@ -(10, 17) - TypeError: Inferred type D of initialization of attribute test2 does not conform to declared type C. +(10, 17) - TypeError: Inferred type D of initialization of attribute test2 does not conform to declared type C. diff --git a/tests/semantic/attributes3.cl b/tests/semantic/attributes3.cl index 0c8294fa2..8a67decd1 100644 --- a/tests/semantic/attributes3.cl +++ b/tests/semantic/attributes3.cl @@ -1,25 +1,25 @@ ---Attributes are local to the class in which they are defined or inherited. - -class A { - a: Int <- 5; - test(x1: Int, y1: Int): Int { - let x: Int <- x1, y: Int <-y1 in { - x <- x + a; - y <- y + a; - if b then x + y else x - y fi; - } - }; -}; -class B inherits A { - b: Bool <- true; -}; -class C inherits B { - c: String <- "C"; -}; -class D inherits B { - d: IO <- new Main.main(); -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!") }; +--Attributes are local to the class in which they are defined or inherited. + +class A { + a: Int <- 5; + test(x1: Int, y1: Int): Int { + let x: Int <- x1, y: Int <-y1 in { + x <- x + a; + y <- y + a; + if b then x + y else x - y fi; + } + }; +}; +class B inherits A { + b: Bool <- true; +}; +class C inherits B { + c: String <- "C"; +}; +class D inherits B { + d: IO <- new Main.main(); +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!") }; }; \ No newline at end of file diff --git a/tests/semantic/attributes3_error.txt b/tests/semantic/attributes3_error.txt index 68a2ba571..6195c816c 100644 --- a/tests/semantic/attributes3_error.txt +++ b/tests/semantic/attributes3_error.txt @@ -1 +1 @@ -(9, 16) - NameError: Undeclared identifier b. +(9, 16) - NameError: Undeclared identifier b. diff --git a/tests/semantic/attributes4.cl b/tests/semantic/attributes4.cl index 307b185fd..a7f63adbd 100644 --- a/tests/semantic/attributes4.cl +++ b/tests/semantic/attributes4.cl @@ -1,39 +1,39 @@ ---Attributes are local to the class in which they are defined or inherited. - -class A { - a: Int <- 5; -}; -class B inherits A { - b: Bool <- true; - test(x1: Int, y1: Int): Int { - let x: Int <- x1, y: Int <-y1 in { - x <- x + a; - y <- y + a; - if b then x + y else x - y fi; - } - }; -}; -class D inherits B { - d: IO <- new Main.main(); - test3(x1: Int, y1: Int): IO { - let x: Int <- x1, y: Int <-y1, c: String <- "C" in { - x <- x + a; - y <- y + a; - if b then new IO.out_string(c) else d fi; - } - }; -}; -class C inherits B { - c: String <- "C"; - test2(x1: Int, y1: Int): IO { - let x: Int <- x1, y: Int <-y1 in { - x <- x + a; - y <- y + a; - if b then new IO.out_string(c) else d fi; - } - }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!") }; +--Attributes are local to the class in which they are defined or inherited. + +class A { + a: Int <- 5; +}; +class B inherits A { + b: Bool <- true; + test(x1: Int, y1: Int): Int { + let x: Int <- x1, y: Int <-y1 in { + x <- x + a; + y <- y + a; + if b then x + y else x - y fi; + } + }; +}; +class D inherits B { + d: IO <- new Main.main(); + test3(x1: Int, y1: Int): IO { + let x: Int <- x1, y: Int <-y1, c: String <- "C" in { + x <- x + a; + y <- y + a; + if b then new IO.out_string(c) else d fi; + } + }; +}; +class C inherits B { + c: String <- "C"; + test2(x1: Int, y1: Int): IO { + let x: Int <- x1, y: Int <-y1 in { + x <- x + a; + y <- y + a; + if b then new IO.out_string(c) else d fi; + } + }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!") }; }; \ No newline at end of file diff --git a/tests/semantic/basics1.cl b/tests/semantic/basics1.cl index af84ca0c9..32ae16564 100644 --- a/tests/semantic/basics1.cl +++ b/tests/semantic/basics1.cl @@ -1,10 +1,10 @@ --- It is an error to redefine the IO class. - -class IO { - scan(): String { ":)" }; - print(s: String): IO { new IO }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; +-- It is an error to redefine the IO class. + +class IO { + scan(): String { ":)" }; + print(s: String): IO { new IO }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; }; \ No newline at end of file diff --git a/tests/semantic/basics1_error.txt b/tests/semantic/basics1_error.txt index 0db23a051..676f5049c 100644 --- a/tests/semantic/basics1_error.txt +++ b/tests/semantic/basics1_error.txt @@ -1 +1 @@ -(3, 7) - SemanticError: Redefinition of basic class IO. +(3, 7) - SemanticError: Redefinition of basic class IO. diff --git a/tests/semantic/basics2.cl b/tests/semantic/basics2.cl index 61399a989..cf2b1cd2f 100644 --- a/tests/semantic/basics2.cl +++ b/tests/semantic/basics2.cl @@ -1,9 +1,9 @@ --- It is an error to inherit from or redefine Int. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class A inherits Int { - is_prime(): Bool { false }; -}; +-- It is an error to inherit from or redefine Int. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class A inherits Int { + is_prime(): Bool { false }; +}; diff --git a/tests/semantic/basics2_error.txt b/tests/semantic/basics2_error.txt index e2810833a..69a3b6814 100644 --- a/tests/semantic/basics2_error.txt +++ b/tests/semantic/basics2_error.txt @@ -1 +1 @@ -(7, 18) - SemanticError: Class A cannot inherit class Int. +(7, 18) - SemanticError: Class A cannot inherit class Int. diff --git a/tests/semantic/basics3.cl b/tests/semantic/basics3.cl index 8c28b31e1..fef017a8d 100644 --- a/tests/semantic/basics3.cl +++ b/tests/semantic/basics3.cl @@ -1,9 +1,9 @@ --- It is an error to inherit from or redefine Int. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class Int { - is_prime(): Bool { false }; +-- It is an error to inherit from or redefine Int. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class Int { + is_prime(): Bool { false }; }; \ No newline at end of file diff --git a/tests/semantic/basics3_error.txt b/tests/semantic/basics3_error.txt index ed382c8eb..d8f80cb12 100644 --- a/tests/semantic/basics3_error.txt +++ b/tests/semantic/basics3_error.txt @@ -1 +1 @@ -(7, 7) - SemanticError: Redefinition of basic class Int. +(7, 7) - SemanticError: Redefinition of basic class Int. diff --git a/tests/semantic/basics4.cl b/tests/semantic/basics4.cl index 4475bc08f..9266ec79b 100644 --- a/tests/semantic/basics4.cl +++ b/tests/semantic/basics4.cl @@ -1,9 +1,9 @@ --- It is an error to inherit from or redefine String. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class A inherits String { - is_palindrome(): Bool { false }; +-- It is an error to inherit from or redefine String. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class A inherits String { + is_palindrome(): Bool { false }; }; \ No newline at end of file diff --git a/tests/semantic/basics4_error.txt b/tests/semantic/basics4_error.txt index bfe08a9a6..d5cd4c3db 100644 --- a/tests/semantic/basics4_error.txt +++ b/tests/semantic/basics4_error.txt @@ -1 +1 @@ -(7, 18) - SemanticError: Class A cannot inherit class String. +(7, 18) - SemanticError: Class A cannot inherit class String. diff --git a/tests/semantic/basics5.cl b/tests/semantic/basics5.cl index f0d4dafb3..bad5eff13 100644 --- a/tests/semantic/basics5.cl +++ b/tests/semantic/basics5.cl @@ -1,9 +1,9 @@ --- It is an error to inherit from or redefine String. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class String { - is_palindrome(): Bool { false }; +-- It is an error to inherit from or redefine String. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class String { + is_palindrome(): Bool { false }; }; \ No newline at end of file diff --git a/tests/semantic/basics5_error.txt b/tests/semantic/basics5_error.txt index 47b247faa..8437accf7 100644 --- a/tests/semantic/basics5_error.txt +++ b/tests/semantic/basics5_error.txt @@ -1 +1 @@ -(7, 7) - SemanticError: Redefinition of basic class String. +(7, 7) - SemanticError: Redefinition of basic class String. diff --git a/tests/semantic/basics6.cl b/tests/semantic/basics6.cl index c16572a31..47266ebed 100644 --- a/tests/semantic/basics6.cl +++ b/tests/semantic/basics6.cl @@ -1,9 +1,9 @@ --- It is an error to inherit from or redefine Bool. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class A inherits Bool { - xor(b: Bool): Bool { false }; +-- It is an error to inherit from or redefine Bool. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class A inherits Bool { + xor(b: Bool): Bool { false }; }; \ No newline at end of file diff --git a/tests/semantic/basics6_error.txt b/tests/semantic/basics6_error.txt index 9adf1d488..b4d22da13 100644 --- a/tests/semantic/basics6_error.txt +++ b/tests/semantic/basics6_error.txt @@ -1 +1 @@ -(7, 18) - SemanticError: Class A cannot inherit class Bool. +(7, 18) - SemanticError: Class A cannot inherit class Bool. diff --git a/tests/semantic/basics7.cl b/tests/semantic/basics7.cl index 38f789245..0f30aaec3 100644 --- a/tests/semantic/basics7.cl +++ b/tests/semantic/basics7.cl @@ -1,9 +1,9 @@ --- It is an error to inherit from or redefine Bool. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class Bool { - xor(b: Bool): Bool { false }; +-- It is an error to inherit from or redefine Bool. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class Bool { + xor(b: Bool): Bool { false }; }; \ No newline at end of file diff --git a/tests/semantic/basics7_error.txt b/tests/semantic/basics7_error.txt index 9f1347200..92660ab9f 100644 --- a/tests/semantic/basics7_error.txt +++ b/tests/semantic/basics7_error.txt @@ -1 +1 @@ -(7, 7) - SemanticError: Redefinition of basic class Bool. +(7, 7) - SemanticError: Redefinition of basic class Bool. diff --git a/tests/semantic/basics8.cl b/tests/semantic/basics8.cl index d45cd941d..3b9697d4f 100644 --- a/tests/semantic/basics8.cl +++ b/tests/semantic/basics8.cl @@ -1,9 +1,9 @@ --- It is an error redefine Object. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - -class Object { - xor(b: Bool): Bool { false }; +-- It is an error redefine Object. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + +class Object { + xor(b: Bool): Bool { false }; }; \ No newline at end of file diff --git a/tests/semantic/basics8_error.txt b/tests/semantic/basics8_error.txt index 45767c9c5..652f47b30 100644 --- a/tests/semantic/basics8_error.txt +++ b/tests/semantic/basics8_error.txt @@ -1 +1 @@ -(7, 7) - SemanticError: Redefinition of basic class Object. +(7, 7) - SemanticError: Redefinition of basic class Object. diff --git a/tests/semantic/blocks1.cl b/tests/semantic/blocks1.cl index bad9093d7..1e928908b 100644 --- a/tests/semantic/blocks1.cl +++ b/tests/semantic/blocks1.cl @@ -1,31 +1,31 @@ ---The static type of a block is the static type of the last expression. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: B <- { - new A; - { - new B; - { - new C; - { - new D; - { - new E; - { - new F; - }; - }; - }; - }; - }; - }; +--The static type of a block is the static type of the last expression. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: B <- { + new A; + { + new B; + { + new C; + { + new D; + { + new E; + { + new F; + }; + }; + }; + }; + }; + }; }; \ No newline at end of file diff --git a/tests/semantic/blocks1_error.txt b/tests/semantic/blocks1_error.txt index 6bd9d6118..2f0e2caf3 100644 --- a/tests/semantic/blocks1_error.txt +++ b/tests/semantic/blocks1_error.txt @@ -1 +1 @@ -(13, 16) - TypeError: Inferred type F of initialization of attribute test does not conform to declared type B. +(13, 16) - TypeError: Inferred type F of initialization of attribute test does not conform to declared type B. diff --git a/tests/semantic/case1.cl b/tests/semantic/case1.cl index af452f11c..82c6a4d61 100644 --- a/tests/semantic/case1.cl +++ b/tests/semantic/case1.cl @@ -1,23 +1,23 @@ ---For each branch, let Ti be the static type of . The static type of a case expression is Join 1≤i≤n Ti. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- case "true" of - i: Int => New C; - b: Bool => New D; - s: String => New E; - esac; - - test: B <- case 0 of - b: Bool => new F; - i: Int => new E; - esac; -}; +--For each branch, let Ti be the static type of . The static type of a case expression is Join 1≤i≤n Ti. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- case "true" of + i: Int => New C; + b: Bool => New D; + s: String => New E; + esac; + + test: B <- case 0 of + b: Bool => new F; + i: Int => new E; + esac; +}; diff --git a/tests/semantic/case1_error.txt b/tests/semantic/case1_error.txt index 70c7d16ca..f05ce31b9 100644 --- a/tests/semantic/case1_error.txt +++ b/tests/semantic/case1_error.txt @@ -1 +1 @@ -(19, 16) - TypeError: Inferred type A of initialization of attribute test does not conform to declared type B. +(19, 16) - TypeError: Inferred type A of initialization of attribute test does not conform to declared type B. diff --git a/tests/semantic/case2.cl b/tests/semantic/case2.cl index dbbe4148c..ae97b41da 100644 --- a/tests/semantic/case2.cl +++ b/tests/semantic/case2.cl @@ -1,23 +1,23 @@ --- The variables declared on each branch of a case must all have distinct types. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- case "true" of - i: Int => New C; - b: Bool => New D; - s: String => New E; - esac; - - test: A <- case 0 of - b: Bool => new F; - i: Bool => new E; - esac; +-- The variables declared on each branch of a case must all have distinct types. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- case "true" of + i: Int => New C; + b: Bool => New D; + s: String => New E; + esac; + + test: A <- case 0 of + b: Bool => new F; + i: Bool => new E; + esac; }; \ No newline at end of file diff --git a/tests/semantic/case3.cl b/tests/semantic/case3.cl index 9ff06336a..da79bbfe6 100644 --- a/tests/semantic/case3.cl +++ b/tests/semantic/case3.cl @@ -1,23 +1,23 @@ --- Missing type - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- case "true" of - i: Int => New C; - b: Bool => New D; - s: String => New E; - esac; - - test: A <- case 0 of - b: Bool => new F; - i: Ball => new E; - esac; +-- Missing type + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- case "true" of + i: Int => New C; + b: Bool => New D; + s: String => New E; + esac; + + test: A <- case 0 of + b: Bool => new F; + i: Ball => new E; + esac; }; \ No newline at end of file diff --git a/tests/semantic/class1.cl b/tests/semantic/class1.cl index 576a3d0eb..ed83da9d1 100644 --- a/tests/semantic/class1.cl +++ b/tests/semantic/class1.cl @@ -1,9 +1,9 @@ --- Classes may not be redefined. - -class Repeat { - sum(a: Int, b: Int): Int { a + b }; -}; - -class Repeat { - mult(a: Int, b: Int): Int { a * b }; +-- Classes may not be redefined. + +class Repeat { + sum(a: Int, b: Int): Int { a + b }; +}; + +class Repeat { + mult(a: Int, b: Int): Int { a * b }; }; \ No newline at end of file diff --git a/tests/semantic/class1_error.txt b/tests/semantic/class1_error.txt index 6337828d0..19c507672 100644 --- a/tests/semantic/class1_error.txt +++ b/tests/semantic/class1_error.txt @@ -1,2 +1,2 @@ -(7, 5) - SemanticError: Classes may not be redefined - +(7, 5) - SemanticError: Classes may not be redefined + diff --git a/tests/semantic/conditionals1.cl b/tests/semantic/conditionals1.cl index 46af8cc73..3446a8b0f 100644 --- a/tests/semantic/conditionals1.cl +++ b/tests/semantic/conditionals1.cl @@ -1,14 +1,14 @@ ---The predicate must have static type Bool. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - a: A <- if new F then new D else new C fi; +--The predicate must have static type Bool. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + a: A <- if new F then new D else new C fi; }; \ No newline at end of file diff --git a/tests/semantic/conditionals1_error.txt b/tests/semantic/conditionals1_error.txt index 52db300b9..b86345359 100644 --- a/tests/semantic/conditionals1_error.txt +++ b/tests/semantic/conditionals1_error.txt @@ -1 +1 @@ -(13, 16) - TypeError: Predicate of 'if' does not have type Bool. +(13, 16) - TypeError: Predicate of 'if' does not have type Bool. diff --git a/tests/semantic/conditionals2.cl b/tests/semantic/conditionals2.cl index 8814177fc..9d6313d75 100644 --- a/tests/semantic/conditionals2.cl +++ b/tests/semantic/conditionals2.cl @@ -1,24 +1,24 @@ -(* -Let T and F be the static types of the branches of the conditional. Then the static type of the -conditional is T t F. (think: Walk towards Object from each of T and F until the paths meet.) -*) - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- if true then - new C - else - if false then new D - else new E fi - fi; - - test: B <- if not true then new F else new E fi; -}; +(* +Let T and F be the static types of the branches of the conditional. Then the static type of the +conditional is T t F. (think: Walk towards Object from each of T and F until the paths meet.) +*) + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- if true then + new C + else + if false then new D + else new E fi + fi; + + test: B <- if not true then new F else new E fi; +}; diff --git a/tests/semantic/conditionals2_error.txt b/tests/semantic/conditionals2_error.txt index 8f54d195e..d6f5fc307 100644 --- a/tests/semantic/conditionals2_error.txt +++ b/tests/semantic/conditionals2_error.txt @@ -1,2 +1,2 @@ -(23, 16) - TypeError: Inferred type A of initialization of attribute test does not conform to declared type B. - +(23, 16) - TypeError: Inferred type A of initialization of attribute test does not conform to declared type B. + diff --git a/tests/semantic/dispatch1.cl b/tests/semantic/dispatch1.cl index bfd90f075..1c0457fa3 100644 --- a/tests/semantic/dispatch1.cl +++ b/tests/semantic/dispatch1.cl @@ -1,33 +1,33 @@ -(* -e0 .f(e1, . . . , en ) -Assume e0 has static type A. -Class A must have a method f -*) - -class A inherits IO { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - g(v: Int): Int { v + v + v }; - - back(s: String): B { { - out_string(s); - self; - } }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: B <- new D.back("Hello ").back("World!"); +(* +e0 .f(e1, . . . , en ) +Assume e0 has static type A. +Class A must have a method f +*) + +class A inherits IO { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + g(v: Int): Int { v + v + v }; + + back(s: String): B { { + out_string(s); + self; + } }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: B <- new D.back("Hello ").back("World!"); }; \ No newline at end of file diff --git a/tests/semantic/dispatch1_error.txt b/tests/semantic/dispatch1_error.txt index 89fa22b77..7fb22edce 100644 --- a/tests/semantic/dispatch1_error.txt +++ b/tests/semantic/dispatch1_error.txt @@ -1 +1 @@ -(32, 37) - AttributeError: Dispatch to undefined method back. +(32, 37) - AttributeError: Dispatch to undefined method back. diff --git a/tests/semantic/dispatch2.cl b/tests/semantic/dispatch2.cl index ebca718ac..5182912b8 100644 --- a/tests/semantic/dispatch2.cl +++ b/tests/semantic/dispatch2.cl @@ -1,34 +1,34 @@ -(* -e0 .f(e1, . . . , en ) -Assume e0 has static type A. -Class A must have a method f -the dispatch and the definition of f must have the same number of arguments -*) - -class A inherits IO { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - g(v: Int): Int { v + v + v }; - - back(s: String): B { { - out_string(s); - self; - } }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: Int <- new D.back("Hello ").g(2, 2); +(* +e0 .f(e1, . . . , en ) +Assume e0 has static type A. +Class A must have a method f +the dispatch and the definition of f must have the same number of arguments +*) + +class A inherits IO { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + g(v: Int): Int { v + v + v }; + + back(s: String): B { { + out_string(s); + self; + } }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: Int <- new D.back("Hello ").g(2, 2); }; \ No newline at end of file diff --git a/tests/semantic/dispatch2_error.txt b/tests/semantic/dispatch2_error.txt index 1530fb82c..a86c35340 100644 --- a/tests/semantic/dispatch2_error.txt +++ b/tests/semantic/dispatch2_error.txt @@ -1 +1 @@ -(33, 39) - SemanticError: Method g called with wrong number of arguments. +(33, 39) - SemanticError: Method g called with wrong number of arguments. diff --git a/tests/semantic/dispatch3.cl b/tests/semantic/dispatch3.cl index 98c19da77..ecb1535db 100644 --- a/tests/semantic/dispatch3.cl +++ b/tests/semantic/dispatch3.cl @@ -1,36 +1,36 @@ -(* -e0 .f(e1, . . . , en ) -Assume e0 has static type A. -Class A must have a method f -the static type of the ith actual parameter must conform to the declared type of the ith formal parameter. -*) - -class A inherits IO { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - g(v: Int): Int { v + v + v }; - - back(s: String): B { { - out_string(s); - self; - } }; - - alphabet(a: A, b: B, c: C): D { self }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: B <- new D.alphabet(new D, new D, new D.back("Hello ")).back("World!"); +(* +e0 .f(e1, . . . , en ) +Assume e0 has static type A. +Class A must have a method f +the static type of the ith actual parameter must conform to the declared type of the ith formal parameter. +*) + +class A inherits IO { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + g(v: Int): Int { v + v + v }; + + back(s: String): B { { + out_string(s); + self; + } }; + + alphabet(a: A, b: B, c: C): D { self }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: B <- new D.alphabet(new D, new D, new D.back("Hello ")).back("World!"); }; \ No newline at end of file diff --git a/tests/semantic/dispatch3_error.txt b/tests/semantic/dispatch3_error.txt index 77e81db72..0def5cf03 100644 --- a/tests/semantic/dispatch3_error.txt +++ b/tests/semantic/dispatch3_error.txt @@ -1 +1 @@ -(35, 45) - TypeError: In call of method alphabet, type B of parameter c does not conform to declared type C. +(35, 45) - TypeError: In call of method alphabet, type B of parameter c does not conform to declared type C. diff --git a/tests/semantic/dispatch4.cl b/tests/semantic/dispatch4.cl index 604e462a2..9cadd8332 100644 --- a/tests/semantic/dispatch4.cl +++ b/tests/semantic/dispatch4.cl @@ -1,36 +1,36 @@ -(* -e0 .f(e1, . . . , en ) -Assume e0 has static type A. -Class A must have a method f -If f has return type B and B is a class name, then the static type of the dispatch is B. -*) - -class A inherits IO { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - g(v: Int): Int { v + v + v }; - - back(s: String): B { { - out_string(s); - self; - } }; - - alphabet(a: A, b: B, c: C): D { self }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: D <- new D.alphabet(new D, new D.back("Hello "), new C).back("World!"); +(* +e0 .f(e1, . . . , en ) +Assume e0 has static type A. +Class A must have a method f +If f has return type B and B is a class name, then the static type of the dispatch is B. +*) + +class A inherits IO { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + g(v: Int): Int { v + v + v }; + + back(s: String): B { { + out_string(s); + self; + } }; + + alphabet(a: A, b: B, c: C): D { self }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: D <- new D.alphabet(new D, new D.back("Hello "), new C).back("World!"); }; \ No newline at end of file diff --git a/tests/semantic/dispatch5.cl b/tests/semantic/dispatch5.cl index 9820e5ee1..b4437b1b4 100644 --- a/tests/semantic/dispatch5.cl +++ b/tests/semantic/dispatch5.cl @@ -1,31 +1,31 @@ -(* -(,...,) is shorthand for self.(,...,). -*) - -class A inherits IO { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; - sum(m: Int, n: Int, p: Int): Int { m + n + p }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - - back(s: String): B { { - out_string(s); - g(2); - sum(1, 2, 3); - self; - } }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; +(* +(,...,) is shorthand for self.(,...,). +*) + +class A inherits IO { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; + sum(m: Int, n: Int, p: Int): Int { m + n + p }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + + back(s: String): B { { + out_string(s); + g(2); + sum(1, 2, 3); + self; + } }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; }; \ No newline at end of file diff --git a/tests/semantic/dispatch5_error.txt b/tests/semantic/dispatch5_error.txt index 6a6922f32..d26bf34a1 100644 --- a/tests/semantic/dispatch5_error.txt +++ b/tests/semantic/dispatch5_error.txt @@ -1 +1 @@ -(24, 9) - AttributeError: Dispatch to undefined method sum. +(24, 9) - AttributeError: Dispatch to undefined method sum. diff --git a/tests/semantic/dispatch6.cl b/tests/semantic/dispatch6.cl index bbe58fbb1..fcc033f2c 100644 --- a/tests/semantic/dispatch6.cl +++ b/tests/semantic/dispatch6.cl @@ -1,32 +1,32 @@ -(* -e@B.f() invokes the method -f in class B on the object that is the value of e. For this form of dispatch, the static type to the left of -“@”must conform to the type specified to the right of “@”. -*) - -class A { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; - sum(m: Int, n: Int, p: Int): Int { m + n + p }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - g(v: Int): Int { v + v + v }; - sum(v: Int, w: Int, z: Int): Int { v - w - z }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - a: A <- new D; - b: Int <- new D@B.sum(1, 2, 3); - test: Int <- a@B.sum(1, 2, 3); -}; +(* +e@B.f() invokes the method +f in class B on the object that is the value of e. For this form of dispatch, the static type to the left of +“@”must conform to the type specified to the right of “@”. +*) + +class A { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; + sum(m: Int, n: Int, p: Int): Int { m + n + p }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + g(v: Int): Int { v + v + v }; + sum(v: Int, w: Int, z: Int): Int { v - w - z }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + a: A <- new D; + b: Int <- new D@B.sum(1, 2, 3); + test: Int <- a@B.sum(1, 2, 3); +}; diff --git a/tests/semantic/dispatch6_error.txt b/tests/semantic/dispatch6_error.txt index 7d5ec3780..ae9184b2f 100644 --- a/tests/semantic/dispatch6_error.txt +++ b/tests/semantic/dispatch6_error.txt @@ -1 +1 @@ -(31, 18) - TypeError: Expression type A does not conform to declared static dispatch type B. +(31, 18) - TypeError: Expression type A does not conform to declared static dispatch type B. diff --git a/tests/semantic/eq1.cl b/tests/semantic/eq1.cl index dc8a0cd43..88f2a7ffe 100644 --- a/tests/semantic/eq1.cl +++ b/tests/semantic/eq1.cl @@ -1,17 +1,17 @@ -(* -The comparison = is a special -case. If either or has static type Int, Bool, or String, then the other must have the -same static type. Any other types, including SELF TYPE, may be freely compared. -*) - -class A { }; -class B inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - x: Bool <- 1 = 2; - test: Bool <- 1 = new A; - y: Bool <- "1" = "2"; - z: Bool <- true = not false; +(* +The comparison = is a special +case. If either or has static type Int, Bool, or String, then the other must have the +same static type. Any other types, including SELF TYPE, may be freely compared. +*) + +class A { }; +class B inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + x: Bool <- 1 = 2; + test: Bool <- 1 = new A; + y: Bool <- "1" = "2"; + z: Bool <- true = not false; }; \ No newline at end of file diff --git a/tests/semantic/eq1_error.txt b/tests/semantic/eq1_error.txt index 0b85d2fa0..f81425683 100644 --- a/tests/semantic/eq1_error.txt +++ b/tests/semantic/eq1_error.txt @@ -1 +1 @@ -(14, 21) - TypeError: Illegal comparison with a basic type. +(14, 21) - TypeError: Illegal comparison with a basic type. diff --git a/tests/semantic/eq2.cl b/tests/semantic/eq2.cl index f4b2ffac7..d76852780 100644 --- a/tests/semantic/eq2.cl +++ b/tests/semantic/eq2.cl @@ -1,17 +1,17 @@ -(* -The comparison = is a special -case. If either or has static type Int, Bool, or String, then the other must have the -same static type. Any other types, including SELF TYPE, may be freely compared. -*) - -class A { }; -class B inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - x: Bool <- 1 = 2; - y: Bool <- "1" = "2"; - test: Bool <- "1" = new B; - z: Bool <- true = not false; -}; +(* +The comparison = is a special +case. If either or has static type Int, Bool, or String, then the other must have the +same static type. Any other types, including SELF TYPE, may be freely compared. +*) + +class A { }; +class B inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + x: Bool <- 1 = 2; + y: Bool <- "1" = "2"; + test: Bool <- "1" = new B; + z: Bool <- true = not false; +}; diff --git a/tests/semantic/eq2_error.txt b/tests/semantic/eq2_error.txt index 1bb29ca32..a44ab0d51 100644 --- a/tests/semantic/eq2_error.txt +++ b/tests/semantic/eq2_error.txt @@ -1 +1 @@ -(15, 23) - TypeError: Illegal comparison with a basic type. +(15, 23) - TypeError: Illegal comparison with a basic type. diff --git a/tests/semantic/eq3.cl b/tests/semantic/eq3.cl index b7ee462c5..4dad693ee 100644 --- a/tests/semantic/eq3.cl +++ b/tests/semantic/eq3.cl @@ -1,17 +1,17 @@ -(* -The comparison = is a special -case. If either or has static type Int, Bool, or String, then the other must have the -same static type. Any other types, including SELF TYPE, may be freely compared. -*) - -class A { }; -class B inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - x: Bool <- 1 = 2; - y: Bool <- "1" = "2"; - z: Bool <- true = not false; - test: Bool <- "true" = not false; -}; +(* +The comparison = is a special +case. If either or has static type Int, Bool, or String, then the other must have the +same static type. Any other types, including SELF TYPE, may be freely compared. +*) + +class A { }; +class B inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + x: Bool <- 1 = 2; + y: Bool <- "1" = "2"; + z: Bool <- true = not false; + test: Bool <- "true" = not false; +}; diff --git a/tests/semantic/eq3_error.txt b/tests/semantic/eq3_error.txt index d57841b95..c4e27eb8a 100644 --- a/tests/semantic/eq3_error.txt +++ b/tests/semantic/eq3_error.txt @@ -1 +1 @@ -(16, 26) - TypeError: Illegal comparison with a basic type. +(16, 26) - TypeError: Illegal comparison with a basic type. diff --git a/tests/semantic/eq4.cl b/tests/semantic/eq4.cl index 63c1067f0..11afc119f 100644 --- a/tests/semantic/eq4.cl +++ b/tests/semantic/eq4.cl @@ -1,17 +1,17 @@ -(* -The comparison = is a special -case. If either or has static type Int, Bool, or String, then the other must have the -same static type. Any other types, including SELF TYPE, may be freely compared. The result is a Bool. -*) - -class A { }; -class B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - x: Bool <- 1 = 2; - y: Bool <- "1" = "2"; - z: Bool <- new A = new B; - test: Int <- new A = new B; -}; +(* +The comparison = is a special +case. If either or has static type Int, Bool, or String, then the other must have the +same static type. Any other types, including SELF TYPE, may be freely compared. The result is a Bool. +*) + +class A { }; +class B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + x: Bool <- 1 = 2; + y: Bool <- "1" = "2"; + z: Bool <- new A = new B; + test: Int <- new A = new B; +}; diff --git a/tests/semantic/eq4_error.txt b/tests/semantic/eq4_error.txt index f075fecbe..3ead21d0e 100644 --- a/tests/semantic/eq4_error.txt +++ b/tests/semantic/eq4_error.txt @@ -1 +1 @@ -(16, 18) - TypeError: Inferred type Bool of initialization of attribute test does not conform to declared type Int. +(16, 18) - TypeError: Inferred type Bool of initialization of attribute test does not conform to declared type Int. diff --git a/tests/semantic/features1.cl b/tests/semantic/features1.cl old mode 100644 new mode 100755 diff --git a/tests/semantic/features1_error.txt b/tests/semantic/features1_error.txt old mode 100644 new mode 100755 diff --git a/tests/semantic/features2.cl b/tests/semantic/features2.cl old mode 100644 new mode 100755 diff --git a/tests/semantic/features2_error.txt b/tests/semantic/features2_error.txt old mode 100644 new mode 100755 diff --git a/tests/semantic/features3.cl b/tests/semantic/features3.cl old mode 100644 new mode 100755 diff --git a/tests/semantic/features3_error.txt b/tests/semantic/features3_error.txt old mode 100644 new mode 100755 diff --git a/tests/semantic/inheritance1.cl b/tests/semantic/inheritance1.cl old mode 100644 new mode 100755 diff --git a/tests/semantic/inheritance1_error.txt b/tests/semantic/inheritance1_error.txt old mode 100644 new mode 100755 diff --git a/tests/semantic/inheritance2.cl b/tests/semantic/inheritance2.cl old mode 100644 new mode 100755 diff --git a/tests/semantic/inheritance2_error.txt b/tests/semantic/inheritance2_error.txt old mode 100644 new mode 100755 diff --git a/tests/semantic/inheritance3.cl b/tests/semantic/inheritance3.cl old mode 100644 new mode 100755 diff --git a/tests/semantic/inheritance4.cl b/tests/semantic/inheritance4.cl old mode 100644 new mode 100755 diff --git a/tests/semantic/inheritance5.cl b/tests/semantic/inheritance5.cl old mode 100644 new mode 100755 diff --git a/tests/semantic/isvoid1.cl b/tests/semantic/isvoid1.cl index 7c3a83a77..072720d85 100644 --- a/tests/semantic/isvoid1.cl +++ b/tests/semantic/isvoid1.cl @@ -1,26 +1,26 @@ ---evaluates to true if expr is void and evaluates to false if expr is not void. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- if isvoid new F then - new C - else - if false then new D - else new E fi - fi; - - test: B <- isvoid if isvoid new F then - new C - else - if false then new D - else new E fi - fi; +--evaluates to true if expr is void and evaluates to false if expr is not void. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- if isvoid new F then + new C + else + if false then new D + else new E fi + fi; + + test: B <- isvoid if isvoid new F then + new C + else + if false then new D + else new E fi + fi; }; \ No newline at end of file diff --git a/tests/semantic/isvoid1_error.txt b/tests/semantic/isvoid1_error.txt index 3fd0157b4..0922de909 100644 --- a/tests/semantic/isvoid1_error.txt +++ b/tests/semantic/isvoid1_error.txt @@ -1 +1 @@ -(20, 16) - TypeError: Inferred type Bool of initialization of attribute test does not conform to declared type B. +(20, 16) - TypeError: Inferred type Bool of initialization of attribute test does not conform to declared type B. diff --git a/tests/semantic/let1.cl b/tests/semantic/let1.cl index 32dd507fd..26ef63026 100644 --- a/tests/semantic/let1.cl +++ b/tests/semantic/let1.cl @@ -1,15 +1,15 @@ ---The type of an initialization expression must conform to the declared type of the identifier. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- let a: Bool, a: Int <- 5, a: String, a : A <- new F, b: B <- new E in b; - test: B <- let a: Bool, a: Int <- 5, a: String, a : A <- new F, b: C <- new E in b; -}; +--The type of an initialization expression must conform to the declared type of the identifier. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; + test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: C <- new E in b; +}; \ No newline at end of file diff --git a/tests/semantic/let1_error.txt b/tests/semantic/let1_error.txt index 56547dae5..16ecf780c 100644 --- a/tests/semantic/let1_error.txt +++ b/tests/semantic/let1_error.txt @@ -1 +1 @@ -(14, 76) - TypeError: Inferred type E of initialization of b does not conform to identifier's declared type C. +(14, 76) - TypeError: Inferred type E of initialization of b does not conform to identifier's declared type C. diff --git a/tests/semantic/let2.cl b/tests/semantic/let2.cl index 780cefd2d..c5956ead3 100644 --- a/tests/semantic/let2.cl +++ b/tests/semantic/let2.cl @@ -1,15 +1,15 @@ ---The type of let is the type of the body. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; - test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: A <- new E in b; -}; +--The type of let is the type of the body. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; + test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: A <- new E in b; +}; \ No newline at end of file diff --git a/tests/semantic/let2_error.txt b/tests/semantic/let2_error.txt index 3b7c669a3..b1e8a365d 100644 --- a/tests/semantic/let2_error.txt +++ b/tests/semantic/let2_error.txt @@ -1 +1 @@ -(14, 16) - TypeError: Inferred type A of initialization of attribute test does not conform to declared type B. +(14, 16) - TypeError: Inferred type A of initialization of attribute test does not conform to declared type B. diff --git a/tests/semantic/let3.cl b/tests/semantic/let3.cl index 507d8cbec..8c0670ab8 100644 --- a/tests/semantic/let3.cl +++ b/tests/semantic/let3.cl @@ -1,15 +1,15 @@ --- Missing type - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; - test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: Cadena in new B; -}; +-- Missing type + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + b: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: B <- new E in b; + test: B <- let a: Bool, a: Int <- 5, a: String, a: A <- new F, b: Cadena in new B; +}; \ No newline at end of file diff --git a/tests/semantic/loops1.cl b/tests/semantic/loops1.cl index 6a0a81818..de3a624d2 100644 --- a/tests/semantic/loops1.cl +++ b/tests/semantic/loops1.cl @@ -1,8 +1,8 @@ ---The predicate must have static type Bool. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - i: Int <- 1; - test: Object <- while "true" loop i <- i + 1 pool; +--The predicate must have static type Bool. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + i: Int <- 1; + test: Object <- while "true" loop i <- i + 1 pool; }; \ No newline at end of file diff --git a/tests/semantic/loops2.cl b/tests/semantic/loops2.cl index d52169da7..dea69fa14 100644 --- a/tests/semantic/loops2.cl +++ b/tests/semantic/loops2.cl @@ -1,9 +1,9 @@ ---The static type of a loop expression is Object. - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - i: Int <- 1; - test: Object <- while not false loop i <- i + 1 pool; - test2: Int <- while not false loop i <- i + 1 pool; -}; +--The static type of a loop expression is Object. + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + i: Int <- 1; + test: Object <- while not false loop i <- i + 1 pool; + test2: Int <- while not false loop i <- i + 1 pool; +}; diff --git a/tests/semantic/loops2_error.txt b/tests/semantic/loops2_error.txt index ab79de8da..9711cdf6a 100644 --- a/tests/semantic/loops2_error.txt +++ b/tests/semantic/loops2_error.txt @@ -1 +1 @@ -(8, 19) - TypeError: Inferred type Object of initialization of attribute test2 does not conform to declared type Int. +(8, 19) - TypeError: Inferred type Object of initialization of attribute test2 does not conform to declared type Int. diff --git a/tests/semantic/methods1.cl b/tests/semantic/methods1.cl index f4ff07bb0..d12031970 100644 --- a/tests/semantic/methods1.cl +++ b/tests/semantic/methods1.cl @@ -1,12 +1,12 @@ ---The identifiers used in the formal parameter list must be distinct - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(a: A, a: B): Int { 4 }; +--The identifiers used in the formal parameter list must be distinct + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(a: A, a: B): Int { 4 }; }; \ No newline at end of file diff --git a/tests/semantic/methods1_error.txt b/tests/semantic/methods1_error.txt index 809036803..06ab88a92 100644 --- a/tests/semantic/methods1_error.txt +++ b/tests/semantic/methods1_error.txt @@ -1 +1 @@ -(11, 16) - SemanticError: Formal parameter a is multiply defined. +(11, 16) - SemanticError: Formal parameter a is multiply defined. diff --git a/tests/semantic/methods2.cl b/tests/semantic/methods2.cl index c010df01e..3865f0e13 100644 --- a/tests/semantic/methods2.cl +++ b/tests/semantic/methods2.cl @@ -1,12 +1,12 @@ ---The type of the method body must conform to the declared return type. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(a: A, b: B): C { new D }; +--The type of the method body must conform to the declared return type. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(a: A, b: B): C { new D }; }; \ No newline at end of file diff --git a/tests/semantic/methods2_error.txt b/tests/semantic/methods2_error.txt index 1a4baea17..f7e4a330d 100644 --- a/tests/semantic/methods2_error.txt +++ b/tests/semantic/methods2_error.txt @@ -1 +1 @@ -(11, 27) - TypeError: Inferred return type D of method test does not conform to declared return type C. +(11, 27) - TypeError: Inferred return type D of method test does not conform to declared return type C. diff --git a/tests/semantic/methods3.cl b/tests/semantic/methods3.cl index 9aff4d167..b92faeb97 100644 --- a/tests/semantic/methods3.cl +++ b/tests/semantic/methods3.cl @@ -1,14 +1,14 @@ ---A formal parameter hides any definition of an attribute of the same name. - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - a: C <- new C; - test(a: D): D { a }; - test2(a: B): C { a }; +--A formal parameter hides any definition of an attribute of the same name. + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + a: C <- new C; + test(a: D): D { a }; + test2(a: B): C { a }; }; \ No newline at end of file diff --git a/tests/semantic/methods3_error.txt b/tests/semantic/methods3_error.txt index a0f6d9db2..1165b7595 100644 --- a/tests/semantic/methods3_error.txt +++ b/tests/semantic/methods3_error.txt @@ -1 +1 @@ -(13, 22) - TypeError: Inferred return type B of method test2 does not conform to declared return type C. +(13, 22) - TypeError: Inferred return type B of method test2 does not conform to declared return type C. diff --git a/tests/semantic/methods4.cl b/tests/semantic/methods4.cl index 76318d5d9..be8fa36ef 100644 --- a/tests/semantic/methods4.cl +++ b/tests/semantic/methods4.cl @@ -1,19 +1,19 @@ -(* -The rule is -simple: If a class C inherits a method f from an ancestor class P, then C may override the inherited -definition of f provided the number of arguments, the types of the formal parameters, and the return -type are exactly the same in both definitions. -*) - -class A { - f(x: Int, y: Int): Int { x + y }; -}; -class B inherits A { - f(x: Int, y: Object): Int { x }; -}; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; +(* +The rule is +simple: If a class C inherits a method f from an ancestor class P, then C may override the inherited +definition of f provided the number of arguments, the types of the formal parameters, and the return +type are exactly the same in both definitions. +*) + +class A { + f(x: Int, y: Int): Int { x + y }; +}; +class B inherits A { + f(x: Int, y: Object): Int { x }; +}; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; \ No newline at end of file diff --git a/tests/semantic/methods4_error.txt b/tests/semantic/methods4_error.txt index c9fc2d12a..9f1486dec 100644 --- a/tests/semantic/methods4_error.txt +++ b/tests/semantic/methods4_error.txt @@ -1 +1 @@ -(12, 15) - SemanticError: In redefined method f, parameter type Object is different from original type Int. +(12, 15) - SemanticError: In redefined method f, parameter type Object is different from original type Int. diff --git a/tests/semantic/methods5.cl b/tests/semantic/methods5.cl index 732e4d408..3905dfdd6 100644 --- a/tests/semantic/methods5.cl +++ b/tests/semantic/methods5.cl @@ -1,20 +1,20 @@ -(* -The rule is -simple: If a class C inherits a method f from an ancestor class P, then C may override the inherited -definition of f provided the number of arguments, the types of the formal parameters, and the return -type are exactly the same in both definitions. -*) - -class A { - f(x: Int, y: Int): Int { x + y }; -}; -class B inherits A { - f(a: Int, b: Int): Object { a - b }; -}; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; -}; - +(* +The rule is +simple: If a class C inherits a method f from an ancestor class P, then C may override the inherited +definition of f provided the number of arguments, the types of the formal parameters, and the return +type are exactly the same in both definitions. +*) + +class A { + f(x: Int, y: Int): Int { x + y }; +}; +class B inherits A { + f(a: Int, b: Int): Object { a - b }; +}; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; +}; + diff --git a/tests/semantic/methods5_error.txt b/tests/semantic/methods5_error.txt index 073eee8c5..8b6bdf36e 100644 --- a/tests/semantic/methods5_error.txt +++ b/tests/semantic/methods5_error.txt @@ -1 +1 @@ -(12, 24) - SemanticError: In redefined method f, return type Object is different from original return type Int. +(12, 24) - SemanticError: In redefined method f, return type Object is different from original return type Int. diff --git a/tests/semantic/methods6.cl b/tests/semantic/methods6.cl index 61a62b4b0..dd2b73da6 100644 --- a/tests/semantic/methods6.cl +++ b/tests/semantic/methods6.cl @@ -1,27 +1,27 @@ -(* -The rule is -simple: If a class C inherits a method f from an ancestor class P, then C may override the inherited -definition of f provided the number of arguments, the types of the formal parameters, and the return -type are exactly the same in both definitions. -*) - -class A { - f(x: Int, y: Int): Int { x + y }; - g(x: Int): Int { x + x }; -}; -class B inherits A { - f(a: Int, b: Int): Int { a - b }; -}; -class C inherits B { - ident(m: Int): Int { m }; - f(m: Int, n: Int): Int { m * n }; -}; -class D inherits B { - ident(v: String): IO { new IO.out_string(v) }; - f(v: Int, w: Int): Int { v / w }; - g(v: Int, w: Int, z: Int): Int { v + w + z }; -}; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; +(* +The rule is +simple: If a class C inherits a method f from an ancestor class P, then C may override the inherited +definition of f provided the number of arguments, the types of the formal parameters, and the return +type are exactly the same in both definitions. +*) + +class A { + f(x: Int, y: Int): Int { x + y }; + g(x: Int): Int { x + x }; +}; +class B inherits A { + f(a: Int, b: Int): Int { a - b }; +}; +class C inherits B { + ident(m: Int): Int { m }; + f(m: Int, n: Int): Int { m * n }; +}; +class D inherits B { + ident(v: String): IO { new IO.out_string(v) }; + f(v: Int, w: Int): Int { v / w }; + g(v: Int, w: Int, z: Int): Int { v + w + z }; +}; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; }; \ No newline at end of file diff --git a/tests/semantic/methods6_error.txt b/tests/semantic/methods6_error.txt index 70ad02e32..8e32663b9 100644 --- a/tests/semantic/methods6_error.txt +++ b/tests/semantic/methods6_error.txt @@ -1 +1 @@ -(22, 5) - SemanticError: Incompatible number of formal parameters in redefined method g. +(22, 5) - SemanticError: Incompatible number of formal parameters in redefined method g. diff --git a/tests/semantic/methods7.cl b/tests/semantic/methods7.cl index 21e8ca275..e5a01f682 100644 --- a/tests/semantic/methods7.cl +++ b/tests/semantic/methods7.cl @@ -1,12 +1,12 @@ --- Missing type - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(a: A, b: Ball): Int { 4 }; +-- Missing type + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(a: A, b: Ball): Int { 4 }; }; \ No newline at end of file diff --git a/tests/semantic/methods8.cl b/tests/semantic/methods8.cl index 121210748..3fccab54c 100644 --- a/tests/semantic/methods8.cl +++ b/tests/semantic/methods8.cl @@ -1,12 +1,12 @@ --- Missing type - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(a: A, b: B): Integrer { 4 }; +-- Missing type + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(a: A, b: B): Integrer { 4 }; }; \ No newline at end of file diff --git a/tests/semantic/new1.cl b/tests/semantic/new1.cl index 40a8b9e9b..d007fc03d 100644 --- a/tests/semantic/new1.cl +++ b/tests/semantic/new1.cl @@ -1,31 +1,31 @@ --- Missing type - -class A { }; -class B inherits A { }; -class C inherits B { }; -class D inherits B { }; -class E inherits B { }; -class F inherits A { }; - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test: F <- { - new A; - { - new Ball; - { - new C; - { - new D; - { - new E; - { - new F; - }; - }; - }; - }; - }; - }; +-- Missing type + +class A { }; +class B inherits A { }; +class C inherits B { }; +class D inherits B { }; +class E inherits B { }; +class F inherits A { }; + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test: F <- { + new A; + { + new Ball; + { + new C; + { + new D; + { + new E; + { + new F; + }; + }; + }; + }; + }; + }; }; \ No newline at end of file diff --git a/tests/semantic/self1.cl b/tests/semantic/self1.cl index 399f6ff06..3387fd263 100644 --- a/tests/semantic/self1.cl +++ b/tests/semantic/self1.cl @@ -1,11 +1,11 @@ -(* -But it is an error to assign to self or to bind self in a let, a -case, or as a formal parameter. It is also illegal to have attributes named self. -*) - - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(a: Main): IO { self <- a }; -}; +(* +But it is an error to assign to self or to bind self in a let, a +case, or as a formal parameter. It is also illegal to have attributes named self. +*) + + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(a: Main): IO { self <- a }; +}; diff --git a/tests/semantic/self1_error.txt b/tests/semantic/self1_error.txt index f9f51b9b3..6beb3cda2 100644 --- a/tests/semantic/self1_error.txt +++ b/tests/semantic/self1_error.txt @@ -1 +1 @@ -(10, 30) - SemanticError: Cannot assign to 'self'. +(10, 30) - SemanticError: Cannot assign to 'self'. diff --git a/tests/semantic/self2.cl b/tests/semantic/self2.cl index 6ef75e368..2e6921a92 100644 --- a/tests/semantic/self2.cl +++ b/tests/semantic/self2.cl @@ -1,10 +1,10 @@ -(* -But it is an error to assign to self or to bind self in a let, a -case, or as a formal parameter. It is also illegal to have attributes named self. -*) - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(): IO { let self: Main <- new Main in self }; -}; +(* +But it is an error to assign to self or to bind self in a let, a +case, or as a formal parameter. It is also illegal to have attributes named self. +*) + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(): IO { let self: Main <- new Main in self }; +}; diff --git a/tests/semantic/self2_error.txt b/tests/semantic/self2_error.txt index 2e53bb210..20c883c91 100644 --- a/tests/semantic/self2_error.txt +++ b/tests/semantic/self2_error.txt @@ -1 +1 @@ -(9, 22) - SemanticError: 'self' cannot be bound in a 'let' expression. +(9, 22) - SemanticError: 'self' cannot be bound in a 'let' expression. diff --git a/tests/semantic/self3.cl b/tests/semantic/self3.cl index d314798a9..81709b4b5 100644 --- a/tests/semantic/self3.cl +++ b/tests/semantic/self3.cl @@ -1,10 +1,10 @@ -(* -But it is an error to assign to self or to bind self in a let, a -case, or as a formal parameter. It is also illegal to have attributes named self. -*) - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - test(self: IO): IO { self }; -}; +(* +But it is an error to assign to self or to bind self in a let, a +case, or as a formal parameter. It is also illegal to have attributes named self. +*) + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + test(self: IO): IO { self }; +}; diff --git a/tests/semantic/self3_error.txt b/tests/semantic/self3_error.txt index 0015bbe0a..0ae382007 100644 --- a/tests/semantic/self3_error.txt +++ b/tests/semantic/self3_error.txt @@ -1 +1 @@ -(9, 10) - SemanticError: 'self' cannot be the name of a formal parameter. +(9, 10) - SemanticError: 'self' cannot be the name of a formal parameter. diff --git a/tests/semantic/self4.cl b/tests/semantic/self4.cl index 9185c8760..7c2b960cb 100644 --- a/tests/semantic/self4.cl +++ b/tests/semantic/self4.cl @@ -1,10 +1,10 @@ -(* -But it is an error to assign to self or to bind self in a let, a -case, or as a formal parameter. It is also illegal to have attributes named self. -*) - -class Main inherits IO { - main(): IO { out_string("Hello World!")}; - - self: IO <- self; +(* +But it is an error to assign to self or to bind self in a let, a +case, or as a formal parameter. It is also illegal to have attributes named self. +*) + +class Main inherits IO { + main(): IO { out_string("Hello World!")}; + + self: IO <- self; }; \ No newline at end of file diff --git a/tests/semantic/self4_error.txt b/tests/semantic/self4_error.txt index bf8740604..c19ca400f 100644 --- a/tests/semantic/self4_error.txt +++ b/tests/semantic/self4_error.txt @@ -1 +1 @@ -(9, 5) - SemanticError: 'self' cannot be the name of an attribute. +(9, 5) - SemanticError: 'self' cannot be the name of an attribute. diff --git a/tests/semantic_test.py b/tests/semantic_test.py index 46f07439d..5e8fae4b7 100644 --- a/tests/semantic_test.py +++ b/tests/semantic_test.py @@ -1,14 +1,15 @@ -import pytest -import os -from utils import compare_errors, first_error_only_line - -tests_dir = __file__.rpartition('/')[0] + '/semantic/' -tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] - -@pytest.mark.semantic -@pytest.mark.error -@pytest.mark.run(order=3) -@pytest.mark.parametrize("cool_file", tests) -def test_semantic_errors(compiler_path, cool_file): - compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ - cmp=first_error_only_line) \ No newline at end of file +import pytest +import os +from utils import compare_errors, first_error_only_line + +tests_dir = __file__.rpartition("/")[0] + "/semantic/" +tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] + + +@pytest.mark.semantic +@pytest.mark.error +@pytest.mark.run(order=3) +@pytest.mark.parametrize("cool_file", tests) +def test_semantic_errors(compiler_path, cool_file): + compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ + cmp=first_error_only_line) diff --git a/tests/utils/utils.py b/tests/utils/utils.py index f98d19dd0..765425d48 100644 --- a/tests/utils/utils.py +++ b/tests/utils/utils.py @@ -1,91 +1,97 @@ -import subprocess -import re - - -COMPILER_TIMEOUT = 'El compilador tarda mucho en responder.' -SPIM_TIMEOUT = 'El spim tarda mucho en responder.' -TEST_MUST_FAIL = 'El test %s debe fallar al compilar' -TEST_MUST_COMPILE = 'El test %s debe compilar' -BAD_ERROR_FORMAT = '''El error no esta en formato: (,) - : - o no se encuentra en la 3ra linea\n\n%s''' -UNEXPECTED_ERROR = 'Se esperaba un %s en (%d, %d). Su error fue un %s en (%d, %d)' -UNEXPECTED_OUTPUT = 'La salida de %s no es la esperada:\n%s\nEsperada:\n%s' - -ERROR_FORMAT = r'^\s*\(\s*(\d+)\s*,\s*(\d+)\s*\)\s*-\s*(\w+)\s*:(.*)$' - -def parse_error(error: str): - merror = re.fullmatch(ERROR_FORMAT, error) - assert merror, BAD_ERROR_FORMAT % error - - return (t(x) for t, x in zip([int, int, str, str], merror.groups())) - - -def first_error(compiler_output: list, errors: list): - line, column, error_type, _ = parse_error(errors[0]) - - oline, ocolumn, oerror_type, _ = parse_error(compiler_output[0]) - - assert line == oline and column == ocolumn and error_type == oerror_type,\ - UNEXPECTED_ERROR % (error_type, line, column, oerror_type, oline, ocolumn) - -def first_error_only_line(compiler_output: list, errors: list): - line, column, error_type, _ = parse_error(errors[0]) - - oline, ocolumn, oerror_type, _ = parse_error(compiler_output[0]) - - assert line == oline and error_type == oerror_type,\ - UNEXPECTED_ERROR % (error_type, line, column, oerror_type, oline, ocolumn) - - -def get_file_name(path: str): - try: - return path[path.rindex('/') + 1:] - except ValueError: - return path - -def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str, cmp=first_error, timeout=100): - try: - sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) - return_code, output = sp.returncode, sp.stdout.decode() - except subprocess.TimeoutExpired: - assert False, COMPILER_TIMEOUT - - assert return_code == 1, TEST_MUST_FAIL % get_file_name(cool_file_path) - - fd = open(error_file_path, 'r') - errors = fd.read().split('\n') - fd.close() - - # checking the errors of compiler - compiler_output = output.split('\n') - cmp(compiler_output[2:], errors) - -SPIM_HEADER = r'''^SPIM Version .+ of .+ -Copyright .+\, James R\. Larus\. -All Rights Reserved\. -See the file README for a full copyright notice\. -(?:Loaded: .+\n)*''' -def compare_outputs(compiler_path: str, cool_file_path: str, input_file_path: str, output_file_path: str, timeout=100): - try: - sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) - assert sp.returncode == 0, TEST_MUST_COMPILE % get_file_name(cool_file_path) - except subprocess.TimeoutExpired: - assert False, COMPILER_TIMEOUT - - spim_file = cool_file_path[:-2] + 'mips' - - try: - fd = open(input_file_path, 'rb') - sp = subprocess.run(['spim', '-file', spim_file], input=fd.read(), capture_output=True, timeout=timeout) - fd.close() - mo = re.match(SPIM_HEADER, sp.stdout.decode()) - if mo: - output = mo.string[mo.end():] - except subprocess.TimeoutExpired: - assert False, SPIM_TIMEOUT - - fd = open(output_file_path, 'r') - eoutput = fd.read() - fd.close() - - assert output == eoutput, UNEXPECTED_OUTPUT % (spim_file, repr(output), repr(eoutput)) +import subprocess +import re + + +COMPILER_TIMEOUT = 'El compilador tarda mucho en responder.' +SPIM_TIMEOUT = 'El spim tarda mucho en responder.' +TEST_MUST_FAIL = 'El test %s debe fallar al compilar' +TEST_MUST_COMPILE = 'El test %s debe compilar' +BAD_ERROR_FORMAT = '''El error no esta en formato: (,) - : + o no se encuentra en la 3ra linea\n\n%s''' +UNEXPECTED_ERROR = 'Se esperaba un %s en (%d, %d). Su error fue un %s en (%d, %d)' +UNEXPECTED_OUTPUT = 'La salida de %s no es la esperada:\n%s\nEsperada:\n%s' + +ERROR_FORMAT = r'^\s*\(\s*(\d+)\s*,\s*(\d+)\s*\)\s*-\s*(\w+)\s*:(.*)$' + +def parse_error(error: str): + merror = re.fullmatch(ERROR_FORMAT, error) + + assert merror, BAD_ERROR_FORMAT % error + + return (t(x) for t, x in zip([int, int, str, str], merror.groups())) + + +def first_error(compiler_output: list, errors: list): + line, column, error_type, _ = parse_error(errors[0]) + + oline, ocolumn, oerror_type, _ = parse_error(compiler_output[0]) + + assert line == oline and column == ocolumn and error_type == oerror_type,\ + UNEXPECTED_ERROR % (error_type, line, column, oerror_type, oline, ocolumn) + +def first_error_only_line(compiler_output: list, errors: list): + line, column, error_type, _ = parse_error(errors[0]) + + oline, ocolumn, oerror_type, _ = parse_error(compiler_output[0]) + + assert line == oline and error_type == oerror_type,\ + UNEXPECTED_ERROR % (error_type, line, column, oerror_type, oline, ocolumn) + + +def get_file_name(path: str): + try: + return path[path.rindex('/') + 1:] + except ValueError: + return path + +def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str, cmp=first_error, timeout=100): + try: + sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) + return_code, output = sp.returncode, sp.stdout.decode() + print(sp.stderr) + except subprocess.TimeoutExpired: + assert False, COMPILER_TIMEOUT + + assert return_code == 1, TEST_MUST_FAIL % get_file_name(cool_file_path) + + fd = open(error_file_path, 'r') + errors = fd.read().split('\n') + fd.close() + + # checking the errors of compiler + compiler_output = output.split('\n') + print("-----------errores de mi cmp---------------") + print(compiler_output) + print("-----------errores del test---------------") + print(errors) + cmp(compiler_output[2:], errors) + +SPIM_HEADER = r'''^SPIM Version .+ of .+ +Copyright .+\, James R\. Larus\. +All Rights Reserved\. +See the file README for a full copyright notice\. +(?:Loaded: .+\n)*''' +def compare_outputs(compiler_path: str, cool_file_path: str, input_file_path: str, output_file_path: str, timeout=100): + try: + sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) + assert sp.returncode == 0, TEST_MUST_COMPILE % get_file_name(cool_file_path) + except subprocess.TimeoutExpired: + assert False, COMPILER_TIMEOUT + + spim_file = cool_file_path[:-2] + 'mips' + + try: + fd = open(input_file_path, 'rb') + sp = subprocess.run(['spim', '-file', spim_file], input=fd.read(), capture_output=True, timeout=timeout) + fd.close() + mo = re.match(SPIM_HEADER, sp.stdout.decode()) + if mo: + output = mo.string[mo.end():] + except subprocess.TimeoutExpired: + assert False, SPIM_TIMEOUT + + fd = open(output_file_path, 'r') + eoutput = fd.read() + fd.close() + + assert output == eoutput, UNEXPECTED_OUTPUT % (spim_file, repr(output), repr(eoutput)) From bb7cafdd48b049fceeb4512fa1118cb4dcd01eb2 Mon Sep 17 00:00:00 2001 From: regnod Date: Thu, 24 Feb 2022 00:02:25 -0500 Subject: [PATCH 46/93] ... --- src/__main__.py | 2 +- src/pipeline.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/__main__.py b/src/__main__.py index f30fd37ed..fcb7a8468 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -75,7 +75,7 @@ def main(): if len(sys.argv) > 1: input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] else: - input_file = "../tests/lexer/mixed2.cl"#"debbuging/tests/Auto/call1.cl" + input_file = "./tests/lexer/mixed2.cl"#"debbuging/tests/Auto/call1.cl" # raise Exception("Incorrect number of arguments") program_file = open(input_file) diff --git a/src/pipeline.py b/src/pipeline.py index 921ca4f3b..71ae67155 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -27,7 +27,7 @@ def __init__(self, program, lexer, parser, verbose=False): # derivations, operations = self.parser.Parser(self.tokens, True) self.ast = parser.parse(lexer, program)#= evaluate_reverse_parse(derivations, operations, self.tokens) - + self.errors = self.lexer.errors if len(parser.errors) != 0: return From 94dd462bd99eefa7f4add3c58fb3cfda6b81ae9f Mon Sep 17 00:00:00 2001 From: Yumenio Date: Thu, 24 Feb 2022 00:08:47 -0500 Subject: [PATCH 47/93] puleando las cosas pa los test --- out | 24 ++ src/coolc.sh | 4 +- src/pipeline.py | 7 +- src/visitors/CiltoMips.py | 21 +- src/visitors/CooltoCil2.py | 675 +++++++++++++++++++++++++++++++++++ tests/codegen/hello_world.cl | 21 +- 6 files changed, 727 insertions(+), 25 deletions(-) create mode 100644 out create mode 100644 src/visitors/CooltoCil2.py diff --git a/out b/out new file mode 100644 index 000000000..4f3af3d97 --- /dev/null +++ b/out @@ -0,0 +1,24 @@ +.data +_abort: .asciiz "Program Aborted" +_zero: .asciiz "0 Division Error" +_substr: .asciiz "Substr Length Error" +_mem: .asciiz "Memory Error" + +buffer: .space 1024 +type_str0: .asciiz "Object" +type_str1: .asciiz "Int" +type_str2: .asciiz "Bool" +type_str3: .asciiz "String" +type_str4: .asciiz "IO" +type_str5: .asciiz "Main" +Object: .word 12, 42, type_str0, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object +Int: .word 12, 42, type_str1, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object +Bool: .word 12, 42, type_str2, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object +String: .word 12, 42, type_str3, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object, .function_length_at_String, .function_substr_at_String, .function_concat_at_String +IO: .word 12, 42, type_str4, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object, .function_in_string_at_IO, .function_out_string_at_IO, .function_in_int_at_IO, .function_out_int_at_IO +Main: .word 12, 42, type_str5, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object, .function_main_at_Main +.text +main: +move $s7 $gp +addi $s7 $s7 300000 + diff --git a/src/coolc.sh b/src/coolc.sh index 64f754492..fb9eaa1e1 100644 --- a/src/coolc.sh +++ b/src/coolc.sh @@ -8,5 +8,5 @@ echo "Cool Compiler v1.0" echo "Copyright (c) 2019: Richard García De la Osa, Andy A. Castañeda Guerra" # Llamar al compilador -echo "Compiling $INPUT_FILE into $OUTPUT_FILE" -exec python3 main.py $INPUT_FILE $OUTPUT_FILE \ No newline at end of file +# echo "Compiling $INPUT_FILE into $OUTPUT_FILE" +exec python3 main.py $INPUT_FILE diff --git a/src/pipeline.py b/src/pipeline.py index 10487ee4b..f491d7ff5 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -53,8 +53,11 @@ def __init__(self, program, lexer, parser, verbose=False): cil_ast = self.coolToCil.visit(self.ast, scope) # print(get_formatter(cil_ast)) self.cilToMips = CiltoMipsVisitor(self.context) - mips_code = self.cilToMips.visit(cil_ast) - + self.cilToMips.visit(cil_ast) + with open('out', 'w') as f: + mips_code = self.cilToMips.data + self.cilToMips.code + for line in mips_code: + f.write(line+'\n') if verbose: print('This is after infering types:') print() diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index ce1b86cc4..3708e7eae 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -37,11 +37,26 @@ def visit(self, node): self.write_code(f"") self.write_data(f"_abort: {datatype.asciiz} \"Program Aborted\"") - self.write_data(f"_zero: .asciiz \"0 Division Error\"") - self.write_data(f"_substr: .asciiz \"Substr Length Error\"") - self.write_data(f"_mem: .asciiz \"Memory Error\"") + self.write_data(f"_zero: {datatype.asciiz} \"0 Division Error\"") + self.write_data(f"_substr: {datatype.asciiz} \"Substr Length Error\"") + self.write_data(f"_mem: {datatype.asciiz} \"Memory Error\"") self.write_data(f"") + for i, d in enumerate(self.dotdata): + self.write_data("msg{}: {} \"{}\"".format(i, datatype.asciiz, d)) # every one of the user defined data through the program + + self.write_data('buffer: .space 1024') # buffer for the in_string method + + for i, t in enumerate(self.dottypes): + self.write_data(f"type_str{i}: {datatype.asciiz} \"{t.name}\"") + + for i, t in enumerate(self.dottypes): + # words = f"{tipe.cType}: .word {tipe.t_in}, {tipe.t_out}, type_str{i}" + words = f"{t.name}: .word 12, 42, type_str{i}" + for method in t.methods: + words += ", " + "." + method[1] + self.write_data(words) + @visitor.when(TypeNode) def visit(self, node): pass diff --git a/src/visitors/CooltoCil2.py b/src/visitors/CooltoCil2.py new file mode 100644 index 000000000..fb1501c8a --- /dev/null +++ b/src/visitors/CooltoCil2.py @@ -0,0 +1,675 @@ +from distutils.log import error +from cool_ast.cool_ast import * +import cil_ast.cil_ast as cil +from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo +import visitors.visitor as visitor +# from utils.errors import _TypeError, _NameError, _SemanticError, _AtributeError + +class BaseCOOLToCILVisitor: + 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.locals = {} + self.attrs = {}#set() + self.parameters = set() + self.instances = [] + + self.ctrs = {} + + def transform_to_keys(self, xtype, keys): + for i, key in enumerate(keys): + xtype.attrs[key] = i + return xtype.attrs + + @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 register_local(self, vinfo): + vinfo.name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' + local_node = cil.LocalNode(vinfo.name) + self.localvars.append(local_node) + return vinfo.name + + def define_internal_local(self): + vinfo = VariableInfo('internal', None) + return self.register_local(vinfo) + + def register_instruction(self, instruction): + self.instructions.append(instruction) + return instruction + + def to_function_name(self, method_name, type_name): + return f'function_{method_name}_at_{type_name}' + + def register_function(self, function_name): + function_node = cil.FunctionNode(function_name, [], [], []) + self.dotcode.append(function_node) + return function_node + + def register_type(self, name): + type_node = cil.TypeNode(name) + self.dottypes.append(type_node) + return type_node + + def register_data(self, value): + vname = f'data_{len(self.dotdata)}' + data_node = cil.DataNode(vname, value) + self.dotdata.append(data_node) + return data_node + + def create_ctr(self, class_node, scope): + attrs = [att for att in class_node.features if isinstance(att, AttrDeclarationNode)] + while True: + break + self.current_function = self.register_function(self.to_function_name('ctor', self.current_type.name)) + self.register_instruction(cil.ParamNode('self')) + + for i, attr in enumerate(attrs): + set_attr_node = self.visit(attr, scope) + set_attr_node.index = i + self.register_instruction(set_attr_node) + self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) + +class COOLToCILVisitor(BaseCOOLToCILVisitor): + @visitor.on('node') + def visit(self, node): + pass + + def class_node_from_context(self, type): + idx = type.name + features = self.features_from_context(type) + parent = 'Object' if idx not in ['Object', 'Void'] else None + return ClassDeclarationNode(idx, features, parent) + + def features_from_context(self, type): + feats = [AttrDeclarationNode(feat.name, feat.type) for feat in type.attributes] + for func in type.methods: + feats.append(FuncDeclarationNode(func.name, func.param_names, func.return_type, None)) + + return feats + + @visitor.when(ProgramNode) + def visit(self, node, scope): + ###################################################### + # node.declarations -> [ ClassDeclarationNode ... ] + ###################################################### + + # class_nodes = [self.class_node_from_context(c) for c in self.context.types] + builtin_types = ['Object', 'IO', 'Int', 'Bool', 'String'] + built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types if c in builtin_types] + for built_in_class in built_in_classes: + self.visit(built_in_class, scope) + + + self.current_function = self.register_function('entry') + instance = self.define_internal_local() + self.instances.append(instance) + result = self.define_internal_local() + main_method_name = self.to_function_name('main', 'Main') + self.register_instruction(cil.AllocateNode('Main', instance)) + self.register_instruction(cil.ArgNode(instance)) + self.register_instruction(cil.StaticCallNode(main_method_name, result)) + self.register_instruction(cil.ReturnNode(0)) + self.current_function = None + + for declaration, child_scope in zip(node.declarations, scope.children): + self.visit(declaration, child_scope) + + self.instances.pop() + return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope): + #################################################################### + # node.id -> str + # node.parent -> str + # node.features -> [ FuncDeclarationNode/AttrDeclarationNode ... ] + #################################################################### + + self.current_type = self.context.get_type(node.id) + + # Your code here!!! (Handle all the .TYPE section) + type_node = self.register_type(node.id) + + attributes = [] + methods = [] + # self.attrs.clear() + self.attrs = {} + + current_type = self.current_type + while True: + attr_temp = [] + method_temp = [] + for attr in current_type.attributes: + # self.attrs.add(attr.name) + # self.attrs[attr.name] = [] + attr_temp.append(attr.name) + + for method in current_type.methods: + method_temp.append((method.name, self.to_function_name(method.name, current_type.name))) + + attributes = attr_temp + attributes + methods = method_temp + methods + + if current_type.parent is None: + break + + current_type = current_type.parent + + self.attrs = self.transform_to_keys(type_node, attributes)# type_node.attributes = attributes + type_node.methods = methods + self.create_ctr(node, scope) + + # attributes + # for feature, child_scope in zip(node.features, scope.children): + # if isinstance(feature, FuncDeclarationNode): + # continue + # self.visit(feature, child_scope) + + # func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) + for feature, child_scope in zip(node.features, scope.children): + if isinstance(feature, FuncDeclarationNode): + self.visit(feature, child_scope) + + #falta visitar los atributos + + self.current_type = None + + @visitor.when(AttrDeclarationNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.type -> str + # node.value = ExpressionNode + ############################### + # local function to determine the default value of an attribute given its type + def default_value_init(type): + if type == 'Int': + return ConstantNumNode(0) + elif type == 'Bool': + return FalseNode() + elif type == 'String': + return StringNode("") + else: + return VoidNode('void') + if node.value: + value = self.visit(node.value, scope) + + else: + default_value = default_value_init(node.type) + if isinstance(default_value, VoidNode): + value = 'void' + else: + value = self.visit(default_value, scope) + self_ref = VariableInfo('self', self.current_type) + self_ref.index = 0 + return cil.SetAttribNode(self_ref, node.id, value) + + ## old code + # elif node.type in ["Int", "String", "Object", "IO", "Bool"]: + # value = self.define_internal_local() + # self.register_instruction(cil.AllocateNode(node.type, value)) + # else: + # value = self.define_internal_local() + # self.register_instruction(cil.AllocateNode("Void", value)) + # #revisar que poner como el attr del SettAttribnode + + # attr = self.attrs[node.id] + # self.register_instruction(cil.SetAttribNode(self.instances[-1], attr, value)) + + @visitor.when(FuncDeclarationNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.params -> [ (str, str) ... ] + # node.type -> str + # node.body -> [ ExpressionNode ... ] + ############################### + + self.current_method = self.current_type.get_method(node.id, self.current_type, False) + + # Your code here!!! (Handle PARAMS) + self.current_function = self.register_function(self.to_function_name(node.id, self.current_type.name)) + + self.parameters.clear() + self.params.append(cil.ParamNode('self')) + for arg_name, ptype in node.params: + self.parameters.add((arg_name, ptype)) + self.params.append(cil.ParamNode(arg_name)) + self.register_instruction(cil.ParamNode(arg_name)) + + self.locals.clear() + return_value = self.visit(node.body, scope) + + if node.body and 'Void' != node.type: + self.register_instruction(cil.ReturnNode(return_value)) + else: + result = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Void", result)) + self.register_instruction(cil.ReturnNode(result)) + + self.current_method = None + + @visitor.when(VarDeclarationNode) # AssignNode + def visit(self, node, scope): + ############################### + # node.id -> str + # node.type -> str + # node.expr -> ExpressionNode + ############################### + var = scope.find_variable(node.id) + dest = self.locals[var.name] = self.register_local(var) + + if node.expr is not None: + source = self.visit(node.expr, scope) + else: + # asignar valor por default + if node.type.lower() == 'int': + source = 0 + elif node.type.lower() == 'string': + source = '' + elif node.type.lower() == 'bool': + source = False + else: + source = None + self.register_instruction(cil.AssignNode(dest, source)) + return dest + + @visitor.when(AssignNode) # + def visit(self, node, scope): + ############################### + # node.id -> str + # node.expr -> ExpressionNode + ############################### + source = self.visit(node.expr, scope) + + if node.id in self.locals: + dest = self.locals[node.id] + self.register_instruction(cil.AssignNode(dest, source)) + return dest + elif node.id in self.attrs.keys(): + attr = self.attrs[node.id] + var = self.define_internal_local() + self.register_instruction(cil.SetAttribNode(self.instances[-1], attr, source)) + self.register_instruction(cil.GetAttribNode(var, self.instances[-1], attr)) + return var + else: + for (p_name, p_type) in self.parameters: + if node.id == p_name: + dest = VariableInfo(p_name, p_type) + self.register_instruction(cil.AssignNode(dest, source)) + return dest + + @visitor.when(CallNode) + def visit(self, node, scope): + ############################### + # node.obj -> AtomicNode + # node.method -> str + # node.args -> [ ExpressionNode ... ] + ############################### + error_label = self.define_internal_local() + dest = self.define_internal_local() + if node.obj is not None: # dynamic + obj = self.visit(node.obj, scope) + self.instances.append(obj) + if isinstance(node.obj, InstantiateNode): + obj_type = node.obj.lex + else: + obj_type = scope.find_variable(node.obj.lex).type.name + + local = self.define_internal_local() + self.register_instruction(cil.TypeOfNode(obj, local)) + + condition = self.define_internal_local() + self.register_instruction(cil.IsTypeNode(condition, local, "Void")) + self.register_instruction(cil.GotoIfNode(error_label, condition)) + + self.register_instruction(cil.ArgNode(obj)) + for arg in node.args: + self.register_instruction(cil.ArgNode(self.visit(arg, scope))) + + obj_type = obj_type if node.parent == None else node.parent + self.register_instruction(cil.DynamicCallNode(local, self.to_function_name(node.method, obj_type), dest)) + else: # static + self.register_instruction(cil.ArgNode(self.instances[-1])) + for arg in node.args: + self.register_instruction(cil.ArgNode(self.visit(arg, scope))) + + self.register_instruction(cil.StaticCallNode(self.to_function_name(node.method, self.current_type.type.name), dest)) + + self.register_instruction(cil.LabelNode(error_label)) + self.instances.pop() + return dest + + @visitor.when(ConstantNumNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + constant = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Int", constant)) + self.register_instruction(cil.SetAttribNode(constant, 0, int(node.lex))) + return constant + + @visitor.when(VariableNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + var = self.define_internal_local() + if node.lex in self.locals: + var_aux = self.locals[node.lex].name + self.register_instruction(cil.AssignNode(var, var_aux)) + elif node.lex in self.attrs.keys(): + self.register_instruction(cil.GetAttribNode(var, self.instances[-1], self.attrs[node.lex])) + return var + + @visitor.when(InstantiateNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + dest = self.define_internal_local() + self.register_instruction(cil.AllocateNode(node.lex, dest)) + return dest + + @visitor.when(PlusNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.PlusNode(dest, left, right)) + return dest + + @visitor.when(MinusNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.MinusNode(dest, left, right)) + return dest + + @visitor.when(StarNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.StarNode(dest, left, right)) + return dest + + @visitor.when(DivNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.DivNode(dest, left, right)) + return dest + + @visitor.when(ChunkNode) + def visit(self, node, scope): + ############################### + # node.chunk -> [ ExpressionNode... ] + ############################### + value = None + for expression in node.chunk: + value = self.visit(expression, scope.children[0]) + return value + + @visitor.when(ConditionalNode) + def visit(self, node, scope): + ############################### + # node.ifChunk -> ExpressionNode + # node.thenChunk -> ExpressionNode + # node.elseChunk -> ExpressionNode + ############################### + + var = self.define_internal_local() + then_label = self.define_internal_local() + else_label = self.define_internal_local() + + ifexpr = self.visit(node.ifChunk, scope.children[0]) + self.register_instruction(cil.GotoIfNode(then_label, ifexpr)) + + # else + elseexpr = self.visit(node.elseChunk, scope.children[2]) + self.register_instruction(cil.AssignNode(var, elseexpr)) + self.register_instruction(cil.GotoNode(else_label)) + + # then + self.register_instruction(cil.LabelNode(then_label)) + thenexpr = self.visit(node.thenChunk, scope.children[1]) + self.register_instruction(cil.AssignNode(var, thenexpr)) + + self.register_instruction(cil.LabelNode(else_label)) + return var + + @visitor.when(LetInNode) + def visit(self, node, scope): + ############################### + # node.decl_list -> [ DeclarationNode... ] + # node.expression -> ExpressionNode + ############################### + + for decl in node.decl_list: + # var = self.visit(decl, scope) + self.visit(decl, scope) + + value = self.visit(node.expression, scope) + + return value + + @visitor.when(WhileNode) + def visit(self, node, scope): + while_label = self.define_internal_local() + loop_label = self.define_internal_local() + end_label = self.define_internal_local() + + self.register_instruction(cil.LabelNode(while_label)) + + while_expr = self.visit(node.condition, scope) + self.register_instruction(cil.GotoIfNode(loop_label, while_expr)) + + self.register_instruction(cil.GotoNode(end_label)) + self.register_instruction(cil.LabelNode(loop_label)) + + self.visit(node.loopChunk, scope) + self.register_instruction(cil.GotoNode(while_label)) + + self.register_instruction(cil.LabelNode(end_label)) + + result = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Void", result)) + return result + + @visitor.when(NotNode) + def visit(self, node, scope): + ############################### + # node.expression -> ExpressionNode + ############################### + bool_instance = self.visit(node.expression, scope) + + one = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Int", one)) + self.register_instruction(cil.SetAttribNode(one, 0, 1)) + + bool_value = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Int", bool_value)) + + var = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(var, bool_instance, 0)) + self.register_instruction(cil.SetAttribNode(bool_value, 0, var)) + + new_var = self.define_internal_local() + self.register_instruction(cil.MinusNode(new_var, one, bool_value)) + self.register_instruction(cil.SetAttribNode(bool_instance, 0, new_var)) + + return bool_instance + + @visitor.when(IsVoidNode) + def visit(self, node, scope): + ############################### + # node.method -> ExpressionNode + ############################### + expr_value = self.visit(node.method, scope) + var = self.define_internal_local() + self.register_instruction(cil.IsTypeNode(var, expr_value, "Void")) + result = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Bool", result)) + self.register_instruction(cil.SetAttribNode(result, 0, var)) + return result + + @visitor.when(ComplementNode) + def visit(self, node, scope): + ############################### + # node.expr -> ExpressionNode + ############################### + value = self.visit(node.expr, scope) + var = self.define_internal_local() + zero = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Int", zero)) + self.register_instruction(cil.MinusNode(var, zero, value)) + self.regster_instruction(cil.SetAttribNode(value, 0, var)) + return value + + @visitor.when(SwitchCaseNode) + def visit(self, node, scope): + ############################### + # node.expr -> ExpressionNode + # node.case_list = [ (id, type, expr)... ] + ############################### + start_case_label = self.define_internal_local() + end_case_label = self.define_internal_local() + error_label = self.define_internal_local() + + obj = self.visit(node.expr, scope) + obj_type = self.define_internal_local() + self.register_instruction(cil.TypeOfNode(obj, obj_type)) + + result = self.define_internal_local() + self.register_instruction(cil.LabelNode(start_case_label)) + + condition = self.define_internal_local() + self.register_instruction(cil.IsTypeNode( condition, obj_type, 'Void')) + self.register_instruction(cil.GotoIfNode(error_label, condition)) + + for case in node.case_list: + case_id, case_type, case_expr = case + current_label = self.define_internal_local() + next_label = self.define_internal_local() + + condition = self.define_internal_local() + self.register_instruction(cil.IsTypeNode(condition, obj_type, case_type)) + self.register_instruction(cil.GotoIfNode(current_label, condition)) + + self.register_instruction(cil.GotoNode(next_label)) + self.register_instruction(cil.LabelNode(current_label)) + + info = VariableInfo(case_id, case_type) + var = self.locals[case_id] = self.register_local(info) + self.register_instruction(cil.AssignNode(var, obj)) + + result_expr = self.visit(case_expr, scope) + self.register_instruction(cil.AssignNode( result, result_expr)) + self.register_instruction(cil.GotoNode(end_case_label)) + + self.register_instruction(next_label) + + var = self.define_internal_local() + self.register_instruction(cil.ParentTypeNode(var, obj_type)) + self.register_instruction(cil.AssignNode(obj_type, var)) + + self.register_instruction(cil.GotoNode(start_case_label)) + + self.register_instruction(cil.LabelNode(error_label)) + self.register_instruction(cil.ParamNode(self.instances[-1])) + self.regster_instruction(cil.DynamicCallNode(var, self.to_function_name("abort", self.current_type.name), result)) + + self.register_instruction(cil.GotoNode(end_case_label)) + return result + + @visitor.when(TrueNode) + def visit(self, node, scope): + var = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Bool", var)) + self.register_instruction(cil.SetAttribNode(var, 0, 1)) + return var + + @visitor.when(FalseNode) + def visit(self, node, scope): + var = self.define_internal_local() + self.register_instruction(cil.AllocateNode("Bool", var)) + return var + + @visitor.when(StringNode) + def visit(self, node, scope): + data_node = self.register_data(node.lex) + var = self.define_internal_local() + self.register_instruction(cil.LoadNode(var, data_node)) + return data_node.name + + @visitor.when(LessNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.LessNode(dest, left, right)) + return dest + + @visitor.when(LeqNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.LeqNode(dest, left, right)) + return dest + + @visitor.when(EqualNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.EqualNode(dest, left, right)) + return dest diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index e06954b10..17eeae800 100644 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,20 +1,5 @@ -class Main inherits IO { - b : B <- new B; - main(x: Int): IO { - out_int(b.a()) +class Main { + main(): Int { + 12 }; }; - -class A { - aa : Int; - a(): Int { - aa - }; -}; - -class B inherits A{ - bb : Int; - b(): Int { - bb - }; -}; \ No newline at end of file From cbf1fdd72e80d40772e260d201c8fd5957842f27 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Thu, 24 Feb 2022 00:16:13 -0500 Subject: [PATCH 48/93] some tests passed --- src/coolc.sh | 15 --------------- src/pipeline.py | 4 ---- 2 files changed, 19 deletions(-) diff --git a/src/coolc.sh b/src/coolc.sh index 618c7f297..f47182595 100755 --- a/src/coolc.sh +++ b/src/coolc.sh @@ -1,17 +1,3 @@ -<<<<<<< HEAD -# Incluya aquí las instrucciones necesarias para ejecutar su compilador - -INPUT_FILE=$1 -OUTPUT_FILE=${INPUT_FILE:0: -2}mips - -# Si su compilador no lo hace ya, aquí puede imprimir la información de contacto -echo "Cool Compiler v1.0" -echo "Copyright (c) 2019: Richard García De la Osa, Andy A. Castañeda Guerra" - -# Llamar al compilador -# echo "Compiling $INPUT_FILE into $OUTPUT_FILE" -exec python3 main.py $INPUT_FILE -======= # Incluya aquí las instrucciones necesarias para ejecutar su compilador INPUT_FILE=$1 @@ -25,4 +11,3 @@ echo "Copyright (c) 2021: Richard García De la Osa, Andy A. Castañeda Guerra." # echo "Compiling $INPUT_FILE into $OUTPUT_FILE" exec python3 __main__.py $INPUT_FILE ->>>>>>> bb7cafdd48b049fceeb4512fa1118cb4dcd01eb2 diff --git a/src/pipeline.py b/src/pipeline.py index 259235790..4c036f0e0 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -52,16 +52,12 @@ def __init__(self, program, lexer, parser, verbose=False): # self.coolToCil = COOLToCILVisitor(self.context) # cil_ast = self.coolToCil.visit(self.ast, scope) # print(get_formatter(cil_ast)) -<<<<<<< HEAD self.cilToMips = CiltoMipsVisitor(self.context) self.cilToMips.visit(cil_ast) with open('out', 'w') as f: mips_code = self.cilToMips.data + self.cilToMips.code for line in mips_code: f.write(line+'\n') -======= - # return self.lexer.errors + self.errors ->>>>>>> bb7cafdd48b049fceeb4512fa1118cb4dcd01eb2 if verbose: print('This is after infering types:') print() From e586b39ea3faf7c1956cf8d4ce54eb2858759125 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Thu, 24 Feb 2022 00:43:36 -0500 Subject: [PATCH 49/93] fixed the error concatenation in the pipeline --- src/__main__.py | 21 +++++++++++---------- src/out | 22 ++++++++++++++++++++++ src/pipeline.py | 11 ++++++----- src/visitors/CiltoMips.py | 16 ++++++++++------ src/visitors/CooltoCil.py | 19 +++++++++++-------- 5 files changed, 60 insertions(+), 29 deletions(-) create mode 100644 src/out diff --git a/src/__main__.py b/src/__main__.py index fcb7a8468..8a2f1d3f2 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -75,7 +75,8 @@ def main(): if len(sys.argv) > 1: input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] else: - input_file = "./tests/lexer/mixed2.cl"#"debbuging/tests/Auto/call1.cl" + input_file = "./tests/codegen/hello_world.cl"#"debbuging/tests/Auto/call1.cl" + input_file = "./tests/parser/assignment1.cl"#"debbuging/tests/Auto/call1.cl" # raise Exception("Incorrect number of arguments") program_file = open(input_file) @@ -97,15 +98,15 @@ def main(): exit(1) coolParser = parser.CoolParser() - ast = coolParser.parse(lexer.CoolLexer(), program) - if coolParser.lexer.errors: - for lexing_error in coolParser.lexer.errors: - print(lexing_error.__str__()) - exit(1) - if coolParser.errors: - for parsing_error in coolParser.errors: - print(parsing_error) - exit(1) + # ast = coolParser.parse(lexer.CoolLexer(), program) + # if coolParser.lexer.errors: + # for lexing_error in coolParser.lexer.errors: + # print(lexing_error.__str__()) + # exit(1) + # if coolParser.errors: + # for parsing_error in coolParser.errors: + # print(parsing_error) + # exit(1) # parser = Parser(Lexer()) # ast = parser.parse(program) # if parser.errors: diff --git a/src/out b/src/out new file mode 100644 index 000000000..8fdf2a2b4 --- /dev/null +++ b/src/out @@ -0,0 +1,22 @@ +.data +_abort: .asciiz "Program Aborted" +_zero: .asciiz "0 Division Error" +_substr: .asciiz "Substr Length Error" +_mem: .asciiz "Memory Error" + +buffer: .space 1024 +type_str0: .asciiz "Object" +type_str1: .asciiz "Int" +type_str2: .asciiz "Bool" +type_str3: .asciiz "String" +type_str4: .asciiz "IO" +Object: .word 12, 42, type_str0, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object +Int: .word 12, 42, type_str1, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object +Bool: .word 12, 42, type_str2, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object +String: .word 12, 42, type_str3, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object, .function_length_at_String, .function_substr_at_String, .function_concat_at_String +IO: .word 12, 42, type_str4, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object, .function_in_string_at_IO, .function_out_string_at_IO, .function_in_int_at_IO, .function_out_int_at_IO +.text +main: +move $s7 $gp +addi $s7 $s7 300000 + diff --git a/src/pipeline.py b/src/pipeline.py index 4c036f0e0..0669034e3 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -7,6 +7,7 @@ from visitors.Executor import Executor, RuntimeException from visitors.CooltoCil import COOLToCILVisitor from visitors.CilDepicter import get_formatter +from visitors.CiltoMips import CiltoMipsVisitor class Pipeline(): def __init__(self, program, lexer, parser, verbose=False): @@ -26,9 +27,9 @@ def __init__(self, program, lexer, parser, verbose=False): # derivations, operations = self.parser.Parser(self.tokens, True) - self.ast = parser.parse(lexer, program)#= evaluate_reverse_parse(derivations, operations, self.tokens) - self.errors = self.lexer.errors - if len(parser.errors) != 0: + self.ast = self.parser.parse(lexer, program)#= evaluate_reverse_parse(derivations, operations, self.tokens) + self.errors = self.lexer.errors + self.parser.errors + if len(self.errors) != 0: return if self.ast is None: @@ -49,8 +50,8 @@ def __init__(self, program, lexer, parser, verbose=False): self.typeChecker = TypeChecker(self.context, self.errors) self.typeChecker.visit( self.ast, scope) - # self.coolToCil = COOLToCILVisitor(self.context) - # cil_ast = self.coolToCil.visit(self.ast, scope) + self.coolToCil = COOLToCILVisitor(self.context) + cil_ast = self.coolToCil.visit(self.ast, scope) # print(get_formatter(cil_ast)) self.cilToMips = CiltoMipsVisitor(self.context) self.cilToMips.visit(cil_ast) diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 2ddc07bed..3708e7eae 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -2,12 +2,12 @@ import visitors.visitor as visitor from cil_ast.cil_ast import * -class BaseCiltoMipsVisitor: - def __init__(self, programNode): - self.dotdata =programNode.dotdata - self.dotcode =programNode.dotcode - self.dottype =programNode.dottype - # self.context = context +class CiltoMipsVisitor: + def __init__(self, context): + self.dottypes = [] + self.dotdata =[] + self.dotcode =[] + self.context = context self.code = [] self.data = [] def write_data(self, instruction): @@ -24,6 +24,10 @@ def visit(self, node): @visitor.when(ProgramNode) def visit(self, node): + self.dottypes = node.dottypes + self.dotdata = node.dotdata + self.dotcode = node.dotcode + self.write_data('.data') self.write_code('.text') diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 6e5033f84..d734cc9b7 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -20,6 +20,8 @@ def __init__(self, context): self.parameters = set() self.instances = [] + self.ctrs = {} + def transform_to_keys(self, xtype, keys): for i, key in enumerate(keys): xtype.attrs[key] = i @@ -83,7 +85,6 @@ def create_ctr(self, class_node, scope): self.register_instruction(set_attr_node) self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) - class COOLToCILVisitor(BaseCOOLToCILVisitor): @visitor.on('node') def visit(self, node): @@ -109,8 +110,10 @@ def visit(self, node, scope): ###################################################### # class_nodes = [self.class_node_from_context(c) for c in self.context.types] - built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types] - + builtin_types = ['Object', 'IO', 'Int', 'Bool', 'String'] + built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types if c in builtin_types] + for built_in_class in built_in_classes: + self.visit(built_in_class, scope) self.current_function = self.register_function('entry') @@ -203,7 +206,7 @@ def default_value_init(type): elif type == 'String': return StringNode("") else: - return VoidNode() + return VoidNode('void') if node.value: value = self.visit(node.value, scope) @@ -213,9 +216,9 @@ def default_value_init(type): value = 'void' else: value = self.visit(default_value, scope) - self_ref = VariableInfo('self', self.current_type) - self_ref.index = 0 - return cil.SetAttribNode(self_ref, node.id, value) + self_ref = VariableInfo('self', self.current_type) + self_ref.index = 0 + return cil.SetAttribNode(self_ref, node.id, value) ## old code # elif node.type in ["Int", "String", "Object", "IO", "Bool"]: @@ -669,4 +672,4 @@ def visit(self, node, scope): left = self.visit(node.left, scope) right = self.visit(node.right, scope) self.register_instruction(cil.EqualNode(dest, left, right)) - return dest + return dest \ No newline at end of file From 6535d49d4a8711253dfa7aa7edf53a3ecc7bcacf Mon Sep 17 00:00:00 2001 From: regnod Date: Thu, 24 Feb 2022 00:57:52 -0500 Subject: [PATCH 50/93] test passed succsesfuly --- src/__main__.py | 35 +++++++++++++++++++---------------- src/pipeline.py | 20 ++++++++++---------- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/__main__.py b/src/__main__.py index 8a2f1d3f2..8a8e77ddd 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -78,25 +78,28 @@ def main(): input_file = "./tests/codegen/hello_world.cl"#"debbuging/tests/Auto/call1.cl" input_file = "./tests/parser/assignment1.cl"#"debbuging/tests/Auto/call1.cl" # raise Exception("Incorrect number of arguments") + try: + program_file = open(input_file) + program = program_file.read() + program_file.close() - program_file = open(input_file) - program = program_file.read() - program_file.close() - - # coolLexer = lexer.CoolLexer() - # coolLexer.build() - # tokens = coolLexer.input(program) - # if coolLexer.errors: - # for error in coolLexer.errors: - # print(error.__str__()) - # exit(1) + # coolLexer = lexer.CoolLexer() + # coolLexer.build() + # tokens = coolLexer.input(program) + # if coolLexer.errors: + # for error in coolLexer.errors: + # print(error.__str__()) + # exit(1) - pipe = Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) - if pipe.errors: - for error in pipe.errors: - print(error) + pipe = Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) + if pipe.errors: + for error in pipe.errors: + print(error) + exit(1) + except Exception as e: + print(e) exit(1) - coolParser = parser.CoolParser() + # coolParser = parser.CoolParser() # ast = coolParser.parse(lexer.CoolLexer(), program) # if coolParser.lexer.errors: diff --git a/src/pipeline.py b/src/pipeline.py index 0669034e3..c3f0d3061 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -49,16 +49,16 @@ def __init__(self, program, lexer, parser, verbose=False): if len(self.errors) == 0: self.typeChecker = TypeChecker(self.context, self.errors) self.typeChecker.visit( self.ast, scope) - - self.coolToCil = COOLToCILVisitor(self.context) - cil_ast = self.coolToCil.visit(self.ast, scope) - # print(get_formatter(cil_ast)) - self.cilToMips = CiltoMipsVisitor(self.context) - self.cilToMips.visit(cil_ast) - with open('out', 'w') as f: - mips_code = self.cilToMips.data + self.cilToMips.code - for line in mips_code: - f.write(line+'\n') + if len(self.errors) == 0: + self.coolToCil = COOLToCILVisitor(self.context) + cil_ast = self.coolToCil.visit(self.ast, scope) + # print(get_formatter(cil_ast)) + self.cilToMips = CiltoMipsVisitor(self.context) + self.cilToMips.visit(cil_ast) + with open('out', 'w') as f: + mips_code = self.cilToMips.data + self.cilToMips.code + for line in mips_code: + f.write(line+'\n') if verbose: print('This is after infering types:') print() From 9367dfb037522839144596b582c5a36cfd4382bc Mon Sep 17 00:00:00 2001 From: regnod Date: Thu, 24 Feb 2022 01:18:10 -0500 Subject: [PATCH 51/93] env --- env/bin/activate | 76 ++++++++++++++++++ env/bin/activate.csh | 37 +++++++++ env/bin/activate.fish | 75 +++++++++++++++++ env/bin/easy_install | 11 +++ env/bin/pip | 11 +++ env/bin/pip3 | 11 +++ env/bin/python | 1 + env/bin/python3 | 1 + env/lib64 | 1 + env/pyvenv.cfg | 3 + .../CacheControl-0.11.7-py2.py3-none-any.whl | Bin 0 -> 18720 bytes .../appdirs-1.4.3-py2.py3-none-any.whl | Bin 0 -> 12139 bytes .../certifi-2018.1.18-py2.py3-none-any.whl | Bin 0 -> 150807 bytes .../chardet-3.0.4-py2.py3-none-any.whl | Bin 0 -> 133328 bytes .../colorama-0.3.7-py2.py3-none-any.whl | Bin 0 -> 19915 bytes .../distlib-0.2.6-py2.py3-none-any.whl | Bin 0 -> 141707 bytes .../distro-1.0.1-py2.py3-none-any.whl | Bin 0 -> 11733 bytes .../html5lib-0.999999999-py2.py3-none-any.whl | Bin 0 -> 112620 bytes .../idna-2.6-py2.py3-none-any.whl | Bin 0 -> 56485 bytes .../ipaddress-0.0.0-py2.py3-none-any.whl | Bin 0 -> 17503 bytes .../lockfile-0.12.2-py2.py3-none-any.whl | Bin 0 -> 13506 bytes .../packaging-17.1-py2.py3-none-any.whl | Bin 0 -> 24058 bytes .../pip-9.0.1-py2.py3-none-any.whl | Bin 0 -> 159149 bytes .../pkg_resources-0.0.0-py2.py3-none-any.whl | Bin 0 -> 115663 bytes .../progress-1.2-py2.py3-none-any.whl | Bin 0 -> 9606 bytes .../pyparsing-2.2.0-py2.py3-none-any.whl | Bin 0 -> 56411 bytes .../requests-2.18.4-py2.py3-none-any.whl | Bin 0 -> 88576 bytes .../retrying-1.3.3-py2.py3-none-any.whl | Bin 0 -> 9480 bytes .../setuptools-39.0.1-py2.py3-none-any.whl | Bin 0 -> 455758 bytes .../six-1.11.0-py2.py3-none-any.whl | Bin 0 -> 10720 bytes .../urllib3-1.22-py2.py3-none-any.whl | Bin 0 -> 124700 bytes .../webencodings-0.5-py2.py3-none-any.whl | Bin 0 -> 11646 bytes .../wheel-0.30.0-py2.py3-none-any.whl | Bin 0 -> 48886 bytes src/coolc.sh | 1 + 34 files changed, 228 insertions(+) create mode 100644 env/bin/activate create mode 100644 env/bin/activate.csh create mode 100644 env/bin/activate.fish create mode 100755 env/bin/easy_install create mode 100755 env/bin/pip create mode 100755 env/bin/pip3 create mode 120000 env/bin/python create mode 120000 env/bin/python3 create mode 120000 env/lib64 create mode 100644 env/pyvenv.cfg create mode 100644 env/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/distro-1.0.1-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/idna-2.6-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/packaging-17.1-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/progress-1.2-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/pyparsing-2.2.0-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/requests-2.18.4-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/setuptools-39.0.1-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/six-1.11.0-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl diff --git a/env/bin/activate b/env/bin/activate new file mode 100644 index 000000000..92009c5f2 --- /dev/null +++ b/env/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/snow/Documents/GitHub/CoolCompiler/env" +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(env) " != x ] ; then + PS1="(env) ${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/env/bin/activate.csh b/env/bin/activate.csh new file mode 100644 index 000000000..7d45a3bc7 --- /dev/null +++ b/env/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/snow/Documents/GitHub/CoolCompiler/env" + +set _OLD_VIRTUAL_PATH="$PATH" +setenv PATH "$VIRTUAL_ENV/bin:$PATH" + + +set _OLD_VIRTUAL_PROMPT="$prompt" + +if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then + if ("env" != "") then + set env_name = "env" + 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/env/bin/activate.fish b/env/bin/activate.fish new file mode 100644 index 000000000..471ac6a2f --- /dev/null +++ b/env/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/snow/Documents/GitHub/CoolCompiler/env" + +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 "(env) " + printf "%s%s" "(env) " (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/env/bin/easy_install b/env/bin/easy_install new file mode 100755 index 000000000..97ad0c7f7 --- /dev/null +++ b/env/bin/easy_install @@ -0,0 +1,11 @@ +#!/home/snow/Documents/GitHub/CoolCompiler/env/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/env/bin/pip b/env/bin/pip new file mode 100755 index 000000000..78d6f8629 --- /dev/null +++ b/env/bin/pip @@ -0,0 +1,11 @@ +#!/home/snow/Documents/GitHub/CoolCompiler/env/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/env/bin/pip3 b/env/bin/pip3 new file mode 100755 index 000000000..78d6f8629 --- /dev/null +++ b/env/bin/pip3 @@ -0,0 +1,11 @@ +#!/home/snow/Documents/GitHub/CoolCompiler/env/bin/python3 + +# -*- coding: utf-8 -*- +import re +import sys + +from pip import main + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/env/bin/python b/env/bin/python new file mode 120000 index 000000000..b8a0adbbb --- /dev/null +++ b/env/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/env/bin/python3 b/env/bin/python3 new file mode 120000 index 000000000..ae65fdaa1 --- /dev/null +++ b/env/bin/python3 @@ -0,0 +1 @@ +/usr/bin/python3 \ No newline at end of file diff --git a/env/lib64 b/env/lib64 new file mode 120000 index 000000000..7951405f8 --- /dev/null +++ b/env/lib64 @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/env/pyvenv.cfg b/env/pyvenv.cfg new file mode 100644 index 000000000..7f0d9af4c --- /dev/null +++ b/env/pyvenv.cfg @@ -0,0 +1,3 @@ +home = /usr/bin +include-system-site-packages = false +version = 3.6.8 diff --git a/env/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl b/env/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..53c26de5c44749740ba721ee437284f2a0840130 GIT binary patch literal 18720 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

      ;>YUS{A#%)2 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 YZ|zEQb`S+OH~>h3eGUp{dvE~$1xyaO_y7O^ literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl b/env/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..1143fac851e395fa76642e3b5b914027cb94cb87 GIT binary patch literal 133328 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

      lOB^utP3PxpPV>|tv2!@#E881e`TlFli&8;1g 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�+DqSWGMREKi0 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�)j`)>% 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 V2Wep1Kj0q+(0{<={^#@6{{w0wSR()c literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl b/env/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..9e1a0df2deeeee523a23e4c168a2b463eb6c1e6d GIT binary patch literal 19915 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 literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl b/env/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..7e3f9d7b6c2b46fc92c7b1a69ae597bb2d2cde32 GIT binary patch literal 141707 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 Icat|sf;SJ zyee`rbyx{C)c=?68n@CNdnt&`q+4VkUHfrxdI7!CRyT8Q>jYRDxJ1AGK!JRxHxn10 z)^Q>(PL{FSMVS8pUa!o&n1-!5_3u+*G!G(c$r|t`Y6IQn(Dj4dsczs1rrdo&uHFe8F^J$&fi?_tI7|zSIn7YJn@b5xfHf_0{WAhj2-$Wjs+S zDcT{a1zRqzntV~hGZ0Tv1;Zf*X1Fh`U_MbP+&IbHIJP^sKMt{{i?9uwhsHzT#zUeo zK(wC`A<+ZjhY_o`cg-)3aTdDjgl!9iC-7jd*H+q_TP7DS&elMXT^J$Wt*uJoLe{dU z_SRL8LOXgb(kV8MY}GY)^dS-KfBm!>y>`8@@#Zr$y7hCbf2n8BZpBffi`?$TOs0rj zCW5t9jodER=%Yi~M#i?}+5UNwTL+KrG~>o)FeA9{9w-PIiiHzb5}Sn%;ubEfXcqr;5ZuLL{NPlv39eYq^Ht`Qw! zXMb{^S+Q~#3udvR&o`Dd47p&=PYpE+8*y7+_zl4?tpG>iRo3mdwL)56*tK+j_us7A zB=90`WjcutU!bbvuOf$9i|Ej1O;$)f*ccTJ9ik)cK1YQA_e{`oP7PK_6~|fze1*y0 za?afJz{?#!JY1_A2-vM(k64Uufmv5TIlX7hxqN|(ri6VsfITajo$Q1BpDjKR>%G8L z*!ildpzzT~$Bv`&YRyn48I@KjV{DqMvmGHN+ck7<>BC}+&>AD+bizv@l; zX@*Sevv&^izk8XE&urW=+0tp_$25hU(c_qj5HSwSYz_GI4r68m81m^~H){839cxT^ zhzTjGN3BnucQ8v(PYI94d*J5>su5vE3gq(l7!wnF66U+OS%XGlH}9G}TpD|B==_5) zx1;47Y{eiE@?%;}0vj4uh|I{9Y4q?8YQpOs)onY!(Ay(}$wmh)V_+;}B9`$nmhdrZ zcn=!Mhzb|H7d2OW8mC)}mD>pBampvujm)X5FJgU7f9~M!GQKCnb;)1*ur@|VO zh{<3s-?jG~|NM{*LPaI`Dc3JYm6nL-#&vw}W<2{sbP3zYT$ttWLh3rKzr6?I`KkOI zE4@b={RtzfL~0MFADhW5GoWim>^t6=Sa7rVs7HTa;Bxj%**%f{xp3>5ZN|Yb`WmF0}iF+0G8R$d=+jijea7G1RyK;==;#Qf|H}V%-xp4;EblEbwD*} zQ;t)X^4WotksI}R$%djFmAAVoLFIhQllt8CTq2Mk!rhAaOAV!!D%r?>K8;k<$a!8fUPt64P?EfO zvt@d!ybZ0F~^) zGCVA&gJXvYja2b&Ygvem)hN|~cgacr14p^aT=z68xWnrQ98Bf}pI)>;r^D>AJI0?) zEB@prN{(mmuH+XIk=>HSfx-9a^ThZzH@sacGUwZ_L$0C&`mJT1lEi~SoW(4qdW;%j z-l9T=t>C&89_eK6os&d?C3J?~m`g803 z_pvLu$_oz7ReOy!`}#)5vlDid%n+Z17sLp@5>x;LK=;OV=Q^Mpw0q#b0?1tJd=rc)c^y8ZxD7;F3Bx{x+mC|fj)^|AaA5QIw5Wldini) zfBZj;yaiMpO}8dY2m}uhI1nIsAi;yXYjAfB?he5T65QS0-QC>@?(Xg`(9B&MZ442EGIo1k~u>V z?x0EVD1m!wT-ATmX7N*{y^LKGD=Y{q*=+}4d30lQS zPjpi1ICphxtL-%GMl- z#&=gCg{Pfb-!n$UdKz8X27CCf@@B96Zcp$0eCj;lm#jdj6n!+Qjdyd9E6?cV{4K8d zkJ}aQ0)nIkaCqo*s+Ovkdbcl!Fu|?dHz(%aHjbS6n#NVrZus29F2#}K>b2gwz(V2y zsjXc%ymsG;&wRp`bHe^T95X_xKdB$-g8JeO>!~~z^evUmDh^GG?3tDu3yEbV7U)>s zI4=`7REA7owmsAJ+g^E!IA&y!ZcAxgKawNOwtVmhCk7BOmXKdX0bz z|I107;hZI{F|RRqShibwt$MCP0WAT}{jED1P`RXcNO$^+(|hf!&>sI?uWbk~;A;J+ z-aRm%aPR!q@Y~BCd;hnZ1Xne_mj}cv%G2AwYHsLPDEIj_Cekyh4(?wb@Go$GYdbD1 zKlmR6uJ_juPY8E$Yg+AX-Jw)-{PPXWCo`Pfwbj6)!F6fpSUQUAk$zX>l~o^f@00AL zQ{%b{k}KLo;_`C3^4HciQxXhl4{xvp#kHNZ8g#D)ycCte=-9 z=jp}VFWXG0w=p)(zGRFGqr2%cHK`rl-KuzaB$J)QgZr?rjbxG_4!Nb-O*eNyaTNdg z8{!ECzHIQldw%9ph@dwxiy^MFR zzw?tmlC|`|-ICdYyP&*)bOJefFA1y=DsiA)kX*QJH)}c`wA1X@vA*&6@C0`kwI`OM?$nj{Tlh(;2I>l4#=G1?RT<1{OkF!O3@%|p=9%xWc7v#KWFl&fj^bmQU zFXAAQd9B{9MI*j`@T7+w{YMI(NGtafJkt5aN%;dA;YbJ7MOhm;Xs!#=MY$UfW3G$n z28G>0lI%|Be4hm4fD`A)8dYOEKoAi5zO$OJm7dD9%KhWh_ds$(V<9z68w;K(ecJOJa1L zO1N9zwd|k%`r8Kv?y!4j^;}Q6Sc`t#hIg36tWscIs1@6^<`Sx0M=x>7{wc9Aex(ji ziM)ot|2EU@-g>-le348P)`Pw4mhv!-HlV~ydZ^or@5k^~Yq`g#{XBZ&J=3~!ghTpR z@1e+Vbw2tP2OWnm-}0g#GgtNE#tK~e?_1|yY(-<3`&GD`x=vGowt5?-ZG5?MPR5oH|H!mk7eJdADD`N+>F1=Fxtmr57Ursv*H>oM;dWTaXS$z%&xg`Zqz5n z&Me77l6U0b7v|6Q;=jkobhz=d^wYBGy5;!z_iV=}XPp&oXIWwEciDXZsu`XRYSeQ=pD;>&NXY4~aVS2sv zm{#A)9%yMB6@BV(f^sw}+R|voKVC@IJgX;2ppoML!sN8=40Wg(?wEsYBW{m>6hyGj z_Xi=)kM$YBuPvOTfY|7kZ@di_gxRQBukk}>-Jm_jk@<9Y*#S2!^ix6^)hc7aC8EUM)Qte8<(f=4hKEs>W`=;dc-)ybYK2m%hQmR7o88mM~#E zRCz-N&6*=>p-;n)_ML~Cqe$rpX>PxiM^T$!U$oK&+#kg+wO*dm+|OrUAA;IuvvSgk zxbvQtJ=DB=* z^MC$$Sf_hcxdWU7pMD1cf%>1LamE&QHaZrD`nJINI5&BTu!V0ZExSs=$_1hV{{1(# zUdK5mVKIs>{9ixPp@;>fEJ)7BJZ!S-;_!_-*m~Y=a<<(XB+r}0K1F*-|MFB+g?WIL zW#!1IV71E>`skc0j&)MJC|NnG>sAi_8{E z^FuxGsb#}nRv3=Fkc#0X;Xz*4q>knCM-@RM`JF9`8?FSY1|i%xJ)u?{t2Cwno3VjD z=kVTvg+WiGK7eA3E>$1pOyZOJqhwRHV4!X{^bfcqMu{?xmaVl8lRty#crs2f+_py=$8+=)# zRUGt_1W5Uh-Ysj(fBlXfI>e_XC3U%dMTJQm*uKbSm@$s3xrwy2l!3^>O;5BtOEa~z z?fYY$WL1l5R8AyjLOiBVx%crJ7dKIoe9P&~; znK64`WJ}`Q2=bNreOVPJlk9X>S@_Dd;uLP_a&};r_W{~9zL6Hpahhr9CVpm3{L|b2 zvs2*gx@BSlodE=R@b}>U9!R&+(KXdE)Ytm=SM{L(K6Oh@stx&#_=*2i2rKRLqXGgb~NO1d!;*8_LS78*jjnP4rH?{#eM4yqTzlS zoLCOye%(U|<9vRK;(nT^kb07^?Llt6OgVMGZF-G=)tV1{ZN2Ehq$uA=Q+%m^i1?!E zyxstM-AsEqt$wMShF-lNb#%YV0{%2JF(lP?_7vt`z2QgEs`k3LW%=0pn9_&m@uMe9 z)BR}x|C;ln1>eB2*{NF*uOdd+?63Skp{o|&D>4GSn)Y_Y zRRTq1KSp;gK?QUHRsOtJBbCvdS1y&&JS0U}_aJe_g^1ZR*cEfgs&P*|Ufi8}Tt9=j zAB$orL*s%xhBx#Y?qo3XhI+y(>TA`XSb`3RdZfzhE7YGp2PFZpqP|A`i6N+Jdn2v9 zzD4~BF^GMrXRMM%i`qT3r^n{}l9D4Q77uF!}W{-{yf>W(ZfKmcej6vqhCG(AHRrYlThZZ9<%Z(*X_NGH%SF!E!C}|{< zrAcM7tm^VV9A_1@x!QOI^vvUQ$!$?wZn{p3R+nh84#`aUN}0~~pYjVMWhaJW4s1m{ zB#N-#F~VIl>Ay>Ok<`4gYu_=NA(^ZIe=MmYsD!Sd5;5a7K`^OJw?M$IO*ckRttI$3 z?*^)`X1vDms)~426k)M3!b5{u`rCghFN{>2s*5@Pf9OgWyq#8NwT>UAj0rV~!>SSn zC8Sk~Q7T0P#nXBtXH0Dx{Msd75H#aMej2!m0?t88=(Qj6P_FU=4K3_=ZEKEs&eVHz z)!~it-0x!qJ;)`buq6w9QIvI%W@>M0$=bW1GH8R8KXv!VHkS~QVBsv1qZDD43P>D`LZ8^vT9t@74eCO9jb5Q14M z$Ygcme)}SbFSD>V%hc@yj9%)Fuzyt=|ER+Ls&GMTTiCp%mhgazaMle_>Gs>V0jiHS zoL_-dztxcu{;IP6s;=uHA}G9lvz5wGdcvQ+JHu zjm+8hnY`_|!_#Z_vlkI3T3RJ|&T8@f>&)3K!QxA!r?gX9P?7OFLXUD@Pc$2P`Dx@H zH3n~yvLIU%Uu+i*br}l(8}C`DdW>R_YWd+%z{g%n;W)EV+sR?4msw4;@VSu?2c___*Gy~dok_eZWu_&LmmxyC5NptPkR9<>v;etsPw zV=xYS?QyA+KwK*d#5Fi45sIP&4JIq~dwt_ZSxsbJP4tC-jQA*t;dB2+PB=oWKMau(9rw=|lR})$l4;H_#tHMAl#qispjid?#Vg&ash;Qf8de_q@$2^;BxANY18 zMd*USAK4M!Y8oe@1=$e+h`+ZW-@;qHd~|9;Ciy(1u_q1nU1>ZUQu__d~|WsfHH#{UFm4TMFzES$?rpC1BaHpPvdJwJyP6R5PZMF zQq9nlpnkqj*t05x0P)Gf_H`zm|IXX}Z_#IIANXU!!{eL9?gU9bGZ40a&-d}^X0J!r zmgnPpFi_;9wfQxxh)~W*BSd|+;0d92`C|*R3<<7$BP0T$nTe=4M)IN` zLvsPb06kw2uu1~@cLdeb8WPZI!PYeG10cW}2AZXT zNbTowIm8zwz#2SU1Ok`Z1Y09CJIH!QQ2>RP1jYzKphWS2RW@W<2p~#y8ZP6Ybr6|4 zn#+2c8|&&FbInnuw@)I&S+DvPFJHUAVbTtWsCm?m@st+h`he^U{4W*Vs`W8mzi#)D?tfm&tah%tlAc!nqVAl&cq z&c{=`j}9-2!JE*-RhDP(*3DIv=PV6B4MY3OG|9*sx1|}1w&5&^$oTTyR|2~t%W|01 zYIO;IgA?5X;}YpIE-ng!_`W{b^>FvcyJU!ueNJyso}u6HUf~DrMfg76MMC&%lFK7x zwh<9@zr~k=g~blvw}hK;#Fv7D4ZOQ6^i1~;o3|DX?`a}*Cr5awC!A)ey5x(Z{JPQW z3FvUVA-#w!5CPkIT1oiAaMi|+ z6%j8dJ=KZ`ory-@1U+)5&xunIv~l9xaQCDj27@SLU#rQ155r%YD#Se1*1Zb!m~UXM zEHJA2ErQ|8t<}5)rb3vZ=jy3=&8&3OAZEh}$?Ge$JSV9jy>MWl>whB#JQYYG12+m8`FcDFIhf6d+e5$s-Xrb8GS0_ zh#jM*KYXsT*rQ)+EUuhB93jv@AE!=;iSA&0m83zUdro1wq`UK5{gaT_uf4oPN#K98 zgYky9npq1C<*93ATO^WJE=y@RnrPGBHi?6NZ*9lnO-Amjs|JsB&j>CgpKn`(9M5?F zhz6vWki`iGitF77CnVo>TZ0nM_}qxh8{o?Yt0*W84pA0g1a}Uj=pns&xv0OP^m zR8Fd3aJ6U|*k%2EgZ_Mzv|+5?#wpnLoLm2K)>7(^WgA&*kHq|UTK(Nz7Eqo1H*=oS z4GDEiPH-%Q{danO67CwP!P;^b`y@O$0Ma;C`(Z3`Te@em`T@+Um&frTmf^}mRxHr{ipqFhO|o>4 zXEidnWqT_y^|EA}DFs!w%Ft)ZCQ>->A@(ODGb3rwRJ_{8^wLy3ddvR5V0jM=M7z+R zcfmlm3mx|_FzG^%(zgguvW?Q06_0Ho(WJ7q5xjT?@~MNM6Gnf-AP?{QB8_^ zgh?BT<_Hy!c!VAp=+Dbhay5e)ZgJYE9q`4YNP9B7z*mUus@BDPo2P94Q*9$XbVN2! z+32SlWO``IR^*S6b@KpMw%WzmAGKrVa87^G@|t;oJ)1+MSRjda9ZCQG9HLa<0Dm1x zqji*@>}MN`psW#%8i9AawJZxu3S!w7{}Q7+wJfS}Ro^438mK~Nw#{U>%m9r&YZ5wZ z(&C1Z#we*EU}Bf5{tu{^`PbHB>R(%&|JVxsYy1CXQs@3nuyUssur2-`QQSafF*U*= zN_)8nFm=`6dZM#{Z#ynWXQ8Vk0ze~{^uHM=pjcoP_6Mf4QVi{FRsP(a$v1B}>!^&c z;dx9%{zEW1^kkbI2y zM?Rh?C$0{%Jo!{Ryp{bsz674S}ghX%YL;7I_l z4|ovZeIWL9Wg)I;Ngy8T$sr!J`4zfsx>n0Rpj@517?+hFoZUV{dU3haj9_5kzqm{D zjQ5@9n0I1#uOcIqt3iR=z3Q@qvI(`8a#wM{*!u&+dWm=wiCZ)aK7kQ^WfKduoJ6sb zDYlckrARN;b@w6jV`+-x713+1IxH1EX1+pUi>z`X>3&SV(_}Psc^ktJUfy`EkdNrY zTcd2=ODl#A!?+Q^X=4jJRY&?3Y&Qq)JfW={cCiv^9E%ODEc0DD2DTH{oJIGdG0n-~ zWp_2|>1FXFh75y)(t?JR7L%LBB*xq1Va_kMNl6WEMTrTk48sm{Nja-b!!L>m6h5bT zbMCk8+3gr>hZqK)?38A2Pio5F){k|5Ix|N=Xy3$$^~^&mZlZCV98fLotXpcerHUi7 zXmHzBwTLhnl4vwxb)33Tt8ch6r?^}!ny36;beuX_Ta!2KkkrwTqgztD+Axx7eLLRT#&M`$^!rregMR!;=HlSWcb67=9X{(V>St&ZE?)NpQgs5^(F_qGK%zE+20JiEB zkJaV2Kbz;4*MdC+vEzD~IPU1J8AL<_)z7MK#gSo&*0B$!HVKOq#9}2_dKS(uv1|nm z0|zQ5MRGegUi~Ju6@z;kVa*oZJg3fje!gd=!Z)gW0y4Il>G+&BOI$p`GOG8fNo58W zmea*Lj$y;er~kSoi}-}gl!V1&I@?zI|J|83IXVy{fpwQDDt!Ze_oKy|shh5bGu9W@ zgeI{~r#947wtpQ(N%G=oPECrKDSO<^Nfl$|vAXJFLv^jKvH9-A!hdNTG>eX#6&G1k zYHit$r)vGoccm9bGpbYgjoJMsN*g5TO=~&L=u6ouPEX+G?V_xw1L~-*+IFvG9O-PB zRvl;+n)daM&04{((egOge#IPKM#k|hjd@)3%ZuxihaqMK#Vr1=ct*VhBlcHG@ z@0!ETf#2d(dP>8swM$cNiidICG9&I{ea$k9#$u0wIrG7c!%NQbli1>YTy4Nc0e z`brQESO966g8g>Fx=Gw#ohVPPN})#1_VlPx1$UQ;ZPeTjd&Z8r5t%c+#-xjStxiy1;U zwnS@81Apwj>fB~Qm@T4M`hy@i`5epcnqhRK{sH@XNvqmwmj+#;&Z!E46oHwx$|_|z zb6ayB*Fm~oyV8nR8~7XpMnX+^r^FjdI@1u}q(>#a6E}4Pc|A!D3wW(xHAjwLm{wYd zYPyfP6zbmIJaoSY4wHz_&54TDb5 z_8e{;c2pZVTmll%9KXyWSgYylE?u3-zb+SHLN`*i$*CcW)?M-iycuYc!#N^eURnCc z*UVniqkh6fLuF0$XSrbZc-z9m`bIAAW^O2j<)A-GqNLH~x|yer*=d>SDkq6ii|Oln zMU$K%G#i}ml==RJEo8(|kt^ z3A)#^8?i%gYG)37j`a&T^imK!!HnvE{_)}7a5`Cs#NF>8TStOH^eMMBfW41gbgA7f zx;~vlw1sR|gSn9W!bQC)Sy%qHO_?U88T$njr}PqsQT>$JMBwBYr@|u^Cp`$;f?QxK zf1ZHZRxDDQQ#AeGbfX}XfC;piyhO_oz;{TR%l`WbinVVdpS@; z(Gz+!AnoOH+h;d0pg)DFZfVx+8%)XzzK}GVBvHHJGd3Mr9)FmUnY8p=q+Eu%pZ_95 zVFOCvUM&JGYKl+U(AyOfdBl{(mrN<-#&S=kD>%xUH_&4h5gC4?qA80#^cDn1I0r$h ztwD#%41JuARl#(p*OkKs zdB+q=?Djv59?LV1xyz4Z=BQIvjhgtwG9@<<^P}o<`}B(bQeM*SM*Z`Wq$?p27!bYAJG9Ih8b7 zlm{y*3fSkmw6C!1*YxmwdB-Zy8E?;%AhT??3 zLF{|HN|rG4)>62v-6BquT$aO_*du;#KqtG{v1-hEHrNor~sqa9ac zO)_U7QM)!)@yGY5P65>{njsSkMv82&)zK(gcM~B-wPl7MV(zumRlnuWAw>o1Z?j|h z2*t6oVQ2RoN9}&&0gP`E_%eYuW@(NZx0`(zufm|UyP#uHtIyk5BrGueC74CeY0{pY zI`(OcC#hiaeO#Jn3n3iNb!vr1&es7(WHFUMUQ~{eEL0ze9ySH^Wh9@8{ z8j8d{TLR?}A9ZXgu&vnucS znD7GMCd*b>wQp}Plyj!Y%I`<{fQNcU8drgX&3#Byn>?Bl#jUXP_R6JwvA2OwWa!F{ z>~6*)5#0WeVwQO{Azv>HWwfu4uX1VvpRCc9JppA4kp~g9P-HHRx%?J#PCFftG70_u zl8b22C5VXT)c<0ouz!d>v$>Aq;v)3xDQ;kMGx4BH+&`+Uzbavnlap}tZ4#i;9aNK2 zKKJv-pxrLlcTY;qs^l!dX;QSCV~R2UsIf&s&t)Hp6ik_H9)*8anl}671xEZ z7p=`lZ6uWk4g7}obxLp#iIZ{DJ&yu1zZiS|qDiqJY=unf6?|>gsr(Q2=P!tpUduy6 z2OH0{xq>0&GMJ}QbW|qt0gXRB;*DjpM5lTlFU1jVh-r#~Zr=(ChFmBD7K~H}(RGbK zx$#t|$Si?8%qBA>odAQrBn;xM*H|4DBK z3iehi=-qY+^-7wPD#KTBR&$e?yx^?9q+uX|vpQwM{2MQdR{&3Rx~J(Gy@&{`7<DMPe?F>fP`|-slI9AFn-18pE`>*4o4tRZ0z0z_ ziLi*M|1t2vlKJ`@c{$nE73g}^B1cWW`l}@X9=!_vFBD&o75fDRgTP>ni>f?kb1_Au-DPmW;ksglQm6b%)fd)tGYho^BwMQZ`KeH3FB zk*=GZ$H9$BFnq3BX+F38BBPLC??dj(6uzaZUa{qY)N*c!%%9xm>9j^S9Pr&e7f7zg z?&a^EBm=bQ)OKSHx&kUtYqQ7a${-n%0~_E*1(V2S;tomM6$OFHQui=3`N#4ZFAK)j z_|^5=r*SD%={pR0f^^(rXj6V5!6}@511`RBp-5WL~#=Nl6+XZZ<{{V(ZN z@;}T*4#EPHFBIbrZ~Th`f%<8%Na_banYhE59eKg%y5GYV9U2M(PNw}wH$lOG=}h>% zITn`n%hi<+pquT_?qtZ z`-4FOZY3psh2T=0Tc{2EQ$J(XRHDG+s#{dA1h)>4M`H7!NN{~g)ljj_+w%d_#F1)r zblrnx-5))9I(Ci*QPf`HFG>`hk5V@jeD#d1>9DJ`todJIuw{Kt6Fw=*Lk0}dJU3TO zNKH{D6s0T``)jocqPD#-3O+rQ1m0aQqMsjLLu~htP?JArS4Xmr57eQbv)_ z+bPSP;y8Tz%qX=}@fR@wsOm53_70RL%$vG7c#^N-OO7t$9?k6xO|hgaT^l&0>DHKH8vAczv>}3aVCK zd`qG_i7=Otx`YB_F9s1};!)kVH=oK;2>)!Q`^NufWYr_=%o@-^p#7p})7`n#)mn93 zemabIlXC3mX1J@fn!tU;9t6Pq@KZepvkNMOf-yG?*)&Tv5x0}N@COcU!fU5-zJtqf z->F?4ge2t0(V4DRdY3uJTKt=o6d>VC`6(rk-8O$~)O;)1V@iC6!o4*@#uympDcsxq z3riI4ZU2GERgBxMRrlqmW}HXtRX`4pI;-AP~^1VO&<=RA7PD-3*WWG=P|k|cx#e=$Q#yR5m#2T z*+P3(x`?(%Y7AGdW{%;sR2`&w!Frb5oXC0FxPY6(kd@dSK3z{w2%}Mb$Cy$%Tr_Zu zCJo}1IGw}rcIqQL)?d5ALPMf`X30rGOy<|kB+?^%77mPcFKY3TB$R%H!-hS)_eiKX2MD+L+<=#!F# z;(iCzqRe-#Khz_R2YTEpuE`W4My3@7nX05gF`QhhIdO%VQ21804|xoXQySWGBMLIO zx5;HMWab|asL#BVMa4MpQrqqjNSJihK^3`(WR+N(^)yJ>_kJGI6NmyHc4X&QyR)>n zb9fF*N~S;IR0(fZ#0gItXsqm&XsBqm&8j13j~A8-zg{b;2!FWMnUG5Jl0HvU)ULxU z3gn{_1^L9c>>_D!7hGk5(WwK&``ju zGTuU!yzB(?GEJ2Pnhdp_?X9+?=fA(A7vwFdw5ug5EeZZMdY?ou^%Wl5O_sOGg)`{e z=lc~MLglfGYOi`1q+lYN(EOQ}6G7#yi{`)qDw%>n)ny73pNNq(a@f_!NXVvAmeBI> zt?k`tD9p3L&4&_Ysf)mdf%jWVf*mg&CG9?>6&yI!058f>XJ&2>OBV z%!zt6yejkdTNMa)Yjoq7#NYjaRl_u*l2ms^CH$>mOzb*s;=_r+r4_nBa(2*=W@m3J z-MOoFRnZ~K?IH1fyk}P}#^<0YHo9J$u5}*^z)()57&?`;3!7=AuS!tByg=+`jLOj zr1B$ylGegrPKuD!F@v*d-XA&k5X}YSt0~E>ItOgzKayE_4%jW#lY0dzLcmvboQ?DT zi2Y+R5xS^cKwg<7s3gesj^D6&?4G{vUj9?VNZ!WBU+pc7eMKIkw*1S`)a3rCpd~fi z!iO&m`}9*9Yl-5H7LwcGW}?3^$f8g(DWV`U$)F4~DxehCGYVdxW`R%1$C;{CesRloObxj86 z>_1$W^+)aHXTX#5Nr2|^ClhBqD0CAiz0c@otaLmg( zcOB8lOGt7h(v|MOBjL>_ zyB875D}o^C_8X+Fh({8SDpG|!ERv1&3oC+h`?ytKh*WIlQO&?-B6}fNK5<-4uY1C0 zgNQhelmQc`q2Bh_W;HZi*;J8Q_*oc|mnS|W?1h`S%)4_g3zY0fA6}G`sCT@zQdm%b zxXe*LKcaaP%o!qjsi!f*Vw@-QmizA_c?mXaqfl-LdZ(AAVMDpK=%HL)SMrX}QUorH z&yFE_wYpmX3<99m0@Tlg1bc_G?|hkza=cE|))fel-F;9y~fKqiU_JH#>ikt1~1{A^)x0V{oyp_f!FYI(7gCG zWUvoERd~nyDByvY@ww@bq(4ExFM+;Z>0w&r0EqEQNB-WE;}rJhH$#~7RClv5Ia|*b zdP#sXTplBB*>!$^G7BK_Z>Q~macbTdRYab;P~uZInkb}nE>h)W33Q4Py`2( z;6M``@PY#wAh;<6+eM|vKP(jcKP+VWKR8REUe_o99vo|+USBs79hmw7J`eD5fUg65 z7~snQFAwN{6ERO`ZtmvVFL6Cs=SiBM$ZaLYy}wYI4WsB_^SwO42%l)Q@W%;1o+?Nu z4qRGu&6Di;B)8RD$7WBy{U*%hX*DkA%w$SUgWd(;qH&2bu7Q+pVj*6Uhi>72J+O5+qRYQ1c zUahHl)bfrl5!!4sEma4@%MRiSs82mA_8S)LxrMOq8^vsvb+~d0P_I^sDYc8C1>{~@ zEJdRW=6&dn<#$IbD)tkAVf|#LXf1XvTl2O8Q28O*ETn+{j+hWA5`NkT6`%0_6E1WPJi_4sW-5{rXPGP2X^|w z7hK?%09nm7->nw86$GPizXKa`tZg?{VDp`Hp;&iR>+$!36(?6K^^>{HjPZ^x?0{X} zyK@W6JfH|OYs<&S=#C2ja||$Go0?<$e{7tc>+0l|cy|t0>Vb`C9dNHsVW!e2Hx7ls z7RwsgVgmNwX0t8-f#UxSDgOh3-8`Ps>+y|4AbY>XGS0t{b-Uzc@%UIC1l)Vu@`@z* z-v3{SJao2ylcGDq|J^h#f*%a<-k>F=kVqhN6FUHd>jTv|$ww``gt)W(T_@P-WeYZ* zyse?aOIsXb1wjk>mQ5zAz{|N4Mp;n9VEAJXW5XgjyStTQl;*YzJ#r|_pCS~GRdyP- zq334rrIZ;ZP=oVYm}i(R_xwW#E9MUQtd^72Hy_Py4Aeg4P_=JL_l6C&w7MS7yhq5v zWr0ssY%ePAH+9@7TsL1jl>}c@EChAc>xs`cI;9%OmQ-S`*R$#&4=;8lgJ!9kbK#5O z)teu3iIgVA^w8Q`t3_p?>;z;G?RaG%uR=4|eA{9}vMA6WergT9RDufMnoCbXIE%@k z?FD9z7o_4cSbl82JR0W}G*90Q^omQxJyD8&+ftejL5GY8pN9MAl#j{UVXHYay=ar4mdbErO;!9ViOlYRG~~>zYi`aZRA>_htcufRe&RKj~;|p#u7R z_q>EDFg7IJ0Hegsku;RsF(`^6LLzy&OjU@<`o^=BqcWfhW`@kG^?klu3`1nVw{0Q-cNLR)hz(91wxNc-BKFT}Z>^BJkkyrgJL*B$>?L!y_)L>l}P21|~_dX@+24eH53RaNox{vr|VuU+G7Wc<%6GdEz^MgnwJjrk6ojQ}rkbtgBHDogQhs4!dIT^_85wc#@ zojT*=9;l6bbCdV+d>pThicG#Kw(&B>0NOlX)DXRjK@S~)Wz2W67(&CQ zQ=X(CXg8|jKT^FWufB|`F0|v-H~GG9*sniMyL{aq20r?$&gDh+Q9~fWO#6Q$sId~Ef@Xh1`Dw<)`&WT4@x$*q zL~Y)@1*^I)=#;aLmiL%;3vV3R)IZ9d|B&;9#x>la_CwfZBb%sh%Y>=Dn_V5b;i(mndePsbIVE+{U4*Tlw_*hNSs4Eop7N8ZK2WtNK!j zB(AP*kW2M`FNR-G*3LFUIx~6<&%%RFv6;2J+&dOOhjWP<`rrhrRwr51EB!>d;1sIX z9EmrhnHsKY+*rCsL60?+I+FJr?$<#d#nd>m_dgF)XmMnB5cE!AARBl4HEaj<4dd`> z^)d2vJzex{?jU89p)F{2e7fvGTR`qoUfh7QKZrMM{mGYv8{9yZI`tWSCy^%f&{X@# z{JavIawmx<@jYwr8b(<>44;+~LusG#(uR+NE$ykRHJ{q&-~lShd{*s~`wgE3%-$W0 zFAS<3PnSIdN+_5O1H61gY+u(6ESEahZX-I9 z<#6Rgz4?mARRHTk^ZxzU&e0%m@4)iM?X_?svlbRtAyfxaJUls{V;a9P^3KxkuFb&m zFXv~hf^!x>@0tnlq}l7$P_G$*1r)XnlpB)C$oj7u?;%z(I6{}ysR*mv$o-C*2km@2 zs}!O_yB5HE13rr=-|kF7Pf3 zk-@8R@cM3C2OOY+0~sIyMxE3@gjqgtb&3givQq6;Y`>?_&UltGz0YX73X+-ZtU}O4cV0Uac_+Ru>%yrsttvLvZ}m6X1kE z#>0|{+Uy`EHcSzSfqUeuvI0s4 zOiSslQ@@?oPSO+Az1^jc17S|z7oIch!A$@B32~Z^Ed`JvelX|%l88SEPS>CXt0|Dk ze^w8KE6U)R(PdwU_az4BXIw}}p}O(o8G{L!M8sox0q%T-XukwR)8>vW@!yOqYrLdg zCe9qaddf*yct7ZhM-aolVJYsmzZL&o^W*X^QpY@bX(uIMwJ?`_LjZG{ywZk^CWkM6 z&*nQZl-{<%?U9U60CgP0PaegSLowC9h?vKR$X-zY;E3g^TB;OYJBt?_X4%N=U=7%vf`zOJ>@B zRzbg5*G=F32nw(qRqoM=3gEsvmH)`Q?V;?^&XfOyoE7zsZ`*^Vxfd)L)?&fNyjHyW z{2JfIuS3R$b$dBSBIY_mcBoD^Vf zkt7pf7M#|<2b=W;m2s59KJE&NmZNzTLnW1yh?ZxW6@GR#P?z&+(K{6F6z)YLA*>8e z66Mpzs*Coir`wnN&^g%M55eAtjpdV0M@t7wtN%j}g>O(mzy0cWF7UAcW`_B_cm2gp+4R!4RX#_Sgn`i53}20?QkGy+UnYKo9{0 zV^AL%Jb6hbiy&`~0%G3R{OZ6pU@4_|o|KtBLGCPvF0a~S5y$4DEw_UF87O%J=n?)r;sn9PD|9$bkesB4TL?VWFiRK|mM_xr0 z#K@V4+~hvgciS?8pC;5w{L!pyFo=*d<)kQl0_qK`4G54k>0Ky%WL8ia7Y)j45WWWo zh_l_+^Tqo=&d>_R`!^|F`$m5Ug^=-Wwm4-GiKDB#sGyS44PalvXPk58i}DU;2X>$n z>f0zEvdNNOE>e?s3OK50$Pfk(mT?url11?n^Jj}Q6>3=1&efY>RYha0PTas&MHl*u zq0Uevp33?JOn$kg_z`HDLR7pxp{J1ir?nc?MVT`nE_G$VD-HR79&_Zph&uL>V-@KIaH*G7igtA^Kk^Ey}3b z1(hQYuu@=nl?{fHV7T=cN{EIadPT|-d#7hj^%LZOWu$|}E-XO&MnzW1g?$-{R{YW0s5>MkhH;cZFXyQoU*Kz$q0Ia-${~9@$DY(hvc$X2+=%eA_a^$+8B;!@6-9e&8@)uNUKc5WrneEQbGxt?>0;Dl zDmUYK2^u8{Y+Kd)kca(lic5m#X(K6H4-JO?3y6dfip1-cgVQ_)?tEOwO^ENl16(S^ zzHQt1679O!v4tYOoXL>t5@Kg`B=No2-cl5kL;?%3t%AqP_bXfO?WLcNF0C2oAS<+y^D!Z(ICd$%EUKAn?eML2I&6Q{1p z#s!*`X@fH zIL0a-r9On@d#M0!!hS%_pF|b&?2x0rpqBSDST#lJGa}?ngrVq|r=(0vp>@Yn3)Y+? zz1Cc_Nxix+kqBJtq+mDf1ff&ni@#^;ehV-j2y;nz-=}Mu(VcH{J_$>)oKPLM;JlWk zraQePtG#bh{*lzn-B*&C@GvraCh zQBTh6=zBwEcEW7=Qn@!+>*nV5iUwe>Y4*t5GRtvaajZ0x+U&w^Nb#RldT6PJa&*|> z53|uV_4*T9nC>?4fAd5y>EkCv&Lt9VY3ycAuxhSvqblk1rDxLAY(~C7WSfl?Mt!T) z_L*&S9=hXz7~_CVEUr4>RmVxM^fyJROUMA(Ya?$6+orz_p_NnK^^tl0W9c1^YV=1z zqyVS8?Xb>sYxzE*yst#vKgx~7XSo6#1c{K{D|m2}S1VDvTV?tn*;?W2ysQ*>D3_wL z%y@@kspgE!gj@^y-#F~MIwNg2bNvL@`hx;@mfddNxa`3CFQ+BQj~gG7VJYK#Aj0bO z>Iw-aRmGr*x*AcCgr4$W{*)9EOo_n9P;NRilY|iaw4RZP2!=4+YfH$lheS{#-g+Ez zk;z1=qlX8&(<@+MUDvwVg_>y-XK2-EPz9j4q^Ek>_$kUR^H~SDVW9jPJ@Rytb>1wa z?9E=~X6I?zI~Z6o)o19;tWZGj^~~TPr99b?@cZQ0KqBZdhKCV*Jsc4Sv&Cm7F25QR z@WZ$wZj2gf(4)61vkf;x9;5cUm4v9j^UbSCzMI_a%$gk(#9Mb!!~pk<+q&q?JTuxZ z2|XNGHa-i5@hKXdnO_Rj{Gk{8W(dQ>k(otiD2T!CLNb^+tz(3fy+d^Gf@VF^mz7t- zY6^!P>0`oXku(6pg=nD1O1tPh|wV>*XD+2FjJbJHF;Ro zca&BZjklV}7oIZX!Fl&)XHM+Uc1^hBzbXvZT}$2@*e`eea`Poi;4`azo0SzxwJ#KEN?;y_p7 z77{!(Z*T=zax#`Dz}M$qiL8?P1tlZQeW5BZ$}<7Y8Jdmd72*LE^tWg>tBl8Yn-#Gz zJ-m73zUXTOy2=<>=NIRa5Z!b)Q3<(*z=>5eU35t2s@WxR=p}!N?dPmjGd=krgTm_t zJ!-^7CUj^~y9^J_6vEJ-{MQh{PG?$Al+&si?48=t{e_xcumlr5|3? zpD#CqnW-6SY$L57#>XV#k!AD8_lzYv2e9Jpn7^2$N*mx)D5>}UXO}#NiZ*rt3un+6 z3E8c+(T~?)S&*3d_{|u81Da8DR1B)9(>sbcp$DR}LU;>dY5t7$ggl4_jvUSyUB5pb zlKP{s&PyN|wLXnmHzNiTQpr|-2tP0!E8F}T@mHk~&ez)jlY!EP5v1)wED)FL<$P+K z+;FtbU9^_maj8E?q8oSFWM*P9r4!fe)TptaTuJLh_}lDq{$q2-Occ?B>71pAvs7v^ zW$z4h@L{ijib8NnAl5>dd2u#(IkAFq17dM-a-)0M+ZG8qmDu(D%izPS_bLkTYPQP8 zE=NVdjBY-2 zlmvd-xlj>_{PFP;?Kri)7=g|C??_c!Ft_`+eyfbQD{V^cX|ne}6AP}b)Mt8X%_Riw z6IS{!yE#0rY3%i8zIlGJy&_iLY%liRLtH!LEA97EfyTsWU+_?lDiL`xEb!a(#7?9f zhmCRQM@kz7c9Z7xH%Ex=Rl4ft=CU|tr=7@KK|}|4;&&=5A|x4e@a`lOSZ5+4y8Vb> zJT;D9?msDL1M9;_k!WG8n_j<&*8$w@ug}>uojVFjqfU3G%U348tDyVH9xW2dXk#l-Q6sys+NpfVE7WPp2`YIz ze@SRLcWnN%m~#H|Qdsg(R6_%Luk<>8P1rCe-Hca-176Bg?^1zV*!q@KdWz_y2KGV> zYK`fBg=M38^Pa52aI)0KTX&T{l_Aq(pNX`kL^i4GE4tSm4VLAjb)M&wmW|V@Lmgfv zMjVvoVEX-jslom_tgP!}P^!tpQO$R=s8~bC&wVzjYzETK$ALTiid$Z_9Z=sin?S%Lp!+u_Mkq$fC>gL>X~X`%lUC zjzHUKCRm5+kyv0V^MzH<|9(L-kC_#8sN+7II@lRtHb$%jj+loL7cr1OI z2~BN0SO#XX=f#qxwn=&dfVb&yPDV1=2`Cw&`Al}Z=VmPL#DTisR*2fW{qjJ?R(*!K zLFE7;zIK>str(%8v`oRq=*7@|dN-J!;tDGj;)J!_sRR>S3ETp-vKo!9n&{!I3nk$= z$g((c$u0U2+?fOYsDb+>LM#K8aKHWD%1YyhF0J57{66xs9(9T8M!`6Uc0&3eMUuwh zjS8BsZK}JvW21@w!`vIX)L@Q$h6t6n$R*&+HKcu4|F&`XkEL1v7rM}r!0xw^J$ztg zE@sL~#df&L>l&kNHpZ#nUsbKsG2HDM-VQURPuIgr@obM-gb9^fKSa0l#yijsnwx*g zthlV8f(#vUxEMHOqt{`TE+i67EDk9NMI^RlRv;IfY);~^TNr(r!4Cn?fD)3m5tOwo zN0W8ZsrXr@pr^@E$!xUV=+>QCQNf_23ghFd>4jx)<4~e}1`dYGi)2^H-7A)0eLccj zsCBBWI|?ik+16sy@K?)+PgCny8wXO0sc&&PILfh~4KZ%lTk-ZN35^w@8zA-`=0k}f zNL*PsbSnv6TVj5GwbF%i8K~}F^+{Swb8~-Nwy3YS8kz4!g%E$}tW72A!)##0DRk&e5Y9sq?jL>eF?j@ncww7>AQW>Z)18htIQ= zq?EXNbH8y*=x`#EThMH^6s>9O9IegSPr*RmsN1bJy(skBL7vy}cNP`bo-u;BjU6jJzql zsD#7C6U^u+%oz3ipk}qQBbXf%h_(J^qRg^UJ*f)3JO)>`XUTjOjou+l_4RQ_!zeEr zwU^9YlDa#SKqhf`f&Z}@<|b8E?}Yth8)6*qtnP4o&UQHK#j>c)&&n&qx0NrvE^Vu1qQcP|jwtNt`x$bh zvrTVYS8qA^)DZjE0$I!NfhKqkEhKaV-~AdXS7PZi3~f@VGb!y&^iWDUepy3G z5UtPGyNu2DmbO1}%~}`ws!k^kLWX~S$2v7_fGd;2nT}!ErBXUL&gV+we`OUm7zsLT zGC0f$zoz8kMHQpbRjM~Gj_I(Dazp4BeB>B75`R{>5NrYm;l;f^q_C!jTCy&T7fVoG z1YtcZmT~I2Of8~m#HtpjEN#)N?|E300vjK=j20stPUDYezkHAL zGi>BmM?ICPLs*!ubR;ojavM&H1?TF30$f__@^*4pPpmR;K2eXaYV2!;yI+U9v{sL1 zauG>k2cKqzw;17yEnC#T2k*SXqT4qQ51Hqpp%Tr=uA!G*J)nv+{}L^P5vRhO9a)NT zdzI0p^R=!vJA6Qi#h7qdaZ8f=?7knk)YUgL%9zUMBh>N*uQXktgpa0lI8m>HiDTAe z__`$KTXE=@7*S|(TDe5{?723%)Fsf|K8~r ztdAbZP9>DXS{#QYY;!L7fTM(Y{}wZjlT zzSo-^NiPo`7d;dx18*<>Q;Zs}OvIUuKvAbRF6nPj*aJ25HXsYfMQZhJH{P=rVJ@eBeC3N^UGa)b(x2^%Pd7B4RqM7}0D{i5Dr+HX+~;1%`CAmEBn z@L5{!F?ex)_KDI+GyrdQcP$^mE0yG2OBz{%HO>IfQa1dm6wR>m$TAWyAbBd13beNT z5nPbW+FqT7d)6)Quu~^``Yl&#ADanSkru4gH1P z%RIVj~=3tkhM4f4Sk=I4-~DNNdH*~Zvijht-$uaJn}aiZsBBEp5Qh(! z(%zn1MF*E+8hCk4Xq`9RZCJT?P@=iVG|$SDi;eClQ`5aoU#ob)#@MGnb?E+Lhil$= zk^LpR&00A^S*&Rv^YMkrD=$Akzx{-!zPY81;7BS?&O(HhSii-3yUM-7b~yMH*+NC* zN(o`^^i9^RjL^>fg`%f>2TJxi8RuC!GA~j6WE_O|4M2+=h1*{{$(KyeNei+XusYqP z9Y#CJWthx(2P|T!VSy~=np#M?N~C9~GyiCRl5^g;na)0X>ZQn6>Z@Y~|H3ZEmyFS@ zE{a~HqS3>j90H<9V|IrD!(pHceVaVq{!TR7IuR0;d!s^NY(zRB%7`bC>?8bc4`&Cu z`0l6pB=-@oKIwon6jL;7hlw>@8?$CJ>+Q@QH`jv(7p$*W0AzbH~dBm+{5^+ZujJc;Tw zJ3yODGIWbahm|ezQM@w&F`VTx&p^E&0-|!iC}}P*MjO9l4kwk_cNq|mzI6*H{c=7- zDtqK+4Sr!MVq38xZR$_ak1*<24v6~VSywluyoCM${svlCSG|Kv!C6y`Gprm4h{Lni z0Cu)C!eJFh}%LP&$k&vU&1YeKakXu?*#F$lroZ?Vi+_~Atnx3Fcd zqEOhEadP{I%Y;5}xtHMc*w}+E291p|uYix1g#5@(N*v6LXS<3-1e z!j4BAOpq6UF=_w7`8!FWv_JQW(Vxa|^k@)1ZlC95RH)99AE?bj-TldJV^Om_rhB7Z z5*;nA?M;|86D&jR*Hy0$7uRNrA6q}eTxgSGBERfBl-WE-cYYP{eSe4NXp2tOxjVCY zC0@|UgVt~VO4AfqUR7j#mhj5HrM}$yUE1x9*0%kolE9i-(n?hgHRR*f(oj|kbo|0h zkqWx9eZTHY4{mFGM~Cm#@yhll<0DK%i>2HNaZc)CYYOp71p(Mtfd;Hp8zzy`Z7lhu zcq3_uWP(zw8tPy$H=58Dp#zykqoqdk}#iJ*wS`s!rli(-W zb>hjD3Ddz+3e)kfsfb;XUXOk!iR|jotxMX;p>Rg;<9OdsGCdWH;@t$R*dLcJ)QB^O zLv)hA45Du>-f^66S&+Fl*pazHm+9{2`4nM4=R0Mn`o}s%+9Kx0073d*XUw%M;=V z=TYs^^g@IV;q3&97_9d*nq-l!0m6xU4t>j*q>nvW3@>R8K6};aXh1oOb>M;9PVST; zi6%-+aU|Q5%EP=hviW*}Npv$UyVnNMgKCB)Y5eV5xD>G>#uRa<$j2yDQts^%1rd5K zW@*)E1)g@_+ojTmTc!LCW2?y%y~c2o+{QwOTg?i$^j_7RERe9AB*i3Me~{reU8^CT zy8ccZ8@%UX$aIa{H{xN)KM1muEF~4Da}TPd8@}BW{~Kq=;&x60AJkhOi#1G;ocKM+ zF5EFQpVN=8QQb-J+Aj06P_T^A_A58+&U!I@^hRB2W*AK|%Qm|1ar1b6;nLYk!R><0 zGA2E6!8ZXOeFpgh>dp2dzi^pYh5w^djdI&!-2nv>P;>eGU1kT(ReNR!Psx!NY|>48 zw6sZp_iEbA_VxH!N#Y{wM1ORp-e@+FDGCE(Cwc3{|py?@w4s7LsUPs@0lkA?X>UH-JvYwRWH z+tlG!3T0mFzdF;n!*0Hn!gPHZpXp>kckAm7-*9(P;!RuZ@ICQG!{~!6Z3gTww7_vdq?;f-S*`yx3sKL?vBYgJI*3Th}S#=NsOJsyhvbm^ifofsx*~6MSxZ*$79(MLw5l zq#I#19;IvO_wczhWHBClfMTxN@MDCPMv67;(X|APxi_k=?zxCysziZ^t0u9E(kTPVMjP>=aCj|Gap&Y z%t9WfYSZa%<)+;06K|{5#>oj4L?12IzC28|BmXJz!adEnr59&Ym0lymd@MSNp7059 ziTc*Kb3;FKio5E1;V+k9##^NB+B-%^7bz%)Q*8; zdvXw&^t5}spHDM`f%RBB;?!A%;_y1Yuq7YcNTS?=E;q#BIOb|>8UE2?sZnTAz~S|M zfekdHw+a)mcDOwBL`{!9#Ocdj0nqMP4oQNNvk!G#m<+e~Kj2@MW8%rQ)C_LHS6a7a zvkQKns1II5fx@Zqv73M?eihPU{#>P0rb3ge|G3yPe%Cpef=V!Bu-I zTlcbBWYV4f7mCaF)OW%Ek{)_7B{iX{x(==;L??lB$N5z|x5jm--592C@e>m)ry!V^7STvs(sCae!dY&WnxA4cMXVbn+O7@rguf zARM}CuPqqZeC60`cv5oBn#5~)@swOWC6^!>bWa8{F)QX*jj=Du!jIMwL9mMU&=8TWq2+-DJ*K$oZn?NPFxjSBKtA<&&Hx=V}BT#vDkhMB^!G zW>XI(lWQHeB`Y$q>sZmK*n+n~;K&jrt57#F6l%khe zcqt0^AA4()%IbGzN6e6)?c#kBhqwdgUu*Qj15r*xNGp%sQk5@1*Mkd*j)Bw7@GnzQ zng(ZLTgR#Hen#V0zqN477>kO!tH`cjh{k_DyHsl&{<#eM)oXm`I>nqAB;`&v6rySSe~to z$V+yui!E}HW4o~|lFef&&!r=tT-0BxRoWhi{@_we#cuAS)>=|Fb|md&yjon=VP(FP zb-j)1RU&jy<3^M3m+H+Et?Hr-FG_1-Is4}$h1>kKb0XWPwWX-($QCsZ`YV^P2)5}m z=#eIzANOg3I^9t$4GSk!A3ilQ^RX;Oz3b38h2lY^Gz)Mj5`6esYmfdtlSpJJY3Egm z&<0yF*(lo_mw8PM*IAm&tnxML;!eZnby$nmpgVacO*?j1u&s}c$aP zfK)?r!-jEv1^aS`P!r!wJ+(a#7Pb`Em``jr<*>$GJ0$Z6pD(=V>+)^tTO@~R@60zk za6T28^(YTQf?oLdeh|3TT_+KlOrl`TW0RGpK$R#hVa+$fcD6I@B243|B7$fFifHZE z=&FXDs|Pd-b1Zx6blEkK*UD5wTSM#8HA@1?rmKnL<*lwO{qtVQa7Yzy z@zG_eUev-2AODepN?f?h!1C8qq zyPxw>!I(aMjRoU$F9s_}^eE%Yqfux6N%q2B-qB?2i-Tc6FMr-E`Uv z1Wwvzq7g|o*Ma77Y<4N!Fu9J$5i8U~pHke_j2(_q_o)wluwS;OvbPK}%j){bC=4vc zl60K+@RRK}w3op^t$33m%)F!&M01u$+~KDd%)hL}7!}5Xl=k9^#W7-*`PXE`eX^E9 z@VKOi`{5!>)p?St+BJhB`3ufS@(py-rRFE<)kchP6Dotq5*XVz9wS&p+xkFBPqiM+ zO_utL++QiBHfV!1*PBfHHqYPfISH)CnPlRLVwZ)4Q6F)yX|v8ydsbGb~qm*zo7NB zrYaLWGVuf(#_JvzmgK`@7G(U{qZ(Lvg&~w+_cih%1uV3RdyC0puc!w}@%lTc5a7-psS)7bwyiS1fIAbw zzF>~5P4LZaLm@pfd1JuK_+bwxQ(C4!!?pnHnVf1LWtU658R0 z4-LZA=_3uoZKI3$^C^s-XUkI~wo=376TdS@OXuN4hJ$UCzn9KiiU_i>Kw}2)zaMJD z3h=614YZ0&Ok|$wkb524YWwId(*Nb^wX(mq`J=&Kri#Dz?&lji;}p1ITaqPKeQ)HT zQK-GNSoJTwER016MePp_*n)X~;ITjgZaT~RBleW^{gq%V=urR^02l=qR@jM5&$)?= zt38T5B_<&0m^CDoH@)3b&cnEgNqTSrH?2WiG9}`(urL-P+!Dx#^agL>^R+ZsPr}Sm zWh0iWf!mM^DZW{5Btc!mh|dqBv=#%|d@e{_WzdhTTHY?s$%@og@CBReRlo3F$o6V0 z0!zQ7&@c1C3q`z&RO$;E>IQKx^HdkI+o!3urW0-pfd{t)JbkU{IYg1^ghl(1TScvp z3VN26bc=KJBDD-$cR9nJ0Z>H^dz~u5hHu!or1O%9RiO-sM=ta`vI&kAp$yvPOE4{W5R%E6mQt4^42-SY~rS@ad~%yoy4smGt)C zG9jC~%j=Nle*=*r-|rLlI!C|+S0^1v1f5E48gf1b-B3>nQ}amwb>DPA5^xBhNM?BW za%EpSDCY;Va(2PQ?U7vicsol5T{eMINdvdzTHq zN(q0T+djdPzDoXzLlZM9=P^w618wx5Fv<3B?2;WS86nu!9TS#cV;^m6j}4s;`KFX8 zmw#CWu~l8yTWmn8{5-lXPt?&pY}Jp5kPS~>l(ZS~9k#8P1q+3BTsOmUsK4;A4Rr75 z;*Kn=s2Cf~YSJ?e^f^gb2$E1qO0jn6DBY{jlH^G`h-a3);^vv!^G@Omt)rG|(N;S+ zBdVjHV*}Rhbx3nRnI=I)<=ldUdP#L&X=W4sp1n@Z&`Evs{l}q$cY`h3JEp-RaoqP# zc01L3D@3lIO~bN z`0Eh&In`piJ0jem2X=0^(9;t3`lQVjWc)8t9`S_XyAhRDNwMyWC#2 z+-BZS?C`)TW@xG6i+g?407I@RZ|(iQ!_a5n>795%=%O(?orJw~&J6Ym74xTQ5qC?03Kp#MbXJdtWIat9l%na5jdYePb$TN-a! zYXVtBRHXJQtghT}7Y@%mmJVxboK6x<9-4E9&YM}|MxHW%G#MB1p+C%Pq^wpt-VL)` zE(h$x5x1H;o0Gwwm@D=>{c0vb2@WMgcXi9jYsIBfnDdrPUmv`abcD3yobJ!7>A^dV zZ}Pzd6{n0(5^lyB4$g1;v+2h|nt8{FOr1JPw<-=WH2FBaR&;lSzm|rizD|YtSbl&Z z$zTlLjVYBR)U*;*yEVeg zIGu8uv_GOc%}5Hd^LxeDL;DZS(=$7i`)6$meI0rU^zT)+*D6-G+?-B0vfT@YoQSSl z8$-M|a*y`~Q=OaW%UawC3c|oZOx2F2??}n5x-W;pmGZ}^5Lf>9^v~V;R zyIk|zhD75YUf}Ah-z^~*Kc+L|imcFc+t3HM=s5Oj$2zu{4{OIdx9pZS_17u8ZSvWu z%wElru-q3+tPkl@_oJ%eYVX+#9;g54nWbM=YSvbE_K1$MDX3VAITVR{oLs)S;yqSe z|2eHTOuy&PTXYkg^t+xyj$rl8ypEoQc%hyEJE?N9*b79qJtkqHOSk1nv}FMU@vny& ztfc;za`+g{c5;Lmx1R)(J+{t|d53HKiRm~Q$F^yl|waXyhnMih1g6ya+%X|B1t%2JndFD{A6 zBy$T3(zD(7WSINKlO^#3N}qFf%OQ}u6|uK>=}KYFls~6GUf5yxc)fZ{6v@rM_N-{* zoDLWr@QQsqsPFfG-=m8YWjw+FujBLd=?!LN`bObld8fjHre98V1)P{kA4>S3Gybc% zHfBz0LX%I*&I3ORt)qb8H4tzCff*3g;Kq^g9)9pyw-IrD@PDCR}>DyZ$hz z^&vqf7}D#2^q%!qWL8agLV6VukO`#7Xw7N!Dgn_22oylD0b=Wk=mrEDAVdH`Rt1Rf zfWQKT3Ls3Lh#o-T0m9^|j;c&M^Fzk`Im4K5KBCNhvQ(k4JbBDGhq06Dl}fT2&^%lI zY?Vq6p16mxIZC~^WlF%5b`5)epFgaaUk0YUww z&<2DZAie_v=}GZKfWFFW1;jq+ykO9IMNhq13y48LAUzRJ{ap%(;wJ?-07XwnBo`3D zPl_kv>6oPg!tzN04q}lBAYuU_`J{Lvi~tb|2E61=uMpK!wS|gdI4d)eZ9t^g2 zERr&c^BE34qvA`3XYcZautQ^?t1v3=D|L!f$-%zMyTA&K9aLhp*T)|9RpEqJU4Nzi z#o>SHm}8G-sc;5@7|kyZ|2wCq63NT}d$fx>^@|E8a>*wg)pgp^E)DfB|4jks7na)8 zE__YdbriaSPXX~toWes?saacCqvNIC$+{^yHlws?M^ZZce21H3&z8D^NayQ-O=3{Y8OUG}P9YfJ6FbgOLMRR*eSqJ}K{B`7c zxN}-D{&!O-u@>1SAhQ87cH!gNkw_jJmQ6r4O|gSr`C)#HH5$qD1yJiKO>#?EGT6J+_jdw^x0-BIht4^YJ<(v+#K zOg1-Qo9MF4{xb6cxg-cj6_c)%TvPqOE8vu2txqK<(2~UrqbmsNji35pG-Q!owZ%Fy zZ=Y;#&GjFO)dujjWbuJ4v^QQ!)M$t*r)rCu%V=pYr|RfpV&3`I+?vOWwLXoXV5vNs zr9Msa?_7t>%(_K#6qH+na<=-kc7i2Yy)f_-r?-Ae&FJUFOk$(tXd-7E8@a4WSdfy2 z(NE>s|D9U|#QQ+Z9mkdrV*k}0RnRbtkG>iq${=7vrA4dvN+J8G*#(7to(AOR1khp3>sHyl*m_fLzNKolHM|4^RA1HpbE=o7US3aF#A zsPum>1p6!sB6mS#+8{v=h;*d33I&l9Ao71KbfC5x292?R=wYD!e{ri0z^8QrpB6OW z44Q2L?dgDe%0csU;M4xk#Y`@sWf0{6B9=kR|JXg}qAsB)%kd)YF9-x(?*O`f8Fami zko7QdJ!HRz@c}BGhAoV*pjwnE`QZ*dlRMz?97Vono;5h`B0NJ`Y;VQry;I_<>Zv zU&n}<+(;+&&t?o+Zu9V_}rb>XYiV9r`FZi&y@QP{s_K*GM_)027j4QPv%cr z@B*g0oX?w12O+;d*d>YURRNp=FeQuY*#T4moFQ2f*n8=z$pMz*5#l)rc>M?%n z)nfu+`rM14`)3Hyxn{xGI_m=|d`V^`Drumx%GVFj8KSJpN9_4E-WJz?@GFGUGHa&-lmfH@30Do*!uUGPV8Q`H;p*gM)mFPts@kbg|;@@0td zb)2DH2P4j&|CenFW`p92)@$bH^M8mtetk0zu(v2eBV6s@s=fe ziGO#2e|L#rz0!*jY_(qUjr?eHNM3L9v2Wk=(p>netL{SEm5#$3s%N2ouMm3uRp$#o zS_2T6V&7$&-DTR|>33dre!J=%zY<)(eXmV@;hU(u3w>G$LKHwq76=gpAwD4F3hVa$ zG8GUg9r~po`L!SU!7jl=FTo2h!GGEFV_r9#4rmv5oo>cfxst72cI(?SO{qZ&G^J3`hQ?yKO``4(@ z#lqJHnDRs|s0^kgcKQ6r(4@YL&z0f#H@x3t6pDS`hq?O&BTrO;>hesY)f8?W z=Ox+`BL_8edi(3ulgR)j(K;W>t@}7su_|FxQ+R=PV$4CO1Kn>yuHn6wA3@We24fe=1rmu100Fh#VP!44VmVClDmb1q?H=RrlVsOj&t{ zO?alAe44*3xhfwEdfN2rT)ZqD|NLw_z&+8);Qf1B;o4B1lSBMB9~ez?>B|&y$1xPw zC0ENk^2ZL8*Ico8uLl1V^IaFk-YE}yQExeH$EBOOjn%a7Xso6zq>R$u--kHoN8F(7 z{>N=(;B)%ef7;r|KL68g+sY-NJNwjdf3L1Lq$q^T){;R}V&gnmm3ybXm1G{PY&G@H zJ&dZ@{F0F2FkLsrLGQe0Rm5ss{XnK-q{()^wc?LPouq(^(Lu#CGQBMJtP7f0w0+Mn zibCr&(*unnIdRd|J57_${`(9t{g~ED_CLT&jy_&qn7`$JW9=GxNh?O3< z^L3D_UazI=p_lM{8e79G@%S_*fL781QjC(jPh%B9Gii-G8DD4GKpHf&(zv7d_0sB4 zFNkh>-uCMY%fq#=FRTvNg0R`HwDg0%p9p-Fxc3&5{(1d^DQK;Xq`y> zEi9VDVJ8+-AF(w0|F0o95zoEz_{=bzFY&DdNHn-_)qY98W~X=u>SXT1V)}UwU4?6u9i235*^^3!Q zmV7s$KJkJteMq<8gQ-m3Sb`6KR-(~<9z8b0%V4VurOM*f+KxmUv%~(`Y3uIe^O74~ z9Ze`zB{Rog+?B~ZGd)A!EJqW>Rq4*2(>nT)Y5Q0r^Dw!Gb3T>bnl#g0y~R&ND2Iw zyKtzO-+Wro?2%)w@X|jU{8O>O8)bYwBVoH-k^fLh`S0&?>0@-%d41de9mcNvJmz!Y~=tJz5P~Gs@A=215L$xtw1V0=oZ2gU;?m#MI{5FFgx@4t-DS%*(SkHjxSrMO zMA}U}vIGA++pFw*Uxgc-ckSw0Ta(cGGKg=}-U;SPY&c1aaEn32r+N)or>r#2+w%)` zb62=BIK(E!cf<+ygt{-2bgf1w_Jm@5_dbp8V2`XVB~3A;ZA*0r%bIPsC&A|XM2%fk zap~P8&HoQ&@kjyVLz13%_ptgHof~4GMLNTu$2=nzi!>(FC5AsTA=6Fggpq#k3hB^!?)uz+ zBJQ_Dz0yyYGZe<4wE>!Mq_A=yM-9PyqU8+H;^JK0&M5SW2EH!o7t$7q-4Q>Jc~46O zP427ye8O0QPot>;N&aos#XH8J@00KJF@mPPMt`*<6BCZw7@SJf{SZkrM*BQQJhh20 zWI(f>HzY|+^>nML;2UYoXa*d4lH>X-Mto$3OaYTRU0q%TX^0~_OGIhMP{>!mUF$88 zO8MCOGoE3{+q$?RTwjS$dJ^xq^>IUbHP)sg7Hd1_dv=H$CZs6{_FG#NHHja|ahMSH zObxL^V5nkgd^lmHyM9A=$aOVBETqC|DLeW~$;@zKY4AShm6mG@4)zzpZoSxSo1T*? z&*&DXhR2O9xfcpLr55$%YR+s8!jl?UDRsU=jCr>DfnVZC#|=60l^$c0H>?D;ifhb) z+R3w6wDKIQO%%VgD;02YNCvTYyQX8* z_@u43dLMj6K9@m4l4o79EabTP z9{Ud%9mFO4_Q9)p)Om2+b%W7eOO}4VeKb5O>y&I(QE^4B{R6$Yo8AqE6kO2> zjh?{^a#-&eo`TU)h~YzQ1tW%d*xF_<;xK{YAcyV;MR7X48-f*bY>%aqM43Ee+iG`| z5=N@Ulv1M3={F`GTZG;@xl@E_>PXl1YE{P34v2#d_xwRUa^ebHNtySEDNtO=Ak)&| zO37S|AdU;}JW83b6(9IgjR;)S14aP{LB>+KT*b)#Br# zFi1Ht=aJ1$1WR}t-&4oTM`O-f!6f7vuMZNkI)%r6miEU&POmjx zvqENg)S(C0kz)?z-c0x3fO=ow#9@5zm5Uu&+cz4Hwtp#niPvJl6_mATtYlJm{$K1WH3XR1E9#BD}O=V;vMoE?*^n|FuV=|MQ}h|AsiT)Fho3irnJ& zJrtuvH}19X!0O2WIWX1wd?lXg5kcic@0GATBZG|TK8rzU7ZhGf4zL|(`8g}2x|aT& zlIebrk+EoTA!PQe7RTZc16GK^iHd%;g(nhmum;DX3reE$(cxY5&uMIX)3v&by;E&s z_^`Ulms1Y(-mAu2_jI3~62$_)shpmZb3~LsFYV^#Zbb?Gf;(kpxEY3H3mp^P+(W0Y z80~by%9uo9tE&k^IRVZii65@#VfCZ4I1&~J@J(&YQ{gF3`ED>0VNS3VWkQbhR$*ro zcF=fE&+7FIQ7}3_I>PPIc(3fD2vLA^7@X(xYkmZ)j;2AMMnSe!}}FVV1|;9A6Y)zah;?RANvUYbF@*yw+~FW=Q3R_%BTFO}s1Y*Q*RK?~Q_JT`k#U&8ilGF)t_K+;gzd5hM4!nTB zDRn4Z>AId1qp_`NchlgH*_9|mfxQ$OBOV^U6mC#~!6_BEYPRt(9Ly zYpyCZxu?@|~E_#tj0WCe)Cik57!;E)QTE}%E=3DA3 ztUtTpqFqwX1~1&L9_9&8fNG}?;ck^-_16o#OKM^|%-KUB6YCFISi&z#1%wT~U`BAs ze`-`?CU{a(Q`TB&IXX1HNp~xCvM6;Vx7P*tk~X|sqpyonrNLy>A2Zpf9naulSXjlR z_|~DHvdCkj-|5t+^!@T$R!d*)O~q>>;V@L-8nigUDbyhbx`)I-XPvoscUqvuGiG=G zg%%rI+qM{vy|hKJ9v_=6_j&I9;nDW=D|zL2uJ{n0MPWa1(k1RSJ_2RjZ6Oc8PTXan z&ZZ*RrzrF5O~f<$v%Wi9Wwyk&*zT_q)uoslNDBTL6~i`q;HiG<){1o}$74EMBaLeZ zg}61nPiF|{UXS3|KCh5_YRld3<}(S7+3&f8TnRSW8Kxk>DtqNW$piyon~Ewus-%BJcdrYpd2HyK1ZUOOxAX)T(?wtI(c8^ zOVp#g!pqQFV?PE|t#pGKkL5fQd8Jk;M;02~$cbazB;tPkf)QG$vn9=JXIWM1{DfWEOf@-KUci0-<^lixd&c~mmv56j z93KQ;b#R)W*O-xgXCcywz`(YYHv zjoU=M9uiS_pwZ7!7gJE8^Vf#E`N|V}mp~6+dt$GFf1{1NeEJqw_Ps##igWAfR)e5#Od!Y{L>H|xLotd7p;I<(#&5%i zL@-&KBIuzE8#ni_UH5yEd_8@<@v%(SQoUYhYx;&&5F`L%MvG$LSec=rzO0^?yRVCz zi?7R4q3tYn9WDZbaLN#5@R?97m@ZS;es@=&{ccNTrUxJL$$(A=uK$_LZrrjme!Jb> ziAzTK;PNU*X)H0tAYnj^p=yyXU2$F#A zfVO?I%8dJq>|jO+EqEDfa>hCM6d;TPM}HzJT8**zxD1xGnhB4i2<8FmcDekRrrOhiksuF&HwvyZw9}v9|etktO7xrpRy`y z{%y}9o6d@*(8FlVWs)0>rCiVhG#%iIXK2wXGiJRO=rAQXiV{X6|DOUnva_@4C&8Wc h5V52HSMLRdI2Lp3womkxpi;&DqMjE) literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl b/env/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..07bb9aa7f840e20a6f2d274a6a499eccaf2172bb GIT binary patch literal 17503 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 Spa=s4I}oY?16bJ!!~+0REE0zR literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl b/env/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..2a076fd0fb6eee5601f083c6bceb40f087c98445 GIT binary patch literal 13506 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�y_7OKmjU)V&Z4k|4`-=aTgNCF#&7N`iKf2U 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 N-uZiS4E}TX{{X)w?}PvV literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl b/env/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..c1d44592b6fbbdd47f438e564314a700f44acaeb GIT binary patch literal 159149 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

      1nU~Yef8z>?Nd%IGxggQ zVUr2`{YRL{w!?moMo9e_Tla7^#=_oAx{Pg0<=?$}h_t^&{pOdK5eK zqfM;3i+I=@hx&-KD^o4i1<6HKAmQBm}18RBW1Xw>_66LlUpOElNmx2cUrR2+y2OoOiW{f9HBDb_h zZNlYB)gf%xV^K_Gb@7&mX@Kg1@-sxz+e@f0CK}7xEaM_>2=)!n(=SckCqUJ*_!fyv zFWTT%bNzqX_W@)u`4#BuG?#FKEUQG%+%UY}Cn#kC?VEk@TiPFi6G`_Si>6ZSqKIS_&l)F0 zB}FR-#&>{0qq2*bYZ=#nqKTu*zqQ>JQ)Bilf?7D$?X zweZ4XDDn@P#i&ae)r@A<}Kkg>d4Dz~Fu$q0d*Ws?E{%<KqhjXLLAYo1jnKbtkD{F z1`Qo{cl>I*jvANq8oU%xD-+U2flm3dyJ3HpkzFnaWl=|9Ahb-{KAy9=Yj>VB@5mcN zmWKp6FDYoM!r|PxKaLaa$!v!*Riub!70x%Y1$V8*t;wVL3kz+AgTjLHDpKc%sv}x z+b3omB=LRS)R(VQ5DEnx+2~_Yth9$FF?$V)GZ-5t1nV+p5W1j=o~o;GMmoIVa)&;s zA^M(h5?aimm;GYE;AqEq>A!1e%b{i%@pLOT{giC`&b>|rMi?gu*HB(GdWNn|CBpQO zVifJ0X2`jy3(5URjpm_LOTbEheLP8`H<9uE0e*X;1SA6$Dh02#NzqP9ElL;+@Om~1{7u0bwg?OrchQx9 ziNzh{`maU9X!Es2gHY?Kn!j1lw`Y)`zSN+=i;dNQ z!t-r8jzHM|gvN|6;-?C5Cp}0~*LEai9-I5lUqv6C#DL;%%!D1A`{lkYPZTqUZn{`c zYVb{NZbkWoD%;)se8)pl8%K8Hq>{#GowIfK2_4-c*d(fA z*8b2KsDB&+|M`kP`-E}EXcNz!U1wO_CHY%EtjLB~L&+t5x)~9Q`J%M;`eV%QGfM4+ z_vR(Sx|br%G;nv<*HH(iD!W{zcJf&TmozUX6hu#`UHKMad!3jpMa68s)-+vkuzm(N z_UU_pxJD`BU2CmpW}5wq#rIvXgkmU~5C3Lw)^uvkv5t~RF5xtD$nNzE{_FifjUfGp zH7ek==*r57`d)xF`>U&bqBXS9H0Oq3Lm8BvI^Py(qGJPmQNFK_xo;v$K}REjWV`WO z>DoS?*33WDi?{gQJ3P?Pi7Lph6y?DXR_=PN0Mb-sV9pE9qwA<*4FeWm@kfp^x()!k z94Y8nn-=?8o_P;Q6MKrm#8^viGyO{in)<bI zpHft*uNeiqv)>zW?fMk(HMH>%U>MvAS;Q>^U|4rgCo^l9g(aja)=IiU<8zpqF5&TNH@%qnk4DjV;3E`+>^!ifp+2H_~BkXnw zI3D7c_tzmm>+Qs-|AG0Rn6Ikphr1LO0NAJa@3GSV&vMxtI69d){^z)IG;Qp*+mU{5 z^aQJsB&60ZNW**?FNBx6xBpPk4HTSXjG?t7yQQ^|K$Emw_7wj1FncFRNLq25fzH;l z;LO6F9%mG&Rjuq+7>YP&Mx{C{Q;|g&cHXL1t&FHfhN6zNuJss;3c4>rRY2`fD86Q* zy?l;@c-6{H`hkXqZru5}6Ni~)@?I1b=j@aoNWEsRQH|~TQkRsVV-sG$NUz+}(Zg5Q z1W%*+!H&CkQ9o4}Stc;p4F^!l>qfdxxv6d?bfc4sGQ%35g9YSeUYmPRU1b_hS+%;t zM#8Pvmca4E`)n10`e-p~;IuFE)@XRCW1~j~H2{NO5Mj5mN+Fb9cScILka3s7%oq=8 zX<|hF&eGA*LF7 z@2l_pBrz6dy_5Y0I&LFysM0{|nXQf4-UGRn2&>{u@&oTc<7DVS+GF%0AlH(Q%L`?m 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

      &L9{^2IpaRPC-n? z?wU#*3CS1ASF5V7#zUs>4EIk`xJcpMb?vt(*MN`79T~SXwf2>XC!^3FCNJq=9_=MM zUE6L|L@4Dsl73NT?dy=jZO}nDwiXZyxKnu!FmDKxEqo0qGML2UP8LXF&K8t!Wh3hN z#zx-n>()s09cHk{2Pe=<*K1{T7N-e8-;PjcjA@`H4wO@(Tm#W>?4h(~B-NmXAoI-+ zn8e*m)9T_TCeWd!kbk2oGE3buz;@nSTBe8XaR^=^2_k~#u?#<67ngiw*?o(wAga6r#>e3XRe1;B*)-Q>iS{k6`=Z5?Q$_aTMx35wUn zd1CK3ccXCzwlKAaPHaYr>C$5n%Gy6!43vSq&+wXN^h(OVLy_%7GAZ?(%-0j0w#Na* zofa9-%ip7(GxGT8qCE7a{BOLVM?vGsF1*Ez-J#^<t7lq?o}5yWEOpzbS4*Bymz5KTt16^rd)NQw?}V(xuINpne{ zx)t(1h#)L+YP7EUizhxococZO0_>VBV&0O2#m_3q2i^YW+)DE^Zc9=aIpJ|VV zthK%=n`^=SlUv)3H^9e)4fxAW0RwSY5Aqe#)+TjenMv4CJ>~hvs*|1(lL9yz$vdso zd3na1r7;K7qdI_g` zEK@c|2^=A<0sO~HTjh=03e?bZx-0vLBg-VdpU8V}KMv~aF3+7Ea!%wk;v@^_QBQyk zZaxv-J+Yh~WHL}ruBo(#q#v4;8`jfC4!jR`x)s=B7}Xef{_o8xjj8-7E9`e;FN7<~ z*_pgJSs}U7wPqvLP`t*w89g76cNJ8bxT(%T`0!J&Q<$f7--MM|oim1P{jBoQ8~Q3T zywG`Hyvf39=Mt|c-&q~LOwbiW38?8zhxsBy-G$X}H|4~?3XpLq@O0?cx`tATIW*7Y zw5I5r4S9M@Zev;eb$os#v#8m8U+HGoLB#Tg1BX8aK-*0 z8S2GiZzV3ZODh_K=~6=_%r0>vF>Aas(z^-u%1z4hUQr6vm=;ER@@C-5QS!7$HzqRr z-M~DbCy!91ZUah0n@FA)X#s1byiQKO25GOn7c8!ms`b7K72NJ1Q(&9`2AZraXrVzU z#l-4?25hQ2bHgfMfp?nqg*j8}D`TJ(-Qwlf8%=u2_Q0scXq13M!RdfoF^O&*Ob}eh3Bpt8^UXL%?XkiIhq(_h<>s_%T_n-h4D|! z`6{S9qdr*qJk%X*Q|3p>bSKM%#5{VXr+?c*WENuO{0IiCGk!_8M-!KP_*QB^LCD!A z3g3>M&E^xvYR4%Q7<5#0xl%NucHDou;Z0LgkH*luf+Z50crJf_`inl!E7|5%l(u-i z@?K-N>_*PcYwjyVcX+#Z5|FQi(tC|<>ncbm4OkNyj$QU2EkpUyqhIcmfgPW#NDi;~ z%7)!fC0a4pheh9rZb&B~`l~X35S071DYc!e6pop!^v?A2J%nWY6{_}5{&gpl2j9r5 z^AW+u(is?B^a?3FUpNv;+-oP0j3jkPK$z>>uCHKs)+g>$I(2P}8@Uviq92lwYY#Y^ zsVk;{JVkogj9aZgUXj>F*wc>1Vgl)JPbzrUaQg7X_{90fxZ0B&UKQrc$Hk&3=%7cE57tn z69m(aEo#tV%$nn&G*{W!ZA5~UBDfXFEfO)k@@4Yol%m%1Oc*6l+68SY;y_F|flh?+ z+YeO^oOu7dX$s~NAKNvo-pM;~+-ZGbP3br7_zG>}XY7k8ESW6+OF4fo7&Y=jCTuye zy78gwd*|#g@udeoOVRNKiofTbRdKpFVfKn+h*L9SSjBV>)0#yzV}p8BFR_RE#JJbh zDQo(D@|NOr@dFYvD+`Z0ii=Z3nS<;Tq7#R1HLx0Es7Wa)IkaUB45#7S86U~Cq!*EJ zRrR=obW)Mb-5H-a<))rPp7EywrceP0k}Pwy?=V;qxJNhxkxuT zEFUGzj$i6-x@FY(m+Hr4rc^Xc<2CL|%szb!IR=xFjd*e0wwr|SfG6{Vi9jg_6*J=) zs|AqAay?eJC_|y)k0hmq1hH#3;&TPhfrYsWP+~OkYu~^93Uw>GsXQv!%DG>)t-MCw zi7DYmKoR-*7dzUKUrS;#_Iu(nXf_n1pPtj+6j+T6XD|sp%aM4}ts-S_caT%DAgTr( zr`v}NYm);8^1l++#9HI}E0+M)0JVq3f`W>~ZY4GwjuMK-7IES@ENhS&fY)t_wfGXc zhP2sFun&6>xfTmt#j@VDAd7TDsB|hgNPj1@v>CJfgzQy7C>5tBykVE?Qu z%$#5;F5;7Zt59PzqwKT1z6N1H=uUQ zBFB3wEaR-qx@MR(S{|Jdk`N)G_SH2y;;1*awyD`WadvFavm2QnqE-*PvfS5Wrb|mf z=l#`8`6~3Mz$3%^CbK}ov^=1&W@0c!2Z#=QHAC%;yJ1h(J5mx+GnVC&ELm*C?L2v! zKL->T*HVU3m9+f_ML{W)@OcU={?fKb^`ju+ zM=nHhyB=&&3WiRHmk09tE4|XrUTFaC}Zj8>lU>+vl6@c#YZK3rWr{%}RerPKQ&a+wK(*G1D7x@S8V zbDUnQZ_oLgt4H{NFh8ks)ML1QR8&7}jt=1PW%oX+ef^n7P1+Ugg z@W_?bl8KzlW4fEu!wD_@A!ts5uk-hb1@3~5cHGbn8W)%-$QkS`kHI+Obb-@9uRqpCMhA)_Br4T3-$dnLIHvfHP5-0e z5~FE72p(25S%I>TW$dk2+}h>p;Yc@y2AJerrk%s2=61&{s(-&^YKw)ex`3)CQ`+gY zXpwYfl=X~qrNy$?-a7>u&zCha3?X`qUTQmgdt~L$r5>;p+K^e1z=uI`Ovpj>D=Cvv zt+TY@wXMm&fBB9&7RhR~5+F&De~t)0GP8MdU5)VX%{BZ3^;bXjk7Gxi172fhg#MIS z%$YE|N#;S1RVb+u1(9Sb)4Z80iv25gVi+(98(`)u=;30a`hs^bQUW@}Rl9>hm*f7!^3UNaj5XP(1nB?v#DmkQI}G8K_!bMJrtAUCG3U$ z99h{8H66M%$wh9yk@F4r!AAzK!;0G@^b01^NI0B~t=FLGsZFLGsZUvp)2E^v9xJ!_NWwvpfWSKwx9PEt zcavn}M`bIq#M}#D1C{iY%M9mWg3=pQylBQtkylZse0M< zZCl$G>s?VbZ}gYC-EOO9YreKhLq1f82Fv{I{0Rm;_}tLFl~lvQW{epxI28~(HE+ZDjx z&EJUZ=hz&I^)q&v4I|1Q*Ye;YZu-7aeNop1KK;Dw+HNj>2P^rD>=ZnCS9h`~&$^K; z$3_(5vr6?{^>jp7U$y-g?XfB6;_FVnRP9my?pW33XI00ei~{<7p>}#Q_D{us|G7C- zO>=oB9Z*Qyo&Vg`+)Et~xM1ig{<2o#vr%A9!>`Z%u5C1O9K^!@B@NMP2-n_w?$WA<%^SRv0{*Ux*x>_~G9yr77&6_vtx=>0uNLADJ>F==L zv->xUN4WuJQZ-e-T1}O#H}HemO#HfBJ@l3f#3QkP-l>1h5a?tsCd4fY zG#v-J!1HD>GKGPl^SWpzaO&F*nQMI(I}m9#_r&=h58JLNv6+&y<;b90*~qTw;en_D zWuo1P?$|8)YA<0zNK~>}SHP+C@TUrR%CR>~#MQ#GMNyU&;<*5%5o-c`>6xC|V_ll= zyW)k0l>i3V%MLu!$B1N(OHOX`fz-igs-RNC5mSM58APXgTew^$wdE5T#UAhph($ zBNf>7BdUO?`{ThIX>PZns8wtB!T=5Fpz8c-rtoiZZ-5M2fD=NRP(VQds8DT#)R^4j z*$A1ep)V1Mt5*mBeJKJEOCaG^Awem0(7VM`$J9GmnCUG1b>Mm z&4z)IRjdHpD?0;!VXGu&Y81t(dUj)X~r7G5SOk01e=)_|>l&L;!6yqmZVR8AV+`EhF&^zyJ-dA~tq9^e89TT_~QNdUw(eS>-&ScfBSX|yMKH_^X={7d??-m ze}4<=GYI;(pM3JkuWY{qtlz-{bnl6sPE9X@sC zsy*U!)YNZff5{e_g8~GGICDwWt@#h*i{NislY96Av;~yoAJ55ga}BMS|bCZ_VvhvVuA+0K9=*tkyWLCuh0G?U@HLd)4aRG^E&mhmVt zsKXh3HlTJteCUoi4Xq2B?!;49E~avjxaGP4V$w^}GIqswd3H5=<$*QL&3)PasZoyn z-PfWDKlflp6#K-i@6p}{y+DCgUoTK^1AP|^@>;OX!E6P1iZ{PgSM|LF&ADBQ_ZxxB zLfz|3O6>3>X@2f#f~JA$<E*5vbk*8M)550W*$ zh*WO^t}_#Rb~1@i46&DJ+Mn7E(Xu^a!+UWP1DfcGOl|_9;4^N^wLnnXzx^hfo1rA- zzZ{YI{rBJB`*eo;6(0@(CPY^k2Y|RQn!Z}IOog`l;_Sc!A^~pk1TwBfWS-;%k3q%O z5s)w$or6_xX$;u9Li4(69AMTJ00anV2V3g^<`!tJ6TA15rN35h&JW(o{D#IVe=uA- z`Lku^Lp%G(?+`M1=ny{gI|LjW+6PY}0XRmR1Sz z;q1JY?hb_wVLXK@$hwwAb37zku*`-Z_>TZtu5?9;aliXb2jLFwoG-A0U=IuO2QL=< zgJ>x@5v)nGsRzTb{GYARh6eWU0QttJ^I%1~%Lfwz(ieO&k9Y{&@6)(VpmrvK#18{M zsv`<)bNZH~aIIXhr^0#Q9~#9t*VKWOCl@!?-;SGsR2=uJbpi$NFIaF{Tz=+PShjKQu)*YrbO?4Qa4AKp_B zJm$-~J;`o5iwuv6aqWJDsZVuOXXZ{5fj`bJ`=ejI%AY%bIM6U>7;^AWUs_z)B!NO_EFRXKEX@ z?&zG#^j!J(g=7<^YrvLZC8{QI zG#WC{H09`edu>y5FoJVmZNSS6o6Sbq9=#OGN48#np}?hiux)E1KYEM_AIpv zVed^w(>fZj8Tr!r?rT7l8T+b!w&(4b(g`Y#UxJ55@o?GEbr*ib5*-dOlWZIbZV z;lCqM-{t3ZO34nVX8xry=~GBf66#Ilh~!Q`1_)?aUYaRJ7bQQqjlagBSmXdvDCcoh z*X7_8hlh88*#}@mYt=7X|&g zqeB2DKuGxb{)O(q!9^;RhHjul`q7PKt4HFYF^D28I{-s-*^inCaQiox4&Yh`-ID82 zB6;xF<(eK^DW;>>H-{3M7AUfVun?azIM2E{5jB9pHXaXn&O|C#3~{9fVUS{v91}u) z!|l8-kd6ayo2Op`PdihEZ?RxsU&C`Krhqn_1s@y?;oAQ+1eisKAv-Y!0p5mI@N-1! zYVT?(+V-zDtL=_)6EXESva_5)LgA71^gru3@B0W}ES4a70m5*6>peo(dRoR27WMHV zX^q*%BuVSPB(R-IX)K_j)#MRX_zc0o0e}mvdbpQkcp$r$_6ZQd{2J}2334-j6@Ivr)q@5L3^{3YY&<}rjHJKjZP z#sV%tRb}i29B^nX`MQ@ccW>*^C_>$*W#i6 zsDiiGu%Vi6z4mqC`(6v?dad9&J5497ws^$Do+lYvs({SN+$?2t*bwo){2y@}EiO@9%`Je@+1fau^>a^_Fb=P*RcWu!F|K)Rl@3wiZy z(w!KBVofX2_$0D;;4J_7+z{SpIU%#c!N=D{;CLaK1hGb9k#EvVAV=Z9qg>WdId3DM zE>A=@zA6I5UJlJJ;=yRNv;u8)zC>fPEN8dQa$&#C-eL_V1%n_%6qXBTCd zJ?zJ~&8)JiQ<(Xkyh7fp8KcXK}*%ht#GM>|gS2npo-Ri!GIyIs=HaB)u( zC@{wC$b;4k4l$y0P8QMM;qoc!9K|o}4vQO@AI=-ERuvF)GEm&SbXsJG*y&VDgkaWK zBf3R;>rb?~+s7>QVwurJ;N zoX5Miz=EL57iZ|1&WJ;Gqi@ZFfu&+5rvjZ-rec8FOu(2dRy5ufE&Pcz;4}eU%9suu z&+TAyl*OZCk!VXq(QQIZj+B#x`FQwNzr2?BLX^XnDvE2C9N1aJ8wuMOxs+qK0TTYy zs^)G#L>huPVbPEV$@n7B>r7`yT%XLLm5VttJDV|o;R&APd=^*hIL|oL^`P}sL*V7J ziQ7Q4-?XL==qL20ejk~2%WwXh{ZBI(_)6{2V#kF7_&oxbK7J8jV&sUYy$EiDHJfT{ ztb=@wAqe6EJ>`nqbiQRw{Eq|Y)O2R@2Wb)w3hKK0m*puo$@Kc?dwi4b$II#_V0u0SdU-tn+dY}*_$)3)kzmH*8n(Q~Q{1G)wDP(_viJa{BW zI^NSRAvLagUw?s*s|ux?7Ih8QY*|0XM18(w@-tqa!#?6xr?YR73YPbG*zuY1)Ki;N zc_M{lTS*(rpO%O)hm-fwP^+jw3yGz$H68A`E=oN0e2F3v(?TtZ1WIzg1)JHTH zsIfn>ejFD2l0cvmiR|*DO+gQS$3@tRzEmi|*%ZcP?+^Xq{Qe3$MqG%CE^%@~Lu6;B z#Ged0j!t76gn}JCT+Klo@CLIrcIjZcbH+lr*{trVv?b1^C0cEAkT-Cx4?Ejq?I;WL?*bOKn6O+N8OaR-a6W?Z=0&Yfj1b;B)@jQ?W`j zP{P6G^o(xJjqGtdzHmNO&`MNJpmVq*AP|6d^Fs@o(Nmh)+*aJRt?rgQZiwz=%HTL^ zR~pE3H35An%zBiAOW9a%SD+f~e6*Zsb%E{6GVaxjaGl;YF#%_hRL%hyIetR|(rZ1F z@~)Mtiq#!0hnayD9>>#xo}SVSHn0Lm6duEO$J&PEbJ5z>FYWM183Yxc8V83CYRMRV zdLZvW3sNV3TSyyt^lvP?U2tgT+?bRbnFjXCd5Ku{lbY{y@tA55;G81_uceTR!6n(y z;;LD9rL7R^cA>hzWGUI<3SH5`BnjefCmw9h$J3~3M+^<)xSHWOFINbuqpbT$P95I8 zi1ZSH!5#FP5&^4VbqdK7;NZ$g^}X?fw`$h32xL>Sad1WP@#x=s?f|p9FzTpbB_9t>kxto@|~J z*KHyUg;&UZp0R8I zh=T&if|74PZYm;3%D7UCU9urw0z6ixtifJ0yC9P=hI>bL}iGf z&w&3!3zcix@xYiPwpER{q_tzdX=__B5f6Y-GA%IHUhMN zjEuIC7IWKM&!97A_{6jnLDL3)x2m2+@MHLodL#2N*l*NF(fUq`AtWDqUd5`5t{UYu z(ijS8Loj}*o`Kr;fB=%<1Bo;au1s_*Ff9$?=dSK_Llko8QajaY^vQDTao4SEW@= z@jSUF_3Y|ibZ3>o=uiusv|3-qLPvZ#$exOG7(H`*jx;F@(f3KEBtA(Ux*-;MHNwI& zO~rFu$LsYrxJ_=|eneWvs*Ik7!+J*A9=s6K zsUD;{iF2=?DO=vKZt64%HXwt%F>_l|dQSXcWl)VUi)($tQvzu@7QaP%ko{Fq4S&kt zBpTFwePD(NxCU5FM-8ApFAnM|Elc;w!~oi@xAYqNw~Uff~?w4=2qe_Eta~uj;sP+ zR5!IK;i|c7UiU~6-4pq|e}6-FT`Xejx&eeSgQkR|i2Ok!PTWE8gftD~YwD3jrQsFE z5m{h>U{ys*u8a303EWQ9!MGRwbKxbS84+qt;j-!`gPleMX}%f|$2%SOs+filQ6}`c zdXmWEPt#qQ_sCT@O?8%ZBscX|G;<7lSm&9$2#g-$suwk=W4v99{!*`Ci$lznxs@2F zM8`LHf|n_KnLGEPsT?9oq>WXMGKM3s+B|;g z1SNNQG=E1KXf5?IVny7Jv!-nYc1NaA&3o4x2dW|SO*;$_pi)J%mFePy%f>yVBSQhz z!;?kMc>*^%VNAR6dCRWR;~$7+%$_09V}|rF-9l{b8ZU3x(?9k$kjF}*#MrIeND4l< zn~TVRVFj3D2qse2M8aP%TaQJ6q8ZbtrDTnSaU;2(#Z?X`5po4n)uoQ=DmiZ+&_at9T1GBT?d}(t`M(=Z|QH7T}P4>i8MWnCozEGIHQA&-%eJ5 z$0})`aU)}Ft$v2xQYYWt0|M1i-io(Mn`{WEp4MWF9$DT!8Ff7b@;joRN@>oR6NSWH zj%kOc20&NbOZa#i(iLvcX|Ha|$bJ9^_(>j+9y3%ik|=Yl8>9EmknA9zltj{!55}kO zou3L&jrlbi_4;;|x6UkI4jg6+dy2@Z5c(tX4q`yoL4|)Ga(8GO0ohM zq!>mha=#h*OC@BZ3CCP`lJ6>B>D;Bt_oDiKAIHwc50-O4JTHSbrb>RjVO=G{2kU?%KzcM=_3YxG$|*VyJf{WBcB{9%NI;2ogw$6n*%LC^Bv#TN z4SZaXd=D%3<|l3MC?KutczX=l4O0Lk3@`xp>r$P3ir)-MhF8 zvib~K-MHVL*i*}}w+E{SGt!E2pCQ# zbnjLV?&D*qXIyYW?MO@y<8uWleI!xR5lu~ijx0DeDh(0d06y%LRfrrE>|MVQ_Zy(a zN4L5gc(5+y`K(07gA*Y|hAG(xvN!Z}BfIa#n#(u=U+!oyol<3)r zU(Pr__8`G}qF6kN!k*N(*Lr?HkN+oeAL;JR`-4dRxmcC!GVP8fo@)QAVKs3T9qB6? zW1>NB`L6tci@NX#`wm!kE1_Tb_BHcYyRQ?Wg-?og)gdwZC;_Y8cI>GBun8%faM&aj zs}Rj~^=GOw$<(WgEs+?XNG*<{+7Qb`!acYt+qHC4mHA^e>;&?%o4_y4{SC}2-c*lq|l!rcdihNw7HD|S%EXrjLb}6_A#>K4k zOiL`YLL3G9J^t0bMnw4&L{;^G1jK|ZV@9=#Ew+f8#+FEPW8n^5cNKd6Oa1k$HW6_z zA~HQw(u4sEo8_3*w^pbklKt+6*sTYte98i`6l6`J&ce_Ilcdb2x#hd zJp|Gk1k++K^TZE&5?!j$B6b58tI&I61aV8dzcyzdsoeoTv&^VAx-Co^_ovm+rY*C; zb&xU}NoQwdr@pDJ=AthGsYQ9Y+v7+^1FznfQ z^=y~4SxWcYq%Ej4Qs2qVWT87P$Fk408J@QLUvrs1zehv$Y1X4Av=sE!o=>x!=ui~{ z!h;=Bq**;*?cJ5EhAGOSF$~5F54`DcHwcLBWf4ZO+XQA zdIkOK^9<0Sr)Xm`4=8T~a0$~(p>@-cTH4+)1@7EpS^-qOBRlvI;ISsI6J?;3^<+UM zwVJ9xZY7EC7H(bj%b4GueOCj{qdCPtf1FiLYzf@c1`KsN zAa*r&%K1rLFjayKGbbAW-$ARKZYH0(PsaScOjY3xO`e=V)z5d*8r9o~1VtB)QePF3 zC^5X4YER=(hno(nL7iTLc`x6znd5zQ^QitGpF6LCUMA4ICZUk7_C|W`6?c`qV7ax) z7HT~if50yvJSi)v19*vTvU5IZxRY+jl$X&xaUax#z0gn83Ug}mn2_??YR+;1%-Mhk zwRk!7IoG!vhWJr|$*%8(U@-QshP?3_dHNj-+_prz-yL*iXjZ)mGp#P3Pybay?yOY+ zIQm=?HiI%H?BL%!jy1mq==r`$Pr^Xv6zkL6ZZB@WxVPLV!EU5<8cv6Jzdcc?JeUit zkuoNObzksNpvfkouIuRZzDm*5Vuff-zI5r3ATltAxyTr(Ef4oNc>y-g#2PgVVu%t6Kg{*45a$ zO}cb~kv@0PQ>{HMxrGOsc3jS)R>#ng3!3u65E{P%&kLUPTWP6#i{*{}Gk2kP)(h;nN8UALqOM`|&BbfE6 z)C8tG3dn4bVYSN4TGIK@z3Yz+-nhd1g(Qv?$~A!DBH^EpA%K70ZtkhC0dntV9RwE5 z)K+k0pVgpR*2nM~9xHgf)~Cr&)6d%&tMF$15(AiD7xy1x0KGupRAHlTN3bsYa?|Uq z`hGyz$jHUYfQUWo^-m@J8lSDnt+ulq?}@GV9+3{qkXNhziMp!VsKeJTQE}k=t)R2; zGijX+DQpkK7q`SvIPEwfNA#V*Qt=ur=Rl(qi=YHTc#BN|l)?Vf1*|LLLiWDaqRRm| z{OIp9M3xW+Y_pYPK~H84N4ZMRq6h=XN1gzpBmi9X2ZmJzaN!+q9Lbiy%{(O11yhSy zH+^FP6{oJyjF2+!7worai_IO?0}%VYptEjqZ=2aO2a`6Qhj{_Y-jBKj$86(b@`mx( z7t|kJV8&!16RQEkLl(h53Wwp%j|L2p5L0e=ACaS+ij+i%Og2P8nFe-e-9?+ac@+yS z)$R-Ij)HK1Js@}Rl}{+(Cl8A7=&y+%+$Cg_xe%cR)E2VyoXao@k2nFjEuQh0{DOG( zIkMqT@Lm!0Sx{0;|DxX9n;PpomP;hUo2lyJS5sA^sQvfNh8fw^+W^&d57u4FkGYqz}@pNVokqygHih*)0%udET z>Lkg2D(M8`!HDUU59?D1C3<1J&x`OAi}>=(~rG4 zvYW2Vzo0PO6?fM^CE_*9IAhSWD{F7$?Fz=7|Gl4 zSTZn?n!t&cE11aX^pPT$UQ^H`>R4S;O&N86OctBUeIpv zxF(r!-lH+nbR+{FNl{nkAYfpgJ0Sz&;QF(K2FgM7o-gwQ;^L#&W6;YIaWD*%1xA$gzv*PCx(e7UX928N<(5H zdESxjmi@au;0+<&vGNwJA-|#vifA7F7h+SgF4!yi83Aprn~EUr62j_wcy7A&vHr5V zVAL_M@f2e_HXGpO7a^7N`1}oQrI#mCNL$F6uAu`4_%kBb3buonP6zS!1hG4?0bI^N zy9RLw&LVCpV5>_Br|{(3>Q51xnzui&>cP(66%3?s=`5ldvx^!|{Wo0UGA@4hQP zJeeRVF2a^JYGM6n5kkER;O|d}O@EF%|2Y6l!~q)1^XRLfnN{e&uR6R|XnsdjBso|z z4~-o1b3EGa3F>pNdI!DE$%szJbYoN#=*+id;2&nu}50bTQO6_T~3~O(7dquFu}T z(?{0t_kZm8-zH)wXU9KAzi$11XjR@wL8xEtT=c~;0!L80mCh2GQNxU6eCQ}|EoK-jo9Ua{@Hu_i>jT#ZmiR@Mq6O3qw z7P<*-fu^dlEUoZ2FV=Luu8whf)J4-6^%g^XFPlS=&yc9zWG9!j*?Tz6WY-+O(gQ8^ zK1E`oaDBWX=9Uy*G7^B3D+LfSk>s*-5*7ZZjfGu3mG_N~vV~4(75b+@%e5s7Q=er; z>mK$-XU(AortHec zexZ49oCfmV3qq~0HrkVx9>GzLx~X%{9;^wPq~O?@XoU4wNs;NpI$a|y~ z%`*koVSj&vrvmq;xMUV*jAu)ukrmip@YTPaOEVkpiZumTYNzZ08EOU<9HwAXbD?0c z6&pBWx(c2;k#RvRwUu(pSd3G~NxK!u6nnIV6W)hTK1q=V6I*e4UMNxRt|B4hck7=nqvMn8k!zk^TXqh+C;xK#qwkv9P+txd%(t z@W+?h=6qSdzf9iVkGB5$Kc(umHT7>#ovXFA+g;sW*F3IV`y@+HeG;t=RRTj@v4!&x zPf;}f&@{!!0uQN=oAAO#au_k>_`Xb!!#M&?o8F)x)dab3YQu@BmTL+DDi*VBNyvs>h)Xeo5 z8U_Ktdfiw?G<+Udh}c(U%b(?i6Q~Fx3EO{I;*J4!K`V8pcp1%oaHoaCQ!#|7ISPCS zfs1A*V!XLD2LF8cS;|T?1JfmtaVSDCzr0H62I~5_g=K{6k8ccn*pGlWb)(QFXhlsz zF-H69xu&CnG^HR!G+!mE8#cRCX!)qlH0`5`Zk0BN+krg)yx*9Zm>B*~M8EL(EL(=I zhl3Ln`RL!+dz}DsJY65zxB`*k@^B=?RP#WrcbmSe(Mf9I5i9ZG<8^?b-5@E4ZaNL? z32fK>i7cKxNDZ!s1!G#I`+UQpD&2PJZr)$N*#2--^9?GU8Gy@{Fe%8UsDwhGM{o`o z(ANQ`Rc1Wk#G<(lI+Xc&c_E6*@Gu91E@_l^4^6a89)$gFlwF7beqH+hOq~fNUEW1y zKqcY`31$EwnV|-aN%zEl=tshZu6VHkKWBeWwdDAGVPmbV=rVsRkt-x?Db6_e+FPFusa-3xpL$&g_=95oy0&=3&;j7uynB z`cX8LTc_|{(R8{wdc-z45!!&x6aie1-V{>KnG$-oCKkcT8yfBr;Y+EuD}kv~?d=I?{u+?Cfe-`E%W9DN zB#NH%AnED4Rtzu2A>}j)4k5pOU`8qq>hS^MIX^#t?^7HiyZ6!(`^IlQ0Vw>EMx zU3Ce2%__UpK|{y&>8WL40WQWxUVjXPK|Qr&dy#tC8iXiL_7#u9#d$R>8)h7}@9sAJ zbj<~1yZh1Jt^D|Q*73nL>j8l|Th8<|3R63*tXFrLR)813#pjb~L4FiD$$$tb7`7?G z+IT|nObup&SHZ;&5qfMuqQc^5=|!Q=h3rS%z*Tjy`&0I*eTLpZ$lCbIzy=~eiMCgy1KYAUJ(j>*Aq>&!fW3o*1sI`C z$1S0G&ZFZ-J}zM4dcK8x^wRc=0h#9BUXeRF{uPbngL)lI`Vcm?UD?G*ls5cJ{78DN zu+CJ?C9K(&KtG;C5 LVxDP@5(~<{r81SzJeXf;`wQ=3ISLo_WBH%MUyJd$5Al#62_K~r_J=cmJJ#cfbAh<<3 z=(Xi1;=YXY3_UOhCW$+@3cC^kalhjF?dSdQqAUGQ$WFKC-Tu9-8}HXygKmUx5tB4Q zT>>Kn00MjXc^Gpr;+}6(F}uLi8hu|u0U$aTa;iE#&?*A~dJ_aPQlI5eYY?;H{;7Z5z?d=|mNlt|&&uXuEmfAL)g^&uh+vU- zNIdWd zlAy5m?9Q?Wbo3~Xw^HcVCti(z87ZmrvWC>OG1y3J)i9M;RMLWwI{Kk86W%5Jb7A3- zP;AxI5H$}(@&^!0=pmZoU|vj&nU+G79r}j=Dom?3M;c3}t7HA;=u76@zz(_1gj)do zuIt>0d9uZNQ)9F=Pk@R7qb$87u%$-y%cex87>J^;mVD@G{9qoa9{XvF1#VEOTDCo) z*8n4o0WItHAgP>tbMnPS8e5u-#5cwVVFix=J-PX7}o`~ zZ$6e*Xh*qcWWAQR5xe8tL)QCA^r;2t)-jPRE^`eMw3mPcrlFcZB1``>{O1RJUI)UN z1%TRbsnbUCj7Tp__*YCSRcjx8V^nbuldWOQgq-tic}y9l5%^=pEOh+pEqLSo@fZTtk~ zCB0iIAqVwYj>42W2~R5!S|c$tSgYIm&|WM_+gmi8z7rcJQoG$kNDgst2Uk^-&(+wi zE{-!O7xUUba6yp*xOz>EVe%7}%qh}yV1l%(1I_XUwF*6kr!+`3z`Yb}HN!M7%huH2 zkd!@*36`udoytTLn7@AG|_S{=lYy>jv>i*6iNmOoK|aArpW zCe>*c77~FW=~N)KfM=McXsO>EA~f1lip6CzAAT(Vd-|u=|=$@S=e1Dd@dxBa)nN0-MH`m zevUjH(<4`|8;mmMcC=5oyk1cfWNzmiSKK(<`1T`&T^yl8ncGz#lYz6G6N}+?ho!@b zL2_4FYdGxykjQ?WI_)E;eR}Xr1$vSLHkY{>VJDorfP)u<>pU3fh`BNe5<7rBs^GzW zhOh!w^hM{{icF@Y?aM5WWPam_rO8`sfZrTDV;(N&dJSx&Q%SU)nF&`I_6k-WP&f7s zvazR4cDg#DhS+-kg^Y)mA~ZAi=Bpy@6HD(hht(*5kiS}6M-f+6n*<#ip+~ClIP5uF z{+_@d%GkcjFu+VQy1*#$p(^Z|ClVO zMuOaLh(VbAv`8X@#_sWt#y^n3w478f#oFA`!cI9P$hbTqo0XKa!6xAyk_=0=(uBfk zTi(+NSC_|g$Y((+LpGNLfRyW-CZkYAj`KA-)Lfrc#|m5ZTEI2{P>LJ<^3P#;c#Wfv zbSz)5K7ND$c*^*>dc9%)btqnEz{2<4Ji{@w4Ea>y11u4i7{s+u@;ao{Hg9u_vFl#r zEAzhgiJ}=#Wh+erd>U;^!%=H;$1T7WJ}$IN+7Y*M(FpcmH=oj7&4AINdQM-SanbXg zE8&|cXssG)Xr2#Y&ja~lcn-5dja?C}pV`X43F1n-TvegStreXv+HqoN+ z=fH&@Hpkk@c=2Lfm3$QXbH2q|9J8aRG%tRwwx=}O$T&C|NlaJgjbV&FW(GB;rq&A| z5v&*4czxO^HXX4aGN6bj@WCS`@&}+BUY_zV_h(dJasw<{BuPFECd^QceYJU%UX&hz zpSS5HyoG!tL7s&=5>J!J-vt`vUKZ8rx130eiHO$kW6&YZ8sN~xiaM#6gC8=IKvUtP z*{$6WKk&Af1ajP78+n@hI6WxH1HzX;B5x$?bQgk~4C2L6`M^6A(JK#|`X}E)*9|=K#gm4&g zPVEC*7c0$p;=^y{X8ArgH#8dsyf`ViO%Eh!xeD9~KNG__Fwxjb13l0hbETD?AiM%R zeXk1_zYCcM9hx>YuQe0h2P%SF0_$<&!s7Kk@O*TGZFBx~d%VTk=iYBQyJ`{SRh1Pz z7>1dbK)3*?V~yObymw{wbPNH5oBd&kn3*(Fr{DP!I6?e&*e6q}10$p3&+@^Me|$-d z<+92fXspvTkWEyzC_~AF+d1v#GDtpdZR;1wOeE0;UE#_z0&T(9ep+J@@+4JfE-VzI6HmAzd z&fP~9O9MJo$jQL%rsg&PYfx?hN|4ZOEHcMr>oi`^%0@MgQ>~-Cw|~KEYxYJbk(^{Lv?bPQcpD`fRAo`!K*K7$F#SmT&5B~|cL^U9$RDSUybY+xc1NpT z)JhINtr=#T!_xzAikz14=xyyt?GE8zzfunT)pnCydD4(U)0X++-P(h!@CrwPwLKP^ z0|1*hFf)+o7{u@DBx8US|;-XBLQGO=MLK>jAf! zMdeWsFOi9pO!WRrpW9PGm*4m6_}&vgx8bl1=__&n@zE&_hljw1DiO=HO48aQ>FiSc z7dOrGs=gYjicpZG<`t6~SCZh)Pa6ar!~T}MJ4*c%QCL%r@-zLQw9?XgS`;{?WffR5 zO9_Y3lml6KAL=_Egh)_l=o<%0Y!|<7_08U_{{u%RgKN=Gid7+~`B~DmpTp)Bw6KsM zMeBCN$)isAzOA?!7!eqEyL&1u&`wSlO0dNXQ>ynA?Vs1Vk)eYtw<$tus=Wy@>WOxg zbf1iqXQ0z56jDT_%q7X94l?5L6fRf+8$JU3;5Ox!x2bz-^d>k8Pk6NQB77@jN;`|% z=;dvX<^_mDOfBQBigYL~zA_&*BPi;s@&MEzIJP`xRSE7!fsZ3q=NCUIqOg+TxZqs^A;QLw>x85Zay z{{qChV)NQQP;0;*_0^Ajkym~FPVFzmvI{GSLFs}2BV0diAC2gkg4g$;IQR!&@WRwF z3IwiTcVuWke#C`gaDz(9bOv3CLWr>AZ3j&PSxQpVI$(e83X|N4#(J7{|Ae1y9u#6I zZjQI1jc*ra=>Uro!RmPuEaO381pB3JA&u;5+{E>l@-HlPOhU}IX@+qpn1bUX_QH`+ zWe(I_a)`;G#GShEL*K4iYPA*EdhqjS<7csXIF@u{OJR%)!@_r+7`%ect1t#TZ_*T> zvyQ(akBM$YJ4=D_V|dgpr4t5}ncFBr_|67a5$eR@!U+_iU^!#6+C4FzD|W3{5IV!q z8K8bxfCc35Izf;p%S^r=TTh*t>+PK%L*a7ri#U?60*d|X$3V!8`~D6#3qgD*VPN}| zF#}{tOh*vwR+IkK-_sFc)SY9EC>M2aY#2=whbH$pqpr_F&wInx%#-czdG3aMM^+2e zidtH(6xt>S-@t>8{lBMsEvk@0PN=XwDclpO>8C3z26119ZQNQgiXz-m42)0B+5ZO1 zR}X5oVJW(~m2|+j^7ne|99Nwf0h;jt6`SL!t>YimQ`h#w+UD|Z*uzYYTqDq9&KIG+_T1RAF5(r3XVunK7|97i`aPJOeJ9Xa?HWTT%0)Xkz>U zp$>Sp{aQH#sX}jakk_^%?z!YYACugr?hX?q<`vZDy7AAuKP?jcy7-P#v$1?Nrl^H* zlRD$mEm@`y0u9@l8aZ`-?+X;Y&4T6cL?q84Ey(6U*Db^gZVnJ0Xn-?pzs8U!L4rD3 zg*TcFIHPFBNkh?}h;;b&A%Pv3J=H0eB<(b9*WNvMUmoje)-uK23Vz)Zs zZeXm;j%r_w#z|#Yh#RSO9ydYTPe|;+{m*yzSBdw%1A}9lQcG z7(-iBH@+TPt*BO9s8(mW#GVpFTcIZd%&|w&WDFrH`zcg3V3bBG(>yX#o6dNkNSXRn z8bzw>s+jnqVr9#Fab00~i%aQz{g?gIZQFf%d@2UBv^x6+RH#GTwe&MuKr`D5ja)5{ zL(6nJXE+`}K2M|HKGKA`IobU3-u>jcg?pU!SrUxyW9M;G!Oe3Y-0|=D-4F;M^Qd^u zt!XfsUo=pB&a>Gcd-?x!5Sws1D4ChI2Dfb^l63{M@?@|lpoAyyJ<=CYhtu~uYZc{c zX>L5PyWhym$5?RHf*}#KN93NAjJHh%Kpu8MSDU-a{y4(iRhYj)#P|_XVXEA47t&-8riIaH> zQA+{`c9p~fdkv*mbQhBOZ1(&hEnmoo-M6Z)vB*O4$|eDAnR?$Cj&ak!2>px6U5;d8 z5yFJD4gpJ7`lSd9{CROv=vyb}#;r^3;@LkB=yJNi)shV)!#afX*=2c#9~Z&@Pn&1` z46sBDugTTq3Jd0f!uls8z|f`MlWJwBab@SXp9Wq096n)?i3T{_ffeC81>Ow3+w2f+ zdBn8hqr92pz=UM5po;$sWc4eMDtilROoIp0=FQRPu}}WzoDjVcJlHaWgvFCZ+YnE2 zCU%OK5uSS}b__eHta|ke(G;2{z*#e-ps9Y^Kd>s0a}VxhGnLi_@sHRz!N3=47rt)m zYg0+kJ; zPI4;!1(6Y3+HX+3Qfl@mOK};<#tPYnb2-hIqJK?a{i)qJ zZENI+3tnz13WENjn1 z$~xY@H0ixR6}h~D(UEgr!rhgJ^*(f&R}|Sfkgvi}Sl>~bC>JY8(CrwH8~;>57`Z41 zu)Q=&jWE#nkyLW7+Ld~+lV{jf#Fx`fP}p`f7#Hb191tB%@<6vo#Xk6B*~=3H<0`f5 zFO^?O5kH=00#)CV=+T^fy<6A^$X=B{Mlzej6#MYuGb#GjZ%Ym?`s&7&SRn^+)G)N4 z;Bc5%Uqf=+!yx`^1=G{tua5wK%-FaVEVNx+t(g@nK;1^0{YV2@=hcFn6d}Ar^>!@80QKMN--&qs?@(;$OS)mMy5+mG7~XDm=#u34w}I?oFbnLZAm!q3xpU2-W!75IkxY zL=U#i=D=V`sg1p_Oxd{V(^%}-G0lE^r2gklGtAD~+&R0>)I%uEDjC2@3~CPhvN*^F ziTXnYoS!cH_xk$(!__-*huQ|qg0Y<)+qP}nwryv}wr$(Cc5K_Wjme!eXU+QVPk2|q z-A{LQS5;#ws4q7{?1PEzN9dJ}!1eGT?iBHLHc7oK0`~!%Yfr`QM?kY&ff(`q3qZMV z*uOj7pq_;Vt#N9qb^Jv2#Hpd9TG*i{NihBML*2Q5eT$)j3w+jpo1I-(Hu19+DR3O4DQ@ciq+xiPt0AN_EtiABbR(4l(f6p3Pb7EUQ|D;2PYj%z0RUuXBG$!zFVJT+%dI41<^*Yd^0D^gwRq?QG0o2wiO0Kke60N~Gm&O;3B?TsxQ|Iancm8Ol; z`Z&t>bnPl-HXx%qv8ygmJ=Y&DNT)B=#Gx12QS!*9K3(YQ3LOmd(yuF?ld2$MT^NZC z_-u+qc=RjYlP?Z4H3#g{XA44>2NnF)C@a&~?yyyI1tnGn(&dq>XY~vTPUpWYHg4WT zc)~mOMC;r!!0G10g?=(B_+pA6EQM*Z#Rilz>RF`q^Mai$;6n&SC((+DqyrCWS;LeJ zQSi-BN<`crZq+GYHO}8Mbk0-PF(y%(Lz{=4H=b%{D{fz?$Peg`;?3d_#oK{lK*?>I z(+^Kf_}Hrl0^WY!q{{MrJKFicpEoA)_S7`1BoJ?k(tgPI%F}m{F7&nZztl@jZ1Z# zB)5hbR-c~F{{E5fm>I{83)vv8)67>FxbVDznx40C%|ckR;B{Y7SiEiWc~AP`toSrl z5-SQZf-RNg+Wgy5BZ7rn(xQ(KCO?-EpyMmcVhGO&1nH>5qvlm>>WG>xpI)syT%Ety znVs3twN6e>%WsQsJvK+>H#n(xbZKq52(Q%>sdB8#SmP+cW*tl%f&4HPRr_ zftT!v#0~RYnL+0H5z7e)ggoGtA?_4!tsrImdmxo|xntHsyNrjFg_?r=+JbNMZZS=0 z6#JA((s)89*E)%9Y60RM=}0oEU-Mn&=2Pi(g$wqix#r&o2B65Fp%v-mY;dc7e`y% zvR9>;@Yt-vVMA@8RbFbVaDDSs@*vA;eO%O)yv_kMmeJKuQA^1t!=gu7THeu zP?hD2Hc4Yd;_{g3pQR4#i+5TMHo3?q3J zZ4ysQm;BviVlISW^G&z4o8U29 zmvANf6f|LCWK0V?$DO;Tsl?s%`aGTg%WRGA?D_cASUBR$$yJ?|muu4gC|@4cMBprU zi6Gi|KU8p7C=3*PQ&M&=6^8=jfjFthL6$%nDL&p=Mvl|UP(XKZ0uti48EhFpiB<1e zB`fpP8XbreMq;ey-l)^FQzud+g*QN6^5-~_emnaE2F`W&+=x-c{i+|kRSr@`;T1qy z?80{FndGAXaV`+J(lbsC_`G<|vT>T-J<`Wg2TN)T-q{=}Wgql{iv++_8XS!U79>Aa zcJJULqDiD?k?Bljp`We1=nXB_nWdFwV{vkc>*x*o7borS7;~N=Yt!KY)bZ6Y$MM{C zof9+R*wnG+&PJt?U4r^pq2fd(pYGO^X=MYGox%hj8_Qw#eWa^)El5Mpac~2En=|o9CKgRgX2Hz0hb(c|Pd2F(Yl;`Oi%t`4JHAyD3eCO4dnwkHXwwhdx=pm| zLRM|1(jKqPQptXZY81$qvz-Lr*x=Sh?Q3hJ|qWF7s9cezo~(`JVlU?VyZ)SC|J^ zio?dS!^hi2VWHCggi2d7baMb92X?c6ULLBU$*m|Ul^?L-W!_Nyd#`I|%b)tr)n_c@ z4J@e|nyA>Ro~(Pb?u~D?x9X$A1gL9DMsp{?_n5JRl`ov(te0ykCkPMoxbvV838vLfzdGW7T?-OWQ+lDVI5kHWwg z;qk``_N*|1bd$3hNv-Y1Ik4{Nu^oSM=7@=ZpqfCwJjnSKmMi5fJ{K$q>64x-Snxoc zC_vqQy+dzDA^aPG=bCDfoWT*2av-^&0=Z2i&&s<~!LJ@A3tQ=&W@!-&d5Xw(CpRSx ze~_PF3iy;~bVeq};F4smT&5%;2j^=tWb?gSuFG(@^aFW()mDBEtoAOcC9eMwcFurO zZCZuB(-|scx!i-}`EvYBUHJ5L^Yp$S{=LrKL4_ig#S@*!XsYTr;mw0ec|WB{Tbxx|=UhB~Pe{>Mk(OTLvN~-M@c1}QyE(hMNDVxoUgki2hk8fU(khjOSM#1I%)*u;O zsqY?DMU5UHck^(qrJ)1h-!}MF7-ygo=s>qy7CGmq{y3M64uuVPjR~+j-zKunXUz~$ zkzud^fTwoq-rlULm5t-~B1zleZK6VX-l>VKZnIH2#CqONXE^8y;+8{Paagovj&eS8 z;W#l-WWvTCd+G~z7(Lv>66jsjOxrn();jBaMxNbkGy!%c1u9`i25<2K(SZ#7#xDgE zz40s?y{1+~99`$Pm&ahP(&am~vuR@I@)nrjKP&~11_r24c@k!(cfI%ev35M+xLc3Z zz&7#_^kvP}p6plsFA#ol7(~7pW#zn$F}&L^_*XmSmHd?bEtK^g6-k_AzTF zuzr6<-2F%HP+fFZoN;LkXGv82Bp4gj`d8fxC6orFI(5D+A+8vkRDJ*<8oPqLi249C z9f}o;{6X^)XgGtpgl~CU*|OUe<_qn=t?d+y3@rc<002Jd|1SvqKbOyjE*93tzm09N za=+~cJxuopRof#yxcwL4V8dYD1T7EBsY0Ahg#ndR0CDM9#PrlwFw)q_ z2$|ye25ykN5H>dy;3C%r(I}}pkMN&^9`X_=EK9NjpKa00Y{F=fe54p6HTZbvGy`uu zo`z=gW*9&pxS~$I!}{puT*(dYJIjx1a=%_U6l4M+g)qiERTT8KgX?L`s?`dH7%Vuy zvrhjVDBU<;-2PRFSZ99Vc>vt(k`zK`r;do&PPc3{`_#HD_^L=_8Bm9r9J*JPiya$&$pmT`AzkB2!0VSuqJlHQd-G}q3bjPq z2h576L&LH(am5Z3W})iEM=~b=$uqt;Mm>jqplnutj9NV8CI1;KzWU{TLEWwKz>1=WjcUdJCj?mGRoc{V&rv7ZzePG2b z`pHPzs*lj*8nU>flW?9TBsf_5?dQ~gRxLN_Cz6>bh)MbsE5RD7F0D%$Ca{atCYC3X*#(7D5y1c6)B&+|rQ zHK_^_>VwKj5~f2_@2xUg&7!OB0g*GPO5UK#I|^Lcoko=a7DJIyg(Ad!_5!o% zdQ#Z~D{ADDqJteU=StYUNO#PL(q6wYU);8!15SQnK{1(*N1r+Fl&%3j6}Ak8z6Z== zfPj_!gEbSp>{FolEGrD@InKoNqy<@&MpdT02UM8{+lO47bN#1 zyk)sR&enmDT^UL|cRC_Tt?ACGHllw~nG0!v@dIU+vH$LOSc@0L`DpV$s|ytkOtS7OX&RZq@m?&}{2IRyPySz-VN6V%t~ z5Kei4!4WkV%otPq+V5>EKImcJK8j+ONV(f8WY+FHZRlS42KDZ9IB=P=pz-uHT7D#! z?}DgUlF#{-lfGvNE-)Dk3e%wjy8q@*wQloZ$F5 zyG(k7;hi@s*)w2wDFt9fWs&`29Zs3?b@QzphzJ<$e#-jzEAnyQUM6Pa>VRXiI$yUP zx1I36l}*8d$?E8GkG|2A?tv$K(K#nPU7y~;Ad2v(AUwG9N6#}ir5_Zp;96TB)}B`$ ztT#Jm4+{Dpb=*v?95F_f(92N<4vS0<%uq0n4$QP-tLFhvj_D^fxp;a#U+&*MU(H3_ z%pt++tp)w~FXg(UIvwH-(Qimat(it?e@%D`UnQ&j@T%4mfXYEgTC-?4*T#(R)s61J zuMQyUcHnQY(f)%OnOazzIC(fZo7nt@ z+eYz!U)Sw*Atih!SKQr&I)g#Kr&&NQunOssb?dpjqK>zZxrTXWdl!1+`);xOaN8{P z-(0))t|UYLs5lQ2leVp(iNzEc!=u1O?IUP!si;WdT+O-cWf^TGTccU|m_d2m+!qT? zpKa)kJe^|d*JmXY*7XSE@$ZPScFs^%u`d-sqleUjGU(;^R>(ZFMZaYWhCmj?lt^69 zQk|XGsB|gNq%P%D(gvTAI?^{x!l~Shp61s)EqQFi&i}PNYbCC5v`6xE%>u&wG?e3D zeX+%-Uf2_Qh-eEluQt@>I=xW~gw!I^PuQ{bIPMqE^@KC%eMYcvFz>5cx_$#7) zB=ykg#SF`zS=mc7;*_#oy?jc}}jJRMlP6v-T%{Y!CO1*^LG!dcCrh*qhLEqdH4(d zzgdjW2I{;E0s!Cz{eO2%X4V#lM!zwwR^71O5JmXAq6Sk2MyL>8e~9U_xh`_RE&@OR zk$~!94s9qBGa5anW9o*XLHG4MO)U}L@d(ruKoB|6ewEIY+B}CsJl5e5-A@dtv9!*P zKvg+0Y%tFoE4tO*|E+f3!m|EdP8+OcrSvp|Wss!YjuS14QA0p?L@CpgSFcz(#3^($ zaB2$j2)Rx4rrLrMAPb?HPhk#h*DM%kCBH6Ubk>9t9T?9>e{C3kqeqiU04;`}EL140 zVM|bK2dzx0ry=1! zV|XMQ#vYfTDcCgR5jY?i_!~*MexKn0*HJ zNfP30^hK2oR66P|!+f+sCxzyOuE;s2uL}IH(p2XPkz?|M50#;Mh zF76n!1hhfIdL_)N4AKcqkOG=+w@#nadry$ETC=?)iPTvKv$Jq&lGH_zBm=g3j$_vx z?zB*8U@7~cvKczqK#3xlLZmeK5`PR-lHxBjY5;Lsm`&YDihKx7`u$W=dVSy6r?4*J zbe&w{kwh4RNAJMG|IEly{wy>e>vK~)P(v|XE+dDk+;~YD@@wTQd-zrsJ@T(=n{2lZ zLc2b97owwN{t5}K`5nuMd8M1`It(YL{^lL zjDU656qq+sY+ja#@p^=qfhp(_NTLU;bJ`xwzn7gkESYlzD8^KpVV*l0ZO9N}Zeuyf zVX+^tG$YFeSc)3|>XIbUe{t-}ua9XY5!={~qOCbM2L>(e$=>jj2mA<%S_lt@&aRFg zTZ4))Vz7ecZ}K#_GbC6F%`1=9mya~xp#DLn zXbQ5kx>CC$D*ZhPxqlVd1pl^;ZtO8Ht8jdPMw>hR%~<`+?EA`Iq8%FsVyhoc+labQ zi~kYa2w_4Spqz-ZxuCo62>j{4x-1{MObYAA*HaL4233uE*GeyC;MnBpEv6Ll;Ebe;E`n@F@ar6w zNFhBsOw7sbg`xKaZ>m?P!RfQsG`N)>!cG_3O5Pa7DZQD2ZaN|&v@$*d`njf72dE9`4uBw>0N2J42a%mqW{d< z^i0vROK(#gi>`u&B;?!Wc0ocRpo?{7V1{H=%o%k=%9iNM^z$^8Fi z`WCAy*d4IK_`KBOd$JD!Dgt+2h2#t2Mbv10)O8ANY~e->C}49e6H4U}vrWOh?1(A0 zShZ5HT7w0QGK%FRCi9;TYHrP@O=>4m%9^yV`3!55_D^f@0gvO8B+@X$7I5u7gN$l&2I zc}@fc(p#z1#$)ofYZuf!EOR)E-k_1&@%Sfu&toY?BKgC*>_AfQA4Y~}M_sowT|uyu{~`J?GRGnc~KT*+sQcuWSl>*Vb0 z48}#45%MOCP^o&>9NMuYz@o|c2{Dr)*q|pu5?M`l$`TeWpT=HgZFM<~ZC9lugm*9v z_ET#TzE%|l<&ooAKJlw%^$5&33y6uAcT$8XyO_NTnbog};t#|K0t7QsRzD6RZ47}L z*R@-S5NbXvDo28+07)u-3r>U7Kz$SF1*O*$KJQz zffbn)-#RF3fdf1dt}k!eHhdOT5U=zI(wb}gIDP}B^I~4wDVHAK>HJEciygHDJwKBq zr5%rI-)Xn+_&pzHG@_SO@BEy(HyO1Qe3{j!#TVF0&&Yk3!9f~Jw5FuQL&HPFu%zU8 z2SA=MxejJTthD?*xd>n&K>WnnZi}lJ9zV1N8=pN#-6ZhKpyQ3~Ut zQr1AKoU_!N!_hKS1!^OJnc{EX_@!zi$C8sGJM7$rdm57{J(NNW+&4+~)%jV{=tUWH zCkd)0xSDoOz0b{v3#Vch&aSaZwU6uENXprRRHMFT3btVf z&K*}1E)_%b-_nRQ$7HrTXv3vo!oCk?*lE(^1tLrUQ^6SiR*v_{w|QhA6bOyMI~ zufjuX%K{X*WhZ0#-}nKra6&Pr_<&;W7XeW&*W`ga6gTo;;)zw6btlhlyJzASunsBb zq=I(w;Bm@q2Wt6lhBrhEYf4+@4!YuG_1gA}Cu_T|D;vGi$Cb!!oj>n-6)+h4NG@!1 zZhW-C4~KUDtyX5FEAEZI)#?Z4|6b)<+nJgD&j=Q+s%5vq`p0Lb7C$RgvRdrV)&@QN z1CkrlE~g(3K6(Uy9?AHz=x^Uj;^6xQN0&gZrBR7CaoFyC;(byeIfi-Uv6P`Y$1PT6 zTf`WK-E>%;-~N+Jyw?>sFsnAWmd~|!?{2*BeutJDM$Vzq!IjD>5yknFfbTw#&Osq5 zSt+dty^h}GdO}rPgbA5qqm%ofi;akLMw$$pZvabcyoInp!Bf-f_7eNC*TE8Xah(EX z15BG9VgFR{#)ML=To#)lC1RPdnHSBBIR=$nRZ&&|M6J<=i6ZQ$Ez^zYWat@_M(%!r za5J+$yDk!f&!kTtf#P;oy9u8-FnG3E0J<(IkVrg6(A~~DB+q`Kxl=mTWG?NFq9CC`rxip0_y%nwnz zc<*!TvxJ#>$hKZ%d_H^_lXemm!(8kBqmo0o&bbE&YJpE-{Uen^=1tNTG)1b^?GFNVety(ZWWz~cUH1-jr zu5)rQbQk1OqS3B zW6~KR537;Bftb@WeA2i6#0rghD}nvN?FK8u0FV!Lol6x!4ZLL}u+uEg1<~%`WY6h zaP;R;m}0ECQ9M`}jn2QWn=886{7K&G<0@$t+wCDe49C{UyGkcG12GXse27;qf`1mU zr_y-1XBbC}oP)naGGt1|Vk)5dcQ=c1dgxLL3ik4 zqy+9*D2Mmr2I9$$tkXmE3Rk#;;U87j(RIaEK_zT2a8?`t?~w1mMNV9K^*kI506^{+ zW%@7BWar{+Y~XD2e{lUJb(`NRhwy!^*Iy1n2;cG?U;rF&EEHE{HTwuEvs^F%S$yaWw(gV0ON=zeg`3;yb$uGF$`N@WVj%_VFe$7{ZiCUwKuJY2 zwDe-E7+bm-fWpDN<0d+G%%jxWD!9#>J1z{`I&r*UJ!#yKw*{pjd+lVmiE?+s*0m^KLq~n1ijFF!P`=>K`~FPVnxh{+p(Yz)bFtm^dlw`qOb>aQ~((_ z4abuR%W>{O|6a_QGlBsJlp0Vm*pTcJ_zyJPUOtsCLv??|n31%-l-I5-yq!H11<&51 zuoIb8t^O$p55tg>tQJ^LbF3}Bgyd>KM*|gM*Rt}5QVB0tJ7<-{j+i7_k#)}lUhYrj zcR(*P(G4Q1;*AzPg`|(MzPyBh>q^{R_7tGoWA`p?yc&OR%j1MEi61(-llQ8iQA*Rg zv6H?%gK&<=KH+ z_c#%9uqj|3ed3}kFaw347)Mhyr@(O+Sv%*>XR1n5rzsop!ePnfgWR2|B7lp{`Jt#k zXFp3;VK6UEh&wp`U&)zaB>r%;*Fq3D*}c% zWJxpU^;;}@lvQhY;@IEQxK~)f7C3o(gwScd+}8`YGJ|#av2l(5dc$_QZx+k4lQT8a zIDo}pM!zJ6EJqdfV$57m*8_9)*3``|prEyyFBe|?6rJGeZiHpDrI-0{BDET0v|)j?_lZ;DN(^J^O-FcTy5i|rT1$zq-D zg`s4s~J3Qs>8uQNsh%MQ)YSUAAl8pfGCEsBE%%AZaggj6#don%CdyeF(xljW2n4>9!rci;% z1q7q|th!>hX+}>kwV!OvzNCy+`|DLRlFnmVEwHlmGjQOs(mgBWvd!c^p3}g$8hg32 zb31dx*U4ujiP^Tsv=MmLp?9k=Y()PqhoPv2qUyo-JbH-&I2`Szdgc2Db5B( zY4)#e6x)_15tRG>YTM!(y4g8`edeHCzk=Wtx})#!OpLq)`%1Q=4(EA(HX0}HWPmR! z>ZqWbF{{S}@Mvi~JYK&x9*pD2TXZlun`mGHzZGJv#@-FZY}|(!wEG^v0qi)xN2I}v znieB^?s~(Jqb@^aU})U24k!2hZuvdYtVf&M#@f7dKtOab=L7?+8~@Y>8>Vgb5nST> zD_W+lvFgA3zTQJ9e1YLf|tj z*Q9f>f!Lx+DmjlEUp|QX*{T>>gkNLFZyG zu8jc{w?sne<6xxS5L~sMo-4V+mo73QO`gtyF$8bfyvt>A`IRk&+05jsVl`l|m(gLn zepN_q+vqFo^ZJjtqD4x@q+$rQB}fN`R(I75X)A-S9TU-q?tH zY$AN9;r3_xu$lUKbnh4SNzA4L{iV=IMfK~n2ZV#v&S&Ea0Y^7kc_JrE3gat%7sj)Tey?A zY=P^9fa}^#Y11wcnYMjC&t{ND32J4Mm?8>rpkpm@-GnzcqWBz@FRqowjPJ6wgaI?w ztPeLY)1hGjt2A+_hy`SV3Bv&8ZBs4VJ-80lu@$qU3p_xml9&y;XJE_zYzP&E+H<8~ z2Ld>5p!4$tD>!sh7{={_q~+GROUSTkT9&jhKyAb?jw4d>e8JqCGz-kF-r#UFn#>eQ z!&0aG63*Cfhz6s93A2>fInWJ`j32K3t*Tt{A9=qteP!0CtfVh)ARex;*ewTZ zInU7}$jhR4n{Tv3a0HTxziPo~*87s;KWq!*MjcWCn=1mZu6+qB?QQzaur9 zc+((#>hw&dTkkw`v}bt~d%eBg@!}J+D_3RTeU?_v;lOH*ufmluIzjXiBe0zY%t*xc z{u*Vu<5E!&vZAwAwITU$F-Hirz|=*Ydjz&uZT_z)x`uKteC z$GiLQy=yCP)H6gLblcD@X?M94e!rs($`eFTTH)oZ(TiOjzHx4AZt zGC5^fGEN2XWyBJZzkvUn8mI;LlAXUPf%>~v!ud~X{8~4=*gMc*8(w-bTBDmA`z3VCR_VgCd0P;aF_69ef(P_lD00>7Uw^klzRLyY zVn;@($oIdE^C;`Iz^pPL5D#o&K#HU+Vit-NS@mWUey0S=keetGiVRX_nR(#|ysea$ zLc}9Gf4Qc4#T%naX&q2$x`NCa!E$b;wf{>=@Mu3S*$@r@K!yeY0RBH;?PBrU#!hK! z*`l-%agB~1oV{!a7HA8I$ZTRZiTR^Lpp^V3yvmT%~byce!u#d(RvZ2 zI@_SxJmH6TGMP<3ai#7xEMujZOboL&k1~?7CD+g#Ko?F7M@;(WP>-ad+{)Q3H!}G&##8;9Xq)rRXw1C8tJUkxY!sySP+FI!%&cywlvEIdQneNS&8_M6P49j^x|+&tmH(Er+YW^v3vZMmNk*bMVEaBWHoVwk za(iUZIqX?hPvnAq2>`XD8E*hUG!9Uu$j6%sw zZA$8=;y+!Fca@tDZ<`S@S(ADJSG~I&GFn6Ns!mRm9!=W)q2!c;GU{=hG1Vw}1%u0$ zCPjY5pNJwCv27&xPD$NN(@=q~(}^^kPU)gX(-Ef5&v!O_ALQmL#i)K0uoL_g)MZI~yvDnA#67+N4O8IJ@08F6UbM+pATN#^0cI z5R)))lV&3Qlf)uI(`V6p$T&&yMrp9&ptfn|a;LgluZ@0(Jk;d%^r~I0r9lJtBuTcV z?3~EULXs4jECzv2-%>G5A$~~IlCyoc$&DAg#k9Dzj#6ws7DbF8nkn|ph`iv!qEItm2_ zKa`?*m^Z33mr_nZkR2Nx%}=aSh?&i*9mC=eca#-jQ2d2o9eh$|8fI=h@poP zmcA8`pw(g3w}Y};WZB}{J+0YBzbF)>XT23%ke>tT}ViP&UinPNh|JZ@heTF>z&r^79nnWO3C z%$d8r!#`NjpHW-|%6KSy=RJ8t5(+skMR7*8IkK2=XIdaSAc8L6LbSf%UGinwI^MW5 z@*Jzs9meg8F|v6euytwyrsXsx4zmXLL5XkDN~~!Czk}Z zYU17Sc-yvTy+zP1r|*wWLJf(|m;n+MC(kefW(m%K^v^Fu6a;6uU>lpk@(C@{SB*?( z;__Ah4veb9%3e^8s8N$_(|sfF;UaBfL!`P5gpg*3+BUgkG0tVrhnoy-@(ltc%Ml!D z>&msy<~}?^(Sy-JDsjCmIAF|J_yyM&L-9QL^pe7~g`G9nGpuw~3e<+O+xr60f{l5} z0327`SDVCcaD*M<{SWa{8)0_guTfJUaUD^ zrgsWYB7Ol!V!r3r-JunnwtvA02Ak^h7adOZO0GB;Fq&j=X%|^$n?^fe+1ZYocvd;6 z$)VYW?1i8*9$ftpRAE|3sz7foR_cO_LNKuTnB-6k2}+B$Nk_JDs@}g3;q-}!^dx6@ zlQ%l}houZBESw;*K482#D*%G>+cnuqbH}3BcP{Q zFsn@&eHYVKJ;Fg|LUyE#SDqS2!8CVgA&e1=GN0y84}9K-lfFT%>Z`N+6BsVZhl4V9 zSY1DF4^mkAT9V9~5bK7Ora__DrG;Sc2Nw5&Z?Iy2_*OIF&?jNU7eFM6<_b?I3PrX{ zu6LBKDW!w>LljT%LW907?FP~#j~^=!)K6AOOQCx zf)o?aFvq>WNT)xle(uF6tZsCpKiZ{#dIR`X$0X{9_tOKTjC{a?IG5S^xx@{-WbMlz z#Cf>b4GI6ac0OU{MGDuF1R?^2?sp#QP{zl|?6s2&e%N5kZU+ZBi^-#o)g(oPLUokX zuqT@`wY7&8ww0)Nz=gsSOXd~M;TB#KHqJ-tFU+h_6Mv+>L-3dwK=k=vPj^gH(K9KR zlAzjdHO_tXyVF1>2PuT;_uVpFn(;pYk|1h*#j?oI%p^FP3Oh$n-Nkp&bQYz;G-dkh zL?;_!@OjmQ*+&#saaMjfYnk}7do>Kqp7<^D9U9d-D1hAj5@)hmp2d{WfwO|?l2mNY zX$c}FUVvyJ<~1F6!78Qx@zmRF|B_pWjNxzI;a(vB?O=G-qnaypZ(^%fU=@ei>5Djb z$_G{(Rj*G6vUZry3cT2$KBBFkW~fQCHRE-#e~Ei3BgS8b0d0O)P8;PGN_v&{@2JU{ zT?H7|&4|ffP)@)1{0pNYDCLCzIqsf}9M{E!v(C6uD#UD{`}7M9dPBDh6%kO|^h$=V z;qmMu2OCEp#Z1eC#M+^T`mTD3NYc#j;21bDlkBF>6oC8DgSc{Mr*JyFSHHW(*@+E` z7rYsAei2_nFe5-52;@@qwXx2}y2x=o8hGr7VMs5O7LNdj=Y~i(ZBKgnHc^8h4spTz zi|ZEK0g^6{%0pU>l9kcEw`wY{@bd74?l58N}OVRj`@eL9ignoNYc@;G$4 z1g~IZEAiSSR-6t=x2{pXtm z7I$jauAl*dqx7t%$$WF}fq79aAS0gn#=)suv+c*?@XSt4TGuIa0U?Jfv^=9A2SI5W z*J}>A;B}eVnDe0(Q9M>s-s%0HXZmMzXSdW~FIJ8I&ALwa>z+v&mMN_eZzR*xkFWv< z{7_cL4KW^Sk`Qv!3n9Uto5La06@PiNcGvOf#PB*jEWnVmxLCfkO3Sjz4{4tY?uiTb zR3chPOnN8>-%@?I0wFi~GH1;3zkhs~6oQVNMr=R>T3YF5si{<5cH$$M6P9Xs6OyW_ z^J$`K6Sd!uhne*9@ain&gs1YpTB2^obX&s6TaQ$y!K5ZTEo|m1wZ865B}sc(yu?Bv zt5t4ytNvrVyawW63^SlF@j-W;g?^+X+vYD&=Xct0N;ITdlT z>Qgf%fgHc=uQKC+r;5=abt~=sQ5exez2waI&mG0SBLR@8=ll~ z%lv!T?s6pXa|mjB2%F%sY*KBz7TyV8XE?d*p++xe_66U4ALF&?*>AWQKa){X*m^S% zpuCXq)$TM{AUa;!Tv;vTXErN=d!D?t8#=&a7TG=fOMI0a{a{~v=zU`*$gpMJ`==MqbuujHt zKP_e0;q&3Y6`uVo5ANVB_{D?nuErKXsrww6k41C%U9d*I4mB~EFYZFXg&+H(7c%un z@ZWU;2QsVNUlc29omf>CR$%~B&KV9^N654_X)51~2+Ws@5o%L85QDZuiQSC6e@<@o zlWWxoOQ3XT#{1K4cEEEuPt^bqpRyT|Xe&OXW*j-m5CPELT@cM^Y{Jt17eM9xTb}LB z*p*Y&ovb1{pP}*=qZ$BLbP`&nieoFWd<3!BfR_gjk8c_T&XG#1%`F9K&s|&>E(y7y z-DLYbw2=Qwl%;qwdFf}&ReABwOL^XZV2L@G;&(##vubd@p&<}wZ2t~Df#fiA`RY%f z4IB93KO7#2-^Rnq6#7mHvT;H$TX;3;?hbvYRF{cR8AsnzY_%42?1u`ReeeGP>_A8& zwBoky{bRbq5?!rh8Ljv4@$RPAosgzqxDV(|lvZ5KTnW9Iw0Nk3r7iNHOFsGf z^TbZ-h|S_Rb&ySO&o5E|;Rie>dnZ2VF|mo}-QsOV$Oi?jd|i#w%D?a{LueT)Z*#I% zUU4zqR%sI3V&>b@)#yJ$@x_`pu^X&N-#xtntNH}(4u_;1yKn+*sS{FOpzBSiq}}iqdBr5_ zrfMn5iVZ8U_d9l`;*yJ*E1Bp5%PFIKx9KkgGcz+k6A#SD8F$o1y}ccVd$Qy-ky#`n zy5)qK3_7VM`4tZj4~@x`Ez~h;E-F-rBht2aum@5)#x5j=4XpQ*`?Z>s^(Y=F-a+{g zY4Y^*glPSJxu+WFBOE&c0C9#14%KTn;XRCwP?1Nugyp6)VO)6~A!Gqc}y$_oN<+{2i*b?>y!7bguBxz)L`n4Rf+|DEdUCcaA!TV z4hMh@vNYJf**o=3@z+#ioJ1kSV0Rm15CBf|5t0A~CoK#Y#d$47wV>$ueGRJ5XJ>^- zz^5NUx?xU(cnY|3mIOl^B{K9G%8Hbj`BqtoxMGwCd5z|;`|q9{ED;&S1C4!g~Yec-GM3GsRZ~wJd;sdI>{TsESOl`Hh z=m8v$l!)4EM$;-jtaQeSN9Y=U%wooV-(Y4DhHtwE_pB8E)XIO!7AR~AfPrMm{3#m& zOOC5TBa39*Y1Q%v65I_?&|tVYuwou{1t~y(S0EU0a9;wc)z4q(5dEAxgu%4)rWZq` znsp$KM)k4#Bv|W0-M@bEHdrkru+f#uG@Ao?j`RQF>KwQPftDm)wr$(CZQHhO+vu`w z+qP|2m+dZ2z1iKfXXgHhyeBd;zA!=mmfyTg;=NelcKf`p_D+D6b!7th7w0Z9$N)%tk&gA>^HpF^ih3 z&taJyVKaTov_VpibL*q#dSCYd;Ur!HdH5t$Ie0x^4JqhN){tIq=)!>&_9h~e`%GlSRn?;gf6AW#7E`?d@=CkIw3 zoKH0#(ejE67?%Q?wn_+>M)}QPFs&aPe2*=IU)Xs~MjeOALh2tB?m?48bfdADcLu-j zpg~>ELIn`|(4fpNL@Lk6QM_tmiBN18G#0n{uLuxrlFOKg(hD8-(C5B06rr}#VSIYa zDyS-{`0b=p2f7l!)T#%M@B3O)PP+4RW>DIN8mCfjJ;h)FxM`LXd7qx$R#C0UqeV+l zw7(#IE4?n{`QrmxeN1j%JP{c6m=9HGrrkPI}9 zjU`>x)){gDoR@#72I?ytT5BTr2P>(DIYI$W3 zf?U!UJ-kY~P<|QZ&fP{1M`x}8o$(!3X59jKC~lvJA1DoufD%H1fHbDLb}k_r+e#3u z=v6oO-yBuQ1hDBhxI6FfJMQt)Dk93p)BL)uU$uCRr8L)A_%dX>DKnP(DP``o6c|FY`j^RfZ06W93QXEGWEU& z0k;Axn_0QxM-@5*yo&CKy2nYzGz`P%o_81yOzF*H*C`0FSL^zL zeJ(y0*ZzuW82muXr7X)$E>?xtyWlctMOnOc7yc0JwOHGhr_2w3#`+31bGYh9P&d5Y zj0r6hXdMN$0!If}v4ys$kh~`tl2(lX^8?7_zOgpL;0;l%%*=X8%i%y5IkUa|2$E5U zG$kXK%r$VO@10|QEoVJs11)ikA--$I!z4stq>9oqaIlnJ|A0ZM1M#?LTU=4Os!3rBZW$14kD;NJ`+9$ub8GqNDr>CJpOMmUZq2tUv=l9=_>(pQu9)s9;f6Z=N( zBcU^9EckzPOub`;b5CXqsar5htq{(D7hp%JgGOn7f8)BBPs7B(0Iu%H4EATzp!Ek3bbOP*uy!-UeFvVG^6*ZGIx3tj?- zIV9|mhDCHbJ>fLRTZhX;M&kSFMA?y`ymJf0o4CERgFgO|Yp7Tx+zwYH`UNV#tWQbm z&=7@zF&k)Nt=up3W%vO+@aMb?o4f)t@yp2W`!_XkiW1QP>$pV?PHTR~R}^w-c0}%WKLA4Lo_A;S zx@mI$bV=mpTWxwg4?HSomDcRz8@6)UtY<&>mjl1Q5KAQuI>Sn1;|r+rQ9+GQD51b; zWa#m!6ZKO0@CGx;geZR!54ChkEMnqRb$eZijJw|(qQRQO04vBRH-*5td4*4dW55Y_A$*S()GBL6iK1`OC(KYeD;|Jh zq47f_k+zRfUpCMEJM(`GnLwtCNBS~q#;14rd_L~!MlJ-QSl_RznMG^6Tj(**4vJG{ zyK?(UCS#Ap?Bd&Rm1X{^Fy}UJ7kzt|JDr@ZsX!sK3eDktj87mQ;|0vmw<2T~qzcdY zfzNz3vt$BStq~!!nFV3OIAU|YELD%FbUYivf>M#|oT6PomRm&|E{*9srw_cS@>8LjD;LMM$6aozhrE-|D=r@gQ(9%1$CmMF*_qL6p9^g7A0@A?m12i5Kldu9~<- zEDNhDM5potCJw%gRRaM}@6yvO%}T#_P=NipgmlNz-`;a*N{Mn5MMv>u_cx=+C%5#Z z8!V!g7D6~<)=O4SD$1m6eZi%;@rY@N?9hYUIP0*ckPP-?9PhB{_o*8LP zvO-PVfqdrfFZ*rOdGSBBh#GTNcIpj!_2Ntq&?a>b9)>mkB6fR!&&L>NL8~t(=D{yjjN9v@_W;fE7(=eq$co0~`g+&ZfU%aq`#dIxi(&mn| zrlfKlHC;NDeYuJ-be>UaGGPq1qG964o{q>Un1|9fy^JLWHIidlCGUmU8|w7nlhL#A zSDmxnbzMhn*6r$Z_kT2uS7r3@rIMK*y5IQc*$&WzeT}dRdxPpq3!7Wwji3e^yhD@k(Fl0$|rd`u&>A>5{JKJnKBVqN@&yhUb z%5KkPATFvDiUj zzu34}i*8a3?#sfDCQ|uaJ&>9vBd+0A&-7D*^ctKN*w*WOeXj}=I#~W>e-Tidali0G zgMN!WO!El1ekt|P59A2J;MAOpx^qnDG~p#Mfo31Xk_SR zXz287Ql_YH#r@ve`M#ktz{ZwB*#? z!c;(;PFPl=D;FK;%<1S@s3J>6ueN3?ONs1I*g|@etwf=i&SPbCCBt5}*ww6w(rn;V5bGIw7-lRgD~LHr%{RSvmbc4J;Gj{w&)C z8xu@FA79?vFNd`|N0Vr$_3n*s^Qt?i;93`F`KZtZRY|7@#D(q}#KUg=)h9_g{`d**QzHm0Uh zqq&^c5G*YV_p%O91Z$$yqLRami&|8SYG8BxCqYc;lPavI4J`zao%CCUBA#h=G_~NL zw%DmYcu}qhM9{!&W@}fRAf!VMMo^&WL`a}Oc@N^8yRuJ{j_D&`5J&%Yoj%v|y}u)b z>Sw8~x}{VpjL-xySDyEWBMyGv4=MT&aLsU@Vj3lLA^+eFKu1C2IoZ`D$Q=^8DbTec zK}~?=K5COz5FO?CVKB>r`KwVGb*i5oS54;_5CFz z+@{@o+$Ti(uNX_Xl#HEMHh1c(nS7S@1c)jx27_i-8Qp-XrWMz#uM`43T~xCLdh;r* z<{KsNXL;{|h}>(Ofkr^6Hp$FW>v;%m{ zAS%(aI6#$n0Fe>s3fZkfr#>vAZBZlOnQQHq4cy5X0iZ2_ym>XVWJOlr__hxcTInzT z6~0k4um1ziq4F*iq#T_(ml0A#M?Dz`)->)YR!*D3FfEk0OOraf~V2$qM>%A2Rq;@c} zup#+Hh=BVIotK_}O{LwX{H?TH174&(yod81lLLR6e4mB|7p5GejTH*%zZ0l;s$-jn|~tX2^IN zEqzG}w;+f;c`#(Nt8ZAvd{iMVdH8N9kWK3g*ju!3zKEZ4@gDatw}GhknPnZ@hrO7K zX^j}eQnVpk@sm}1QOiF^TRVX!Ah! z_#LtU4weq||CzAnmM;GpufGeo?N-EZzrLXMA=RXws-~<~0rd94xXWSCAd-ls;*s}! z2U4l2Y?8@B7w@gYpB`qPM2g5R_g?tcR4lk~=DF^~No~bMl8KL6d(9*SJ=Vf&h#g7A z7hLJ5+h}NJy{N){S3`fdYAYu_rVs7$_JW=7Ln853So=d26$YaXDJ@1({%-SlN^34U zD@)7X(hY7!)#h2T%HzP53=884{39tI2FzDm&4-+vrFk_bA<~7R$oH?$bJ~w><_%7m z>G32{;U(`Vst9}yYQdXOhzmkSdtBKkT>5ZXGaWWkUb6BURLiPb)3|QW65v z7rA9!>dEM6=meyb$GB}dH=Hd;lCw)?k`vfFLFYy^i5T6ZAlJQ$1_nth2DKy+fz(tL zsR!EI!3vUvlc0WlB%t{GecgO8rrpg34-6YkVkGYD)Iu{aolJdm0^~HJ|gjwrdQb`KUj5-D4w!L5w>W83KP>Z*b=nr7N zfjBV2+VQ%=p0tqG!a8OlYa#4;!YXbR(2eI%VW=2P!Fx7#_U3C3t;Ti$geHyVkyt+= z{rY;%GOf_^ysS0<_o+Pno+vOk9&t$ap<6{+YNe)Hl=CQyV*shGqo`wAS}GJ7Ol?i} zkZ_AZz;-J#MgdJck2ZMVk{XN7q(V?zM=dfWnm+Z>f#=pN*NF=R{39hdTKmC$vWUX2 zk|5l{*9DQ=ABoIuc)vRLwv zLme+O-)LYFsnZs_4Q!T^cr6w%36EUR!D)gbdP!^KscXesGaNr~<+ugiS?o!6W13lA z<`F#)7N!_UzQBNh41Gjre2P3C$P!I11q+u1nIr-B*f1%NoCY6%zvS_M?uT9{;`ctM zLg0;ptr!qC617|0wqIP6E}jtVfFGFxXeWC(NE)X^_ICV)r6rR? z|9vZ>W9H+-w5JOQ*cS34Rf;btauwh)Lm+gk$$;7Q8ySSBNCA05x*0{Mws+3mal))> zVZfjz_^rvsD5PInPrnzKGWK3?9+}}8Suel>aRk1M{??`DNcErGlY&)S9_JnT4VYsG zES0?ie6b1y@g9n;s(fWt`LD@ByQ0T!x!$DW_1)#8O2ThkJ8dEK0I)XITw;wXE*e;p zVuRd=i=0W#Vc?3XP1;>7^kxhFLikj{z>sS5EzbI7ofepk+~WlLL8h!Exx)g&2(@DT z0_Ym8Epv=|E6xyu2&W<}I8pf6HQE&mTUZKz$U#jjR)5|OuB|U?GGV7jQ0LD$)gT(E z+mGP1>@0sdn4$`*O7jdNY;-_S4oIvTR7Bmyf z(3avlaZByQQ{C+Xf=6<-La7W=r1106iU?$uOsIq$VxNir)cJxwA`+tB9!kgdLbi>QR{&3Q=I<20ki>8MQb;MSU7SFq?%(DT12c!E%L% zXbRq!V_wO1AWuT|-aBtKrTd_8O+1;7QQtK_KvY0}2bw=sF04RJT1&WGC6-!wKm4($ zAceOxG%Uy&lwFN8YOA}+-Vdr<`Wl9)q`21}R2CAz&3yzaDt`H+!3~I(6?o`cHkALe zY59$8JlK|->R#yY_4;3nFu_$)drKpLQ=g^qBc zqF$kFA~)bfM$}$l!VsWcEqZL<)=CAOcrM0~p~2n3Ez#gWc5_-z z73)2CY0?zc(;2_cxdBA-t`;R7$=EZMCC(dvx9{uY!9iI4JdTE~KPS4@ zeC4=gu#fz4a3W)s^b19KC!op5y|@yLM+2zsvE!QHJ-OC;``*U8w95ElF0Z%AwZYC_ zc4XoLrP9a&H+5vGIKHl=t{@NMqV(h$3q-4}IzY@;W+m_NZG=3f+ad5tC-?$8>g2Z*NJjkf63E(BD` zz0`KYF!K76TO4vSP5}Q>xe*gCtn!KkLk2dJnPB31hg4K+d22o0g4?YL)P5F z`Hy!ikOCP91&}PgJt_m>EsDr&?Oi>fgcw8h_@yNaXQ7f!m5E1Hg|w`5Bp2Ho*1Okh zg1trY1Llphr|~BUyy+=U%W7ZxQSQR@6gc4jN8Q0Ow)DjJ-@6sbd zI)CD%HA;heXoI4aIP{*gzce=4k3F83r`ZuP33+$U6uF5hRGazS#(gn=edr`PI2vz$ zBVKVa^CI4^u#7Xx7*pRLeUW<|cEh;mV+KcvQugd^?)o0LEb=hqGM81QV0?Gwvn8js z%^7Ny7jGvZRJ{RxuGMAj+8n-s)<+R`52-7S%5-(UONpj0f+ zT`|Cw_ZtZ-4^J%Q?V+5dWVHx8A=7K0&i|YkL4>8PyIvMq z+5?}ONS6nDw1I7&{{2IqJc%%mTT@gz!^?+}a${m~oVDTdXH%)_5^&1f6f%1mHtR)} zF{Hka1Fo=RwmOMiyg2go%!h#E%5#G3!ysPAjfscQ!XOQz&=VZ2XK$kfW#Mg?&Va6e z$n=Fx3h#7V4qfx`BkFS!2tapD$wrwV`+3Gehr%Jb^(_qP1fs`Elp#EDg11_sDBS~1 z3YXpayBqcA#Jn~b+aLm`8wyM5tVbITXsMAT%}?z_XlM3NMl8+GLVo(Dt1depV=ZrZ ztLjm%`$-nY{-h{n{%{SOO0LFYl!nQ`b0sqVtV!qeyjFH)gq;G+-r|}PY7A^8OJ4Bd zTr೮#wgKi|S<>2@aYMlZ5^tWWHqIm(AtZ%3*+!CXzRD5PUg%9MS}dZ=^ZNik&C4U@kI z>b27J>uW|g$inx2(srTUPM~SzyXQh))luU{O=p&yp9;E`!ozs&o?#hX!AqYx$r-8j z-c{(8Ll^d^Ymq=8{$lwZprGOnJ3IS;httnvu2GA*Kt_f41zw*g72_s~cZ`sD5HUW# z-#mYDxyIQ2Wv&c^CU}uPu84OXdZ9?237-c6VRSSGz0d0xUDU+dydG|PZ*@^B7|={V zWHPZ|rwAWIwFJCO%NV>y)Rk z{ehg}rYUzz%96Y#Yqz5QLLmQ@DBIbH4=7pqFj{E|PYK!>lmP0;)Wqo{lHMWgQM5gJ zJq>UxLW4YN{#+&J7Z=A@8;xQfqvSp*>kTC;W*4l7Vst9#F1AjJk=UQAIoTY0nI7^R z%&lipj|@0dxlw{3m5X`Ou}-jCfyj26W* zOM4(fufxh^vbIA?`{&5HO6VFYMfYh9yFv;f{dU6eiHh!%8}q(2g-Q+R0|~+EglVk@ zXm(M1kmLz0Z7*y@4+R{S5n0@iSEY1I>bw`2Tb3L*=n7Q)7u$t9GzC0~pi}1MhXTi1 z=u|fy?JXJVv22PLJvaleqHdy3NL^W)G*z%TRD$9a2&BBMtgLu>;ZZC(ze-*z>TI^T z5ZEjPnZsuN)NQVU?l?_Mi}V)5RmwN0b#kENYvagEl3jQW1o~oAc#1OP2)bLfIx)^h&P~mSubV71^LiKr0FknonO#v+o*0HC3BR*

      IWwSAe$w8a%*O&Ip?d)qU8n}E{ubD^Xap*r|blR=`-GJ$~i4PqqKLRTFyrck72!qf)RF@Bsx@(VF*(I(tO zz@uog>xKOqJ|xE%58&tTPW#~I&gMxgFZC9}HcoVFJtzEcG8ajI_*;`_t-r z7#JQaEER&W&uiZ!jyouFCuq=;;65;*PL=W;u>f4AIj(GAwZE~4FE zK61Xm@^SOIgce?pBw7`7Y`dXq7Zs-EhYWt=^F8pZ*tR){Z4bkl>dO6h`v@1L^-6NzSfDZl+Go z{|6bmqGfBp-H!O5v#EMR39efz$LPWtqTVUiaa^F{H6qbE&{gd~Jx6se=|Ul;F1P6K z*I5|RNUz`82Bl^p1dE9S2aasd6VY92%|?<9_EJS6Ne#VKCCt&=78)#Kqz~@~i!o?V zj^mYquRohTlnokJiRw9Pj!r15RI1gFW9@&$3y#E4Mg4Bu*K{lg+RfZJ3ifv2yQM~o zh`;}+!+)t5KL~YEs$!82CzW*6LVtt!$gmN`YDexMndoMKh`si}pIJ?M!xjApE;vlGdQyR%njs$i4+#YADL1bsrb76Pz zuFddM_UQ$+cc5|vD1{b9p;ap$e$c1zck4r?7ZggkQM<3z#LxaJUUlwJes9rZa7Vyf z4<(Qq0Jf;p(a?^qQkWWvy=!XpN`P%##_~xM8Wx$5P7}G-vYO#N6I1c!zOw+pDIwJr z#T#s#z$HW*^@SwYb_8~83p#RoczDut$2dLW7oTDeeP zs1198VBnj=f_tk$sEZ3$7eoQ(zF4+x((J!|0m!lEigO3)H>a$Uw2oPkyLu%BepP9_ zo*3kJF&dy2kzrK{0-LOE$+6!Gc{eQRzj^J%P{-^k)hrpfa}D1;Z^S{17ke049@hc1 z^lpB4{*mVgvr6NE|5-&I)7h4kr3=R7*^6L3utEo2)6HwyOD?()^=u$-?ROtp1;xU{ z14ntrTjyX&6{BFP2MP8)a-2I*I=ul`Y0Ig3AuO}L^OHcAiA;w2IztHaZINQfWVb#m zy4OR-GI)$ zR&p;5~jg(vU%np)^*eI6a*<Zxgl_$trCk-2de@w7(?I_*U41CqL+&3dU$@RFu)2VlDKa^r@mTvYiU|Qjb zvs=|(_iXZA)w^Dxg7l%L#juOBSXANGhCxFxc6E;LMl(L4y@9JLEMNtU*EutZKXv~H zqFKt@(}%=RND5!b`GZ|T%zL>JQtV0rF)W+dh@2~ z7J+7L>4=gupnIsoS1e%z(But>CR8GsWbKDy(j_%mVQ6=pSHrdGY9R4NPr={L)T-jD zJ#BHy&je$Ij#*7e5iC|U6f))J_av;>2dBGBfajcZDa8ws}0bT$Q$+GyJ+hofcX=o4Pb7lZ7={KW$j$C^An%Z4XK8 z1@01OSZwPtv9bbjnD};me}+B5JX+$1cT2k>{^RU0&}nNozcLQ?_&3`jq)pB``J8lz znBK&7-jj-l55&;%D+Dho@j!B2flpxd3@COBpJCt_6zQhGCID9;YXqjMccI`x7=3Kx z8bwbYvw!!ONtrN6JG83MC5jO1Oj0|u@tf|-bH{F;f0T&@NZYRKz_nuv=k!Mfv{G7qHd!T(fBEjrKkW4ezFKdtxTWxs9yeNINbt#)9EI^69!#MaZQUoD64BG zFo!{uR)&f}f2;-oVK8*60`M$~wj7O^+utlBSuim{dhQwUT)(b`P7a^7B{P|OmtXTj zi|1Y-E3yTDHwNX?MQJ_^R#JK<>WBzVWrj2FN$kZ~EKO;d^DtRgDUlvG4;NYQ-kSs9 zX2&5J3W_Mh(^6Ct=i5v>-`f>h_|&dkoe*L|cjHQ&P(o+^ESSHSM?Sm*fbvHdF#u~i zggx8!A>Em|j2vq#M9J^3KXxsTZS*89{sdy8ni?X@bYIyyy4?9q1c$ArMFm0pV#x5R zAY>vccwBp-$TI|;+m6?U&LGLcQ!dHsWYX<+ZHO<;|Kt}mLy$WpS`PP`+GChR!&KB$ zJUAOb-66wvf88|Dj5e6g>skL)+(iBDARifrgS~>Soij2%8RNgk0Wo56^i@~ZKGwm@L z0*3N#l)THU+r+0)b5}Ua7Jlbh;2l4QLQxZR$_Lj$9iCWzn-sUk%{wRMqW7<8PUDMq zKMvVXxUZgoTXgljrCkN0q#5^h#tnd#gWYoADY7(f79*&{hZmCZ@n4!6H^*rj*dcCe zS1{YKjELYRUQ3%<5)>C8f>2!881~d!xFGu~J6I!mRy6fLXpnuy=Xh0f?xWrjMZ&nF zKYJp+_xv>-;JzKTi@8#JP!b(iDSqxH^npJ$Uz4bZ9TKrqkt}-VV=qJ7=3{BvNeTh} z`q^*Eqw+4YmcS}qI>J|je9VAx`W0BFu48s185*3mIy7i{z*d`4t!_+qwD2G6Sq3FQL~V5J!zGBeRRYfsyaT0} zYX~W-<*7ZCV8C0U{V!$Y4F9a2sc#=6igcOG+uq7R9r>$`*cpi(&5^B~mx3YKxb_r_ zmS*7-VR>QHWMogC859W8SRDsYnGX!*oJd@G)dV z;BK4EW{L+V)M8V#>8|eayHedM1E)T<%5;#&ZkbEndRg?gb1B0X+09XLWPq0HD%k{* zsoHC+6cWK+!twL&il|yu$US`AiAT|vjg!zIu$kl&xgQl*UA1?!jg;ut$|x~@jk1}} z@zeL#ay9CH1ei!y0~OeD4`0GUns)Q)d=Z8iCLXjWS% zsvBoi2Z{h|q>my|b#xb8}T&f+@>e_}c#7X#(UKYWR23UJ_(dP>bd31a_y1m|6-9E1;U(xYt z{Jp&aX$MQ1cO*er65{Esr(S+z)GNKE=7vHNB#>y@D3(hg!_M@|24(e`KdQ8wXEEyl zAWP5!__^RKOavrYNNzNx&C}LKe+*QJm8BDmJTuxPk=QCVX50Ck;h?)gxYkxx31cOM z=>xsBP>Z)=)}rENBAN3=I~)3EgW>~JbyaB#!-UkVo~Yhrb3y4NZpPK%@2S0Blk`Ei zAM@BC3Ph zR4cp;K5GGJegbg;fKo_BBrriV((KH=4hrtw%k_s;Dy91}*S_@FS=t$!ycJ-)vA@3h---z?tT2+GQe`kw!2BQ@m}jCrC9fhFLe%|KqEX7Dfq_eu-(E*e zx0|;?1vc^pDH)(|Q~`)?=;r=xVF3oAWjq2df?;JYG{Uiy%FUKi2dJ)EUhaFu-$qq- zilUvj5=kHqbJ=4L+|DtiOd5qNiyts`jEW-OHGTR+~Q6&G@NNc630jJ0#%y zwfM;NYqUp+s{8_30Zub>pVqUDR?1qa-~**uD>c3)KS|<@X#jSBXc{oo6B_R450bN@w{1CV+Fm zm|(J6>~`DJ;55OCUZO3B(B$CE8}_exVCsGWoTDkuqF{<3;++egXi#C=C*p-eFV;aS zIUrrgJNZpy*#^!jmh(ynX3l12Vqypj?bp`-Ur`)U61o)~PIoEkK~B z-3cWapNIF@Q(-uHbksP;A)zO+g3L)EG_Rm_dX_=WxXbN$Bdxt^9WU!fh74-uhkB6$ zqOm?*M0J_8Cx5v4zFe7+eRcb}z2x-#ySeiAe*D^)iM>I$IBy3SM-iVQnU`Xhb+wj7CPV+EnQ7vE4xb*`@*@;*uZmWE*UtHDtO z=dCP&6@n@RB5|te3$we6h!`0iIov6rI%^U_YSiz2!ly@NUNNQlqCFEwK+aYoVK3Zu{E}A#pX&9YgK{c~7a(+x8S-H}h)WYgCTDRZ zk$(HjRj-8;;c6I}+DX)Y5+UT?;5gjKTG0p@F=W^2QR<-pc-)cdjfuLEtZm!xu&eLqXv z!N26Z=`tGEe!1(koIwo0w90c$h8#F5xt0`K~1d?dFe268SQ zP&Gsfp0U0I$jKuA&n#scw@tOO&-E5E{#9H|wX;7Uyrqz6m(4nXE%}_+9B=Gyo!B3D2Ze=EPL_|I6KQSS)MGXuOz|H2BnI`WJsZjrFzENRUoA?`QZ}>A12S6 zvmzpw3c;LUP{6EfapYM=$#~;jA$+T9u}peb;QgsC97l3!JKIE|k*k3}RGv4jPrgH@ zf%1ZTWQ!^6=@HOLIAXmU>vjvgC~w8OBe6yEV@Z1Rdr*JEvl4 z7yXzrSbA}_E z>4=%wB(U!Lb1XV~Z7IT|s_Y!g&U`Id)g?^yF6p0ua|^&wEnF-KzB%Y>1FD;G(2-9P zJ2?}Cc|MP;71J()9^D+*E6-_$s{t8#{?>9AtqTsTo?@|2u%NOyZ@&W!6lea=_Z(&| zB9SnE;X!t^vjp~hSEVp22$~Or(*Qx~7bZ$Yh}fV9$SbRrtm{xOYG9k9B_$rUQ>5*p zE`Z4xe+22c$s$DXR9hO!W>$JOn`Jb%0&PZbgq*fz6Ye=2v}xvf4p%xjr|p(tQ$B&M zqpqM{4Rhnh#wJ*lH5AS{%x{fV~{2@$EyRw(uI#0m)$Q8`-A1 z#Y2b7FlCR$pHA4k2+Y3q!kXhNx?%jqk2IG#ZR?;lBW(5NlIMU_*hc%#40FqV__^ac zx+o#94%i0H9XVAt)q?8p`U@xT;O`sScl#tT7;gX+xsssj*VryUO%2Un3*mA}y_!U> z1-`TScMKD;O7IoxOG>T9U6{)WlR;hV)(~VPaKz!3_pFprW|xuWQx%^jk&`KrBcpkB1*ZG zuBG)*EgqPZulIoXuH8PDd^AN*O`+AA+W9iC3q*eg*p|X3H11?nE@*X$@Vl&{p|xV%vUBQ)1Z~(rP=e(%K@T9vqY9 zH>)kpPQj>{A!Q9x@ZL96j6zE^%&{EB+9)eNwO1bICMUrXBJ|HN*Tx6~-8c-=9f$bz z*lmLQ#MwOk64;KmN5dH>e+$o;SV;#raNT|6qt%yY6rW~Hyc+QQ^U&IY)Z!NqS&|Z2@`e!$NVo!6!@)&9ske=KjbR{eEBu9%eRF^2R6^ z#%2%wb!8QTzUWpkRfI{O4+QT5a|bN=x1d-6zwGmd{=QQ1kT|`@W_qXMjh>zn=+!w> z1TKr~7EUa9a@&qVO~3rbdHp?+TI!?xM4oCGDD~;yW!@)%C1CdL4c)oR51QYMXlLO} zTm2u6;hpQ!CIc*<@4_BC`fx}*@THBq>R8ltQo{Qi7H_7;}UK@+SB&#Pe*8iq=U zHL!ZX=%-&WI)QF$W1AGLL-;sOcJK=;P&|z)O0k=|9yPm#=}rB>34iw9c)oJ8oOpn1 zi6+zGLGj~XR@gI$7=G&Aotjqe3!w;`*vg}r+?jciQT#a~MZfVKWP+=P8_7?JNkl>j zh>C;j&OjGA_OzKZ zSWwV&1Uec&_<3;wOo;Wn!fSU0RD%v98M~76~uIpA?qP9|JeMk2ay2>o!HAWE?_gq%~sax*d~KT!upBa44C<| zo}#Y+I7nKO5Lg-$7hwp|qUCm-MK;a`7?)+PRC62&(OOiR0}MJ9FObxu6ue6`f-E`) zwG}uNo_9{qSAB1rO?sTdxT3-bX`k2#y2U2{@{)~c zT`s6izXGOa5s@xjrr%x~da3@iuqyLsby zpb=;&8Jlu#r47`-TunJ4Qy9CZhQ(S@Avy2s1UD8Ai}pH|q-5RJh`YJxjR|-5)p3d! z;ih(f(CISyUZ^vW{1V@aXHpbw*Y9Ae>a zz#{^?NlWv%Z^8VzNCu%|MA#@`MmLw6kH zU_)%et@8@WmST~8B{t<%G3W}W@_Z?siMl^&!j40c+#POhF@KymhF7CxLicWjrI zY z|Di1hUjEt`fD6J|Hc6napQN*MJhHl{H~QH*?^C(n zQf^8mZQo|Bl!RUtm1x>Xq`+_si$5&YHVQX9{R-+Z_k>PSqvH1H}O?D0^-JqhdvF+ZlUACk`Q`06biDWRo;HzzANt%ZIfo;iEUev*}{&sRgJItZfu2?bC=|2lP%d>C4%Mw z8?on&SGFg5(YU+m=M&I5tf8@SXSq!Wv%ZhZvb&dGh*3B#W6m7+DLb`vE6T_H4Cga< zQcWonhU?Tx4$k1$ivVZYn}!R%HHF7$Dc)ZB*4^!bc}!$MiWA%Lv2Q*aVYu65EE;Iw zZ2dLW*GW=GIdoHS$0v3$7|~dI3)fd;DTq15c>>>En$)EFdKlaM92$qj_p5CU&5n2Jl8O6Kojvp!#xuf7NfSWS6(<^sdLq9#=>oY>o1(*jD_%~4O9l-uG~ zwx4;Um{-ips#3yudIoatlo@eD(CZZXE5~+}TX%K2aBasO?c0cz2ER4DNkFmcNmo^r z!;HsB+WRu?Ush!^phU!*ztSwx*2bGH@gnFim((a_Z9uKSZTvC;XAJ38nS8>P&G`>Q zG5U{`I-axr3pky5tITr3sv;wxv&)!5D`{Kq( zEZsIbM}{vFp-Ap6HdiD2)o}9R2~kVo8M@?4v0fV9O07TH2%lZ*C8KsAIPLbKbRlea zfN819WVD`tX_6vX=GrLPZ4BQA`P_MLDxQFZfN;Cv2X;4@@@a{JgVt8;X0o6^J7q$2 z%_crOemeE0PaWN8lHGLwqj=oK&=2fnfx&lW=_q<7NmI>6T*I<8<-R@D*lz4G-H_c$ zSMM=xt-e_zTt8?RUpuFG!J%NJf+l8Kw+Iv{cm4VkVth@;0#O%GlxvJ&&HZYGq#^$nk=~5NNCzAQ}dUeRjCT&W|V%) z3poxuNa4`M$Gt9*FlHk~l3=3y=}Y+mJ;guB{MS6NA#sYx>(x5j00X8W>}F7y3Lf zV0F3q)5r-n+u37FAErl!Z+eVQZAo1jjhcq$gIZOzjnty=ki>HLAH;8)lb}Xro0sN} z1%7{WVmu$0F@0T$IK%2(dVw5W`-LoD+656w8MUsHQzIixTv@V~&ET&clmk7B*Kej1 zirsbv_YXAH1EA@0sJrUdnOo zD?h%{R(`-rc_+P{*EJup>h{@oE!B{EyrA`gYH_Kn7w=57y;s0NM(}Pik7%p8)jimy zBVjqW%hHNG3wyvJ$LXJ+zjKc&oA#&kQ1Qux0_dsHr_dC-)XRgk?YBK>5I!+ngm;Op zhOBg5a@+2{rw=vZPc5GFo+2Xo=^2?Ptu0azowdrO=V#RQ>^b+@O^j$T<;|;w$quae zr%U3<^MA%uEpQ(*K(Q)v6zoJlS`LIgf{@&A;`yR_Rk(_CXuiz%b)a8v3~feV{JE#6 z1hXHYvlDtjg^0Y|BzX4Yq;5PzUN;7k+>Gq%VxjNUyw&T9V|m?>;W8AHO^8g!>I#Wb z>a^_bS|$0-;R$D`dc`!KR4lEU_4>7!EGR#>?~Js4X7CZQ(SSk9s3g7i%-5GC2 zjN@_!?mZ8=-ZShZZz3l>e;ng4KOh|LllK^g&@8J2HD|`_*@-3;n+XR{9{1eE8Uyd+ zj#==r+o5TVtr>7D-Z1HG7z~kbSud}sG^Vx2Dnm{2SSrb$&Mn7_v<39qeFQC5lb;&9 zC`voVE%nw*s4LI${5cI*9O zAc&6gk50Ym4lTZ)``9YlVU<#G&n0m-B!YP$xvEApWb6v^*$H8{T+y=hk!24Ff=DK; zEbZ!IL$ESlqe8^j z?Mn|NT(`o$7DS_%3Y8|}^|CbIO?YOQOfNpTc~ME9;7P(svF?kheRj{PkS5nr0j9P29t5-elePxc~4;dK-MC-kr!PweoVrg|FCrPVXlCn%|qQeKol z@L-;}+0VX&G>`Ibp^jnPY`Rb1gX-sZ$$}r=uqm4`SY6(T;dsHt!60~|t({HAx^5*Z z=fuh@)*hm4HzIc>K|TEG+~zmR69|e7U0R7mz4Y>(%bw4V1$aYj5_P8WHm7ZAY+24( zw^TJjqfZf!crHX)()zBhROtH$Eu10~8vgp3y&o_1@)bfxN?5ORsI?@~OF13%@{O+_ z&Pb*U1~7$72dhVE2{$=84$zZKR5rOuZz%Uu_M$nZp|0!MMW6H*N$6i`=WIhK@}?f32y{aj^x zW@k|cA;sOs(>^F3==q=KZ*z#>N09PS)!g^U(rYm5e)WQks5s|te#E5?q=8D5KY9Gt zq~g4GmRJ%Ie0%cc?XEyjRF9B18A_S{X*BQbXEc>f!mZFXjyC!B)5;}_eR$t_{nqQ) zMx=xBGnIUC>O<--EWReHGaBtnJ11wPbhUo@RvSB4YfE1>;Vh;x_HI1tCmW(=~=lJ=`hO{VLti zTGqFjT!fJXp{pNlJk`xl^Z@RSX-@e zy1GG`ndf^Igxr8KNO_1M`>niwt9} z`zpg=c6&SVhywa9tyP z5gfQn)$W_h59i+1t7Si<%GCGu7y5k78h^&=8w{vBH#qzTgg${Cj7IZY0k zbzPnL*t@-jIzf{QBf(bmA2bsvh=Q^NIYT_`jTB5JZr`)Q$)Tw|IYE}^;Jo6S4tya_`HZ`4iK5Xd|WvTz12oli*|a(MieB1 zizpq~s`n+?uq3v?eVQ`|uJgq0d>F!gDUF;xZRYtn1%JF&hL$$dA?H?NE17=NlI~|m zTDRh%8{!#>yT^S~vzH0@K8CR=OV3_yt=GTfWWbx}zR8&%r#hFBPb<6TC@1eOPB}RW zWu7~q8y9{1f_rBFGMfwLZQ|EL`XGY*bJ~)L^=B;uXd8$mx6)SD^JkO`uE`j2fByJY z`SKS7f$X1ZyG3a?Mw+^Yvpbya9&OePe)Y{FjIo!ltCzidPDW2b7SoXG_L&*~w15}h z{YUB7=lUZwl&P%ZYCbflt%%!ul@<40Ez%8HL5X|M2o>cR&=s?Hjg>Zh9+BWrdMHV4 zF8hf3qVitv^ECEl4W{vV*nTNQo?ZXBY|qOVVHWc5{-g$3wQ;HP%hG$>@cwASEf zXG1&g)CSRVujuJm=rCT7MzNW;5<~EvoR`}@v1HKM(%K#Bn)GxHOHVfFcD(xTg6m_w zVCcY?=GyRd@y#-Ft`t$#FkJBt8$!g|VzCGN(3{sZ5h>E=6<@i=q4_p-npQ++c36FG ze!Pp?-B6a|dF za%t-^7}_8T{{32oFv(v-WwGCev`IeuvAmS2+|rod z=}Bh2;zvy5YW9*nz%HaabVsuOg;@jINi8iYl<(ft7Z+@T@q*H5xw|jT#St%QY00Kwn| zntDxBs`smV!i7U}M*X8ELzzL)q?xTUHmK4V{>=^-k-pdIR+(cb2yTc)XMn2FHPA%c z-G%ayXcV}TcPf=jeK^#Zf5|E99jEAm3e!kq{v~txD1FO!F$4C(_bFal<2A)vALz-c z@33w&sWq=g z&W_>G;qJX%Mg(y&$d(;kcg0|kgX#Ub=uL* z4k4_jZmeo_&cNiHzMhaL5`_(XX&~5`iwl8l5H&IbjF;T%L zX>;6dQ3CIt=z!+bOovFKphe_bXj&O8CA%#%B|1edagm`KwFbWHp4##ia zo~a7|h3E=L!9W{Gn2-|^;fAeXD_cqfAVKiJ=P=Fz^pZSko+yO7r3>5}Ts=HOyRfc2 z0!h%fhx+gKJ--yhp#R#(30qn^x;dgOEx~Jv*t%$+!@$LlK_FUSdV9Tpehmzo^5p+@ z0m7~@N4Fz|!!;uvl)+4zfE7;sk_6uvG=k@EVQ;vbEyDA^G`PkPv#JVSq>L1TKmh0W zz@VoD_aW9WB-{q!>I!q)>#B)8gW}>H`8;qxbCPerG}tcy27OWPK;9kZiG=SJ3d0uX zt6gmj1 zUEq5&I)XFGnwCcgCUcDydqUpUSR7k~kDChucGRLYu6?%}1=`Spw6ND>?$^Me>zuGC zcAjv!Kl}(yHli0XwZOEBz{B?P;IDx}zXBNogo*IqPJtA5fFT`@Ag~_q%_st99R`{l zCe(Of6W}iHM-T!QkBb{q0jp|Ydw41mi{R*nM8RD4E(c?;E~R#>%u8ShN8rzg)nE_D zg1CU}eFWj*+3+zQV1{In2M?Q*Iv$IFgu^^-jxq+BF&p(F^%LFYph}za`&IPI2*2kh{-=z&gAOkO}?+@~;VRi!Z!fn*suv z25Sle{rAA28$|ah?r?VrF-a86{-~|U+_9fA6bRA%!=wsl_QgHn9{*(u==)d_N3ato zgPr*Bnk@YR01!(%N0*~AHrn+<<2pEnq?BVjMwH%x277>i&ki)>iQZ2*Advf!*vEmg zz{3pClJN-F#@A?aHvq1^44mTdQrx+JSpL6q)Y}rDH4xDd5LsBJV9wvCfMk#ILR#7Y zPd{og9=g%0E`n(gxnd`|_P+sMD98T}5lNDF@`WHfICEkr?78-R9rh70cXwMy&!d!h zMW!nR0Xrx=aLvO4!wYU60U% zT^b+t9-O%Y!1i_68mr@fLhM}}t!<8wFO-l!e;7|Q2zjqip(kJYBMtq+D zz%Dqg9^QeUfHb&wpxIwg7li%aO?a^v1iS70FI!^Jsf&LS{%Asvjlk~ydw?+c{wLzk zUclH4>^7+f48+=>j3b(+VxzEoj~<}l>wlvD--#4k7`s!VR;l l00cGy`xUnXM4;3@;@|{^4>m{$L>c^x14jlT3y@bJ{{wb9OSu35 literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl b/env/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..3bfe591d99c31886dbe4881a18dbd292b1190978 GIT binary patch literal 115663 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

    1. *Ure!7cwK@-=01WnqpzeIY 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 literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/pyparsing-2.2.0-py2.py3-none-any.whl b/env/share/python-wheels/pyparsing-2.2.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..0ad3e6cfe2cd6c4f55923a880630cd1fe940e794 GIT binary patch literal 56411 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 RPRWP?@!*xO1Go)<{{SYS#FPL4 literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl b/env/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..f5950d4e1f15bf09ae1b4f9b7d12b163467fbd3c GIT binary patch literal 9480 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

      *T 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%0ACv3zp0Ry$ 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 WWuX4!?gL={oZx>dGD`iQr~d=?qPE8X literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl b/env/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..c84f23e292f1dec6722b05d09b719badc230539e GIT binary patch literal 124700 zcmZ_UQ*b3vwYQ`y-p4tr=F@l> z`hLoSL!g6zfIx%Ts20i*x-Umm(}93AxPgFB{)@Ug+1OYbu`#ePva&LoSUS5fSlXG{ zGl>IK#FV9fs!A&=FgiKAwD_)jZD=MP_vC?H<=DwGqV87?v(3&kM7j1Gp+}*D;jrK_QOeXh<;)waPI9EW{PpuUIW*&(~wI8qMnpiqs?0>89 z#m5ajM63mfe!bc-&{Dg&zq)f&6IYa8&!aTdqmP?3ef;(1qca(8_}2V-P#n>CcE3eS zTh-1D{n*#0q}_wySDEaBnWCn;Y?@#`0FHD_SXpRQ9$l|P>BvhrL@pG! za#7}yj5WGwa&cv>MWp_j%b{1j>OX@0p&>oVh8DW$vAV z^YsPUEo*k)^2>!^K#zR6G4IkKqz0gO+zf^L&~>p`z%ps{=I?NPG0n^4XH|bl`|i~c zv6Gt%&zoCgx@Biq2VQdh#bG$*&{L7-NjVzA)7w&da&qF3w5ruY^U#?wGKJ-o23%Ym zZGSEL5|A;w={)H%v~Qmd-@f?JXmutf=;Tie+~`~oT3NOtk3UQK4p3CTqp#4o2?_Ze zXV~uGrcgK zy*o5CWXmjnHcFdu0;!ZKjpb8WHc6Zh1$2kH*Ah0@wL7J)4WfpWwF~Nune3OtFl{nO zUKQz>vhGY%%L{kINhTe~G_8+nlxJp0qRo`BWR8#QfyFJ*mQX{+aIBY^NFszk2J{Y2 zb!LHg?yu9+nt>vyi#I>tUk!-xd1xBph~P{gSfMRIrF*8$=K{C1PdsJB?#jBm+%l&k zN^XP*g?zf9h$x)3A@hdWgs3d>moC`j%}j6QuqZT_EmNzD3SswSuyse@k;|-k87b9J zG=_gnGVJ#)yAa4y4$#LjH^2`rF`O>JM!>>5=+~`!k~Hgmrd2=X^4Pf;mu`@Lcf!cr zI1<9g@A&tAj(YPiUb%b;29QISdYKQ6%x4FmwC$H~&QN9N=g#+Xqf#$Sp-3IsxlmGtjj=+_eJwFRxdCTJ4+%cFKg00hS)A(mIq zTeyTZd2tpO>6rAV3TgL=^!;fL3gy|%T{5>nWuFCUirA;~cYcgEac}&4zVGhx7C9=< z{rzqG?OdE8p~V~-ES?u-?!G}RN>;Wd2@4fTTqk4>mejDkaez8G=q4QMVvT_Y~nyQh5ab<=G(3**~E1B zSNtH;6Znny3uC;vHcN6uijjGn_->{N*)WEo?{30yBAyaT%oyZIQxp{NI59w9+Lco0sQt|a^(1zNY3*TyV;bG=qS=A> z>@{Fmw-l;>z4&W2jK!rswn}Kkc)TEHj3E?dSXJrWd>(zMmbLX zhKJmri%RNyBYs5i1wY^&pizo-q2$Y*9c}4LC8c;iWC^$Lo#x#uJn$7~u4#%5-gtHX zYJztg3)ts%c9ob3DR0yX!Q#tS16K;`J95FtDHDhJqf?|XnKGy3?NJHC3SI6NZQF^= zDEy05K_MRhEVHK4B&j$=OA}Jz;gcou8y5osEboEuLcTYysZnm{M=^`kkU5+7#gwo_ zK;~V$Tra2F)`k0-se?GzC2k&eD_;)*|DN-(05x*5Qc7yIAR1wO;1t_XzNNSqCvm2{ zD78Wn!UMt`SUVdc<(thAx{P!%x0rxHRPas@9lDeY3aUv@K(0{@c(I-kQ z3Jd!^9}*(BqNKG@)o%;RnG zs3u2O@X$;&8_BS5B){1$JMsOtZT2{{IYi;21)>#9x1)dc}#|p z%tP>ztkH`lBn}gCI^XwWZ@oKAS49lzVhpz@yzviCM#0xu9>rSt z6(^|-aw`5Qn^Y*kqfKHH{7=F+m1xbiMwk%B_Utvp8h%61k=xV)z-LS2evU+q+HW?j zCVom*FY_INJuO@vT;4a%AWHlml03a(Ab>4X?>Bs|j6_@bh&QF0{ExYy2ASwOxKdmJ z!NqVF%U{ifAqoMu#TipFfcoyxI_Ys){P-Trr>A3Imgt_0Y1Jw@!}x{y**8X5Orm)t z6;wIX^MJ~Xp_Y!13m+dZjbeZb=Ei@m40MA-$1;kcs4u_cPwGcte% zhaP(W2xlt<9*bMv&-fxy75xz%&ZC9jLhGmDy)z9_3h<3CBM!7q&7b^Mgqel$jWg-T zB$k%)2!oGYV};&0JYK0lspaBdIy7Q`GKBq8X+mvCS5DJ<7UM>|1=kr~+A>}V1=o$O z2LUG;=u14mS*1a$7=L{te|6gQ=h72)_rPqc5Nu6qL&tEaRF67YjmfGei;cvRN?EP%2elVe~vfFaD)7__piA znx3S^ZV*2yE<{pXU8Vh2#gtEz(F|}4)DEWV`;J-@%gPr|V+F7W)x?hPYv&^gQ#0sZ z{tUDrRILQzq2%-6QKq~WsYmXlWS<-=NNFV8B{X=dzkeq)F|%D$lUv&L?7qJ1#*{6H z*Y*o*@6~{U*coaVxmYk{&`Ym81+r-K8nf*aEU|hM|Bpv^5lvw&c7cO{9ww1X4=NA4sv0z z^0~dmERX}bnLP0*Fv>h#bS}r0sQu)MM>>=* z+A$a%97QK@q8~J$SIIM2!Nm$<*Hhg^0h>rv;*&5(-Ixod%+sO)HTQh(Bt-!0H&kVe z6~EwhHQL4^v++YtiHoLIll#K+fpuAxLP+Y-O6fJaAi7GE5KcLAkY-H<(0_AB+!iI4 z`;-?i64nsK2&n)3ZSpyX(()=_`g7(hBj{O5^ziSrFWTMf(lrtw!fh6#BEPwdTtcxo zc!_D{qADh)cx@MtgpdG4$zB00yFdi|*i-d%U3x1e_lt1+%9>^uGfdCMwS@`WkRcL9 zYsqZj_l7-W@ODRn(b^eb@z5iwv4hk_HmcRb1d4(& z(Df@|5xN&GAMM;!pUGdX;gKV092rl}#gCHTB*%6a#LGsT-1^BmYJsGi5N%&tW|Q*y zZlUMR>4gQPLe|~q#N0`P(Sx}x(Li$NY(xyyF$mjBx3<2?@lcbiiJD=uWlJyDQi?PQvqGhLt1&h zNUevJCwefRcx&`L*-MnG8;#q7xTDR7+ zDd4h~(vm%T_@^vAQRu*svTN`w((x@+!oEl4VvI?A)`Jb9Jg1u@t$h(pdq$jZ9{stf zPD`m&-(fxUHbXI(I5Yfu`v^0s-{V0We30hQ(83k1%!qqX z7Q9(u*Psogvd<7$Wc#s+A@nf7RETLy{#gPbIW##Xo)iR5J&!`3DrB0=q{HzV-*jx% zJWOg?Y7yVb)iz_tRWYXs=s++zoQ#`T(~n65oTN~k9g&h>d^qlTX1qdbxfI9C9yyzO z5#WfYeVFKIJgdG5+Qs z;bOxLlDFSEU$@lQ6t{=Cu^`o%O;m!Eh)*S(K#P*(VhzrbBXJ3RZ+h4~Z{U2ui~arL0tsWcRWHkUz`&rg5n^pDmU&m;z_1#BIvkBIt1ua8tPve!xEy z$DGaD1vgJwsy$PHdz_h}Ir7)La3(wnp7x?-lS+d~$IHTTAy)qqec{t* zg3$>CC!X5hV4aozs@L9j(h+r-$HGmTjtFN-Gg<1=Fz_#1+;Ow&ZSGUe{|c{M|= z^|KcZb?D2>zOqocLZ^#{1$YjAYX`&+o6o)DW-)HbEi)mV?|YH_b;2WD zUJ%g$0;Lcb%w;EWxB^*`U%wZNMRwol)dT)M!#UoVre-W8XIzPPtv(QljpBR^O1$q& zl_tSJ%agV@9(|Yr>{8IXEFdpo2HCxwtQTHPZmR)R*cue!=)VRokGT3FA7dL@e}OV7 z5qL2yFW=IME^U6;i(;2WG&Tqw{asen_p=-a^z^>HHEAtIzAtrANrd*Ft`~_K5C*{7 zXb*ZB&z$7*LnRenM41TSkUVxXRq(=QKTsW-$Bf3`nX%7GBu`5n(kX4U>pF&2VH36% z>qHVzCHns1xF?DViCGS_I=6|uvQ0#&!skJ~6bf-*RjG)q^pYi`fj*8W4W`zcafUIJ zp||x6njuUK1>&TiTN2b1j(QYpD&#hsF+W*hXPTno<(xb+**JaEp@bbup?F?!-vvvW zHjZ%*NFd9o2*F8!(ocXwibyQfb6Ed6T9M5yaH?=VuM5f#jw!eW zUNG9Qd=I%O;^HVk%}MTWpsT(tgFGXewsv&cnp`(n za~#ZR;BS6C4292f_33SH>Fj(uDe`&AjNKoQhnAH~6_zqDzD_{(dn|lv4Q2|B+?un@ zJrH5JKC{^WagwW<&~!+24JN}dgan_#D>MgES%&Vzz<@gBEQV@W5p5(i)eicv-tGo? zI;>qk|LO5nf^jwP#n8wzVZokx<#V^A61dsSxtQj%f%k4^@E%*x+)bMAr(F`&@NVHr zo8!JvaceLJ_wA|ZhWzRJE$@pmWoGscZi64`6V%TsbERljzWh>(>$4a^5bsVN{}-^Y zi@d|r)jN(0NXq0=J2Bxa5J^V77J8QK+twA*iM6Y<+eVXYBpZ|spQ2yPeOSK z;fMOE{dLuFFy5hOY!Mdrju|Q9kr<;#-fg(odu2;`W9?)3tbuya?N3~tsOKCgFWZ49 z<*P$xH=qwoCp?QR2Hejs9Wp0cz+D-GSIBQ>OrIf(!ivI#0>q%DPuXHKKGuC#YE`>g z1~bg|v*Yef#6pV?^oTW+?6*q$vMf9qb;xU^aFH4--HIu`ftEfC&fexK%cK4D5OtJ{ zHq+23O^EoLqm;OcuLu0J1dGlw&2QIb$RUoZ?&kA#a%)|DV$x(`0xDZcWtW#0BqUAR zy)AT)$mEy$?-_He!FV4~`E{2F%t0w=Skt1$TtY|$Hblgn#EGMg&lHE8$PVtt?P-%I zK}N=mYK%2>cD=t%{$2K#pc^w&s>Qm`&W@L>^<{q2n6g76*d|7;hTAvIiWdAqme376 z*^t_QI$GWuI=w#6@73AS?eV`V>Pqb=+^iAz*vWY^;}LK^ zGYqm3tZ(;GzFTfS*wKJ6fy+=&~L{Fz7J_B|Bo zkrdoE_5i?bv&?CQ4|yCH9>8UlCBqL_L*nchog~4IkHre-`ZqjWV-c>X(B<(yQTQ~=6_{YmTAy~jvY>V6o18$abAhiBtH~>SyM&*K^bMKG$v9;&m(gas z>HLG(5C_PHI$@|ztz3mGmn6W-h@AO#bUx4*UHCEvM99ZDdsD}<2gX08#8>;vzeSaZ%<*6T<{4GZBt1cr+eiLMEh#wGZrJ{;^wFx?3Vic`nQO+-zWp9bjGYu%` ztLD7G&QpGcVOls31Bo8oO!Lsa6TJI5VoGB@U4CmCZR}MQJXo5X+dh4Q_=g?mPpTtp z?5Ih*#v8jLg0)wh$t0a!p?A*j^E8k=VwP;A;fEy)G8jF)vR)N=Q`?>qa-|EU5{b+jofXCN9#m& zxksBqSavnDyy+L}Gji;N>2Z6m#$s_)g4c5Q*$ANy{4iEE`GFZn1K|)#3*>IlyhYV^ zo0-D$Ezo1h{T53H!4qDXs^GLAarPPu^; zTvBrZJ9am|JnXR!#AQrK^62L44LyC-QrdReDN@l)CI}2f>j8pWU~|Jslhk z@pYv$j5Hczlij7>q_IJxl_hqOQcy3vd4j3|(+uWz83+>#@(~RGk%p@)8GBuu1X2)2 zUR}WzX^g96`5>Xu7&bz?oIW_t3)rk}v!NRhzti~R5ae+K9|b(T_dc-Ttcp2U=x-01 znjk$To^ea)+U=jGZirR*g!&;v2eA#<56cGnaE|C$v810nbzcZ@Klt|b z0<4-=Zwn^?Ggp{D*!8_9`O=TJ?B11;Si-7d%J4Vw&eZT}4jSjs>&+`A^pt&Mu{I+; zoGL+L9>d6_?LqY4NDxHJsjY3)dJz6C3gD@h&19Qi!zwG;|44%0u@i)Yt0gn-WsRNd zV$GB_4GQTWR`ygW^xR?dV!%sk+E6Ho|N6oX+e@4!8>+pFcV^8{p(y2i^y|X6D933` z!`aD-{Pxy4be~$AGVj7?9?Cn$$%gL$%|YGDHITVO+5B4wlzZ=(R?H;VG2dkoRZN*J z%TXza#!fA{Ofv@I*O#3r4+cqs+C!Lov6ji1jR ztHPTf!nSTI{=hNYB}g6T3YqO|ij=8FQMh$2ZLPhStBc8q=j3dc@KnXqQU_bBRl=qPRD(^ zd*g13iZ$Jhhxw$BAJ3v%aQ{m0LCUjOak=PUF8OD&?CE!3tD9W^IS%S=i7Wa}lfKXg zy(_{uW5&j1cWVyDurOLip4q<4LL@%^IdZRb@t@Zl5S%r4g#;hmLhrq`&Lv$N=W!v& znYfb?bFJRqEi~|nS1YK!eB=wiGf&cCp$u2~?wbmrY|X&}Bo`x8>4N}CNu=a`X%d*gdx0Emn<1Zhnj4t~hD1&G&2iBE2m+0TSi z`@3etDZ3N$kYyKv2`9!o49O>cuOKuBJ2aH;aD>b4?UBj1m@oe|?rEeX-s7`Ss=fY` zhuXcBygl{Cdbi_PzWn@Isq?esMV7S*a*j$$B-g0xo7};-^9HZN`!r1b!z8EivxwIj zvf*1Go2NWTD5FG=wk`J`hB&8Q6pBm>TV3+kAhsO+bZvU6pJaKK>qKq``=Hw{xSiWd zx1^q+`wN@-kV{0*j}Y*V@7^M5HGnWJEB<~PS@v4avcx!GzW}-^FjeW%^7dV^4p2+x z4{9aBnnr1vA|Ue=`Z}(kt@*sMDp?>x8cQp8q@XcQqcK*R8FcwuJ2^A3j9iTyy$%O= zu6TpbgL!{sC{90+fN6mhsabO&^^enAldO(tT$p%%$8mf%4)Fj9{MUVQWPn9)uDI~m zG8Rb>iIHv(+FO(TeX!wRCNL+#W?zZzkO@0KbM!gdF?^GcfE_|vbJ%j?xT#7D$D2WE ziK`M4m1~H&e%l=}OErH-wK`A;%E8MEmH%a>p~eBQY)I_}vm2k$v@RtMN35 zqeAW*TVsFd5^ErMZZLL)8!{PSYlFQ$UG{!+zY_H*P-)H^Lo8ePvK9LjcpM0!#d(j^ z*ha2T)5^+_$}UOH#}P8xYu%5IY>S@1!fFhjNZV?O5Tp0wsC~_^nyA(Br`i3em?$l0 zD=^M(9>h2E4#;E^z}ZFb%H0l-&jevjhCb_v;2-(<_-FTc3E9mkR(dCE)a2gy1COT z;D$V7vY7sHzl6ZS#DvWIoV@b(-jsT_Qp2(AK682u6nJ{eMy@O6uAa+Nz*URT4d|p0 z68dBIRIgiD!GA8c!TQn70slFOXS1Y(0zuN;z4WjpR>7}P@<_EL!yQJ-kmAY5!qKaLQqu(g< z(E0cy3J*59jrJdgpdx9vq-)Ej<(Lo|8!yU5G|+J-ccQmJ++YQPuP2Ch5Bv!eaWRIwcvvy&(SVc*PdnLYJC)7xIX#be!a^Fjwk~ z5D4&>p-D4oinnxxf{nT6ozt?Q@u|40+%xzT-&U9A7LIOFcJ&$wbQy3e2|@PSMyeX? zY!PqWKJciM-Zs%dC`*N#2lw!=xiDz3LABbi7+CQ#HTHIkcdATIDdnK#)}z{$@rw+R)ES{w zGUeJ6ZGdI92R(uymLLy1u)S*@jW0#6^!}u!_W0}Ai!QRKO(?O7kAHnyQmM&y#73Qy zXGC0d+-o-mrx+_Nw&%?XR$9Iw-KX4$VU=SMUhQ$rbP<)(#5m64d*YC^R}}K4Dtneo zqi%4Q&`2VcO%At)Lqd=yp47M;@Cr+^toNO|1e1No5%3G>e0>Z2*_>Atr_tG;755{n zXmB}`5o-GeSh&pW&xx=Gv{j+Jh_zEb2mXx7JQB}b)v<>8`Pmy!8Zxx8@i+7}n)09Cys z=g`#B_et~j7-!?sJO<4lE9UjRN9Z-Ro*xJvUE4ACv!&FgH~&Y17nMje@#PuAZ>~p7 z1DWf2MZ-*RYpw{*wkVyL*K_Q>s&(B0Yjm$;NCdCk?YRy|C9f#MY+)13U~{&*yhFn34D#v# z?i;NU6oOibg6yZyZNIm_KoU;ElY+p6*oOupTqrBD7Z9eoTS^=W3PM}XR5(r)GEq&% zE*E0LF5(*XrDQE@ifsefdDvlfoMk0TFki&2x#4}rMDc=a25U*e%J*pu>8t__2?**?wYUvvn9JRKC5bE1+hvXwHmYwqBhTL zh+#5yZ;rs10Y6_FT)wWj=w9g6lGPEg8!N28bD3j#8omkxCpME+3-jI4CoBh zKIZ}}XC{^D8Z;zyX;tOz8JLOOex6^VegfbcgY$q3ciak?33t0=i6+Gn$_pp+Hptk` zOuGy{CZ<}%S3{p#%5eD7iX&4sz2h{sT0bR?(FIAN&`O)21nt3~p-pO&3n2)f*@9mm2Z>^9qWx}|6x`9X@yURvVCc}+Y}DJo!hdcXIUyM zxY$lkWx|N&C>uAr`o-6Jfh{-NxO#qJGiqx;=#e zQA9a0qnwaydZYxnIno^7l_y#L(G2jrU)9~~|-vq0B9n3qqPs`YUkk$2Y*ED4K;pq8U{s(>gyO_$?6 zJ?rjvz=+GD!Wll??8UHh2njta7p3h%cwW9;Q?7o5S&Lp*(lre#%o2)arFrKjii-wD zFx5-dG%wc4tsk!S7b%sD(@K;JNHw|Wc!v=5oYi2>1wy65fm({=G<(fUU`*{OssMLx#Ydj+R2nzhuTmgLNws8rU>2FGcQI;^RG`+_YVl zfpZoI*T$i-1r-kROrK_ms%j%k3(kt)akUgIB zWR5UAZ%#^kEu1Ywu{O00%8*YO9`+dVT30p==EePTGnYJp+d;II@hn{!?P6l4K~4X$ zS}&{$1vf6==)zAHxgYz-C7FnHqZ0kT?KbY>nNKlF?J$SULL?I_K52N4IznoHA$#x@ z80a#GT+dL!5^HgwezAF%VTa^Zg$ue@nfR^cuYu-(s!WyL*8`VJ$ByG_Nz%xOyr&;y zsi_~1h+zB+-S(p4asnxq52ZzDiXm}aV5>#R`VdEUjQi|lXK1O_c+xi4v zt@tE{83Ev%bRt|ndlnOHU^I7IgC8GR#z7>Hx`whbkEE02&R)ReyyrC&UJaM7OUmM` z!a{aowI|vN7AwxlLCl8;#DZ_J%Sx1UUK6wMA(VxK*khH}!D<%6&a}(C@D0w8ug1|P zfg%IKjT{l8p`)6d)7Ydyc2kt=I=W8$^~yBSzhas-K2|p-XE`!sTV%x0kD40on_?m# z%LO;Tz>+yD;l2a`){McPX>moG6cBqAZ(Q5a#iC{3sAVRXBf}?E5zQ( zlP<%dK+yn??~)dSbZTI!t7ipH$&n-9rK*;+E@8mcIBcvxpwVZ9UW)SU+61M|=K^Fu z^y^SPR;hEF+Phm=$og+=Gkj^=7uV1K%lndhfaTdUfPn1zfPfJF|9f9~fU1bNh^k17 z?}itiw9~ObexXE@UZQ|7ie#S66MVK&TRWK&yL9Xd-!l|?0EFg{C`Kt_@f?;PsQwk& zCEYcd%_mBtmKHH_OLy19`j-4}TBO886o34?fs}cA+M;KDIX$437v|&O%(iPYySYdz zl{Ej^O-Eg)VO^WM21B}1uOQs^*3J&Zqp*TMBGA8?Ec-2Qw zTWQAe9qgpFzKNyfLZfe=-h5kr?YGb0yN9Rk{ONa|N%K$&a3;j>H2HhN1|pmAzT{;n zK;jz0%@(;5&+NUaz&QXF1Hd1TaJA3s8}&f1yRbR1u64UE_Zg2HuV)y_#s)W2rDd~F zF#u;joh;pmL7;G;wMCWp>fw%&Q>QKt?e!GnZr5kmeV_OvQbya+p^Z_dDaGA#B~#0A zJ9c^VaGf+hO}6`1PzDQwfKabPYf+?l=Z^ZT>g8WIBf0Z;v~r@v4}6HtA@$!gVo1{IX7)ci#m3!?UH>3zjcLBwA_Xf6thm zKC5I$f3Ok#kO%l_6D6R%uENg-__&wNlr$GHELF36wwvCm;x3Ed83A}=%E{|3tbJo+ z^J8>-qIIW1>GyfC>etEGxINV)KKuJDBAjg^`VB?j(Z}9`jW5(cWb0`H*phw$?(p(- zYtDL0-Q90k#HcRq^ylHUO%_LuoXfMH2n7FqmGs678?Es##Ax$76pG6l+V5EP_Ex9r zPW-;Q3N=J#BI&WdlfU5~26*F!YxQ!YqgUQgd42#($;n1a8w0N;z&NAgAt1aALitn-iB244$QKZJTZJF%a-aHatoFKBc7`wQuz%AvKmSS9C-hg>{zwvGEWsq`w{K$Ls$wS(1z-q62}l_uD*qwyGH8 z^QX9_PVI(s(&8Dt);IB~V-^s3KO|ArJ7gf->K)m{IY`S)kpni@m86|qra$T8H?5rE z9*x+zt2*ScnEHGReG|RQWX54}Nt6LjiFMMkBaUJbc?O;l6KW8dA~Hgo-B5 zJO-AgP*#`WMXi)s^y8#Bo{bG_s26xpaD#p)f(0lnrhZ2Mi7sm_@-T4J)$o^_n|{e+ z?@}M6yQ$d#;4hr-!kSy`(J}e-884<>P-f(R zk?-lVC8z(8Z;cvtEyjQ38@KN9zsNVGGQR$b$ezGV@ZMclJeGg&5Zji*2@#kSSkRl( zf5`X7Kk_Z7T79PKU|}vUczYTz^dw^k~8UqDDufbdxDaPu$QU*u@>4l7Sz*6pw=&R4QQ-|87* z8{g=a-pOxI7!!M;f4W<=aPa)Ub$8B>|LE@M_|?^Pte1bf`_n-A#Ht`%dP;ALp8(QI z9zv1D1joNQNC)XGBC3#e;HIlb?*^pFH$qBE*v-bnMtnM8Ys7d#FWocm=)e&>;h8LM z_5hHR#Q4-#l==HPzmPkUvUufn8EHQK7d&t_AP#`u5l$n6JTKPZ4VceGx?m!C8+}>ZbgWXoK|CU}aj**x7vm z&)|Tv&l#)SL;-d5aV=roV0ItgqLvwY6Nn6)_~=(z_da_?5O{7 z-3i%{Yfx2XZ4FYHV7+zbjj$xhB#@!s7NVk*bgb)VYP+oJ-HTpD^lp z@d7w{9l|q3#ILF9`?EyE-UtiGWKSkEodWQOq4AN*5n+M9pr)&Op5T} z(FDc4Gdf7ZpYjJCDF4|tL(}7Y^@dA+DY>L;)8kn+DGbWAr5Gm6e%|;=JJ4t96Vtxr zO%GKF)uJR@owC#h<&%Z74uphjW z@o+d{!0-_w%{n+VrLL7AIg7|M2{Ifg)DjVjkS%-~)D?L(H({J+4zG`+oxxOscEWB| z0+!p6am121&-ZbSGP|(5P@iT`W-&OA1YDFA(_v3OgPfSFD0cBC93J}rqTCt(C^xy7 z+0hj5yCt0deo#6$q4(nX#q@^}mbYMbg?i>7VM$T`gDyI~V4+Ycc}7%Y1<{YuXVWY{ z8%Inx%BcVrT6Ng$!9=OPm{Ovf84q*yf0nzzV?ySmIfBGJqA-OX6XLEh#ZEK|E(h4x z_#{OO>lFprtxecWU(Wp2m4F1h|4AV?8n9aFkNQfSVFBA4TRhMRz{M&JjhE(Blg%`o zZXRW~?equ0AKI4$M&=zBnEotL`GLnq*+rpyQe5OzX?&#Gwk5DdQWnzRyZ3@W>@)a! zQ#BMXb2Pa17;`-1s8WLr4mV7Heft~r##Q9}BhY{p8LvqZ3<;2+J_&QkA#Rwqpmi8v zz`=xpfO+onCM;MZ^%>z3PMox84q7mXRw+mft4Jh3cU*El?k_CYV(GQhVX(%5C2I{FUdgL+0Kc}7L(kb@?w6jC` z0%Q{8nWLxhcnrt44Rkg$+(xgFMFN1I92oCqn1F~g_6p4NoAFYWTapn~Td^(@USthb z$eOAZ9(IBneL}0-{lwdS`59WN)xr@dq#I-_@f=(xdG*x&P87$efh#+4{>9VT#0W4^ zh*v$qQ8@03z@i}CB*po@JU z8F(9LLL065<&3AnQ@TumR|wm?`nT}-YXMnOJDUo%vA>*xH#y1u^LuTihmX}u zIH`D7S=3VeA6?WU$sOVIld5G?8HuEZSBVHoDB-2-3@^I{uL%YJ@Wba8 zbO$&wrq<3sCo%Pe5&!sh>HqNUivRHKRjKeZs61+VIOK`Q%3{@$T$5;z^A!)?=2K_s z(=>G3uQ5a!9k7#6&@vPsDnY8H$zHv$N|Q5diew7TjMGPPk1^hje$Yp3sEgrQ8kz9h zP7)v*R=fP=L5cUn*|RT*GS<^wZr+$K&&hyQECk=XIu{{q#D-9PdYn1}VdP@e4H9?M zdL(9sndOEVm?{klhoR!-EEfk{ex94hglv+XHKt{utVLjp{c0X`Ghf^^{Q>GiR*0~Y zJQ1!_YH2R^N_T3ZO1?ms7+uW2x{g*J`zu+PxA)*M{Q+oO+ z*X_oGDqa8csBtH{4V$1$a%DB*8`&rhWNJ4S!9f$`$c#faniG6IVtnE&W{1GkZL5a)nuT&zThv zeYSRTS2!^Yz$x!h-GvWC)@$E0EyE~-87aNe%97zDA;wn*xdR&0SD*Gi) z%N;{)5#Et~C`n+weEW*W$8*cnhlx}=fqAnvQ*bfXlgG18YFbB-#uJ}X!tDL_y2S-4 zM+>#A7|X*_8w3dphj9T3$7%Vwr)`{^(XRZ2;jMIz@Jq&l-8kM?j9m;~9&>Y(mRn31 zM5ZOw5n4!iah}};DFQ>QakL#9#Xg4IM1;6jcvtXtOGGY6*r+j3JOMOY{QUueyPUa23+jc_2_9NS{cWfv|H=r?GNmWXAS4{ zEOjFXug5z04#MB5zcb3+wxBBLG47@K;l=FAJN= z&|)1)(wMqgETa<~$cUcAfCYt^cBg4uOR3S!g>iA()TcP_RwfXu)ow zy33Bu+#XzCD%6FLL|UZQkxsu`k}VIs>t7fbUh%H`kg$m&2PGF^WZ2}cw}aU-cPUem z2PZFxyTL3Dk(Eu?m(PPa9{GEYz+WyR*%lYoJjqnn1bJ~V7?uPoWb@|_dUQ2xDl6fR zA7}N%Fwr7&6f-5WQ}l|a6LIHrz}l&^@vF^s6%!rudoH+s>C{2WF4H{8uSh(7jA48?4TrJUg5}#g}k+XVGMt zGL*#Zk-HONH`y2+YRZ>|81+=pi|6C9(mP25O{g_Sx~cfeHjqu}J0MtdTq}R2M^1tu#rJ`zO5Am^B1a4$2;|9$XlF71!vYssR;wUc?$21CCUAy+-(|-`QwrfWH zFS31~@!w=S;!6I1lkLX;lWa%-hirrXBimOV|3$XjIT@E1d9@|t&HjsQyZs~Enwh3( zcviD#`s;^ZT%_CPR3j6o_geY`Z`ZOBuO`+X}PLtN){+p zNoKTqP9kSNs|y6z1jHe4tZVe^hi&$x^^f_FAgQZ4m@4pj6Vz2_zURQ69b zQ5`Tzzc~z-h2)u$99z3Cs*q6ozVVML#*jFvqO|9wnv=dlhQg)<+-gek-&qHy`!@SN zJpR6YKEI#8r}O<$(xtmaKXP0`H^bHUgu+(L5{l({7{&df|Kas@P&l(~F8?d8LQNZv z(aFxCn3UeI-&5?d`jxyUL5PF|B+j|>R_00!%V|aJ^+uZzpBV{pV@t2AjgGe9dWy~Q zNE$QvC}wB*#BJ$erpB%3EiBeFzSS5>3l~m@6<0Hq_w>A$a}*WV+;@u6&E|I*gb`38mwuc{*#Vv+qTuQZQHhO z+v-lo#vhv<+crD4vwO{&nLTT;uYFMGbx>7rReg6o-~LVdL4A*OC+r@t$ug%_p(M*) z$r+v<1)Jqu-{#xr$=$``$KlD*?JK<#881nvY2^Op%~7R)KQXqG!iWo?_^^lHosVbH z25xdjahrr0iZOXMCX|zIqowQOz%Pz*;#1r>_X#nSea?oV?o{X!LYYt_Qs+9OA7+Mi z5J}v3-u3xhM7s|stM4>Lbx7m_c?i}kCWK@uO6G_I4)eA4t3<2H-YNwC|CiQgn7*$5 zpISR#?H^iO3htj;8~?A?rt9MMb9HW5{D;;aANq&ZjvQ~^Q{K1@^NULpko)Q%cC12q zTvK@GD*TJJn`)L+$*@+LV?k|@wWjf-D3bG>K&CT7`)tB(k|Z(6SO^SAhR+^vj}<&J z9I&g2a>Uy7M;sgkSlZnC7N#>d@p(Fh$TTqr$JsFb;KYf%qNX{M2LHs2ufNS+9DWaI zZ}0MbTa)mU7>LJtFz7j)X7;n~=|&o}IcaroLD}_lS;{$lE|Nz?HNA@;I@H;N#_2)< z5C|zD5k@5rL(HpzOA&2r-%iDLVnLbNUzxoEpMCm0=_SX{p!PEm4^;JUNxyJ`*#!pgbdX<{b-J~1e8tzO z`IO`pVdzKAgMXr*q9T+TWVEcr!x(j}OFVd}Y%ptg6JXB~(RT zSpoRBh-tnEI}j$pCvjjr-l5|24a7#7N0B%L)IfAlXPZgKT}M$Vilqa$-Df@gs>!Of z-O;FhkO*C$b)dP;6NCp`rd7QFeahfFX|Qwl=O&WIfYAKk`)}sD-N4#v8>$A$UO5p+ z846qL^4DiGOPYg_A5PjqcWo z^3sfE@vAbI7A5C}^*}RMt1jcY$sPf#coO6|2%D>GDs12vp<2s9;!x>u9Z&WKmndT7jq+UU;(+KB? zLZcggt1qtqEOZ`o)UDxUi*YEckS_FNLsFP`;!`{G5pz9EFv22u=3_b6{^FtxS*#db3g5Cz{|3)4vc$ZfmG>Nw$=6}_+gxD% zC=mORZFOyv~L_R2oz-|K-<&FsxW_hVh$M`Z0=%Xocn8>Uj^1qFh+<@p_BIp7)Ss zabMTC2OEM-WAe>KaU9CIRyos3XvFZQmx!zzG+No{auX1iqq|*P_lM`6?<)EH+4mIs z+~bOKYX+X$)>#vlMM30a$Eh%(CSik+>n8bQku+!t3OU8~R>g9ZMHNfsWYm6`!h^*`wC z3ML*6Xm*ZZ!XJjJ%+-_I7fxvU8}p#>?j8_<->)7KodfSwS41oTafTV#F(I?PVA42G zgob*%Tp;&lsZH%%{vPzkbKT}fGV!k2h_O2WBN{dvEfQr5Tuxa^i1>L?{Nci9pCUg) zQ%G<8`-j#+@g4LC#ySeF2S4(9T z>nc$l@QSP0kC3`T@k=h{qt^`RpR>k$Oz27fYoBoZ9|GBxQQpSUG5g&RIl|3D~!0yT2S_O+Fr<&Z? zL$XMSb(#?!p})rCfKmi;Z3+yKP=Z{p2^K?E_;Z3|2%;2)Yq&PS9^BVgJgk8J-=#M2 zA5y!+YQ5GEW#)J#uOnyVGX-WOyeR|`totaun(~-ZZi(FkjqPz(3HHmDtHMAXxVFbF zZX)?o?`13q2qObcT3Uuf=nr56bbTmyPie7IN#3`3ZZMg1x}fwsx8oFJXFNw2dK2*X zL34RTL2V6SxI5VIANs0)6=LV7Q4m>8@^xKP;XV6qHEpZ`H>5F^mO5|Nj*nTBy6#m);wnZ(@_xPPl$QBDX!0w0iNr9nNVOffiuxWW8G9aNb#ep>V-{*NEaP2ZNN{gQ z2Fo@!GobkPVNcb<(qoX78JTN8MrQfGV9A575JXRDC{jV*zPTHJKa5r7!GZL>LT0_ zB{7-UW9Vy6u*_H@aIkgrlQ^+|jtn|y+HG=d#U|=k_h?)wSzYpS0?Yvzl^BKFM=Wu`p6W-bZE-z;2iwrj$i2VoS`@*-x&E|STLr_*9vSg3j z9p_n+%10}yQg#UNJM9bFQkx|huAmJcUC~^CSddby&r`y$5e;^Nwv*t zz(+9tNwp_4JL55;hzWQVFe1CZ)8+k>YR@&tK;)7BgKE1uBM#{IGBtu-|5^3>a=O0y z2i2bYFI1ZldYFHIsd@0+JdK<@3H+?kQsN1dlkO$1sU?x8dob$f<3QZmJ(*soc7dLqaSHiAsJ2$Ej!lJwO<@k|)55WXNN4t5ov06w zl`642$XWXPyJg1WfO}NQZ5g87!1>)0(>1I^osy3jQs~UB@^lE~Hdp)D3n`qoJD&3N zaJ2rbZg?a6rIO6E7(uZb%HfooMNkk_XE===O{d_k^askX?yJpeI{q-5D(u>}i1a^kz|TRvkI`^m!o6{72{ zFm+o?6qonr#hZl?R=A^P7uJz$NRLOkLOIp1oMUadxM3#@eZP0=y{q~_sdQ<#d|I;> zD`R9|hpk2&WndI8BhTW3?i7I)*UV6^Np+LbV`vTl>JF>+taCD4tgOvEj?1A7D^3zn zNd5B}g4=dQMR$7XbvK_8{LSYKs_X%x%tQeXABZXc=dxT~iwL`KxKtZnY2kmd+AuU?_5G8M*XQwe*EhRy^qomV z3RlNv-MP2#?H;}LAS>E@+2am^+f;E0V5?WT&Ett!mJNMGPxCpD@mw}#f>vf%c9YN} z*KzslMMlkO0(4KUFKcQ!l2?2>P}|xE3NL)o*w@V`%*9enY{^oqAg3~gyp2{?a%xKw z7tp*%BWRXb^jIeq#S?Tn=#7Lqjv^mxZ5j4xRULcUKRx|kXy7i1%vHGuie|M<4pMHZ zSi-eKYmt;M9t@=N>hKM|wYFusL{NtRTEuhfoC9BSXPd!8ubHZH+4+#C(}uspTo07n z;1KK7{zFkL4>y!)C7$XvIaHFsz>lQAxU-2#$!;e{#?2?jP-RfAZO;2y|^rsBUqxV$~oRjx${KuR_e*LKb64#AK zUu5m}TZjSlxX1?ZBs&I9&1UTI%?eQNfhG#upT7m_E#d&ud_eGlM!;eyS4)83#812E zmzy5NbTfG|{FZ=8xb1RG(2-k9}^R20eeqYFXyg< zn@T66I|+bAMUH|$0@~l{1)k7)mhBG!?b@O^uFI0S)gb_;Pda)heIQg|wXQNXE4yl> zM!_i(9PKzwTq;+O$1y)W7WjX4ZBlPbS)fpI9j15PzUFLZbNg1*2J=FU;P4na%FB3k zdHYt1kx0Zvy9T{CpWKah3`y!ac$vp6ZIsv7OEy6B29gbJHqjeLDX14A!nc3Gm$mQ$ z4qgh1e)b|xIx>-DNu8CriU8&9taK$Tjm+LuC)-p?L|2hI8Vh&Z3(qmUBQmpGXKEZ9RWUGKD7UdwGsXUYp?vp+O|FMS-(09 z!@3FY6+m-N26?9o!G9S*>L;wg6K&lKT+M$Ci1wyFPlh#2cFD50$nz1UhJSo`Zo!3=Z~;!m}XNHNm?FQtyddZ2YQe z9MwQU|NQU_O2Ea>?))!xi zwl>CH7;3^_1 zw9oj=^dfh#9_JG(cd8Qg1eOL(6R>!;EGhdGXSv;G{U+xoz9YtHIq-zrayY)FME zC^g#lA%XMojI-B>Pk=O$@;Wjc!jnn z=sbfk`^nvDwJlq8FCp3tQy~w&UY@;)L>Z^%{EkrLJHloCqKD zMS)>$x_vHObIv?ZNaqA!Wosdk@t<1T@_*6V7XL+ShySP6=F6~P9aR)~gH(5KCTC}; zO55I`717R7v(o!Nw07P#oa;LKyz_vs#L=ksg`g4l(zg$Smhp8A!6%at zf*hxEm7G4EI}fL9F%w++Q=7ZazItVVJ@1`kExY~(iCMceduoAk(%|X!(hp{l#ro^i2$<&n};{-%8vR&--x;o4GN|a5qW8_{!I@s@GKpVjA zVk4ID3b`a+9Uzw~)BkajN1^2GKpa2DK-(buN9^6|HL*}h|FinvtTuIDw%@;7Z4u~V zt$6Wdz+{Fm8%fcgfLnDnV)j-ZuROn*h_`^n6%U2;cQ`P{s(g#(dSObW8i#>5vxtgq?Hf?99oOI+b$lZ~aVl(1kxSw#qv`ruKcY z7pJfre@@&=j2c^_i4K-rm(&S35&eC&X)9wbOS;xN%j3aUvL3Qkp)RL`5sHDJ}83&vHUIqHu)Sq z*_&*|OdVa(j2UGg9>L#li_|@OSZ&xJCJbE!7ROuYZifdVo}|bl-_s0^ab*-R{IQ=(@G2y z04RV50Pz2BtF0_1qM$6=ls-CDsEHExME{VpLw95}3(I846ao^$Y>Q-`Z}H9l^+?0R zTv@(Um8RUiIkek{M1HW%<7}M8hbX{PU)`ec*w048P|^=;;A>zg{kKZ^b*yi`bRAP- zT`;!1ZOmxb2p$rQhBh?EJtzuD=3rvLm(42zY<5FzFtg2>5hNN3r!LMhXp#vhA?@VS zG=5AHl!aDCrww*nFkemnMHn3bDwOJ;lG*a?HJ}$CvA9+P%lDB)Exv+BV~|>41Iv0= zMT3v;5Akl_S>H|TBMtzn#PJrj)-Kz5ICT@_JgF*^PZmoyA_e{|^$aFoElgkDI0N4g zK>%}6EDr=sMCqB5RXe!MuXdGReTjR&oRk$VuLiuug)Y-!b zG+C&La>7X4B{-Y~LuYZlfH^R$Fgc2BA;55Mb`h5+wN=F~7em8RpDsoYaKT|=KrCSG}V zj6pDl8mf4gOQ|FKqf%hdd>{54(Q6#3je9E+JeCG3d#>3RG#`B5}GT~PS7FNv(J|svj(%Z@`9c8ih5oSDyWqE zjJ{SgN#Tz5sA|qFQu)h?3r{}9ap}6#74zlrrh=N^7TFi?EQdI4-8KdgY8P`$>mC_g zp749CmUH~I>!YTi%Ml;vkI^r%$hMi+$#$5%wF!6hw}}u-g~R<&Gt6oL64JK<#A^zw z$Bw%>JQ-yaMu3gjmFJS!T91u$+S5N`WF|uD^qBmzNz>vzHdoO9x zNS*Rc7^5|@_B5!weU537sK?fTHN`h3Q9ScEnwzb!TfGh{p*etr>AeT77>l_8orOmc~PSrlKiuBvT{Vp_S zOKEJ69yMJ{M%BEdHnkpphyjUYou|;Uji=PyuJ^dXT5RnAxny5^+**t2O6ZG)U+zK~ zuJW#>g|r4^Ox2@hw&NOm_Ebu7u#|!J*m=t-180g?k<75`!pX3)bC9qumEI~BAQ6~ zBr;L(KPX0KEW4+zLLg}3k(@`h%gZcQ9%~rGFIs8Z$LbkQf#%XCoB9zAcp1}-d7N&r zqbxXrj%RuY5xjKWM+Hi~zcQ*+&mF6I2J6+IZxWlki1}N2!*5PZ;()(F4Z*w|4wf5g zd2{~;3QJd>X`_^n3^MuJGbPo}`X80|rCiIiC|Ix&1EaT&;7RK_w~+k0F0=g!WwWU& zYPqL1Cx(U=Q!Opo>Tqb{Gv2IA=zR`$o;~*soQnWVUJTXQ&u6eAhe5rL^3l& zRF4+^7*_}stm^LdM~lCh3@Usuzm5@Nk!?GgsEbWDdW2DdHz}A-Anyo<-VU5C)#i9m zxRkKj8x57V*Ve!s^dX}BggV#Tezbu66CY0rwe+zXxFU;)XEEd4Pj8Y%=PU=Skq1R` z;v|_^3A#h|f{^oJ%P9A>Hse$0d1MnsJgJL*P%`kSK`*h2WOv(C#)DHZ0=eq@a^v!a zIKzqciD5qAIdaze5^`80A+jKQ^UMEF#0_tNJG8jH@)$*dVrsF9K~mym6(h2fB5$hs zd^r>dDyzCj^MaVWe-GhLM~cZgijO=z)iAvYpoWg$Z&4>t@m)11AD#wXr24;)1k337 zX~T?Y0H8`-4>}Ef_>2&+fS!+D3@-Uke|uzvGmws4D~$=TheSO^QhF&(?b@A?CKFd< z^FyUF|BVy?SWr)x`s_)>=SjeLM9F8;!^@v2);*xbO>pGoGM${b+GbU#(M~$1ZP z=4pgou5AMD`O_v&&f^#6pVoJ#5S4}wI7DR!2(?1QY8tsi7%ABn zWvVi^xykWqnMJvY%Frk*Qqfkxzjmw@yZvuKGys4K0RWKw-yO3vb2TzGay4SGc5$#z zQ@wInV?z4S;0v%OH>dg_FR;^IRHxB~oHg7VP$f>m8?-U@Y5q1&^ZB&NZS-p`!t4i> z$JJ%tkL{PR(y)8|YILq?iF4eZWu3!V1|dieoOS6?wRob5KGq-0*Qv7%`s%zWJS?6B9h=MIj;k2;zRKw3KHf0Cp<ai4mAs4UL-KVT>^q(zW+pRaGFWtObO0>(?VZu#) zcBwvaUs>w>_BDt#sGQ~V(AS+k@l(|jaDz}!+h?(rwS4fzH0+>crCd#vn?wBJEQ&7{oJgN`Fl zJ^yX{i~FVA3-fn$L;Y?4AEVsW!O_6h%-zhE!PV21mVRt>RF>rk^uNuRWPyhWH!uKz z9QN<5`G02&qk(~yy_Kth0fVDgn!1j|ItQBnaxIr5(#Rzq$T$H67*t)=pLBqnAsfRZ z)y!PdWEhE>{$53oe?*bxXw>{KZ>WBkm#K^W0t=wlQ6rM?9jAUIW|h!>7^^E)1NPthZ*}@qv;C@h&Gg=Nc`I03lT=5HanC7;n|v#&Zu4u} z-&g{o&iNLC+ZWzl-T^bUl0AGQgbLK+b#sLos_M;>Nhlot)pd6q=89~(hNZFmSR>Ml zn$7Z>Tg-Oj;-}5#>F|#Nv*}XJVtKm0Fi%R2p=s&{Zv*9brObIy1+%WH0Ez&E*-{~n zOs;Y8RX-;#^Q8t#IuAC&1#@fh-ci$-<_#rgm8L^_8V^CO;e98(%D1Ag14OO#ygpLx zvU;NhXe8^72e=hva4nyst8(-t_f0p;@}9p|rUN z(W{>LorWs9tipG;q!*l9TrHb(BQZUtX(o$ZP1oJ$h}C)rYXix~nA~@;+C*_I{Hv=a z{YTk>+gP{;gP8GgK2anRNs{@yW!347!lRo;>;Co-%lDZ zG(@vT(sAHzX8GW?FuAb4;!b%?U$584#{m%L&*+%$2+<5kx&xTQm6WqSnRO_;vvX6n z4#P1<9#F__fzuGUl$|CRTCGmZ(il^0P^HDt45t|Nzh8Th^Vj#Nl32B8Hw0q_XK=`j z?R-bzFHoeYifCjQ+UUoB{pkwlL7Pztu#~YT>A{~VbB68=x(7o7NLd%xhx1bkO34@? z2bQcW@gvt83)Bl3Uwcp>!>Onh9xC-5NvMYjy>TjqYVo#B6q0@a!K(5S*39HcaC{UJ zrV{g8(H}O25hDe!)EBECublcoA^~+aUe!qZ?!Ba@92btnO1`?^G64KoRGX{DAOf0l zzfL3OSKt$97T7YnsFYLVdFN0Zl2r_7mx5}0kViG^W8M$8KRh_d#Ro+{vkNpBmL-!c zEAJHxn&}dQ!bYD$E!@YVw2#s^YKdZ9rr{Z)^xFuz?7r~l-F8}71#r;Cz6Ade{%);- zE*XkG+bMzf7C|hnni;l?xz_#rzmD}UTvSR!ipMI>I<=qK5FCEqa?$74qFCBbpeAv5 zd_0PX!y4_LARTyPJ^D5gu!Ku?pQHlYP;Y{EgdxM(DvpP&4;oyZ@eZMcb3VvlXrGmI zmzEvM`K>4uujHIZO0?Tg7UKL{KQ~D?TXyw0Wtd^!wQ4N`A+{TM$(zl@0=QhUGM%+#3JQ$PLm20bLK134Jh`FlY;B@XJ*Hy~I!PeHy#MR2d-sSH~ zRjsY#u)%@h|5Qt4i#AupDx53;#>CWT?y?GDw?-sI2(ygkLKZ)%-4cm6EsOcK{lrT~ zo|Mez-d>4mLw0+;G3^oGX;l$it)5f8#bMm^H}kwwoV8nBt$WefEZ~Q&rIz+#n`Bd! z^kU6h?;q{-WtT^z$`>BY%cm%Ngkws$jMXv+oIX}QhZeurHfaZiK>_q8^Q%cSY- zO{1cu4V)~CD%mGb6zo$6%fjSon+;=i7SXXM#4$`KzmC7z!(G=OhlVL^!flsKWnD7&cjK-@ByL=OkrcYGRAyz(T z@k|nw2>)F+4{vYlPk-AA-YjUW#Vn74XK^MJhoo^GkS1;(TMyECT=gADenndyRy}MI z4Gr*Z+Lw&hc4IO+`blu)D)$3t-(kdOa!rQTxtQPeZ7abF9Y*vBYFY46Gt<8!i&Nc4bW+vBE&g;`=0io_>i*8Y<7py| zv$U3#P0(FEc(5qiIouvS>PwO*?~$&ADbUGT^=AYZfeVaJEb<^Tgx-YQD)UHw%1qI& zGPEH+Jf2}pZaW4&}4IwG4ydrPK{Vhs-jfN2rqkBDaSU+ zIJUHqpP?H$v{aUNxO1O27Kj2veGkU(Qdr1$@ugol$)wGD1i`VYE^L{onQ6UygGcES9d_#yqV0fH>$b7~@9sc6GhN2%-2H5p++Za_3p zMHpTZ_#5F`m(g)mtaTjgA6s4KjQL;JY({=Ni}af09@~OMcF^tzBYHd7GlVxZp4L|I z3hZl+x?d%dxs|lFG$PJ!fipg+ryURqX=)UC6K=E!s0J;3Klu8_%(B7fTw$|$7sVBo z=usaLY`s(I>3{INhAUg0WED$NjcVzuHKkyr zao+P&DtT?%aT$oE_D_H_G0SRhwBYQrIThM9UZ|TuEOq^&%{}%nn-{l^ z?F0=2(Sv6y0IX`VjUOs=t@hm!%}aEANZ4uk*6?ymIxJ5LIummTI1=q3g|WCnw^f}bL{Q1}Fk{|V!BbN+sdyF;`kknPYSyeTr~w0}{8 z#!hrOk7~dxjou)=KO5{c3dcJlCC=)- zEpFB5iC0n%WKU!dM?D^#pZ>d$Lmk<7ed2+J2n$=LH97+HS9!Xjl%`bwHaN zcFCsD4}2|P%loWS?krY)8SAD{RZT!3IjyInn;O zeigHgi?wC`As1$iAb!$PEOhZ0uJ?^Dbt=YvLF|JJq2zDIR(b6h$`1{NHjEHt%7R_& zCNPK>Gn5N{_9tA1f(2XJwE~6B5#D|=b^Ost8YZlX1w7fJMDLZFHQ`xf1-S@(N+lPu zz}3Ahde`0g7u`M^SJAn#+xVlHMrbO%gO3LLwJm-BAGYDdABMy7**XugG-a&J<s zX?D7AvFfD_nWVFX+%$Q1@`ze@lAa;B&LV79)D8`!MFPow+0ROCZ&x6$IK)jpHjKT< z*?8HS!)PuS2NQwb&t~LkacMj!_Em>Gv+#1TUhyV;KYMv%d!i>LnD|C9T5oX6g?rhwa)HWvq)94HCbQ;7Bj77dbyb3!BMy9 z`zrKh^oxkVcOOP0tCcuH=lQh|`d4i!S4 zQ970=2ge;iXg!Iq{8% zQ$@GJ!N4iO`IqL6ol|!v-72ESM|U&r8Avtp)XH}+X%102b|5AFGRntJAJv`sAD#>w zAj;9%pI<<|H&A!MXh{bop?MoJzl(E1{@as5dG*f&IUgiHHp033l`iCm1!lWa|#Zpp1;QoB2@`*$$ncu#|1}?&M={$798t5K0Lr`R}_ZJ z#DV5^QF)~e&-Z%DmuPdTZ8D0DaZ@q>|Jpk1Ca*`~EHdA5b29cp(r zK#fR(T^qSSZhs{63lSgw*vQq((rC3wFvcRIFl>vr>YnIZvckQ@odovo@7&FwY8h^P z&$d#SFV%DrUoJ>>hHVj(Zg_biR~E!+HEF=O$YJrh{Ik9S28VM0_jiMTJ&jz^ZXQ!1 z0RUwz008=bIgOY&*xUc}F!J{-GO6?Bu-=UFwHW|z5Yp#-Ok*|Il*hbJ%;?l&td+dn zN*i9IXd2brH1dl=+UY&~z7vrv;Px|5e6;m4b>y;dYVY_OS{IyfR| zx~;QPDxI!mk~%r!!kZxHu+iwa>A<89jd~@SPL>AoWXcA60!jP+pGMi`AQ z^*lV=;+e->(m>U0UO)pre2asQWoLCpfq?Dipl>_UhvCCb>qsb-g0Ir+<1g6$5k$sAMl9ltEWe`e?2_HF;Ms@k|21$%Ml6wIX^<^tf2C;fC5*GsUakA_> znIJm9JrL2L`{I%3z^y{I)VbaBT^atu+0gb~#)$k7bNS^CXLwctC47WH3OdAz&!~}M z+wll+3nRRNUvDy$@a62CdXxq&Kw*q}jM6ZXUFVxszYA0pRe=s>AoQ% zXGclqh!t(H8iv+&ihUGxg>H2i4WdohUK>lyy!&ENu=v)zOswT&WaKQDqA&;@&-swZ zaIi3+9eBKxTs!%gDCXq?fzEZuD1!%L`ea(=YlXqzhJVt`v1#RkC5=db{_G)6vO_)! z+Bz-_qEAhtw0_L`gi)PSWtZ{^`RE8Y1DCzN0fT?j&LABmLwF26*na z8rH*_HXi+Kp?(V~!r6PomtPq#bh=|G*j)vt-0V#E?F4q|+{LPK3*z8h=B%!sI}_yo zn6fYlhYG~dfjNnI;~Ld$L$@6s5N4?-yNj>*CFm$9iw9(iF%l8bO~RyLW~#$mdcJZ$ zM!zu2QUK2gi|i`?ww)OAz⚩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%0D-Gn_Q)DWlFgd(y@s3ooYj)huIbV!&%aqR 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

      DuLYz2Ld0BV&6g4wrz{mn=AWQd)5>3U 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 F{Ra+U?jHaE literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl b/env/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..4eaf745eead026592f2da5ebf49f95cb79b0a133 GIT binary patch literal 11646 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 Obo!mrh;t=jUHt(xC-*Y| diff --git a/env/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl b/env/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl deleted file mode 100644 index 13f637fcc4522dd841566cd30bfac563f7a1641e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12139 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 Zf<}2MaEO22efzUx{z=z)=>EC;{{U;PrJn!* diff --git a/env/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl b/env/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl deleted file mode 100644 index f2f16553a1991d8bd17ce1cc91042638c2ee9170..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150807 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

      ;>YUS{A#%)2 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 YZ|zEQb`S+OH~>h3eGUp{dvE~$1xyaO_y7O^ diff --git a/env/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl b/env/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl deleted file mode 100644 index 1143fac851e395fa76642e3b5b914027cb94cb87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133328 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

      lOB^utP3PxpPV>|tv2!@#E881e`TlFli&8;1g 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�+DqSWGMREKi0 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�)j`)>% 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 V2Wep1Kj0q+(0{<={^#@6{{w0wSR()c diff --git a/env/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl b/env/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl deleted file mode 100644 index 9e1a0df2deeeee523a23e4c168a2b463eb6c1e6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19915 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 diff --git a/env/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl b/env/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl deleted file mode 100644 index 7e3f9d7b6c2b46fc92c7b1a69ae597bb2d2cde32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141707 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 Icat|sf;SJ zyee`rbyx{C)c=?68n@CNdnt&`q+4VkUHfrxdI7!CRyT8Q>jYRDxJ1AGK!JRxHxn10 z)^Q>(PL{FSMVS8pUa!o&n1-!5_3u+*G!G(c$r|t`Y6IQn(Dj4dsczs1rrdo&uHFe8F^J$&fi?_tI7|zSIn7YJn@b5xfHf_0{WAhj2-$Wjs+S zDcT{a1zRqzntV~hGZ0Tv1;Zf*X1Fh`U_MbP+&IbHIJP^sKMt{{i?9uwhsHzT#zUeo zK(wC`A<+ZjhY_o`cg-)3aTdDjgl!9iC-7jd*H+q_TP7DS&elMXT^J$Wt*uJoLe{dU z_SRL8LOXgb(kV8MY}GY)^dS-KfBm!>y>`8@@#Zr$y7hCbf2n8BZpBffi`?$TOs0rj zCW5t9jodER=%Yi~M#i?}+5UNwTL+KrG~>o)FeA9{9w-PIiiHzb5}Sn%;ubEfXcqr;5ZuLL{NPlv39eYq^Ht`Qw! zXMb{^S+Q~#3udvR&o`Dd47p&=PYpE+8*y7+_zl4?tpG>iRo3mdwL)56*tK+j_us7A zB=90`WjcutU!bbvuOf$9i|Ej1O;$)f*ccTJ9ik)cK1YQA_e{`oP7PK_6~|fze1*y0 za?afJz{?#!JY1_A2-vM(k64Uufmv5TIlX7hxqN|(ri6VsfITajo$Q1BpDjKR>%G8L z*!ildpzzT~$Bv`&YRyn48I@KjV{DqMvmGHN+ck7<>BC}+&>AD+bizv@l; zX@*Sevv&^izk8XE&urW=+0tp_$25hU(c_qj5HSwSYz_GI4r68m81m^~H){839cxT^ zhzTjGN3BnucQ8v(PYI94d*J5>su5vE3gq(l7!wnF66U+OS%XGlH}9G}TpD|B==_5) zx1;47Y{eiE@?%;}0vj4uh|I{9Y4q?8YQpOs)onY!(Ay(}$wmh)V_+;}B9`$nmhdrZ zcn=!Mhzb|H7d2OW8mC)}mD>pBampvujm)X5FJgU7f9~M!GQKCnb;)1*ur@|VO zh{<3s-?jG~|NM{*LPaI`Dc3JYm6nL-#&vw}W<2{sbP3zYT$ttWLh3rKzr6?I`KkOI zE4@b={RtzfL~0MFADhW5GoWim>^t6=Sa7rVs7HTa;Bxj%**%f{xp3>5ZN|Yb`WmF0}iF+0G8R$d=+jijea7G1RyK;==;#Qf|H}V%-xp4;EblEbwD*} zQ;t)X^4WotksI}R$%djFmAAVoLFIhQllt8CTq2Mk!rhAaOAV!!D%r?>K8;k<$a!8fUPt64P?EfO zvt@d!ybZ0F~^) zGCVA&gJXvYja2b&Ygvem)hN|~cgacr14p^aT=z68xWnrQ98Bf}pI)>;r^D>AJI0?) zEB@prN{(mmuH+XIk=>HSfx-9a^ThZzH@sacGUwZ_L$0C&`mJT1lEi~SoW(4qdW;%j z-l9T=t>C&89_eK6os&d?C3J?~m`g803 z_pvLu$_oz7ReOy!`}#)5vlDid%n+Z17sLp@5>x;LK=;OV=Q^Mpw0q#b0?1tJd=rc)c^y8ZxD7;F3Bx{x+mC|fj)^|AaA5QIw5Wldini) zfBZj;yaiMpO}8dY2m}uhI1nIsAi;yXYjAfB?he5T65QS0-QC>@?(Xg`(9B&MZ442EGIo1k~u>V z?x0EVD1m!wT-ATmX7N*{y^LKGD=Y{q*=+}4d30lQS zPjpi1ICphxtL-%GMl- z#&=gCg{Pfb-!n$UdKz8X27CCf@@B96Zcp$0eCj;lm#jdj6n!+Qjdyd9E6?cV{4K8d zkJ}aQ0)nIkaCqo*s+Ovkdbcl!Fu|?dHz(%aHjbS6n#NVrZus29F2#}K>b2gwz(V2y zsjXc%ymsG;&wRp`bHe^T95X_xKdB$-g8JeO>!~~z^evUmDh^GG?3tDu3yEbV7U)>s zI4=`7REA7owmsAJ+g^E!IA&y!ZcAxgKawNOwtVmhCk7BOmXKdX0bz z|I107;hZI{F|RRqShibwt$MCP0WAT}{jED1P`RXcNO$^+(|hf!&>sI?uWbk~;A;J+ z-aRm%aPR!q@Y~BCd;hnZ1Xne_mj}cv%G2AwYHsLPDEIj_Cekyh4(?wb@Go$GYdbD1 zKlmR6uJ_juPY8E$Yg+AX-Jw)-{PPXWCo`Pfwbj6)!F6fpSUQUAk$zX>l~o^f@00AL zQ{%b{k}KLo;_`C3^4HciQxXhl4{xvp#kHNZ8g#D)ycCte=-9 z=jp}VFWXG0w=p)(zGRFGqr2%cHK`rl-KuzaB$J)QgZr?rjbxG_4!Nb-O*eNyaTNdg z8{!ECzHIQldw%9ph@dwxiy^MFR zzw?tmlC|`|-ICdYyP&*)bOJefFA1y=DsiA)kX*QJH)}c`wA1X@vA*&6@C0`kwI`OM?$nj{Tlh(;2I>l4#=G1?RT<1{OkF!O3@%|p=9%xWc7v#KWFl&fj^bmQU zFXAAQd9B{9MI*j`@T7+w{YMI(NGtafJkt5aN%;dA;YbJ7MOhm;Xs!#=MY$UfW3G$n z28G>0lI%|Be4hm4fD`A)8dYOEKoAi5zO$OJm7dD9%KhWh_ds$(V<9z68w;K(ecJOJa1L zO1N9zwd|k%`r8Kv?y!4j^;}Q6Sc`t#hIg36tWscIs1@6^<`Sx0M=x>7{wc9Aex(ji ziM)ot|2EU@-g>-le348P)`Pw4mhv!-HlV~ydZ^or@5k^~Yq`g#{XBZ&J=3~!ghTpR z@1e+Vbw2tP2OWnm-}0g#GgtNE#tK~e?_1|yY(-<3`&GD`x=vGowt5?-ZG5?MPR5oH|H!mk7eJdADD`N+>F1=Fxtmr57Ursv*H>oM;dWTaXS$z%&xg`Zqz5n z&Me77l6U0b7v|6Q;=jkobhz=d^wYBGy5;!z_iV=}XPp&oXIWwEciDXZsu`XRYSeQ=pD;>&NXY4~aVS2sv zm{#A)9%yMB6@BV(f^sw}+R|voKVC@IJgX;2ppoML!sN8=40Wg(?wEsYBW{m>6hyGj z_Xi=)kM$YBuPvOTfY|7kZ@di_gxRQBukk}>-Jm_jk@<9Y*#S2!^ix6^)hc7aC8EUM)Qte8<(f=4hKEs>W`=;dc-)ybYK2m%hQmR7o88mM~#E zRCz-N&6*=>p-;n)_ML~Cqe$rpX>PxiM^T$!U$oK&+#kg+wO*dm+|OrUAA;IuvvSgk zxbvQtJ=DB=* z^MC$$Sf_hcxdWU7pMD1cf%>1LamE&QHaZrD`nJINI5&BTu!V0ZExSs=$_1hV{{1(# zUdK5mVKIs>{9ixPp@;>fEJ)7BJZ!S-;_!_-*m~Y=a<<(XB+r}0K1F*-|MFB+g?WIL zW#!1IV71E>`skc0j&)MJC|NnG>sAi_8{E z^FuxGsb#}nRv3=Fkc#0X;Xz*4q>knCM-@RM`JF9`8?FSY1|i%xJ)u?{t2Cwno3VjD z=kVTvg+WiGK7eA3E>$1pOyZOJqhwRHV4!X{^bfcqMu{?xmaVl8lRty#crs2f+_py=$8+=)# zRUGt_1W5Uh-Ysj(fBlXfI>e_XC3U%dMTJQm*uKbSm@$s3xrwy2l!3^>O;5BtOEa~z z?fYY$WL1l5R8AyjLOiBVx%crJ7dKIoe9P&~; znK64`WJ}`Q2=bNreOVPJlk9X>S@_Dd;uLP_a&};r_W{~9zL6Hpahhr9CVpm3{L|b2 zvs2*gx@BSlodE=R@b}>U9!R&+(KXdE)Ytm=SM{L(K6Oh@stx&#_=*2i2rKRLqXGgb~NO1d!;*8_LS78*jjnP4rH?{#eM4yqTzlS zoLCOye%(U|<9vRK;(nT^kb07^?Llt6OgVMGZF-G=)tV1{ZN2Ehq$uA=Q+%m^i1?!E zyxstM-AsEqt$wMShF-lNb#%YV0{%2JF(lP?_7vt`z2QgEs`k3LW%=0pn9_&m@uMe9 z)BR}x|C;ln1>eB2*{NF*uOdd+?63Skp{o|&D>4GSn)Y_Y zRRTq1KSp;gK?QUHRsOtJBbCvdS1y&&JS0U}_aJe_g^1ZR*cEfgs&P*|Ufi8}Tt9=j zAB$orL*s%xhBx#Y?qo3XhI+y(>TA`XSb`3RdZfzhE7YGp2PFZpqP|A`i6N+Jdn2v9 zzD4~BF^GMrXRMM%i`qT3r^n{}l9D4Q77uF!}W{-{yf>W(ZfKmcej6vqhCG(AHRrYlThZZ9<%Z(*X_NGH%SF!E!C}|{< zrAcM7tm^VV9A_1@x!QOI^vvUQ$!$?wZn{p3R+nh84#`aUN}0~~pYjVMWhaJW4s1m{ zB#N-#F~VIl>Ay>Ok<`4gYu_=NA(^ZIe=MmYsD!Sd5;5a7K`^OJw?M$IO*ckRttI$3 z?*^)`X1vDms)~426k)M3!b5{u`rCghFN{>2s*5@Pf9OgWyq#8NwT>UAj0rV~!>SSn zC8Sk~Q7T0P#nXBtXH0Dx{Msd75H#aMej2!m0?t88=(Qj6P_FU=4K3_=ZEKEs&eVHz z)!~it-0x!qJ;)`buq6w9QIvI%W@>M0$=bW1GH8R8KXv!VHkS~QVBsv1qZDD43P>D`LZ8^vT9t@74eCO9jb5Q14M z$Ygcme)}SbFSD>V%hc@yj9%)Fuzyt=|ER+Ls&GMTTiCp%mhgazaMle_>Gs>V0jiHS zoL_-dztxcu{;IP6s;=uHA}G9lvz5wGdcvQ+JHu zjm+8hnY`_|!_#Z_vlkI3T3RJ|&T8@f>&)3K!QxA!r?gX9P?7OFLXUD@Pc$2P`Dx@H zH3n~yvLIU%Uu+i*br}l(8}C`DdW>R_YWd+%z{g%n;W)EV+sR?4msw4;@VSu?2c___*Gy~dok_eZWu_&LmmxyC5NptPkR9<>v;etsPw zV=xYS?QyA+KwK*d#5Fi45sIP&4JIq~dwt_ZSxsbJP4tC-jQA*t;dB2+PB=oWKMau(9rw=|lR})$l4;H_#tHMAl#qispjid?#Vg&ash;Qf8de_q@$2^;BxANY18 zMd*USAK4M!Y8oe@1=$e+h`+ZW-@;qHd~|9;Ciy(1u_q1nU1>ZUQu__d~|WsfHH#{UFm4TMFzES$?rpC1BaHpPvdJwJyP6R5PZMF zQq9nlpnkqj*t05x0P)Gf_H`zm|IXX}Z_#IIANXU!!{eL9?gU9bGZ40a&-d}^X0J!r zmgnPpFi_;9wfQxxh)~W*BSd|+;0d92`C|*R3<<7$BP0T$nTe=4M)IN` zLvsPb06kw2uu1~@cLdeb8WPZI!PYeG10cW}2AZXT zNbTowIm8zwz#2SU1Ok`Z1Y09CJIH!QQ2>RP1jYzKphWS2RW@W<2p~#y8ZP6Ybr6|4 zn#+2c8|&&FbInnuw@)I&S+DvPFJHUAVbTtWsCm?m@st+h`he^U{4W*Vs`W8mzi#)D?tfm&tah%tlAc!nqVAl&cq z&c{=`j}9-2!JE*-RhDP(*3DIv=PV6B4MY3OG|9*sx1|}1w&5&^$oTTyR|2~t%W|01 zYIO;IgA?5X;}YpIE-ng!_`W{b^>FvcyJU!ueNJyso}u6HUf~DrMfg76MMC&%lFK7x zwh<9@zr~k=g~blvw}hK;#Fv7D4ZOQ6^i1~;o3|DX?`a}*Cr5awC!A)ey5x(Z{JPQW z3FvUVA-#w!5CPkIT1oiAaMi|+ z6%j8dJ=KZ`ory-@1U+)5&xunIv~l9xaQCDj27@SLU#rQ155r%YD#Se1*1Zb!m~UXM zEHJA2ErQ|8t<}5)rb3vZ=jy3=&8&3OAZEh}$?Ge$JSV9jy>MWl>whB#JQYYG12+m8`FcDFIhf6d+e5$s-Xrb8GS0_ zh#jM*KYXsT*rQ)+EUuhB93jv@AE!=;iSA&0m83zUdro1wq`UK5{gaT_uf4oPN#K98 zgYky9npq1C<*93ATO^WJE=y@RnrPGBHi?6NZ*9lnO-Amjs|JsB&j>CgpKn`(9M5?F zhz6vWki`iGitF77CnVo>TZ0nM_}qxh8{o?Yt0*W84pA0g1a}Uj=pns&xv0OP^m zR8Fd3aJ6U|*k%2EgZ_Mzv|+5?#wpnLoLm2K)>7(^WgA&*kHq|UTK(Nz7Eqo1H*=oS z4GDEiPH-%Q{danO67CwP!P;^b`y@O$0Ma;C`(Z3`Te@em`T@+Um&frTmf^}mRxHr{ipqFhO|o>4 zXEidnWqT_y^|EA}DFs!w%Ft)ZCQ>->A@(ODGb3rwRJ_{8^wLy3ddvR5V0jM=M7z+R zcfmlm3mx|_FzG^%(zgguvW?Q06_0Ho(WJ7q5xjT?@~MNM6Gnf-AP?{QB8_^ zgh?BT<_Hy!c!VAp=+Dbhay5e)ZgJYE9q`4YNP9B7z*mUus@BDPo2P94Q*9$XbVN2! z+32SlWO``IR^*S6b@KpMw%WzmAGKrVa87^G@|t;oJ)1+MSRjda9ZCQG9HLa<0Dm1x zqji*@>}MN`psW#%8i9AawJZxu3S!w7{}Q7+wJfS}Ro^438mK~Nw#{U>%m9r&YZ5wZ z(&C1Z#we*EU}Bf5{tu{^`PbHB>R(%&|JVxsYy1CXQs@3nuyUssur2-`QQSafF*U*= zN_)8nFm=`6dZM#{Z#ynWXQ8Vk0ze~{^uHM=pjcoP_6Mf4QVi{FRsP(a$v1B}>!^&c z;dx9%{zEW1^kkbI2y zM?Rh?C$0{%Jo!{Ryp{bsz674S}ghX%YL;7I_l z4|ovZeIWL9Wg)I;Ngy8T$sr!J`4zfsx>n0Rpj@517?+hFoZUV{dU3haj9_5kzqm{D zjQ5@9n0I1#uOcIqt3iR=z3Q@qvI(`8a#wM{*!u&+dWm=wiCZ)aK7kQ^WfKduoJ6sb zDYlckrARN;b@w6jV`+-x713+1IxH1EX1+pUi>z`X>3&SV(_}Psc^ktJUfy`EkdNrY zTcd2=ODl#A!?+Q^X=4jJRY&?3Y&Qq)JfW={cCiv^9E%ODEc0DD2DTH{oJIGdG0n-~ zWp_2|>1FXFh75y)(t?JR7L%LBB*xq1Va_kMNl6WEMTrTk48sm{Nja-b!!L>m6h5bT zbMCk8+3gr>hZqK)?38A2Pio5F){k|5Ix|N=Xy3$$^~^&mZlZCV98fLotXpcerHUi7 zXmHzBwTLhnl4vwxb)33Tt8ch6r?^}!ny36;beuX_Ta!2KkkrwTqgztD+Axx7eLLRT#&M`$^!rregMR!;=HlSWcb67=9X{(V>St&ZE?)NpQgs5^(F_qGK%zE+20JiEB zkJaV2Kbz;4*MdC+vEzD~IPU1J8AL<_)z7MK#gSo&*0B$!HVKOq#9}2_dKS(uv1|nm z0|zQ5MRGegUi~Ju6@z;kVa*oZJg3fje!gd=!Z)gW0y4Il>G+&BOI$p`GOG8fNo58W zmea*Lj$y;er~kSoi}-}gl!V1&I@?zI|J|83IXVy{fpwQDDt!Ze_oKy|shh5bGu9W@ zgeI{~r#947wtpQ(N%G=oPECrKDSO<^Nfl$|vAXJFLv^jKvH9-A!hdNTG>eX#6&G1k zYHit$r)vGoccm9bGpbYgjoJMsN*g5TO=~&L=u6ouPEX+G?V_xw1L~-*+IFvG9O-PB zRvl;+n)daM&04{((egOge#IPKM#k|hjd@)3%ZuxihaqMK#Vr1=ct*VhBlcHG@ z@0!ETf#2d(dP>8swM$cNiidICG9&I{ea$k9#$u0wIrG7c!%NQbli1>YTy4Nc0e z`brQESO966g8g>Fx=Gw#ohVPPN})#1_VlPx1$UQ;ZPeTjd&Z8r5t%c+#-xjStxiy1;U zwnS@81Apwj>fB~Qm@T4M`hy@i`5epcnqhRK{sH@XNvqmwmj+#;&Z!E46oHwx$|_|z zb6ayB*Fm~oyV8nR8~7XpMnX+^r^FjdI@1u}q(>#a6E}4Pc|A!D3wW(xHAjwLm{wYd zYPyfP6zbmIJaoSY4wHz_&54TDb5 z_8e{;c2pZVTmll%9KXyWSgYylE?u3-zb+SHLN`*i$*CcW)?M-iycuYc!#N^eURnCc z*UVniqkh6fLuF0$XSrbZc-z9m`bIAAW^O2j<)A-GqNLH~x|yer*=d>SDkq6ii|Oln zMU$K%G#i}ml==RJEo8(|kt^ z3A)#^8?i%gYG)37j`a&T^imK!!HnvE{_)}7a5`Cs#NF>8TStOH^eMMBfW41gbgA7f zx;~vlw1sR|gSn9W!bQC)Sy%qHO_?U88T$njr}PqsQT>$JMBwBYr@|u^Cp`$;f?QxK zf1ZHZRxDDQQ#AeGbfX}XfC;piyhO_oz;{TR%l`WbinVVdpS@; z(Gz+!AnoOH+h;d0pg)DFZfVx+8%)XzzK}GVBvHHJGd3Mr9)FmUnY8p=q+Eu%pZ_95 zVFOCvUM&JGYKl+U(AyOfdBl{(mrN<-#&S=kD>%xUH_&4h5gC4?qA80#^cDn1I0r$h ztwD#%41JuARl#(p*OkKs zdB+q=?Djv59?LV1xyz4Z=BQIvjhgtwG9@<<^P}o<`}B(bQeM*SM*Z`Wq$?p27!bYAJG9Ih8b7 zlm{y*3fSkmw6C!1*YxmwdB-Zy8E?;%AhT??3 zLF{|HN|rG4)>62v-6BquT$aO_*du;#KqtG{v1-hEHrNor~sqa9ac zO)_U7QM)!)@yGY5P65>{njsSkMv82&)zK(gcM~B-wPl7MV(zumRlnuWAw>o1Z?j|h z2*t6oVQ2RoN9}&&0gP`E_%eYuW@(NZx0`(zufm|UyP#uHtIyk5BrGueC74CeY0{pY zI`(OcC#hiaeO#Jn3n3iNb!vr1&es7(WHFUMUQ~{eEL0ze9ySH^Wh9@8{ z8j8d{TLR?}A9ZXgu&vnucS znD7GMCd*b>wQp}Plyj!Y%I`<{fQNcU8drgX&3#Byn>?Bl#jUXP_R6JwvA2OwWa!F{ z>~6*)5#0WeVwQO{Azv>HWwfu4uX1VvpRCc9JppA4kp~g9P-HHRx%?J#PCFftG70_u zl8b22C5VXT)c<0ouz!d>v$>Aq;v)3xDQ;kMGx4BH+&`+Uzbavnlap}tZ4#i;9aNK2 zKKJv-pxrLlcTY;qs^l!dX;QSCV~R2UsIf&s&t)Hp6ik_H9)*8anl}671xEZ z7p=`lZ6uWk4g7}obxLp#iIZ{DJ&yu1zZiS|qDiqJY=unf6?|>gsr(Q2=P!tpUduy6 z2OH0{xq>0&GMJ}QbW|qt0gXRB;*DjpM5lTlFU1jVh-r#~Zr=(ChFmBD7K~H}(RGbK zx$#t|$Si?8%qBA>odAQrBn;xM*H|4DBK z3iehi=-qY+^-7wPD#KTBR&$e?yx^?9q+uX|vpQwM{2MQdR{&3Rx~J(Gy@&{`7<DMPe?F>fP`|-slI9AFn-18pE`>*4o4tRZ0z0z_ ziLi*M|1t2vlKJ`@c{$nE73g}^B1cWW`l}@X9=!_vFBD&o75fDRgTP>ni>f?kb1_Au-DPmW;ksglQm6b%)fd)tGYho^BwMQZ`KeH3FB zk*=GZ$H9$BFnq3BX+F38BBPLC??dj(6uzaZUa{qY)N*c!%%9xm>9j^S9Pr&e7f7zg z?&a^EBm=bQ)OKSHx&kUtYqQ7a${-n%0~_E*1(V2S;tomM6$OFHQui=3`N#4ZFAK)j z_|^5=r*SD%={pR0f^^(rXj6V5!6}@511`RBp-5WL~#=Nl6+XZZ<{{V(ZN z@;}T*4#EPHFBIbrZ~Th`f%<8%Na_banYhE59eKg%y5GYV9U2M(PNw}wH$lOG=}h>% zITn`n%hi<+pquT_?qtZ z`-4FOZY3psh2T=0Tc{2EQ$J(XRHDG+s#{dA1h)>4M`H7!NN{~g)ljj_+w%d_#F1)r zblrnx-5))9I(Ci*QPf`HFG>`hk5V@jeD#d1>9DJ`todJIuw{Kt6Fw=*Lk0}dJU3TO zNKH{D6s0T``)jocqPD#-3O+rQ1m0aQqMsjLLu~htP?JArS4Xmr57eQbv)_ z+bPSP;y8Tz%qX=}@fR@wsOm53_70RL%$vG7c#^N-OO7t$9?k6xO|hgaT^l&0>DHKH8vAczv>}3aVCK zd`qG_i7=Otx`YB_F9s1};!)kVH=oK;2>)!Q`^NufWYr_=%o@-^p#7p})7`n#)mn93 zemabIlXC3mX1J@fn!tU;9t6Pq@KZepvkNMOf-yG?*)&Tv5x0}N@COcU!fU5-zJtqf z->F?4ge2t0(V4DRdY3uJTKt=o6d>VC`6(rk-8O$~)O;)1V@iC6!o4*@#uympDcsxq z3riI4ZU2GERgBxMRrlqmW}HXtRX`4pI;-AP~^1VO&<=RA7PD-3*WWG=P|k|cx#e=$Q#yR5m#2T z*+P3(x`?(%Y7AGdW{%;sR2`&w!Frb5oXC0FxPY6(kd@dSK3z{w2%}Mb$Cy$%Tr_Zu zCJo}1IGw}rcIqQL)?d5ALPMf`X30rGOy<|kB+?^%77mPcFKY3TB$R%H!-hS)_eiKX2MD+L+<=#!F# z;(iCzqRe-#Khz_R2YTEpuE`W4My3@7nX05gF`QhhIdO%VQ21804|xoXQySWGBMLIO zx5;HMWab|asL#BVMa4MpQrqqjNSJihK^3`(WR+N(^)yJ>_kJGI6NmyHc4X&QyR)>n zb9fF*N~S;IR0(fZ#0gItXsqm&XsBqm&8j13j~A8-zg{b;2!FWMnUG5Jl0HvU)ULxU z3gn{_1^L9c>>_D!7hGk5(WwK&``ju zGTuU!yzB(?GEJ2Pnhdp_?X9+?=fA(A7vwFdw5ug5EeZZMdY?ou^%Wl5O_sOGg)`{e z=lc~MLglfGYOi`1q+lYN(EOQ}6G7#yi{`)qDw%>n)ny73pNNq(a@f_!NXVvAmeBI> zt?k`tD9p3L&4&_Ysf)mdf%jWVf*mg&CG9?>6&yI!058f>XJ&2>OBV z%!zt6yejkdTNMa)Yjoq7#NYjaRl_u*l2ms^CH$>mOzb*s;=_r+r4_nBa(2*=W@m3J z-MOoFRnZ~K?IH1fyk}P}#^<0YHo9J$u5}*^z)()57&?`;3!7=AuS!tByg=+`jLOj zr1B$ylGegrPKuD!F@v*d-XA&k5X}YSt0~E>ItOgzKayE_4%jW#lY0dzLcmvboQ?DT zi2Y+R5xS^cKwg<7s3gesj^D6&?4G{vUj9?VNZ!WBU+pc7eMKIkw*1S`)a3rCpd~fi z!iO&m`}9*9Yl-5H7LwcGW}?3^$f8g(DWV`U$)F4~DxehCGYVdxW`R%1$C;{CesRloObxj86 z>_1$W^+)aHXTX#5Nr2|^ClhBqD0CAiz0c@otaLmg( zcOB8lOGt7h(v|MOBjL>_ zyB875D}o^C_8X+Fh({8SDpG|!ERv1&3oC+h`?ytKh*WIlQO&?-B6}fNK5<-4uY1C0 zgNQhelmQc`q2Bh_W;HZi*;J8Q_*oc|mnS|W?1h`S%)4_g3zY0fA6}G`sCT@zQdm%b zxXe*LKcaaP%o!qjsi!f*Vw@-QmizA_c?mXaqfl-LdZ(AAVMDpK=%HL)SMrX}QUorH z&yFE_wYpmX3<99m0@Tlg1bc_G?|hkza=cE|))fel-F;9y~fKqiU_JH#>ikt1~1{A^)x0V{oyp_f!FYI(7gCG zWUvoERd~nyDByvY@ww@bq(4ExFM+;Z>0w&r0EqEQNB-WE;}rJhH$#~7RClv5Ia|*b zdP#sXTplBB*>!$^G7BK_Z>Q~macbTdRYab;P~uZInkb}nE>h)W33Q4Py`2( z;6M``@PY#wAh;<6+eM|vKP(jcKP+VWKR8REUe_o99vo|+USBs79hmw7J`eD5fUg65 z7~snQFAwN{6ERO`ZtmvVFL6Cs=SiBM$ZaLYy}wYI4WsB_^SwO42%l)Q@W%;1o+?Nu z4qRGu&6Di;B)8RD$7WBy{U*%hX*DkA%w$SUgWd(;qH&2bu7Q+pVj*6Uhi>72J+O5+qRYQ1c zUahHl)bfrl5!!4sEma4@%MRiSs82mA_8S)LxrMOq8^vsvb+~d0P_I^sDYc8C1>{~@ zEJdRW=6&dn<#$IbD)tkAVf|#LXf1XvTl2O8Q28O*ETn+{j+hWA5`NkT6`%0_6E1WPJi_4sW-5{rXPGP2X^|w z7hK?%09nm7->nw86$GPizXKa`tZg?{VDp`Hp;&iR>+$!36(?6K^^>{HjPZ^x?0{X} zyK@W6JfH|OYs<&S=#C2ja||$Go0?<$e{7tc>+0l|cy|t0>Vb`C9dNHsVW!e2Hx7ls z7RwsgVgmNwX0t8-f#UxSDgOh3-8`Ps>+y|4AbY>XGS0t{b-Uzc@%UIC1l)Vu@`@z* z-v3{SJao2ylcGDq|J^h#f*%a<-k>F=kVqhN6FUHd>jTv|$ww``gt)W(T_@P-WeYZ* zyse?aOIsXb1wjk>mQ5zAz{|N4Mp;n9VEAJXW5XgjyStTQl;*YzJ#r|_pCS~GRdyP- zq334rrIZ;ZP=oVYm}i(R_xwW#E9MUQtd^72Hy_Py4Aeg4P_=JL_l6C&w7MS7yhq5v zWr0ssY%ePAH+9@7TsL1jl>}c@EChAc>xs`cI;9%OmQ-S`*R$#&4=;8lgJ!9kbK#5O z)teu3iIgVA^w8Q`t3_p?>;z;G?RaG%uR=4|eA{9}vMA6WergT9RDufMnoCbXIE%@k z?FD9z7o_4cSbl82JR0W}G*90Q^omQxJyD8&+ftejL5GY8pN9MAl#j{UVXHYay=ar4mdbErO;!9ViOlYRG~~>zYi`aZRA>_htcufRe&RKj~;|p#u7R z_q>EDFg7IJ0Hegsku;RsF(`^6LLzy&OjU@<`o^=BqcWfhW`@kG^?klu3`1nVw{0Q-cNLR)hz(91wxNc-BKFT}Z>^BJkkyrgJL*B$>?L!y_)L>l}P21|~_dX@+24eH53RaNox{vr|VuU+G7Wc<%6GdEz^MgnwJjrk6ojQ}rkbtgBHDogQhs4!dIT^_85wc#@ zojT*=9;l6bbCdV+d>pThicG#Kw(&B>0NOlX)DXRjK@S~)Wz2W67(&CQ zQ=X(CXg8|jKT^FWufB|`F0|v-H~GG9*sniMyL{aq20r?$&gDh+Q9~fWO#6Q$sId~Ef@Xh1`Dw<)`&WT4@x$*q zL~Y)@1*^I)=#;aLmiL%;3vV3R)IZ9d|B&;9#x>la_CwfZBb%sh%Y>=Dn_V5b;i(mndePsbIVE+{U4*Tlw_*hNSs4Eop7N8ZK2WtNK!j zB(AP*kW2M`FNR-G*3LFUIx~6<&%%RFv6;2J+&dOOhjWP<`rrhrRwr51EB!>d;1sIX z9EmrhnHsKY+*rCsL60?+I+FJr?$<#d#nd>m_dgF)XmMnB5cE!AARBl4HEaj<4dd`> z^)d2vJzex{?jU89p)F{2e7fvGTR`qoUfh7QKZrMM{mGYv8{9yZI`tWSCy^%f&{X@# z{JavIawmx<@jYwr8b(<>44;+~LusG#(uR+NE$ykRHJ{q&-~lShd{*s~`wgE3%-$W0 zFAS<3PnSIdN+_5O1H61gY+u(6ESEahZX-I9 z<#6Rgz4?mARRHTk^ZxzU&e0%m@4)iM?X_?svlbRtAyfxaJUls{V;a9P^3KxkuFb&m zFXv~hf^!x>@0tnlq}l7$P_G$*1r)XnlpB)C$oj7u?;%z(I6{}ysR*mv$o-C*2km@2 zs}!O_yB5HE13rr=-|kF7Pf3 zk-@8R@cM3C2OOY+0~sIyMxE3@gjqgtb&3givQq6;Y`>?_&UltGz0YX73X+-ZtU}O4cV0Uac_+Ru>%yrsttvLvZ}m6X1kE z#>0|{+Uy`EHcSzSfqUeuvI0s4 zOiSslQ@@?oPSO+Az1^jc17S|z7oIch!A$@B32~Z^Ed`JvelX|%l88SEPS>CXt0|Dk ze^w8KE6U)R(PdwU_az4BXIw}}p}O(o8G{L!M8sox0q%T-XukwR)8>vW@!yOqYrLdg zCe9qaddf*yct7ZhM-aolVJYsmzZL&o^W*X^QpY@bX(uIMwJ?`_LjZG{ywZk^CWkM6 z&*nQZl-{<%?U9U60CgP0PaegSLowC9h?vKR$X-zY;E3g^TB;OYJBt?_X4%N=U=7%vf`zOJ>@B zRzbg5*G=F32nw(qRqoM=3gEsvmH)`Q?V;?^&XfOyoE7zsZ`*^Vxfd)L)?&fNyjHyW z{2JfIuS3R$b$dBSBIY_mcBoD^Vf zkt7pf7M#|<2b=W;m2s59KJE&NmZNzTLnW1yh?ZxW6@GR#P?z&+(K{6F6z)YLA*>8e z66Mpzs*Coir`wnN&^g%M55eAtjpdV0M@t7wtN%j}g>O(mzy0cWF7UAcW`_B_cm2gp+4R!4RX#_Sgn`i53}20?QkGy+UnYKo9{0 zV^AL%Jb6hbiy&`~0%G3R{OZ6pU@4_|o|KtBLGCPvF0a~S5y$4DEw_UF87O%J=n?)r;sn9PD|9$bkesB4TL?VWFiRK|mM_xr0 z#K@V4+~hvgciS?8pC;5w{L!pyFo=*d<)kQl0_qK`4G54k>0Ky%WL8ia7Y)j45WWWo zh_l_+^Tqo=&d>_R`!^|F`$m5Ug^=-Wwm4-GiKDB#sGyS44PalvXPk58i}DU;2X>$n z>f0zEvdNNOE>e?s3OK50$Pfk(mT?url11?n^Jj}Q6>3=1&efY>RYha0PTas&MHl*u zq0Uevp33?JOn$kg_z`HDLR7pxp{J1ir?nc?MVT`nE_G$VD-HR79&_Zph&uL>V-@KIaH*G7igtA^Kk^Ey}3b z1(hQYuu@=nl?{fHV7T=cN{EIadPT|-d#7hj^%LZOWu$|}E-XO&MnzW1g?$-{R{YW0s5>MkhH;cZFXyQoU*Kz$q0Ia-${~9@$DY(hvc$X2+=%eA_a^$+8B;!@6-9e&8@)uNUKc5WrneEQbGxt?>0;Dl zDmUYK2^u8{Y+Kd)kca(lic5m#X(K6H4-JO?3y6dfip1-cgVQ_)?tEOwO^ENl16(S^ zzHQt1679O!v4tYOoXL>t5@Kg`B=No2-cl5kL;?%3t%AqP_bXfO?WLcNF0C2oAS<+y^D!Z(ICd$%EUKAn?eML2I&6Q{1p z#s!*`X@fH zIL0a-r9On@d#M0!!hS%_pF|b&?2x0rpqBSDST#lJGa}?ngrVq|r=(0vp>@Yn3)Y+? zz1Cc_Nxix+kqBJtq+mDf1ff&ni@#^;ehV-j2y;nz-=}Mu(VcH{J_$>)oKPLM;JlWk zraQePtG#bh{*lzn-B*&C@GvraCh zQBTh6=zBwEcEW7=Qn@!+>*nV5iUwe>Y4*t5GRtvaajZ0x+U&w^Nb#RldT6PJa&*|> z53|uV_4*T9nC>?4fAd5y>EkCv&Lt9VY3ycAuxhSvqblk1rDxLAY(~C7WSfl?Mt!T) z_L*&S9=hXz7~_CVEUr4>RmVxM^fyJROUMA(Ya?$6+orz_p_NnK^^tl0W9c1^YV=1z zqyVS8?Xb>sYxzE*yst#vKgx~7XSo6#1c{K{D|m2}S1VDvTV?tn*;?W2ysQ*>D3_wL z%y@@kspgE!gj@^y-#F~MIwNg2bNvL@`hx;@mfddNxa`3CFQ+BQj~gG7VJYK#Aj0bO z>Iw-aRmGr*x*AcCgr4$W{*)9EOo_n9P;NRilY|iaw4RZP2!=4+YfH$lheS{#-g+Ez zk;z1=qlX8&(<@+MUDvwVg_>y-XK2-EPz9j4q^Ek>_$kUR^H~SDVW9jPJ@Rytb>1wa z?9E=~X6I?zI~Z6o)o19;tWZGj^~~TPr99b?@cZQ0KqBZdhKCV*Jsc4Sv&Cm7F25QR z@WZ$wZj2gf(4)61vkf;x9;5cUm4v9j^UbSCzMI_a%$gk(#9Mb!!~pk<+q&q?JTuxZ z2|XNGHa-i5@hKXdnO_Rj{Gk{8W(dQ>k(otiD2T!CLNb^+tz(3fy+d^Gf@VF^mz7t- zY6^!P>0`oXku(6pg=nD1O1tPh|wV>*XD+2FjJbJHF;Ro zca&BZjklV}7oIZX!Fl&)XHM+Uc1^hBzbXvZT}$2@*e`eea`Poi;4`azo0SzxwJ#KEN?;y_p7 z77{!(Z*T=zax#`Dz}M$qiL8?P1tlZQeW5BZ$}<7Y8Jdmd72*LE^tWg>tBl8Yn-#Gz zJ-m73zUXTOy2=<>=NIRa5Z!b)Q3<(*z=>5eU35t2s@WxR=p}!N?dPmjGd=krgTm_t zJ!-^7CUj^~y9^J_6vEJ-{MQh{PG?$Al+&si?48=t{e_xcumlr5|3? zpD#CqnW-6SY$L57#>XV#k!AD8_lzYv2e9Jpn7^2$N*mx)D5>}UXO}#NiZ*rt3un+6 z3E8c+(T~?)S&*3d_{|u81Da8DR1B)9(>sbcp$DR}LU;>dY5t7$ggl4_jvUSyUB5pb zlKP{s&PyN|wLXnmHzNiTQpr|-2tP0!E8F}T@mHk~&ez)jlY!EP5v1)wED)FL<$P+K z+;FtbU9^_maj8E?q8oSFWM*P9r4!fe)TptaTuJLh_}lDq{$q2-Occ?B>71pAvs7v^ zW$z4h@L{ijib8NnAl5>dd2u#(IkAFq17dM-a-)0M+ZG8qmDu(D%izPS_bLkTYPQP8 zE=NVdjBY-2 zlmvd-xlj>_{PFP;?Kri)7=g|C??_c!Ft_`+eyfbQD{V^cX|ne}6AP}b)Mt8X%_Riw z6IS{!yE#0rY3%i8zIlGJy&_iLY%liRLtH!LEA97EfyTsWU+_?lDiL`xEb!a(#7?9f zhmCRQM@kz7c9Z7xH%Ex=Rl4ft=CU|tr=7@KK|}|4;&&=5A|x4e@a`lOSZ5+4y8Vb> zJT;D9?msDL1M9;_k!WG8n_j<&*8$w@ug}>uojVFjqfU3G%U348tDyVH9xW2dXk#l-Q6sys+NpfVE7WPp2`YIz ze@SRLcWnN%m~#H|Qdsg(R6_%Luk<>8P1rCe-Hca-176Bg?^1zV*!q@KdWz_y2KGV> zYK`fBg=M38^Pa52aI)0KTX&T{l_Aq(pNX`kL^i4GE4tSm4VLAjb)M&wmW|V@Lmgfv zMjVvoVEX-jslom_tgP!}P^!tpQO$R=s8~bC&wVzjYzETK$ALTiid$Z_9Z=sin?S%Lp!+u_Mkq$fC>gL>X~X`%lUC zjzHUKCRm5+kyv0V^MzH<|9(L-kC_#8sN+7II@lRtHb$%jj+loL7cr1OI z2~BN0SO#XX=f#qxwn=&dfVb&yPDV1=2`Cw&`Al}Z=VmPL#DTisR*2fW{qjJ?R(*!K zLFE7;zIK>str(%8v`oRq=*7@|dN-J!;tDGj;)J!_sRR>S3ETp-vKo!9n&{!I3nk$= z$g((c$u0U2+?fOYsDb+>LM#K8aKHWD%1YyhF0J57{66xs9(9T8M!`6Uc0&3eMUuwh zjS8BsZK}JvW21@w!`vIX)L@Q$h6t6n$R*&+HKcu4|F&`XkEL1v7rM}r!0xw^J$ztg zE@sL~#df&L>l&kNHpZ#nUsbKsG2HDM-VQURPuIgr@obM-gb9^fKSa0l#yijsnwx*g zthlV8f(#vUxEMHOqt{`TE+i67EDk9NMI^RlRv;IfY);~^TNr(r!4Cn?fD)3m5tOwo zN0W8ZsrXr@pr^@E$!xUV=+>QCQNf_23ghFd>4jx)<4~e}1`dYGi)2^H-7A)0eLccj zsCBBWI|?ik+16sy@K?)+PgCny8wXO0sc&&PILfh~4KZ%lTk-ZN35^w@8zA-`=0k}f zNL*PsbSnv6TVj5GwbF%i8K~}F^+{Swb8~-Nwy3YS8kz4!g%E$}tW72A!)##0DRk&e5Y9sq?jL>eF?j@ncww7>AQW>Z)18htIQ= zq?EXNbH8y*=x`#EThMH^6s>9O9IegSPr*RmsN1bJy(skBL7vy}cNP`bo-u;BjU6jJzql zsD#7C6U^u+%oz3ipk}qQBbXf%h_(J^qRg^UJ*f)3JO)>`XUTjOjou+l_4RQ_!zeEr zwU^9YlDa#SKqhf`f&Z}@<|b8E?}Yth8)6*qtnP4o&UQHK#j>c)&&n&qx0NrvE^Vu1qQcP|jwtNt`x$bh zvrTVYS8qA^)DZjE0$I!NfhKqkEhKaV-~AdXS7PZi3~f@VGb!y&^iWDUepy3G z5UtPGyNu2DmbO1}%~}`ws!k^kLWX~S$2v7_fGd;2nT}!ErBXUL&gV+we`OUm7zsLT zGC0f$zoz8kMHQpbRjM~Gj_I(Dazp4BeB>B75`R{>5NrYm;l;f^q_C!jTCy&T7fVoG z1YtcZmT~I2Of8~m#HtpjEN#)N?|E300vjK=j20stPUDYezkHAL zGi>BmM?ICPLs*!ubR;ojavM&H1?TF30$f__@^*4pPpmR;K2eXaYV2!;yI+U9v{sL1 zauG>k2cKqzw;17yEnC#T2k*SXqT4qQ51Hqpp%Tr=uA!G*J)nv+{}L^P5vRhO9a)NT zdzI0p^R=!vJA6Qi#h7qdaZ8f=?7knk)YUgL%9zUMBh>N*uQXktgpa0lI8m>HiDTAe z__`$KTXE=@7*S|(TDe5{?723%)Fsf|K8~r ztdAbZP9>DXS{#QYY;!L7fTM(Y{}wZjlT zzSo-^NiPo`7d;dx18*<>Q;Zs}OvIUuKvAbRF6nPj*aJ25HXsYfMQZhJH{P=rVJ@eBeC3N^UGa)b(x2^%Pd7B4RqM7}0D{i5Dr+HX+~;1%`CAmEBn z@L5{!F?ex)_KDI+GyrdQcP$^mE0yG2OBz{%HO>IfQa1dm6wR>m$TAWyAbBd13beNT z5nPbW+FqT7d)6)Quu~^``Yl&#ADanSkru4gH1P z%RIVj~=3tkhM4f4Sk=I4-~DNNdH*~Zvijht-$uaJn}aiZsBBEp5Qh(! z(%zn1MF*E+8hCk4Xq`9RZCJT?P@=iVG|$SDi;eClQ`5aoU#ob)#@MGnb?E+Lhil$= zk^LpR&00A^S*&Rv^YMkrD=$Akzx{-!zPY81;7BS?&O(HhSii-3yUM-7b~yMH*+NC* zN(o`^^i9^RjL^>fg`%f>2TJxi8RuC!GA~j6WE_O|4M2+=h1*{{$(KyeNei+XusYqP z9Y#CJWthx(2P|T!VSy~=np#M?N~C9~GyiCRl5^g;na)0X>ZQn6>Z@Y~|H3ZEmyFS@ zE{a~HqS3>j90H<9V|IrD!(pHceVaVq{!TR7IuR0;d!s^NY(zRB%7`bC>?8bc4`&Cu z`0l6pB=-@oKIwon6jL;7hlw>@8?$CJ>+Q@QH`jv(7p$*W0AzbH~dBm+{5^+ZujJc;Tw zJ3yODGIWbahm|ezQM@w&F`VTx&p^E&0-|!iC}}P*MjO9l4kwk_cNq|mzI6*H{c=7- zDtqK+4Sr!MVq38xZR$_ak1*<24v6~VSywluyoCM${svlCSG|Kv!C6y`Gprm4h{Lni z0Cu)C!eJFh}%LP&$k&vU&1YeKakXu?*#F$lroZ?Vi+_~Atnx3Fcd zqEOhEadP{I%Y;5}xtHMc*w}+E291p|uYix1g#5@(N*v6LXS<3-1e z!j4BAOpq6UF=_w7`8!FWv_JQW(Vxa|^k@)1ZlC95RH)99AE?bj-TldJV^Om_rhB7Z z5*;nA?M;|86D&jR*Hy0$7uRNrA6q}eTxgSGBERfBl-WE-cYYP{eSe4NXp2tOxjVCY zC0@|UgVt~VO4AfqUR7j#mhj5HrM}$yUE1x9*0%kolE9i-(n?hgHRR*f(oj|kbo|0h zkqWx9eZTHY4{mFGM~Cm#@yhll<0DK%i>2HNaZc)CYYOp71p(Mtfd;Hp8zzy`Z7lhu zcq3_uWP(zw8tPy$H=58Dp#zykqoqdk}#iJ*wS`s!rli(-W zb>hjD3Ddz+3e)kfsfb;XUXOk!iR|jotxMX;p>Rg;<9OdsGCdWH;@t$R*dLcJ)QB^O zLv)hA45Du>-f^66S&+Fl*pazHm+9{2`4nM4=R0Mn`o}s%+9Kx0073d*XUw%M;=V z=TYs^^g@IV;q3&97_9d*nq-l!0m6xU4t>j*q>nvW3@>R8K6};aXh1oOb>M;9PVST; zi6%-+aU|Q5%EP=hviW*}Npv$UyVnNMgKCB)Y5eV5xD>G>#uRa<$j2yDQts^%1rd5K zW@*)E1)g@_+ojTmTc!LCW2?y%y~c2o+{QwOTg?i$^j_7RERe9AB*i3Me~{reU8^CT zy8ccZ8@%UX$aIa{H{xN)KM1muEF~4Da}TPd8@}BW{~Kq=;&x60AJkhOi#1G;ocKM+ zF5EFQpVN=8QQb-J+Aj06P_T^A_A58+&U!I@^hRB2W*AK|%Qm|1ar1b6;nLYk!R><0 zGA2E6!8ZXOeFpgh>dp2dzi^pYh5w^djdI&!-2nv>P;>eGU1kT(ReNR!Psx!NY|>48 zw6sZp_iEbA_VxH!N#Y{wM1ORp-e@+FDGCE(Cwc3{|py?@w4s7LsUPs@0lkA?X>UH-JvYwRWH z+tlG!3T0mFzdF;n!*0Hn!gPHZpXp>kckAm7-*9(P;!RuZ@ICQG!{~!6Z3gTww7_vdq?;f-S*`yx3sKL?vBYgJI*3Th}S#=NsOJsyhvbm^ifofsx*~6MSxZ*$79(MLw5l zq#I#19;IvO_wczhWHBClfMTxN@MDCPMv67;(X|APxi_k=?zxCysziZ^t0u9E(kTPVMjP>=aCj|Gap&Y z%t9WfYSZa%<)+;06K|{5#>oj4L?12IzC28|BmXJz!adEnr59&Ym0lymd@MSNp7059 ziTc*Kb3;FKio5E1;V+k9##^NB+B-%^7bz%)Q*8; zdvXw&^t5}spHDM`f%RBB;?!A%;_y1Yuq7YcNTS?=E;q#BIOb|>8UE2?sZnTAz~S|M zfekdHw+a)mcDOwBL`{!9#Ocdj0nqMP4oQNNvk!G#m<+e~Kj2@MW8%rQ)C_LHS6a7a zvkQKns1II5fx@Zqv73M?eihPU{#>P0rb3ge|G3yPe%Cpef=V!Bu-I zTlcbBWYV4f7mCaF)OW%Ek{)_7B{iX{x(==;L??lB$N5z|x5jm--592C@e>m)ry!V^7STvs(sCae!dY&WnxA4cMXVbn+O7@rguf zARM}CuPqqZeC60`cv5oBn#5~)@swOWC6^!>bWa8{F)QX*jj=Du!jIMwL9mMU&=8TWq2+-DJ*K$oZn?NPFxjSBKtA<&&Hx=V}BT#vDkhMB^!G zW>XI(lWQHeB`Y$q>sZmK*n+n~;K&jrt57#F6l%khe zcqt0^AA4()%IbGzN6e6)?c#kBhqwdgUu*Qj15r*xNGp%sQk5@1*Mkd*j)Bw7@GnzQ zng(ZLTgR#Hen#V0zqN477>kO!tH`cjh{k_DyHsl&{<#eM)oXm`I>nqAB;`&v6rySSe~to z$V+yui!E}HW4o~|lFef&&!r=tT-0BxRoWhi{@_we#cuAS)>=|Fb|md&yjon=VP(FP zb-j)1RU&jy<3^M3m+H+Et?Hr-FG_1-Is4}$h1>kKb0XWPwWX-($QCsZ`YV^P2)5}m z=#eIzANOg3I^9t$4GSk!A3ilQ^RX;Oz3b38h2lY^Gz)Mj5`6esYmfdtlSpJJY3Egm z&<0yF*(lo_mw8PM*IAm&tnxML;!eZnby$nmpgVacO*?j1u&s}c$aP zfK)?r!-jEv1^aS`P!r!wJ+(a#7Pb`Em``jr<*>$GJ0$Z6pD(=V>+)^tTO@~R@60zk za6T28^(YTQf?oLdeh|3TT_+KlOrl`TW0RGpK$R#hVa+$fcD6I@B243|B7$fFifHZE z=&FXDs|Pd-b1Zx6blEkK*UD5wTSM#8HA@1?rmKnL<*lwO{qtVQa7Yzy z@zG_eUev-2AODepN?f?h!1C8qq zyPxw>!I(aMjRoU$F9s_}^eE%Yqfux6N%q2B-qB?2i-Tc6FMr-E`Uv z1Wwvzq7g|o*Ma77Y<4N!Fu9J$5i8U~pHke_j2(_q_o)wluwS;OvbPK}%j){bC=4vc zl60K+@RRK}w3op^t$33m%)F!&M01u$+~KDd%)hL}7!}5Xl=k9^#W7-*`PXE`eX^E9 z@VKOi`{5!>)p?St+BJhB`3ufS@(py-rRFE<)kchP6Dotq5*XVz9wS&p+xkFBPqiM+ zO_utL++QiBHfV!1*PBfHHqYPfISH)CnPlRLVwZ)4Q6F)yX|v8ydsbGb~qm*zo7NB zrYaLWGVuf(#_JvzmgK`@7G(U{qZ(Lvg&~w+_cih%1uV3RdyC0puc!w}@%lTc5a7-psS)7bwyiS1fIAbw zzF>~5P4LZaLm@pfd1JuK_+bwxQ(C4!!?pnHnVf1LWtU658R0 z4-LZA=_3uoZKI3$^C^s-XUkI~wo=376TdS@OXuN4hJ$UCzn9KiiU_i>Kw}2)zaMJD z3h=614YZ0&Ok|$wkb524YWwId(*Nb^wX(mq`J=&Kri#Dz?&lji;}p1ITaqPKeQ)HT zQK-GNSoJTwER016MePp_*n)X~;ITjgZaT~RBleW^{gq%V=urR^02l=qR@jM5&$)?= zt38T5B_<&0m^CDoH@)3b&cnEgNqTSrH?2WiG9}`(urL-P+!Dx#^agL>^R+ZsPr}Sm zWh0iWf!mM^DZW{5Btc!mh|dqBv=#%|d@e{_WzdhTTHY?s$%@og@CBReRlo3F$o6V0 z0!zQ7&@c1C3q`z&RO$;E>IQKx^HdkI+o!3urW0-pfd{t)JbkU{IYg1^ghl(1TScvp z3VN26bc=KJBDD-$cR9nJ0Z>H^dz~u5hHu!or1O%9RiO-sM=ta`vI&kAp$yvPOE4{W5R%E6mQt4^42-SY~rS@ad~%yoy4smGt)C zG9jC~%j=Nle*=*r-|rLlI!C|+S0^1v1f5E48gf1b-B3>nQ}amwb>DPA5^xBhNM?BW za%EpSDCY;Va(2PQ?U7vicsol5T{eMINdvdzTHq zN(q0T+djdPzDoXzLlZM9=P^w618wx5Fv<3B?2;WS86nu!9TS#cV;^m6j}4s;`KFX8 zmw#CWu~l8yTWmn8{5-lXPt?&pY}Jp5kPS~>l(ZS~9k#8P1q+3BTsOmUsK4;A4Rr75 z;*Kn=s2Cf~YSJ?e^f^gb2$E1qO0jn6DBY{jlH^G`h-a3);^vv!^G@Omt)rG|(N;S+ zBdVjHV*}Rhbx3nRnI=I)<=ldUdP#L&X=W4sp1n@Z&`Evs{l}q$cY`h3JEp-RaoqP# zc01L3D@3lIO~bN z`0Eh&In`piJ0jem2X=0^(9;t3`lQVjWc)8t9`S_XyAhRDNwMyWC#2 z+-BZS?C`)TW@xG6i+g?407I@RZ|(iQ!_a5n>795%=%O(?orJw~&J6Ym74xTQ5qC?03Kp#MbXJdtWIat9l%na5jdYePb$TN-a! zYXVtBRHXJQtghT}7Y@%mmJVxboK6x<9-4E9&YM}|MxHW%G#MB1p+C%Pq^wpt-VL)` zE(h$x5x1H;o0Gwwm@D=>{c0vb2@WMgcXi9jYsIBfnDdrPUmv`abcD3yobJ!7>A^dV zZ}Pzd6{n0(5^lyB4$g1;v+2h|nt8{FOr1JPw<-=WH2FBaR&;lSzm|rizD|YtSbl&Z z$zTlLjVYBR)U*;*yEVeg zIGu8uv_GOc%}5Hd^LxeDL;DZS(=$7i`)6$meI0rU^zT)+*D6-G+?-B0vfT@YoQSSl z8$-M|a*y`~Q=OaW%UawC3c|oZOx2F2??}n5x-W;pmGZ}^5Lf>9^v~V;R zyIk|zhD75YUf}Ah-z^~*Kc+L|imcFc+t3HM=s5Oj$2zu{4{OIdx9pZS_17u8ZSvWu z%wElru-q3+tPkl@_oJ%eYVX+#9;g54nWbM=YSvbE_K1$MDX3VAITVR{oLs)S;yqSe z|2eHTOuy&PTXYkg^t+xyj$rl8ypEoQc%hyEJE?N9*b79qJtkqHOSk1nv}FMU@vny& ztfc;za`+g{c5;Lmx1R)(J+{t|d53HKiRm~Q$F^yl|waXyhnMih1g6ya+%X|B1t%2JndFD{A6 zBy$T3(zD(7WSINKlO^#3N}qFf%OQ}u6|uK>=}KYFls~6GUf5yxc)fZ{6v@rM_N-{* zoDLWr@QQsqsPFfG-=m8YWjw+FujBLd=?!LN`bObld8fjHre98V1)P{kA4>S3Gybc% zHfBz0LX%I*&I3ORt)qb8H4tzCff*3g;Kq^g9)9pyw-IrD@PDCR}>DyZ$hz z^&vqf7}D#2^q%!qWL8agLV6VukO`#7Xw7N!Dgn_22oylD0b=Wk=mrEDAVdH`Rt1Rf zfWQKT3Ls3Lh#o-T0m9^|j;c&M^Fzk`Im4K5KBCNhvQ(k4JbBDGhq06Dl}fT2&^%lI zY?Vq6p16mxIZC~^WlF%5b`5)epFgaaUk0YUww z&<2DZAie_v=}GZKfWFFW1;jq+ykO9IMNhq13y48LAUzRJ{ap%(;wJ?-07XwnBo`3D zPl_kv>6oPg!tzN04q}lBAYuU_`J{Lvi~tb|2E61=uMpK!wS|gdI4d)eZ9t^g2 zERr&c^BE34qvA`3XYcZautQ^?t1v3=D|L!f$-%zMyTA&K9aLhp*T)|9RpEqJU4Nzi z#o>SHm}8G-sc;5@7|kyZ|2wCq63NT}d$fx>^@|E8a>*wg)pgp^E)DfB|4jks7na)8 zE__YdbriaSPXX~toWes?saacCqvNIC$+{^yHlws?M^ZZce21H3&z8D^NayQ-O=3{Y8OUG}P9YfJ6FbgOLMRR*eSqJ}K{B`7c zxN}-D{&!O-u@>1SAhQ87cH!gNkw_jJmQ6r4O|gSr`C)#HH5$qD1yJiKO>#?EGT6J+_jdw^x0-BIht4^YJ<(v+#K zOg1-Qo9MF4{xb6cxg-cj6_c)%TvPqOE8vu2txqK<(2~UrqbmsNji35pG-Q!owZ%Fy zZ=Y;#&GjFO)dujjWbuJ4v^QQ!)M$t*r)rCu%V=pYr|RfpV&3`I+?vOWwLXoXV5vNs zr9Msa?_7t>%(_K#6qH+na<=-kc7i2Yy)f_-r?-Ae&FJUFOk$(tXd-7E8@a4WSdfy2 z(NE>s|D9U|#QQ+Z9mkdrV*k}0RnRbtkG>iq${=7vrA4dvN+J8G*#(7to(AOR1khp3>sHyl*m_fLzNKolHM|4^RA1HpbE=o7US3aF#A zsPum>1p6!sB6mS#+8{v=h;*d33I&l9Ao71KbfC5x292?R=wYD!e{ri0z^8QrpB6OW z44Q2L?dgDe%0csU;M4xk#Y`@sWf0{6B9=kR|JXg}qAsB)%kd)YF9-x(?*O`f8Fami zko7QdJ!HRz@c}BGhAoV*pjwnE`QZ*dlRMz?97Vono;5h`B0NJ`Y;VQry;I_<>Zv zU&n}<+(;+&&t?o+Zu9V_}rb>XYiV9r`FZi&y@QP{s_K*GM_)027j4QPv%cr z@B*g0oX?w12O+;d*d>YURRNp=FeQuY*#T4moFQ2f*n8=z$pMz*5#l)rc>M?%n z)nfu+`rM14`)3Hyxn{xGI_m=|d`V^`Drumx%GVFj8KSJpN9_4E-WJz?@GFGUGHa&-lmfH@30Do*!uUGPV8Q`H;p*gM)mFPts@kbg|;@@0td zb)2DH2P4j&|CenFW`p92)@$bH^M8mtetk0zu(v2eBV6s@s=fe ziGO#2e|L#rz0!*jY_(qUjr?eHNM3L9v2Wk=(p>netL{SEm5#$3s%N2ouMm3uRp$#o zS_2T6V&7$&-DTR|>33dre!J=%zY<)(eXmV@;hU(u3w>G$LKHwq76=gpAwD4F3hVa$ zG8GUg9r~po`L!SU!7jl=FTo2h!GGEFV_r9#4rmv5oo>cfxst72cI(?SO{qZ&G^J3`hQ?yKO``4(@ z#lqJHnDRs|s0^kgcKQ6r(4@YL&z0f#H@x3t6pDS`hq?O&BTrO;>hesY)f8?W z=Ox+`BL_8edi(3ulgR)j(K;W>t@}7su_|FxQ+R=PV$4CO1Kn>yuHn6wA3@We24fe=1rmu100Fh#VP!44VmVClDmb1q?H=RrlVsOj&t{ zO?alAe44*3xhfwEdfN2rT)ZqD|NLw_z&+8);Qf1B;o4B1lSBMB9~ez?>B|&y$1xPw zC0ENk^2ZL8*Ico8uLl1V^IaFk-YE}yQExeH$EBOOjn%a7Xso6zq>R$u--kHoN8F(7 z{>N=(;B)%ef7;r|KL68g+sY-NJNwjdf3L1Lq$q^T){;R}V&gnmm3ybXm1G{PY&G@H zJ&dZ@{F0F2FkLsrLGQe0Rm5ss{XnK-q{()^wc?LPouq(^(Lu#CGQBMJtP7f0w0+Mn zibCr&(*unnIdRd|J57_${`(9t{g~ED_CLT&jy_&qn7`$JW9=GxNh?O3< z^L3D_UazI=p_lM{8e79G@%S_*fL781QjC(jPh%B9Gii-G8DD4GKpHf&(zv7d_0sB4 zFNkh>-uCMY%fq#=FRTvNg0R`HwDg0%p9p-Fxc3&5{(1d^DQK;Xq`y> zEi9VDVJ8+-AF(w0|F0o95zoEz_{=bzFY&DdNHn-_)qY98W~X=u>SXT1V)}UwU4?6u9i235*^^3!Q zmV7s$KJkJteMq<8gQ-m3Sb`6KR-(~<9z8b0%V4VurOM*f+KxmUv%~(`Y3uIe^O74~ z9Ze`zB{Rog+?B~ZGd)A!EJqW>Rq4*2(>nT)Y5Q0r^Dw!Gb3T>bnl#g0y~R&ND2Iw zyKtzO-+Wro?2%)w@X|jU{8O>O8)bYwBVoH-k^fLh`S0&?>0@-%d41de9mcNvJmz!Y~=tJz5P~Gs@A=215L$xtw1V0=oZ2gU;?m#MI{5FFgx@4t-DS%*(SkHjxSrMO zMA}U}vIGA++pFw*Uxgc-ckSw0Ta(cGGKg=}-U;SPY&c1aaEn32r+N)or>r#2+w%)` zb62=BIK(E!cf<+ygt{-2bgf1w_Jm@5_dbp8V2`XVB~3A;ZA*0r%bIPsC&A|XM2%fk zap~P8&HoQ&@kjyVLz13%_ptgHof~4GMLNTu$2=nzi!>(FC5AsTA=6Fggpq#k3hB^!?)uz+ zBJQ_Dz0yyYGZe<4wE>!Mq_A=yM-9PyqU8+H;^JK0&M5SW2EH!o7t$7q-4Q>Jc~46O zP427ye8O0QPot>;N&aos#XH8J@00KJF@mPPMt`*<6BCZw7@SJf{SZkrM*BQQJhh20 zWI(f>HzY|+^>nML;2UYoXa*d4lH>X-Mto$3OaYTRU0q%TX^0~_OGIhMP{>!mUF$88 zO8MCOGoE3{+q$?RTwjS$dJ^xq^>IUbHP)sg7Hd1_dv=H$CZs6{_FG#NHHja|ahMSH zObxL^V5nkgd^lmHyM9A=$aOVBETqC|DLeW~$;@zKY4AShm6mG@4)zzpZoSxSo1T*? z&*&DXhR2O9xfcpLr55$%YR+s8!jl?UDRsU=jCr>DfnVZC#|=60l^$c0H>?D;ifhb) z+R3w6wDKIQO%%VgD;02YNCvTYyQX8* z_@u43dLMj6K9@m4l4o79EabTP z9{Ud%9mFO4_Q9)p)Om2+b%W7eOO}4VeKb5O>y&I(QE^4B{R6$Yo8AqE6kO2> zjh?{^a#-&eo`TU)h~YzQ1tW%d*xF_<;xK{YAcyV;MR7X48-f*bY>%aqM43Ee+iG`| z5=N@Ulv1M3={F`GTZG;@xl@E_>PXl1YE{P34v2#d_xwRUa^ebHNtySEDNtO=Ak)&| zO37S|AdU;}JW83b6(9IgjR;)S14aP{LB>+KT*b)#Br# zFi1Ht=aJ1$1WR}t-&4oTM`O-f!6f7vuMZNkI)%r6miEU&POmjx zvqENg)S(C0kz)?z-c0x3fO=ow#9@5zm5Uu&+cz4Hwtp#niPvJl6_mATtYlJm{$K1WH3XR1E9#BD}O=V;vMoE?*^n|FuV=|MQ}h|AsiT)Fho3irnJ& zJrtuvH}19X!0O2WIWX1wd?lXg5kcic@0GATBZG|TK8rzU7ZhGf4zL|(`8g}2x|aT& zlIebrk+EoTA!PQe7RTZc16GK^iHd%;g(nhmum;DX3reE$(cxY5&uMIX)3v&by;E&s z_^`Ulms1Y(-mAu2_jI3~62$_)shpmZb3~LsFYV^#Zbb?Gf;(kpxEY3H3mp^P+(W0Y z80~by%9uo9tE&k^IRVZii65@#VfCZ4I1&~J@J(&YQ{gF3`ED>0VNS3VWkQbhR$*ro zcF=fE&+7FIQ7}3_I>PPIc(3fD2vLA^7@X(xYkmZ)j;2AMMnSe!}}FVV1|;9A6Y)zah;?RANvUYbF@*yw+~FW=Q3R_%BTFO}s1Y*Q*RK?~Q_JT`k#U&8ilGF)t_K+;gzd5hM4!nTB zDRn4Z>AId1qp_`NchlgH*_9|mfxQ$OBOV^U6mC#~!6_BEYPRt(9Ly zYpyCZxu?@|~E_#tj0WCe)Cik57!;E)QTE}%E=3DA3 ztUtTpqFqwX1~1&L9_9&8fNG}?;ck^-_16o#OKM^|%-KUB6YCFISi&z#1%wT~U`BAs ze`-`?CU{a(Q`TB&IXX1HNp~xCvM6;Vx7P*tk~X|sqpyonrNLy>A2Zpf9naulSXjlR z_|~DHvdCkj-|5t+^!@T$R!d*)O~q>>;V@L-8nigUDbyhbx`)I-XPvoscUqvuGiG=G zg%%rI+qM{vy|hKJ9v_=6_j&I9;nDW=D|zL2uJ{n0MPWa1(k1RSJ_2RjZ6Oc8PTXan z&ZZ*RrzrF5O~f<$v%Wi9Wwyk&*zT_q)uoslNDBTL6~i`q;HiG<){1o}$74EMBaLeZ zg}61nPiF|{UXS3|KCh5_YRld3<}(S7+3&f8TnRSW8Kxk>DtqNW$piyon~Ewus-%BJcdrYpd2HyK1ZUOOxAX)T(?wtI(c8^ zOVp#g!pqQFV?PE|t#pGKkL5fQd8Jk;M;02~$cbazB;tPkf)QG$vn9=JXIWM1{DfWEOf@-KUci0-<^lixd&c~mmv56j z93KQ;b#R)W*O-xgXCcywz`(YYHv zjoU=M9uiS_pwZ7!7gJE8^Vf#E`N|V}mp~6+dt$GFf1{1NeEJqw_Ps##igWAfR)e5#Od!Y{L>H|xLotd7p;I<(#&5%i zL@-&KBIuzE8#ni_UH5yEd_8@<@v%(SQoUYhYx;&&5F`L%MvG$LSec=rzO0^?yRVCz zi?7R4q3tYn9WDZbaLN#5@R?97m@ZS;es@=&{ccNTrUxJL$$(A=uK$_LZrrjme!Jb> ziAzTK;PNU*X)H0tAYnj^p=yyXU2$F#A zfVO?I%8dJq>|jO+EqEDfa>hCM6d;TPM}HzJT8**zxD1xGnhB4i2<8FmcDekRrrOhiksuF&HwvyZw9}v9|etktO7xrpRy`y z{%y}9o6d@*(8FlVWs)0>rCiVhG#%iIXK2wXGiJRO=rAQXiV{X6|DOUnva_@4C&8Wc h5V52HSMLRdI2Lp3womkxpi;&DqMjE) diff --git a/env/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl b/env/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl deleted file mode 100644 index 07bb9aa7f840e20a6f2d274a6a499eccaf2172bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17503 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 Spa=s4I}oY?16bJ!!~+0REE0zR diff --git a/env/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl b/env/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl deleted file mode 100644 index 2a076fd0fb6eee5601f083c6bceb40f087c98445..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13506 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�y_7OKmjU)V&Z4k|4`-=aTgNCF#&7N`iKf2U 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 N-uZiS4E}TX{{X)w?}PvV diff --git a/env/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl b/env/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl deleted file mode 100644 index c1d44592b6fbbdd47f438e564314a700f44acaeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159149 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

      1nU~Yef8z>?Nd%IGxggQ zVUr2`{YRL{w!?moMo9e_Tla7^#=_oAx{Pg0<=?$}h_t^&{pOdK5eK zqfM;3i+I=@hx&-KD^o4i1<6HKAmQBm}18RBW1Xw>_66LlUpOElNmx2cUrR2+y2OoOiW{f9HBDb_h zZNlYB)gf%xV^K_Gb@7&mX@Kg1@-sxz+e@f0CK}7xEaM_>2=)!n(=SckCqUJ*_!fyv zFWTT%bNzqX_W@)u`4#BuG?#FKEUQG%+%UY}Cn#kC?VEk@TiPFi6G`_Si>6ZSqKIS_&l)F0 zB}FR-#&>{0qq2*bYZ=#nqKTu*zqQ>JQ)Bilf?7D$?X zweZ4XDDn@P#i&ae)r@A<}Kkg>d4Dz~Fu$q0d*Ws?E{%<KqhjXLLAYo1jnKbtkD{F z1`Qo{cl>I*jvANq8oU%xD-+U2flm3dyJ3HpkzFnaWl=|9Ahb-{KAy9=Yj>VB@5mcN zmWKp6FDYoM!r|PxKaLaa$!v!*Riub!70x%Y1$V8*t;wVL3kz+AgTjLHDpKc%sv}x z+b3omB=LRS)R(VQ5DEnx+2~_Yth9$FF?$V)GZ-5t1nV+p5W1j=o~o;GMmoIVa)&;s zA^M(h5?aimm;GYE;AqEq>A!1e%b{i%@pLOT{giC`&b>|rMi?gu*HB(GdWNn|CBpQO zVifJ0X2`jy3(5URjpm_LOTbEheLP8`H<9uE0e*X;1SA6$Dh02#NzqP9ElL;+@Om~1{7u0bwg?OrchQx9 ziNzh{`maU9X!Es2gHY?Kn!j1lw`Y)`zSN+=i;dNQ z!t-r8jzHM|gvN|6;-?C5Cp}0~*LEai9-I5lUqv6C#DL;%%!D1A`{lkYPZTqUZn{`c zYVb{NZbkWoD%;)se8)pl8%K8Hq>{#GowIfK2_4-c*d(fA z*8b2KsDB&+|M`kP`-E}EXcNz!U1wO_CHY%EtjLB~L&+t5x)~9Q`J%M;`eV%QGfM4+ z_vR(Sx|br%G;nv<*HH(iD!W{zcJf&TmozUX6hu#`UHKMad!3jpMa68s)-+vkuzm(N z_UU_pxJD`BU2CmpW}5wq#rIvXgkmU~5C3Lw)^uvkv5t~RF5xtD$nNzE{_FifjUfGp zH7ek==*r57`d)xF`>U&bqBXS9H0Oq3Lm8BvI^Py(qGJPmQNFK_xo;v$K}REjWV`WO z>DoS?*33WDi?{gQJ3P?Pi7Lph6y?DXR_=PN0Mb-sV9pE9qwA<*4FeWm@kfp^x()!k z94Y8nn-=?8o_P;Q6MKrm#8^viGyO{in)<bI zpHft*uNeiqv)>zW?fMk(HMH>%U>MvAS;Q>^U|4rgCo^l9g(aja)=IiU<8zpqF5&TNH@%qnk4DjV;3E`+>^!ifp+2H_~BkXnw zI3D7c_tzmm>+Qs-|AG0Rn6Ikphr1LO0NAJa@3GSV&vMxtI69d){^z)IG;Qp*+mU{5 z^aQJsB&60ZNW**?FNBx6xBpPk4HTSXjG?t7yQQ^|K$Emw_7wj1FncFRNLq25fzH;l z;LO6F9%mG&Rjuq+7>YP&Mx{C{Q;|g&cHXL1t&FHfhN6zNuJss;3c4>rRY2`fD86Q* zy?l;@c-6{H`hkXqZru5}6Ni~)@?I1b=j@aoNWEsRQH|~TQkRsVV-sG$NUz+}(Zg5Q z1W%*+!H&CkQ9o4}Stc;p4F^!l>qfdxxv6d?bfc4sGQ%35g9YSeUYmPRU1b_hS+%;t zM#8Pvmca4E`)n10`e-p~;IuFE)@XRCW1~j~H2{NO5Mj5mN+Fb9cScILka3s7%oq=8 zX<|hF&eGA*LF7 z@2l_pBrz6dy_5Y0I&LFysM0{|nXQf4-UGRn2&>{u@&oTc<7DVS+GF%0AlH(Q%L`?m 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

      &L9{^2IpaRPC-n? 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 diff --git a/env/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl b/env/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl deleted file mode 100644 index 3bfe591d99c31886dbe4881a18dbd292b1190978..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115663 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

    2. *Ure!7cwK@-=01WnqpzeIY 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 diff --git a/env/share/python-wheels/pyparsing-2.2.0-py2.py3-none-any.whl b/env/share/python-wheels/pyparsing-2.2.0-py2.py3-none-any.whl deleted file mode 100644 index 0ad3e6cfe2cd6c4f55923a880630cd1fe940e794..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56411 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 RPRWP?@!*xO1Go)<{{SYS#FPL4 diff --git a/env/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl b/env/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl deleted file mode 100644 index f5950d4e1f15bf09ae1b4f9b7d12b163467fbd3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9480 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

      *T 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%0ACv3zp0Ry$ zS9X?>umr|x`|_Z{Nxl%9x_vJWVL>9eIBsAhn!F26{r1=otm#U>$M6|ZxVGIkfJhVL z*BXXR+;{jRLHWl%_KqP4)rgFgfbI%zoFsR*UKEou*!U8rklrY7St6< zDuf!#ah421Y9f$f2JgQ>;B)%*6Fo*$0SY@naUgN)(@fJ3{maM3WeD$K3D2WWN1*lm z#}(yH4l)u7Ig*3+Gr&Udh-b1H49icv;m3bhnNHf(PbNh7ow$CH53@XQ&D*bxRm>d; zNZ}R{O|60ySi3|Nk598woGu>{fM85))lkY!y70=D79XSj5;8bfmG4m)x>eRO^FV{r z=bJZ9rO-~k>i4WSsowT}9X5pceH(aKKm=4@R(Q%viVLYWS;A{%!LNOD2n&A`_c27+Rr0(eZhncc5gS_V9abjtI-vqR9TmV7 z=>GP2HR6|NcG}m=>-TnYQ1*}1ye<<-Vibw->K%sD325RQ>_aiwYUlSvNz2`{0gc?S zbsO+%OpnS#$_jg+c{6ivm-Z|&K0n)WOvfGLmsJWD$ET?Wn25@kqV4)Ms!oALOFI{R z3l4|dI<4ToUXp5RAJ?Uqv=pDGwF~}5c(0yynDgFds|K1mrQT$FNEsz=ds0zfEt6ur zJ0*Fkw$~5#6Y~loJY{{HJN35!bo?qO<*uE_aA8a0;Rb`O2@EDGy z4emCfC_zWjsC>{albEOA;C<=SZ{y|o3Ip$=G$yd77}bX=%*(30aPInRE-aHM$_l#& zz39-YoS+*cI*qoL$y%;{q|6C0ucQa!~%xp1L_>L&_>e(kil74BvphG+U|LY;cX3t64ROP zLb^?cyibBv7eGZS0y8R+?Zur|LT%F)gi%HMZBkqG@n4)YCgnPXIcSV$GO|wj_+BKb z*YOovj^GM3fOb6n_5~zDF4X9YmxFfY;tao_XN}!aO(blyT+x2Qd(mxMauXNuM}|WR zsg;ivF++*WC^qgY3^g$0&88q#4I8*4L|K6^q z0k_&BsGRj4{`3o|6L*ax#EDPE1r@Y$JC?8Vlx&@5zeaYtbNT5gvK?$8gA!?r>wf>u z9Y)?z^w4+~G$3iWE+zDmA-fH~IP%)k&bbA0)DYPp9+SR(LOH|Q&v|?KoR*C`fjFqD zum0>J*vH0<{;qc@^NZZpzgHkEQSYywZ*_Ce_V0e3N}t~-B^zyot{ld?W=j@*wq zYs+ci1EKrV7b<@Lyy1%M(uE!Qx#!p<81Wdya!K>zqr};V>d)T>*GFDf$b{RxM^ z!GPlr>7HmrPivMLvNG!5X$8G;Au+dD+a19-YO!BRMrg$$ofh^)vn+P8k;0x(cK*P0#NQ0VuHCJV{0L6vrJsN$;h?o*!pd+7uKEuv^0 zh}z$aK#{rpT>9AJ2w{=Z7-Y=yDoeMy;Aaba0)OQC5$J4hr{;t5v9xPV-`{FM)OmvY z_`hUQOBaw7S!8bb;BOM9Yj(5iL|I>PI&AJOu{Pu(JFw?RIt9M*!}`k9&_Fi@P6D{} z10FVKZu|@CZvrjjz;??-q%?FGpOD6s>2^XJx1mSt9SRU?6YXD=z1hk%PO*=kXfj1%Q&<3V97UCvlYV!#ZDYEM5Un!Bg@5DF49*llI+cT6Iu|JUt9 zO3L~dAkrb6kMun^&{=mxkcVsG?`uZ0PxQI#7_F{yGv1hO1YN=+2L3yUBpqeL;;*1v^nL z!XhCD?s*1*O1o&J0NLD}8lhO+FNRAz-se^Ufwm#5uPf|e=4NUpvEcfLqddfA2g*XD zWHYrY^J-ARq7%Ix%tkngM1r)V1(Dc;BRAl}2Do{V<*JWAZyr;DxE(|=#_PHy%gG=N z;+v!ysH|X>*SxM|S*#$_W>Kx(==Kave<@k;%0-~CaR-(Z%??SN5-|=<6R1qU%sEUn zH~*mVK9RdxL+>JYz|G@`941uKR8V8AWV&DLAgBkN*?Pz>MF1Y!~*F)rr_t!3^CD0UF9zbcc0N=B2C`H^u#t#^AN zRhz*$miSxV{h+wPc`G6(elSO!rE@pFqo8W5a4Sv-@?z;owN3^h6bh!7I-Ab&o=i}P ztO)s-{iN7o zY!eUs}Zw zCrX@uefLimbf2}s6LRRYX0`5UW8JhvlC7=eU8JZ)S|=UGMAX(31QiX}Zo@U`p;3TU zH%7iz?&1};s?V3zun;Kplfl>xBb?A~^r1Gr{60|V!>z#3qv5UHmO_)cHl+)uO+Ul$ zn|DrvsRfz#sC5{HJv?4rgMay=k+*GbYbjVM5pG3O|1TnR3$`t(R;=Nn6qvf!(QzNDI}*P;wCz3A=mbmc0(mG@&NRyQ*PThgPxa^~bnY z$~8x|JXF+bu_I^MJr|-anN}x^N1Pr`EnV0)+5X*!HBd+2!m|EKn> zqkFQ{9v02oX0zERW-7r31flF(tv8*cYNwqz?)%?pPjc)S9H4)-9E=125dJSgb+NEE z)-$rUF#H$M8Fi_+O*X{d4>f5#&_w9E$Y=BZFm#{%FtRYRaf1d1a|>%`sRUq&tI?lc z=3xB@0JGt=z!A zpiZytB1ZpPY9RQ z)G-B=aZ@-rJ-Y>$KY$BqOd#cdqY}$mon)~~K^j05&UhWv6oQPUnh!Hm)4U~cDUZQD z_BB~ub7Uv8J;Tm}*H+95{H+>&9*qgF3fdOn<1dg)awVUzJvwesD;Vx&#IC6PjU&fj zLWX|HG4;LO_|3XREZNE09SZ+#4P?A}wKt*4F1S4JD9W!BCe84hGo8&L z?a5UCQ}hn)lNi535S!|G93KKaF-mxDw;7#~96OZT>WpH@TuBxg80y1P;FbYP={Zf>Osc_&q9+0agy zr*?NR5i=C_?veF7Es%u}x;s2!#;XZ3^a+e5UWR)gw#*;ar=sA`(Ge76^iGuHpja#I z>BCD*=PCl*$JT<7=Ek-db~opo1f<57H?EVeG8OWzKcv&X`B0$YS99mxMij>+;081#{G|N}6QqIH&f*w9;6ko36dFYm^CO=x&4)(Y%qd z#W6icfb*__c^xgPyr5122lRJT8WikY@?iJD=!S1;AlM|RVc2@O*^HAO=)$_4;n{Mw1-KDY|bBbezI^oNsm2 zh!qW-zt+!3u1IkvcgP4cl<#=>7+~Ztvp5g1R-{jdT(=LQO*`^Tv*w51glAP!?i$Xx z_;IM`T5vZlpP(!e6sQFsOfe>(<01v9ameop8D4H;FG$|StL%-)`fi^k?Qwkfr>i^|qb_`L7C%VOfxg2(lIdwbm6yg<|9t{Sjx6<87(4*r z!u-EKhyLsOG;#mG{pbqE%IESV`>%D&ncvOyWmd5ne3kq;o4pB_YBKSWun4pL8lx#}p!zLe+$n$(u##p>*4fgNq1! zSrhXH)|mF1iJ1*FG~`I8hiVP|O7?lC^|P&B3Aq*Br!>Ej-aA;(S!YRt`KJZTFK7rv z9YmS+BEyqZq|Zvio03LzxzXAZWH-uYv#HmB zn{vI%rw=H(s#Ix^?t--`*?4dg?NHBMPT%`>GDit#mQk2(;!wQdRdQGS zvuA=wYkI(kQGZVzNc=`!!126(+&^hbZarlOmeeK7AUBau^;%(o)D3JzVOjt;{NPr{ z@AGqin6>sW5=4fUFJjU2e*1m3vfJd>`}u0YmW5V7Yi;d{RZf$XRjEB{YF>~ELIr|t zp>>C^-+FnUI0Lh@o${m&L_w+PQZ|BLUoZPebTgJft5&ik)cOsPMPdFoMT;!Mz0uyGqzws};4L zrnoLuK=>%stxzA$CPHz1x$vTm)^a7uBC__EE(c^2CoV)Dzn|%DROMG>1GOrP%W@Ok z4-sbFOEnFsnHvs}F?TUs7NmJot+w4eiwuY~-^RuGy09|{?g$W}@5u#^SsB0D#5pfF z?KA6cDks&6vsw^bGHbP5oTVb?#2j2$7(b)4|K%W zVHqEXc+pHXV776C)g>LRTixM&4loibO5ENe?P=5U(&~!=8oCWFdsIX4(4>F_+7i5g zl&25X{ul8L8I~;Gb_;J7ephZr6trmzV`xLPOX_}=mjqxqSV_D4!bV~~vb=4$wCRy^T z<_@iz$q)69*f;NQBqFF_ge?_JJ{^{P!U3z$C0T_Nm5Gbo9>$wPuxV9BU;x@qu*oe* zZsLd{+#&Ngi3m7qbo^al_UaQmJB6F~2bI^u+Zg)|zmAW4->q?np+e*l@o=H3-k$GQ zMJUB7j&d1#fxsn>Vg|O5pu(T)sBpwj?Nt#c^0>Y9nR{r^D`2h5!C+IQ<3Cq_)gvvB z9pDt-VsTTVs>XXAb-~)Vy6w0ig9z_37tys(&n+~97*7VrQTgHGmxiE(s4Bj}Jzx6B zE<17#+ofsko{s@xVY_J^?6}ufnX(b7TAHiu8P={kboy~x4Y=UgkWvmXO!L%&%)jyi z71)*{3~{mQ#~*m~b&~y;ElZ2gnR@=Hpj~Oi0r#7l@`x(z3!N3((@V=P9X4bT$OfU7 z9)E$GX1r7c$1II0V28xh&e^?Xb}M3+^s$=YT}-TDl+oLg1u!!Zr0W;|miDMK{KB23 z4R*FJS{=9oLK9ic%84dg9*FzhaHI$$RHPSNY?4M$EUl#C$UgSL9p$T1CVM76TL;Ev%eBa2U=$`#=Y?|ASqBqeim__5{;BfjQnO&6<@ewUSENh^n>yjybH>n zZ*S5J7gU7p#B>TNzviOYgzRUB1iuHQ1aQoAA*u)#%x|6+=>(i1TYc<^zD)N!DIm5YRPa%0T`-}t}|t1{YFdqzMXnA$IV8n%{XA2AO?0(J4PQ? zGw!B^@Y>2k7TrCRWUiJmuVOTjQujCZr@#{-rwX3uhqNL?J2 zH70GK$6t@B-!o`tI3bQv8+GTX>Qabistv*^72P_E2TPv85kplPIBptRQ3>&! zn*7*9ljo!?Z#5bep(L1(R)~f_O93x3N<8X&*hLq&E-Wh2lTD*6{`n{z zc8TGm^E~W)>SnC?tL83Iv{r2fE7Wxjid#;vycdDZ3p1^4IK>w77dU5nB^{S_~=E4bBWMp(RVBlMsb0o!r|H;P5?jM7|sYRF+ofks1i!l zXxUIbuGir&;mJ)^fsy=MToRPZ0WwZL9r2oXN9x9~bGhHxd^DEy7MWW&AZF*BCl+p3 zZVf}9Bhk8l9cP+r$`Z#w+cavIWIdb9voG;CVzOg+bTv*_YV)-dvCAoRV3{$JJ_`w^ zKPm4ZCk%xJT_)j)`2z%`2$7T;z<+ZNt@mf5MNxiy4^od?Vwsm6|mE;jTxQan(4SzT|4qSFSywS(pp6Mvij@MpVc*wD6)UTB0|B zp#B*1>yJSxcO@vo?VdWGq-CTWv~@g;0M@qI)wgb2E`_sdx9(W470#=M7lS#WXc?Fs zl|69wQZJ8nGCq3fL51c90(JhpAywr58>wr$(CZQHhO+qP|I^W7y+@*B>%sP3+} zO4iEa6?;fpoYfA>>WEAXrL+=ki}}T~Y&3@U1(2++s%J{JIfCVTLYhbz!#;ZkKGs3L9f zWUE^CupP{K>P?E+hKpR`vG-Li=lya%$u;W9y@8RiQU$WLRalw^4mi>`F52HFu?w6+ z{4yt9sI@J(7i8(EW1G1@zoFVBCJAY9p*}N&)EMaxyHg@r1U=`zU3fU3WSsj(9e1H z0B{?0KVTB9XpA+jLa=}!BX7X0m2kgDt`E*uH9qGqCH$w7yXi7ZQoTnt#Rt*QAJ2hP zIlpQuO~xzjM1ge6HA=~iLDgMA!aFlTMZtUbiW+6kv?%&l9TAAKiAVJWMObxlL`}>B z(|~x&-5X#7-&tZfh%W(ea-IKSbpMdI;yN+=AbvS_iWDKA`-8MG` zN@&Gxw06_p72>jf_1n4ABV}R{o?~fnI+`xm6WtiC8_&&7NX@LD%(o4$-prtM0@wGi zvHrRXy#4$=CtpgfNWpgjMxkNUKiFeoU3%P7Rx}O04X1|*r-+wK@bFol{MO+YF>_9C zjn4i141W}WwwKkG+!Rfn49A^mm&dCvHa}G3Wzsr4n7Z&wb-O9tTQj zxME)w(S=UHRcyMPm!~r^*Go=k-*J81i z!m)SMvIIi?)_V4zGj=>U!>$jaj1wz5UDi7*Z~6Wy=Sh9};FDWYWfcPnf;{u}ATuFE z(!WH&?l2;V26jjiUVv`R{+)rQv=J2wqwG6FXD_Z!tV(Ib@V_Ov{bG&3n_G%jGP#zJ z71ZVE@(bOHc9(mIncR+m&9~egIiE9^a0dJnicgSS;oLjRre5KUek>xaa7#FD%(d$g zKETGozTwYC6f33S3xmw0OJb9=gUoS7kvbn}?Tye@O9bL>b!Rso=+SX*jp($x`c8U6HEB7#pyk#`&g2pl}~eo=*1nB9g1lgjSD z)fPtmv)0YjE1u56P}sUBH%L0AczOE-#mj%^l*xn1oRB=U-FBt;b#isLri6ae0_nN7iPs+ixoNOrrO2&yYQwJ;|aKbb6s}Yss8+aif zc0J*2iA17Tt)KK}?;PCRW?XABTu{UsZiiy-4hcky`E50DtlN|l53*_QYcp#_d}l?K zVU=*%T|BM;+Wq}wyyR+R?B3pwPQ)G zvSh`UvXLOR7%oa!?TtdFKEZv{VhMN>!gcHIU9(~f=~xtufx5$5pDEQKLPtl({{X(W zT#1{aoeWbZl?R6!xVf~k5RidYUb6dx*Txm+zvAjNThzWn4~|xoM@;OX$7;(t*K?XA zm#~hDS~ICP?!(o92S6ZRQk;RVULNjkFa?JxNQ^M?dS`mX4G?t3ybuwO1DdtKAc9B~ z63w2CqN$f938a=>mlTH9)7bnuUxN&vkTn#O$`f2)6y zkF>Hh@KnQy)S!q>0_u!UlX*I-4y&HMq_yA0P61t*^3RH}ccs1@^qmdh3Lv+J>t3y> z3N>Sn+bRcP=`0r|K-!O9!a?eK0B( z{63K)(FWwyNfRTW#lttRo)#XH5_qIg+1Rnb5p2Mt?v5Vy8QFUOoogyuk z%eS=r)LRwRnqV?kZ6Mgf9Y%u3X_TkY0sGPKSSstV=HH zB~y;p$qBwzqD?-y;HV8^ziG~wC^6E{US~mbrKOH`=kpL!( zH`Vzz{eBrzEoUk`_!t77XHUxBZ`=SoNh6so+vH3nj0iIXiPTz#bllI%fc}n7OrMlr zhtzv?o)jGjl7sMbNWwW&<*#7&HCng^s{{sW&T1p>6}x`EnZRJoLKfW@X76@LNrbwjv4M47+IVbs>skLREyHOZbY|j*MXv+hFH}%m{&E+s^egUdwg@ixCvsc zmKw(AfyQZeXnN+K;z+qFJldEp&>~bjdg2lMSV8Skcvc53XIq}0p@m51MJmDTMjiA?)vCfXAsqBx8MkQHCsU$`F$iZegiD%aM_3HmITkjZtbVD zrx6B(5f;f0-%4Y-vZbK6Iu5icD6Q9s}5bqCw@j@ECCwp znI)AWN<~bdURw7-0i|Um>A8z#X{4<(GUB%F+bS$tq{8L(i)wYj&8_oHgICR=^a+r-OcK~*$*AYo&Kux{ zsOq+|)=3V3h7+E(1w8qEbm7|YD;Z$Nr ze>xtMLJ?5HNpL?mp9j1<64b1?!rf1LQ8EOH#0_Zw83j{2goVF&fRdY1RyKcPgQ<9q zSN74zX!AN<;nnwY2BDtDx3szH%Oc#syWw9OXR{MlpvcYZ48Rdo(nhnN?fJCuq(6p5 zMsi#-Ij6>jCP;E#Jr_CB{CGCU5P2vk!N_vjA$?Iz)9RtiKmfZ0vKAijPdfP9O2!E`L87Ry{Htt%FTbnAG@z;4A;yI$bMR#kJcl4n^r1?b!gKd=qbQas5vD{5gFzWtt4wg8Y?_GRe#V-%g zZYj%TYk9JF{B;fPdPzBqRi5Zbsd_0)12ZD$TkQF!v1YaKluGGsn${Pr!SCH6cWUI56Mlv^F>nxBHb<_i3Fz%+sX{HJY8SF1g z4`~9d22_;h{hb}63b6&l3<8- z{xoP}D{lq2p(C$pa*;#%u+k_k#&{wQ{E;TZ%Dog%hk5cBiW%W@s{A5+kj5ODRXBZ-J(Yq zP%r~CMXBG2iqZtwrzdbQZIIotqR808%A78iFZ6B)2yWgoYocYmn6iO3aq1AozunpX z^`muY#Bm@Bsa=?l_Zu`h?DolJ6(XP;pJi~~@;@AQyG29d@!Nweo zCN=TBI9ObhO#{5pT4|dv40782tthop1BN-t?`2p{`rZzz5`z;-`K*WN!6fg?Je#V7 zackJD2DcUh-S2ngENkOUas%K_bI-22G$bGUOC; z<-w)-&>&{i8-bYH#6hfwQ3e1C zOirwx;%JEj6j`-af~%9weEaluqku2i6@yP}D(|!Jhw6w+yA*gDDXj7?zgBvKoC<2# zr)DWh{UsFhv;BU&y|d^1{%zH9oKG*M2B%K?bzY6A{+%A4XpobF??wZ1=P@Vao)x|) z2VdadT27#39K((L6X(TE(3{`|V(ep-!KSpB;3R}+HtB2Vp8%Mf&4FXKsuWeBIL%#b z&aFZ2l|tl^7K4{|K?!l#oUW%*xm;8HH$H^7LFMTkM9bR}|68w|xlVJex=jc1t!nkM zmsvU_2VeoX+t7%v=Zvl%NCxdJhAlw{QDUKx$dg4kQfhO57OywA+ZgLjABBLa*?n>o8-J zzVe zM`xN$v0h4BY_kN^5S!=7y_Slobf|z-!gnQ44#7z&E$L(^A!->GiiI>B=wiY#5qj8d zs;^A&B;ah;H%zEEGV@k<5>>?Xv3Xg9996!AC)8Z=bfOt1`hnpQ3Eyw6D)2!mzC;6W z=VNXxPME)jj|Fi_acKW?v{@9*>Jr~uI7@+u(NNTBk02M_VD}9`BME>DbrbNnFnXCeaF#Lgz zPlC627zcGf$1ct(bYpa*+8lhG*s==LC>7&>Ak;E$;iPsWO|AeW7oxhxX{@DDWb{K8 zGk?F)R~W;Ulfd?w$ez&tEj0YCFWhGHngT84V}D8^5!)Ft|xJ}QHAm%k%7_H?DYn(Yc=Q*Jv(Z*;JR%t zeN$5N=1!|Z8*-1e`XK|`=!962}LXYJCGk`Em1yrDNU#xsF*QFjUmdcveS(^37&f$~fiEVooD06w2(EUsixl8;^ z=M%$ikYzOTaYDW4+3{;&(di!FxW573Qwx7P4jg>{qN2_3<+X*Na2_l`!ERwH0VU|nC<^9e=kWDE!5Qu@XVRO~|U`S9zguy#m8jLc*knJAqH zSYo=$CbA_h%;2JWy!i_!}iAJ-@1zN$zu#$}t@ z+Np~c$;*OShU{9G?^l*_SZBGN_u(>-75F>cBK2{1w4J*SI5A`DhR(lu0By-_Q^Kq} za>syd?&|9bTskG28>}9G2MK2V=lO+a&|(#8IAN2$?jPnH4fXVpNug$=yQ6Lx#1vhz zX@Hk%rrwo0x#}xoC}a4I?abRAH&-2(!K!CWZ_G$+Y}%?+d8!D>j{q*rJ~9>nty5%h z3*w1Wb+NOHs^^z6LB(iPHCYC*J9Axm#5{` zoTWWvLb>{EJ$~GSf2{7gEIigtetydHd25#DGe@YpD3~`{`Jb-Gp-pZ!uZ~ml^|K_c zPiF&cvh{T`^ykIa6oHB>FB{;tD1~B`5u5nvmiXCB_gRgjdaemT&*3So=MDiI4f`Dee20 z{PO?gPy8o-!raEh_Mcqy{%2W8d%;P?&MYtBu!yStij?{n&`mYJov^80=zg zW$F~M+2WIv#7jMNr>a;B#n3}#v6cz-4sAhj91QXbB}bTa3R9B4@FmO)VRQ@tNk1O3+)=%RlYrK&h(ST7b$Ji>HLxK{l9d# zg|A;`j}8EUh&CVq(f_TxjrASf|K%Y$I_X*jZc9(>(RzZf>|O&HJX$a&fQti? zQ-*w8krKn}dQx2Zh{NLdDDb|xEQG#3W?-GH>7SQYn{DmwMPLP&22UNnaFKtfmez}l zj@2J>@XZpwwB*Y`1Mh6Bn~h0}Zgvcqmzc*BI`?Lq4X^gC%(C3>ZgdGv<;kP2ibN6R z8u|pUO_jPL4^hRu{o5ru5>$OiLP>vk)$#x6>-ftwQe&?%GOahx#fLiS`X8XUX2jQkQAPuiEb(vqo5e;BU=q z3-;QTRS{V0#}_0QJ#Nd5E3VqiI$8NuhwN z6kFqz1s9YU7}NTR)yVRzi1dNVRq|V1uSaQ@hlk5U+gRBV$lrwT)B9I)K!`hTb{Fw^P#j2ee=8u*|JIB{A%I(*cPHrdsJNBH24iueT z)85C=mC6>nh^q0~NEu5(#!h?@P3sMr%B~#Ue=fcf+jEy_5}L%?jzzr>upmSEtq<2H zTHj}=UQF_)e7^yH>&Xs*32=ga880`}oA_?u@5LO#6VqYPr@-I7v{U8M$!TNxwQ=82 zU%SNVWzeV{rA-eVkfEa*n!TNURLhZZtTVwL8eh7jf6V|eaVU4_qB`uG9bZ_V0&B*_+T}rCPtO3}3BxS~L%Ap*iU2H?g-B zA5bR_3QdN!iKuw^O)msqRopfHv{(%(yfWk6xWt;D<(VwG*ILv+?jdz$^n| zP!QBzN@C-b(jIF^l|bgxc3Cjbi9x=-*7VN~*cOBE_AZJw^~P-cy%-N4p_N@)hR8hF zd6DZSU}LSIPMh4Do11~{WX6f#FOBN!C56Hlioitu5$Ocdr|%9s08~YRt%33mPDx*# zPRxl??6QE3xe}&cbmutGYl*0NiV8X8*V4%ZWUK(6U1gEaS-Kt|@dPk#<@Jk^*PsSM zz<)d2WK)7&u_t2SOx&O@cFUjSFHnCL{D6jv`(aVTAZn>M=wAyqp%}720>Us zb~u}#_aCOw6uG;y)=$ban0*3zi#`H5?eyAUw$IlGxp)(0n6SC`;sJp%03`cV53gTm z;oh$hNE=!v9!zvn%$YA}D(tT(N;WI1Z@2KBY5?$d`>MJ(Q792&2%WKFx>SI^yt`?y zPKU3%)|$pcojGgKKpELW>t%G0Crj3-_xRy;22t$L^-5gm@Y_pdetmB={8E(qNC+`& z_p4IhEn3FHVL6+o#+>A7_7aNUUdw z_q(osZ+gMfYb9{E`?<9N4>CZl8rWCZ36Uel1PQrx8W40xB`H#V{ z5HPX4+1R8j;oSSATdJF)_S?|>)B8?iPPY&%FIX;SSujRC3A{)@E(} z_x-cLt2Kr4kz`V{riMo}RBSs1g=5!x(zgW8mb}X?>O6L3?QR#{FGAUe7bP zW8fyAtR1=gONQS7uBn?MjPY!1*J!_w#=$6@etWLdsqF9C%;~C`+*k33zB&W=kS}WJ ze*MsqL>w)EV2&{8uvx1{n)K!uq(9)sibw5o2B=oZY_x=Y)8KwIQy_Fp%EAaU=3J2? z;ckiah;Ul&SwQ&U*?}TD@JQN`;m7F^TUL7-ec?l-mk!aMpPxq+6l_lo{f^)qCxQ4x zJGFcHqB!_Hm=D@*j_a@f8EfE8TEhlncN?fPQC~Il7a8~;W@ZL4IWO^*Mc_o zF4^24LD&J_c#_%^6!rZOZW5V&6Y5?nbk;1(!1_F!M125MJRQ{sWEN2SPsWjU%{XW| zjX6B6aI19XOgcj(!!_@EL&6U6D$cnhwdlmzXzM5$bap=a0MUB)t%wsaU9|)@}#|zdF246cm z+1@GuuC!+-Z$@Y;GslfVVPL9HEU&uqlWQSe^`9YqqBnO*Dru{b*-U)S1Jzafpky+f zd(7!7TL3r0`ceQ3`sE733xPzK&NV*PFm0748YBJMR1Y?aL)_u#kORy zxJqkQA@JKl=fKcfzl;o)KvwKnPJtAUo{=*d4<}zl`S18leS1?)CC*6{2(6=>| z&d|EtFt$3sYBwf}J+tjusg`tS#^yr;5BF0s*1+W&e0akgTx~xkAIPVdYiu6kJ@U!P z>+^jeyNhFrFB7wCOkTT#&pmS1pk~vc?C6gZqO4UN&YxF<{I~^+&pIgh5Vo%_fEHsy zQF7-t2rIcr=wo3&1;gslrB(M@Li~!HVy~^$CsYe<1=9G{Dcb{gjrkq;p4;J9s*M68 zmZKtQpJ(Zoq-K>G?=Pa3L+#^~s}nmO^y0snx8f`!dj_+X$m#>-nd`>Up4<26&l_Av zZWpELmYN4%pRKrwG@6O@RCpBrOIbx;S+nQ(5h+L1NYTH$7xIyPbR{>h=fPxfAq!$$ zy}$qm(Lx2xM({yfPWhHI++&hm}(UlP)om=cAEsl)b&sJ%Lc zFoFT|=_4NNoV?HK#NaPr`h@nUb5(gcqh$((T7ZB!uZCpBb~R~=(5A(?p2lPbIg)m2eG%mu0PtfESRJ^TfPm5^l>CiAu=ylIeUBq)66mGfCZN2F$L;;RG~5gQ z_6&X-eBgMoH}wF9&<7CrzXB56Ht7!do!Y@JATz3R*n7(Lp$e^iJi$bV4w+pdG&Q< z1T=&Jd0WmcnfV~pAlnXA+}OoHw0=w=?+06s$m-?Q*GbT-s!E3-U4Ph5lZj!yZGh9x zodN#)BqkA#f5{OtEj~g)!E2lumUS?d=P*^P%%v53o)sy#!}KZOg-$RtyEHrwyb6_ zfi4vbP1ZVwO^i!L!2+mD1db$!7JW0LU2x%$wNRgFE)s*n3>Jq9H&9(R5}8uo1e0d3 z(YP6NF91f2nStW(q?H~Ll$r=hx!QCDXv0B2ayIQnXVuQgIqTem`m);A@}G6DQ`b9< zymWHr53IpZrB$2~fi~h+AgNOh{t~aF2g1kEjR)(c1Pna_t3|xZ@5m(enGU3CF1;SKVt+OP7 z1fvim7PT&Z9qqhyL~{V_3p*e%8a{|M&(4t;eRRM-_`is>HOF4cO{vQR*AmgH9c)|j z6>NiNc=xBc%>|hr2UY1IzJ$V=Xa{TRfMGCBYKdo@(E-QGfa%OtbLaby%%9f*(J=Y` zG`L)a*+O?N&4PT&-sxYsotSgKdIp2Jgyh=`q2&~fKXB7Oj940WB+{i2P7?u6A8(BJ zyV6_=3X<8Wb^zpm%3^KjagOd_@#eDwf=7W5@R+zl$q(!x@hC@`Dzr1%GD+dQKaQlP z@!#dT;D>n{rOfrP*|2m{^sNW;u@X;;I`%%#3BTf`D&3R?0U{U4znGK{x-LzI)_ZbX zkPWhDTPKfa?4<)`TwCMkR=?*rses)pZMs`ZWdW2wxvMHgP+d4A`Ide8p*sh|Gk`f* zPSIiN9yPE2Ss>)_edb>Lul?3F>2HTVDc$+JUnn!K6TDP%=pUhTd*G)_0T5hrtvnfu z>py^e@GBbMLWvULP3usZa^PS`xp|oBZO5Sb0RUofzy*590MP+5lPD3nfgc2{nXR%y zR7=~o_cCQ_wEK!n3eQ#_luyI&)5Uz5^I+}wwp|2vZ2aD0?HLN z6}i@GP!%O>KZhtX{%CVxIKMUzp5LTx0)kZjn7uI0TE9Qp(y>0vLCI}Jyx~{ZuOMvG=?N8X2v z;w%Jfgiy={UCa6YK~UuKhM}7T>R4pbLSaZZ%fryP`Sus`BA~d+>jmBgGqfi1^t`on zxKkd{{7Cp?h6Qo+uf93YyGk^d;N^m_8HzoP%r+IYC-MwU4oUUakFcc{(;YTa%7G~h zqJO_|H&g27U&t~|lAw*n5_7x~-Hwi;6FlBIw2hn-6QYRi?zR_%238d@jFDTI*Tbf` zZW6M}_~MaCnOt{BbmH}pA~;z{*VUe+TWgQFPP4FzXTJ{(3Qp3%ScN%1bBvIm7DZV| zkN;cVyHJiii>XF_aBT87_x0br8td`L2st&-o25@M-z@d>=8F*w(T9&tngV5TZ2a0z zOkmA39=uHrM^kBk3}860ifH%Z3YSF-_kfiK)B6IZw@b1bv>2-|A_KwP`ivPN=-!Nb z%50e0#kX0r@wjjd(Gy;nsN=7v=aC&B3$zlv&yu?Q*T7bHOP0qlkE5JEF%C6LEXT zQ5(+_6?kUY--gbdU2yc!N6cSwI$aJw;Sg&?dPIHQ!8$!Zm+Vr!+<3mb3y&j%E%0ni z?8Z8Ey(d|*k(qkFUta0zp=akj>bWz5ag;#hdz0+|JZ~zr+M<&5&Yg5xk-O1 zr?SEH3{%$md4eM`em-&vvSm++p8W}_p&WyeB{N|Q#5>4iMD~XBIUmwdg_Nr_v5Llp zy^f2JmJi_k$SBx__~?iN%Xi7&XvwtxXOSpBbfr!O0&P$!_61D{H%L=Y;FkrvYGoqG z26U*l7wOs|cyTO$5Bzj?$nO_M_C<+$ufBe$!Oe7j@PM1~MgTk8QTfJ7EiSGxw-^}_J18)W zM8yrfTi8?U>P5;Y;;pMGq8J;%X6yL8yH}EalzXKQ4MZgc4-maE-LgjbJLFOXQOG z7R#`UyfKER%*hs=zUSz@Ry#{}TFDf19;v`N5-s$;8{vb_fEuIMxnCf-Obn57it9KR zeQo3}vCS!@1^kI|v$c4qN2*_3QkYMp13G4i#eNOi#+!qxbtr2WkmS>tP$MW!)f!1; zMZoW{djp){S`xGmB_PXJ&9TtQPwY89j7<2`A;Bl*Pax3*vWig6!{$h$e1P6WuX3@L zh-@NLUtBq)0CKuAi=5B>~1E+qM* zm+%9mH2S(Gly5;73K)uu;kU08W07CSwme{|FS(I-R_Uq>dQvO%lce7 zJpwN5g5QFkkc*4=25u=8?$i*L;5GY_9%L)-tEUsWqY~^FD}hfVrV1K?-#_3~KSJuZ zHF$kXCcyOB?^ty=CL9?vsRFEv;+vj(koV%dS>h>)s@NHc>=y z`aS+jUhFYjbDqzhP<6MbnmL=D^jH^Z^^}IJ+>`r-cB9lzclIn{>E1;t0wv;KyIawW zNuXgIJdx0CXTnZ*%OiB$^I_!8_^I72nir!+K{jz@_I_2KDC>zi`C}R4^?FSp>Hv-a zZ$o0Z0Ri8}p{K!p`pRHdA;nhq)Ba)+?_mv6+o&r>LH9=={kf+WJPOqLf(mP`4%^4N zI7D4y*tWqJz7YgN*l|ja?=2zdVB3TYm_f}rr;#EsT`u_H+&MTORo8_hxdO4RP<4D7 zlp*p!Gnrv{(uXqswK=1roMf9^j3~4Y?Ziu_&ZUMvBA*XVl%hzEXnuM^uFM8uF1Vog zfi{pUY2w@+Bcrj3h9m}3?4=>G++48&xnD%|t2+@SeoWwfr%7{#tNrB0!(_wR^Xl%{ zCV))btQj{tu6(29&wy{QEoJnN(t+SA*rn*LPEdWPswspG`C7Ngb`Z5Q_4abQ;&`F7v%Fd2x zf7+*xLhe-l`#j6Wz8*<>4G2xS_ewk!O@WAEE-tE@Ba}!C8K!RieF@fl* z(w-Y$frCy@l(f_FT9_jMmY3z&&ka9{UCDp?iWBb5sI3F0i%a==#n#4VezgUB6n+Ca zJ$f-G$5G$*hB^d zJ}l1pPFh(jYhvOGv4>qJ8JBicc;(X8NypUWvbix(&!_sgu&EBXo+K)WJtlE6eZZfx<63IKaViVQ~q8(JA;0a5>Xoa6}z?;pfIHc zRHLW3jxboLMt4yMlYb-5^Bj(zmj}X~xS9+U(kN<+QJU|G53> z^GxM%^Ywb*bN@UzI(nNFCO8^{LcvfB(#nx@du@U_h_K1X5Ld6iJt)PTL<-@Tr){qK z;pv(A`TVTsc7gYg4!lB)=wz@SjI(T)g+9cg{)er2++SdG(j$TC^t$8oR^Jp}nW_)U zavXy3|D0))u< zCp^n%XiDTvMd8YZjtpQ}v0|RAS8yNz4;R!`j@7>pRmc^Vp)xu3-bLXVxz^ z3Cw1Cxuaehew>?GT(k~OtHK11^sjoxxqD$tdDm7j`W1f>+pCJJA?i}Eqc2_kxjM3c z-4FHD=+@9Zm2?x8o)|ci_ZCN@r5?XqZ{|~@`0{mol}>cpE&)$!o#qT9EoTTT3qEM# zqtZ^AFLm0_3kp+l#_#50TJH9AjP-OTckBAhbGmZypT&*k>ZZC8QobEz|CP6fO(yz@ z+j{m~{}Kt-iZ&uORJNO{$jS(hDxC43ul_2O+~-Z!<;*E=;m!su#I1*ZC@tDQfH_)R zUIy}&B@HL#IRNRzg?HD9xlj|Gmrm4)4MJ;`{m( z{(hVe9`GP+_?lGe8tcr{L~V}`G#&q2KCxuovogbgfkJ={ZFlr=6bDy}qIAQLMO z+&WJZ7~78!8DC<@q4y=&Fb~^9+=!{Jf}Ydy!#HmLjA!U1FoC&%Cb^g$YnxTau$2s( zs!dhzSQ=9g8$nj|&{u{d#{CnL)7l_mw1BF4Tf0-|sZ!ZGscY-n-c3kv*1{LBMirKj4MhEpNJIqGAV5CP3R2W z@tF$ayx^Pou8`S|xB+L3I|~U=iRCmGb&~nK(Rxj!jN-}{(4UDbsfq~bOIq6PWDIMw zH&N4gJ0luOchehr?*~^Jf$K1%e>K%l$nRVpt`WYqb|jY3_A2dhDXhsF!F{$Q`a{=M zR|4F*vGzJLW3#I?9bcxBx0+_4iiBL)C(ZWKOt_|O{T1`bdf?~T-sL}ZQNbthPSZCM zdyZYfJnbRzIpp|>Vb=x#Yyc(Y95`#j_2)|=qaGaKf-LBwL|idu19w}kt%d<s>gl4*-_`OdHQZ0A1vNaYle z<;LXudPuqt-H4Jb+3cu8SY0;UJGsf8L{l`u3}eB74%r}VeUt+*t3Rj)&n}qzO|J|4 zFLEG_PIMQ2@uWor|4iD$N`~8-gF#%MnaXm#>(}3p7z;u&#MmB!c$q^GgQd>%$hPDC zeGl8_Z5lZ-*7ab=<03*bKKmxV2GF={gUhfu%ydaTf$W zAt&xR0$8v>WT{|8$B1E&?MCjUDZ1Mz_yF@khVL~$?@NTFyz;uTefTwAJpvU4g`=3J z;G&QWK-n0__n~tm2of9xIjqYhx-8^Wy-|ULp=&wP#xHF_RiAppH3EPoIKkdH`U}x+ zJFE`eAMJWL!}K3YnEXJ7gEe7oRNadCG#c&0BgUO|2H`cA#y+(Q*aR~Lh4(ZpFa@w^ z7NTI37;*F&UZR(B7sVHpi0B$k=TW$G;XJEIR>gF#?Weszyd$Fu?AwWoHg+xBEDh6L ztve%gJSC~_g-;P|#9!G%do8WBtA*#MbKQEYX~p)YO_ty`Vw>ZrB_Ag%#6V#~((X~b zzmqz6+D)=2vIbepq9I)(1~cG+`bykiWwUv9Kvq9s;}J4lvjd=fGJHC1oP_D`m%6_e zj-CfBQNC%Y@-}nmZ6o0IM7REq#~!Gf(A9%-2JUjoiE-TfO6BZDKkGJXulczCQgECV zpUr=CDV?6%DMRiqMUEY>S#A%=`!6X8@~}8yUHhg##4jZkmZ%{~f>-BD`FpmZp5S;f zVE@HMTvUV>mzt`5hoEhU>?wl2RZ%x$&8wPMdf2HYHP`<&E;HMx)<)ykTO*OZrS)I% z32zJ)Dm0TJVc;W#yj7M0BBbN|Q&C$65KwQseCMQldger~IRkl;?>deoz-K#Y8CA44 zE+a7OBZGQdIb$+k+{sM?n-jno(ZR^`1*LsM7a1G@;RYeZ6%*3%WR!HoZ$rr>Lg)>X)OPKZygMBcrDG^dRO*yw0H0r_ zy9qlSUEz-=J*s(#_vx=ApQoqAlHZY%EP-z*1u^)6Z(m}z!PECa-B#j#{{_~2Chs4= zU3Az2W-Do+dD|01tMPzvE`8JWP|`c+v}qUWRUled0cH!6M235$4W}W~Vzh!p0f`XSL3wc>n5n!XNHQ6sd*pUNk^@zpH`fL7?62#?vuWOU*&5vn( zvlC&?vy8`Ig6)^$Wq$O_f)k1;WBd5oTPYXGb^L69EVyOpYST);{bUy&H4LyJx!60` zmx~6;Ip*gtSf1i=zpt$Cz9K9qykqst|4o7Gj}doDcj2)VlLYF z)Do1?eLI)V97ky?jCMj-4>D`&`fJoooJ#nq z^_s42_=%ErwCVoE(_BP>3al$Xy&kp^^aag9n}l9`P`K@?c-mQc{73>d4UYH8&RHwp z!g4(X#V0&m3niw{bHjwEhsOvzQ;vENS^Xhjs-ddKOe>dFH1XrWf*~C`=XvDdpmCR6 zIw-oqcI#R4-KC9!mexcG zVj4Sv7B3pQ-~dffsZl3KSAgGM2^+Y%RDVJbZ0`-@B(0J*dxy#LRU7Ae;L_>{#{Sx> zX$VYQK^!&2`))q@{{mz{o4@o2Q<51+w#Jw^J-4Vg6iXw{sfl4l5<5MpsKF|4u=JEf zLuFh1TYFB2kD?h(4Ho)3aEp#Vgo#`Y07yAT41%R^#>wDj0E7?Gi+m6Q-%aDBZCMxl z?feq@SSU}b-~H})$%GaddCyqK-OqT7y8BR33Di4tOr>~rv5%r*iIGul$nwo}8u7MIj0r}(E&fR(-drvpG$Pe;?;TSe&5QLN zbBM^Ak15^=>r!zQQLaFZVuZRwiX9B?fSOySsx<*iZd7poGS%`ncj4-`YkUVYOpI7w z_w1r^D&VFdU|(QW?~%W?zfg`b-SSz(212i+M>-UDJB3rITV9p%V4`Ap$Uoq2-xStB zRCM`noAx=ZA4gvVW|dvDXD??ZFW)06Ys|p<%KX;g_ZUDN#QkC~%PjWFH$&5X_<+zc z2Qs!Q$_BiwW}yS18tn1V8?ht0vDO1&MH~iV%C4wP#O@+!b|r6-oI#ogjpMU=Qq0_g zPhs<@?8yrlC7;Ix&yQHex9I+kT&SLY^Dmr#fHS-fEZCyZ?sav8xu+7$|3OZF_BD{= z#a)pv>bK|HM_6O&`#6og`HZ4Ek<(p?W3`6~-&D+|<$Mnv@W>@2U&YWI%g-u)e4ndz zqz(QUJsYN9fN#GwYB$q->|a#-arCSo_%l5I^PeZLUVrswxYM;-P3`#N!p`jHa>L;} zQ~O(?me=9LwH|zm>ST+3YLRBFBlAm~j|uiW!n-UAbQ2V}27m9m>Hr-l8}e|zzkyv| ztOiDWOnc$nxACBsDD&D?(P%JkXyxeFK~6jA&aki~dhXpuYVf@ZKY5B()4p0@{or`k zHRlau8!Z(D(_LUXyeCI`gCZVsp@MhksG@G#kkjvj z+Gv>Oy11bu&B`W&+qQ|6c{D!{B{-_RX%S(5`lAQo`e98=r6dF~=382FJOO;a?`szv znw$_B#`t1y?xHYVIu_5w5>fe?A7-kq`fp=wLW)7fM*_osDR6gi%&d0L-1^oUJ;_dB zpZWQ3dpOT_oy`3g?7Zh<#pzH_;}sPoc+`j@0+o>c(VGvUuRHgPhAsyA$1J&9Zf! z;W}@k$1mI#N{PQ);c+4bD$y&9Vz|a+i$YGsDP7LdSSXTqc2ll#pbS3kDmFzV9GbJ8$VfbOy`r^ zuXiOlG0U2WkIrH8bo%6nb=Vv|LdVH9itLEZ7^ToCe2zzxU7@eqkhQ(81ZeziF!OoT zVC*~Q-GSHf%9&jqrcL zSD3P6xDNAC->VGk6lUJ9JF}+jYM9zRC`i**n{0`JUGVYWRrOcpG@Ul}oE;on-vyAs;};UyjXUODV^n-TFBJn?Y z`R>)*_a_HEWdENwZ+AJ&v=^asv-wdTK>A~&Vgi)X3&Nbz-MKp->+fE?d;RM5pARKk z-^3=ep*h?+8QM=PyKh)?G>YXW7u((90MTahxxU`GvuGcge6AL30qwS6S*({Ss%Ns@ zhNR=1GM3WQqsH&(*Puzvc1X8?N)kw-P9A{?C4AS7+B6p$0q(fa#-D-%kNHBxVLkLV z5w8kZ+l6u$%RGKB>FDAi1M0ShB%>#l< zcBjx8B|k6Py9}#{``p02yt^;|IJo&bU*7#(*yo)3(GHAgUYzOFc*$bKA_Y z#J~*mi-iHUAtn=D$K;nPsc%Oe##@lj!gQq> zmjL{{2cW4v01x?Pd2v}dEkrbndbxNYa=or7V_{QquJ5)#F}|s^sR}=14ul$&#;d}M zU!)nsd0`5wDO!1^7gG$=o)soWTOrrb`j@JB2isWfo~}HDx#~<4xS5iA-ArqC$LYDz z|93j_cB=E5dx5w%>e=}JV^rjkp@79=;44DDE|#0~?b6?|703p7izLo%v&_j+&s;97 zU)Sgpki0fOtRJN~+6ZJHxog>IOY^l5#sT6mowd zZ?UUrhb^xg&)d@()#0bRxV&f+WolIBN=>sefh}I13){eKg|rDTAMYeOu@5N|<(n_x z944O25j9Bd>33*5CttU54|3Ivr_uvT7Kq{uZ44&EpS{=TaO{-NiJw@Ln|P$ER=h$x z6(UfRI6rtwV%|2MXV}=#d>ewvu|p1bRlcGDxgq17xu~S%29W~aml3Wxp4MSl#Ukav zlTqWG4+XYsh&DFsp2(B-Gx_6H!3Jhp1C+B?xn!L%>F+51%Qm^f5<8kvfsF~CWX6{VdO9?^G#Tj^7G`GPb{wSZe9SGMOY# zeLfK3s!H|432yauz~6fy{t%AU0rAtYJJYDd)9I-N$aqre!8^V@$Ud`POC9g2^%G^E zLs-hw!!rzz5uw%J#U0XsMk0+qJ^-=(pHS|yw4#hd0Qh|b$XOvX8B1dq0O;JY36HzrYBaJMDdu-e{$qJ+yDR;!- z04CrSq)28#%4?JZ`BTlN0^eV9-P42?1K&*nr^!13xd~aJDKV5>0H8I+%*0Z8P?*zo z4pQmN1n&V8WcU!wr&}zSeG!`HCIW-Tv?G#e?QI#tlG=|L2nw60pqPk3Vx-W4h^UyO z+$A2C&19xE0c6tVQ2}Y@@NVl-vD#uqxo|D!NitBgy`5YLLznS~;xtV0Kd$V(C~mWD zP5NUTbOmxiSl8O?kz=X1?6PXS`q$xf%&w8K)qcg4X3TZn*JcyMfuifNtP+NVi|pS0 zXhwK%GDxqwJ``vff%%*&`0<0`M$&anR7)hENyOnM`1b{ErE zrTQXglDgtRSac^TizYnth&YU3o!8YTflL{H1vv86DrFz3`>RXj(yheoPZ5)pUWCm< z7BzUN*_qWhm-zy&NjHqz1Fu@y5iG23;8u5UI#`wIsycJe|-Fu>)d|r0f?QYn#ag+jdu^^uda&wBF zvbVK5kcZgVMcG^8fb&?^$;dCN!yf7!d7pjz=F8)=QS!f&C)IC$^P5rfKPczIZ+_Ed zB`Gn(Ij0QK>JPmFMpLy8pMAP(ri;oJ`NN)Qz_^Ej@~f=je~p1p5A8Zc3WrE40bBAE zJ6cZ{F=sRhh+jop_zAgo%cHEh^E&h#=r}QQ#L<&6p4q%Odis!HK*Rl+?%mV%MvM~i z=rla2Zc1?mWvA<|`MJkb{V}3_U0xuFP`1bNthR#u{niLfZ`>);jaSzh+T7uNUu{`L zZc(MyilM-Ywbs0a-rWkCDImO7DMf)3QU!!bBEBp^YL=>BwuCdXj#35HJO_a6Q_9Zd z?#=)6D&9_m04v#19@&;fR%N+S0L@`qA=KLa{k6$Ng()e}OhiLi4MT-i&YDDAF|CS{ zN`ZV#r-$aC2iNo-C*`!5j&%`eHADXdF?%Q%*lSdUz1Z-`FYmB0i~i%D>e8ydbdsd6 zS~g6RvjN$$*+i{?+`w1Fiy~4WC*dFo$`KA?CR3OJds^6}UTHI;etB)Dje4e0Y9Ig$d=LBHSFMIm)FP+3}rk&75^oH=aB+NcT zOBr?FPZ39KMef4Xj#B3!1~`A&K2t$Pt+JYu)Fy+W1{hYoiYO87tnquga}l{3A2ey{ z$pxg3&t_HCrlZ3c+x`(*Vsy-?JDJIaq@!GzZTNk%p<5h}3?C${R>C@(R6&V0Ai~b* z6Ed6di8=NF4SHZ@oH4@9KBdxY;bdvi&)4npY=y$X; z$10A8S@JkKmPd9MZv#XeL8OEKqstH)$8xSXO4_aR7M1fgE9hxxRxxMrY=`9rV1i+) z1Dr<8C%C6-sohq(`yjWL$mK#eTc>^a2yGA`wmo?=LVWfeu+5L|!ICNW;A0W#Odh7w z!{=wX)O7f4`W#=1XVcI4pWm=NKE$YLiANjKraFSBuEh^!%(6jmE>~}`$@lu=HGOvEvdFomu-`XRZ~yFENqzrJKT0iU!;vo zC>VSWMC25hh1syjdxA^*7|JkkC=h?-^=#n?54KJ1hj2L`Dz~NwlC}7hfWUUrQ^c({ z!BW)4^VfpOJ6bEGDLM?$bLn2MH{upLZ!zaGu-Z{B!qQ-&P5c0ig zY(x4*9)w1jN%j-s+?dN&YD3)|HmpT^gST+ODHX+kN-pH|_nGFo(8pG24oMfbl{+f~ z#d?qV-FTM}7X?f-<{nwm0Ir&aNh-r^U)4M-R=0R4b=l0TCMLJp<;UvW8`a|g-Z>>X z^HVn%MNB_vnq z0|m!8BX%@ylE-LQevC=1jJ6poxC4|$@?x`DcGK?dCsxlnOhyvY4_OI4wJRAq0u_IcL{bl*i?82&d)yPu z48vfj{u~mdY-lz+GpEM->`q5Jl${vf(~NiEo>mXOaRhRge5!x?(}9EpT(*ci0D_Z- z#N?l$S8cf2)lc6e<~aLsa{MkkdG-FdqfhVvOl>;>;~9)YfT(FXmcuk z{0uKaRt1wyzmB*wb-}V($}6+gnd}|yr+hpPt$sS?1bx-vt8jLmvI6mRG5g7PQY33m zMrigr$NX2$-Wc|YI``tRGAZ_v)_#D)h>uuoF0U@uXoh!VGydEZG-h2b`{xn}u~(cm|c^_)SI z$KzV=emWrX-GgtL$gO+QTOkhMw^{={;86xWK6eDPbCn24EmpnbrjMSF<$-rhNw&(1-BE3Q%pZUW%c^=tEsF*@|aE&;o_TG9&x2)&)R;+2;U z{!o@BFxKa6WrXhDt^fps-073sr_Y{$_M6}S?!`Ez}Y z-dKP0&5QT=&E^iM%JXNUxPShvzh(Cun}?3AE6VOvzM=Y%QQ_lBGjh?#WZe?R(D)esS zyE90Bq@CGI1NC)^E(-_nKT6?jwtb9{Mbi| z;b&f_X+ve>{m*LjqO|aZ_L^^jz|NN-(kE}*OPv|MNmZD+qp&Yj%3rb`=spRnRw%QH zC9A;xw&=eW)ELh)@6yWQB(td#ZI!fshFV-{jokeAEA-(`l5l5P3wV((oF%N zrV>J-dbJ9v)h14ZC7+(Lbx&-39x*mvIr;*y;SzT^bfGg#H3`qg6xi&gGBe&W=(04@ z4w5|Kz*Wf&HMjY`Pp*Rvo zV`c zr@K!vT%<4{Jpwug(!?m6+Z_Fe(V3m1s>aaqngoNhz zZJOH_NogD0%IMO%KC*JF$35<24^3)Hy%TjY`?V12JU0~{lG)cl(c-l?L=tg~^1>Ee zO1MDLha`%dVptbKOxGZ{9L8U>-oquu2u`c37>VeVtP=?zl?jfs*CCQVC0qi#dP3hj zTadG@w)4y660;xjrINzxP6>E(Nuh+1p*?gk2p^e-+IdIhC}_6pj>)wr*!_K>9<~{v zG|HPmK(G4zGHJQHW4vm~pXohE9N4XcL&s|3zGA=v=yjPs$*-MLu17P3E{aM$Hc zu_O5HrHY`+z>BR-+-k>3ItaeqMa=QXMc?k2va7uul6?%qjTB$T9}|kJ3KHT^EOG3v zNvaM066qZIq^~xB-uG>E@6!CIHNq495knWtIhL=j7VdRcXT@i5sL+cTIr`Y4ItIE& z6FngFwpb)T;>SO_nh%P51N79`j`gX882i+=KRVvs*)DzF5mRrtwyN&*+E4QNyxOi= z88e&?C3$4I4*gd8$2uZ=$VJi4Zx+D=9Lo+x5gxG+|L#j21od|sYnm8k34_zpDe<_R zaL-A;V^@DUOi2a1`#71j_9Tty5*f8vldj^|F1EWSw_ZP7o|^=2<7?(%L0Hk*%UR73 zFbCArO%a&@*2^vnpD$1e0!4RmitrW3TZnNzU$)MXhfo~<#gZW8;S+2#j(#iaKiuocG zD|Egqh+ubQ&+r35gFjNQ9W-*j1ZFiPlx&lkFUbRKxm_sT{%&KJGv>r#RZUC4jIfP= zz@}v&%+YLWFKXAgTi!Wlhuv^D3NuYMR(;h)n3vH$Y5>e}a%3&%r*1q|UIrNXds=L? zv*#V`?=Zt;VXR5R5Dh;YB>~zTZir_uZi3a?j;O2weu6GaaT6x{-Qx$_^OHF_e*fX^ z`!{dCImu4GKgp2rXYY?+e*OB@e|CyWp6d4ivlpS;V-k7v)X#Ti%CQ69hRR;h&$_yY zDM3-uXO}e^*;U8#*W>R@UE|s711$ThyhYh5xmZ>+6rvMqCHxx!`Z1yR5Pe)6M$2O!~i0XTs}p}D4rNw_&u z2$QtH6v^+iN8~m%vk~J97hJ!*V|xnaKhF~>|J&IqhJca5GKl0=rJ|Is6M;Ifmb5E% za$U|jn^rzezGm@_77Rya7A2ds%I`Qnp6dwkttDuft$`CdB&fba7(rQp9Si3;btx)aIL=%J38ppy2C=l#>RXw20& zVd^*VR9;xG*kr=ch`U*k=52x5!h3Jmu+gXDoP`8W(6cw^%{jpvh&y9vYEhN;yxIa# zxEo`>L7d(jiGV=~N)eJLLri7Dp?Rctxh(MXhvbz~ppo{bsvEaW1iL|z8XbNAhklpJ zwG`Wh?dYH|5?dE?9MUVfY!6yGTacGa=V!GWF<2I+!Wpn-0?m8{GgudtRo)~J#V5|p zp}EW@A1Zw;v+O?Y8~<3NMzJU zEfjylQ-w$7Qm9(Rb=}NuTP2I?hLd(kq&nwPT~iW!GK9dt^mNL#FKgb0g*qgjS$I%B ze!jmfflY;(%&RRS5C{$1mGSp8_pFydx{@lCKvq8hZkx&J2Dcj5iP0$!-6`5;Xo=Z- z*s&Z_Zp;cU#7PerJ^ZjodAaTfXdZuq8K&~J@`*)l{bhASx%g^&sE9({P|g)EAy7cE z5OECe?rjZY)wU6mMNcvHwWNR&$>B|%a*Yypu{6)UE%ZmIK;7Ls`3b;TSX3l86XchX z9*}E3Y+-qAQ}=JVWCzX}ow*q8MR{Jc=PBTPW2R9gSExHjMhMywSHfANr7{k$N;2^@ zY}kjF1xU+v!OVx7Epu&(%VMT)VUoh!pyN5FuVJ?$ejssZ1kef)yaAlEho3D6O%ibO zye?t7ORPa6NbBy0en+CVB(n?yxrw3R8JQPo98-&P{bFe>_h9Ol+`DSLqkz z!2k@{6-<$xr1|t}3f$Fjl{bj^@}0nf79b_kvnwv+{%&znEBqdxRdQ33cC_OHrH@4t z24-p}ej@w2vpMX}k{)M%3{9dW;8wPEds(q>LYA}Xn8Ba3HC@7Lb0w`q?zgl)`Tsn!{T4YcJ$8q|I^i%U1JqH04 z6CIKK=Aa3srn}>wU;49UU&a+`MDE0OsjVwa8)j)#Q<=+-peA^Wujk3%>sZ&u8ngQxE(IoHWnNqdK_T}vR7*6lV zX}GbY=|zr-+Rqg*s-i>WN%Bn7#l5ML&1K%`T}4!QI!#^@9K0cv{}*w^e+=_Em9o`y zQ#10w!4KxB!}r=HE$Szgib&!U*-SlP&v3U4Vle`<8`z&lw?*ez(QOWeRKx;Qx^J&haJ#GmJSa z>$|Z6hYtoCj7fPwk1@LFN@cyWrBZqeVj;O`9-(4hBgWaMQh~#rd?3ylPc`zPtC|Lj zdyc&j!hOydM$hLOk$zcR;|18FGd1RGQvoKx%PhzXJ7Kx5E#SIrk;U-9m6Qq!^EJ?h zV4kt5rV3OylQQTc5`P4F5XI)aT4E`_F7e6a?sRDxQ?95Av`ZEkY0>w`@~4zpl3#fT zo84BJ8+n28?_AH8^;AH~DO+D773i3QV?;IWSSiQ9RFdI~v$bJYwQvn8FV^z>bjveMY zRw^BmBuN<~16qK%Fo1~b3hukTxxbcX^V9Nr`lo5Kxx@133Fi#GPeB%_iSW@@@aXxL zl&Bm+gUu<%YuPdHI6a0dG9h-Nn787($ChSJBaN`OjY>7^Pv)X%573q>hA^uTnckt};Kg#xh{?#@D<}l-1cEme+y76tuoe$B6 z#`G|FpA)}Hzo+mDSfCx}8}8VfJID;iCT4DJpNBr7OkawReMBq+^~+f>9+(nEQbzpoGFJkOYjU;`ZyXdoWW1YwMf#F3=rNxYFGOK_&l__w?h}f!m1E-`l$$WwaFy z=>7|P4p$qk^|r`qvA2I8@e&=t2AyFr?qn;5F<;OV)7Ku$kizey`nX_ytYO?MVf3-U zi4`72cYscNzQ6$Btag!>iuRAqb}8jt^TsgtG!QC6$s$(Dd&W?Cn2LqFm;r z<XpV!W3e8#pG^z(qwv@$|USHgA(b?lZ+%F&5k}!MwTJJAqowx9~;I6RMnzvY( z1If{iFTXK6s?h*ik9djcR@aZ*EH7id6{TepN_nsP1n9;Ozd)?oV+D)7 z$RDq!QOPB^?k#oyHTRz>I6d#LNJU9m;3=m8GDD=CH&So>H2((dKmZQ4?AF$0^xD2` zW-UypAH@{SEh{gV-84J<0>a+1yj)v&?Ek{I(W+VP&Gf;T!C8+i^@~tZzbvoN%i)Gf zc2{H#Y!H1(nUZp4BHZH;9%)aue6z{x|NOk1m$V2|=@>cq_1z8MNLVp%Yq<_U@y3fU zxl_aol|$74>Y_M=3ph{YcuE*6Ux#a)6>AWig1F%>k=Nfw2}2}`#6jWnNOu!ajuwa( zkg<@QU-JVV9Q^skj}HErhv&if#ys0)BU$WHj?gxK*+;`aFamyVf@KD;8fH29a~oGL z2g#ASUkt>Ur2+tKaTIR=kaRJl-O$Udlb+lGrr%OL_BeTex8W2!U2iTIVdZOfy;rHYX_JZEC$U*rQ~)|H)7`XWeE$ zZ7aadyuKhGFuOVbg&$Ln3@#T+zM#;8Za#UQ*G5AB4#ZBhlVdPFepI8a#3^UkvvxZZ z0gw`ZJe#i;2r)eckY^oSl)}HMFA-g}##pzJltRe!`^o=g&`7G_YR<|fmLS5fST{_*l#hc-^_=dDFqa!J*`{(?+)72u z(DNtWXk_b_x^mTkz4=X?MQWH$CPf63ST z1Sns+bg>lXGQ6<&A8Dg#{ebwfJJMKDOuBt0;i{n%@Yz*qE!V8z!(HP`_!bGIyL_yI zvK4bhnM;V0N!@fxvMopwb$CbF1U=n*3O>K&VnMBuV$|vr-Vf`gtm^dSOJu-Uk=4ZO zC7Y}r%Vx*qFbhWJXmc=6Q}aay7a&JK`e&2=RbH@g*w7t3%iezfm*dxe$-a5<;q}X} zkKbij=GP3cYya^6WM~Okal8Qi+P9g;#s&wkH&Pt?s4Kp(q>RE$mO|Ch&Br(rSYWe4 zG<~s=e5Y>$JWl-GQ@cUm@9wKGy?cV($kV&fCp&X9Vb}w0p28c&i|(_g`lfU)S4_Nf z;ije$RAPWqm_{ab&(Z18{S8vZ19&DUEevGSkRHbv7aEDB;X|sHj ziQTU(uimpTL4YG;-W({#)Fe5xz!Vr&Ifxk~&H)}}ohWG6(+*EDYGx z0Y7|#O2X6Of0uCXZ$3j`$RThgIOlDO%f zPjq29{!9asY`HX%ur#x#ewTgfa!OnnhuCNbiz|yze1DyC*h0Yc9k1v4rXj5?dY7R7 z6Zt+;o?3M?n;|w;3DTe~PC=y`*A05O7!rQ5EwQ3r6YzPe>RnjSv)0#tKRJGJ^8G|= zPE3wpzkm1rgfoKyGn?Y8GOEXqQo6JB8%azqS~|-xBA|p9Cc}^>)5XzEmK2oa5{VWh z+U0pwnpUVpWPMLYd*S7Y$Vl^w;~t@s7QI`66AMT(uy$}}7)3?p=%#?+X+2CQys1B+ zaQVgm{sGy)(HH+lDb2>Z)2IWjxGmdmjCnZG)NWqlb}up8H;M*>N9r8PYn>sij1kO3 z>K!}<)o|dq50RGn3iKl!D+R_8rvZ}Ol!D7zW<{LCq!c%p4!tYB;SYSZrbt5kB^`VK zDvo30pdbu=iR=f*g?z^i-O?!%67wFVas&0{!4oz)GwEs2Uyi0Eia1dG5}=82Ndfm} z>GDDh271+Y!5w6Fq1crzTm z075N$+{H{elBp7MVnP*wn06RG#iMl?MriMz`uh$cM0M__9dP8P+21*RF;~zQz1YZU z;@a)Tl$Fnem?gI&rpZSBqQ@NQvi)1p@*epXv+XkiM}?pca@)-?Er|W6x`W56hLKC30nM4jT^$Zih z{t84SF-e8SCO>DBT2ID5g)6cns$?q}f|^JM0(rM-ppY`s`o^*bt9pr{q+W8(?!E{i zo{otF_G^&t zsk(N-^-bRE9G03dj}WKr7o%X4y}cbz z31CObS>`tBbcji4j{o|8Xl;8Y?e*_NioI$sI*HV1@_z@=|B!+jjW|FH*xy^F1L7$-g)BFHCTFreT@XU>=3@`0XrTpr4W? zS(EADmJ2s3KQ_{cB*WN?gC!7P$_DN(EcPd;ahR04GSxU0`ZmA9VCuRsrsSKU%_o7= zC;bv;62P=$$}VjhghEh~*2M)--6h7cRUl`QtCVM7gYKg^zak#Ys8N;4(1EFozFE32 z{qNAngya-tTe`B0OW-5j&~cEo(Ag1S@Sh{Nc4qd2a? z$1qFfZJYyt{)JP{y;)N(U&9x3c><)6%Nz93002{HW1D{$wj-zdo?%#nj&fDCyjGC` z811Efb12*mc|QUgM>xuK>yFFq$LX^}m+W;o=sq?cU;T;4S5pRT&kpSd>99$CZ*fc` zwlfvouYStZw%qrs2}R&a7UrStlR$ReO4B#PMu{{DxEFjj6?wn$zgN$}jiT&b*`qVm ze0kqcy(4v=7&q|c;$Qr3q~61^*!^mRrPl(FNQT6(A{QV8EY8eMrQVhWwK#{fA!Umu z5eoxj%QY6TL69am7Ve)`^Ewchz5**d5-)ri@Az{Y^_&)ha+YnTx+^$ zF&dvd%E@bHZBvec$jhD)7`;ob=t0`oeTOFE*^33=GE?vkZ3I)YzL%6y3y4(M9Rsq+ z%@rc$}N}#G;NC zczxN5oA8+#J2?US5eLwz?23|tA&G8~>6&O2wKXNr0?{Wo84W!r6f;}9?dQbsJR%ke z3wYqbdva@HH^%R%{<3vP22-r1JNfNr(?Kjf!-D}le`Wx8DAAu{BStdkc`Xe zE(GHV*^6=%;QdtF|r*@g6Lx%40?jgAH4Ckd>jok6b!RS-4>&F1KyDoc05w@V7vmRaFbSoZGzil1#xSd!Z->O4>*XRotmR z#`;H;IACki`yIejaL`D~F|qa9_IzK^w)#Xl;<@@Jwv=YZD(B3aV0}X_LGV5|@!Ryx zNKmU>+moU{@JlhiJ$`(3Gg4lyI%kcVb*#Y@EgYtm&f+RITjKBZ=ihPI?$^a~BdVlEK9cFM1Z!oxp8{ zVBEv5nTkF=a;Nn4P!umar$Kw_GbQS^I656pej=@pdWA{YzaC;TR2*m=>r4R_8ex!J z`#`*Ic%F1>NB5kX-wpRgF*|#Ef226PTP)r@m0zJ7thwe8&d4s<`lwBdbO80Y;w$mt z!!#+p|R3|FWviw)HZZPCd?{s=cn02_C&><3n!*euxD- zQ?=P$=PRE5qli9|yB(Rkj~>B%`4u>=aO7K_UsEMcf1jpyGJED2V_#AhY2DCs04J7+ zuX$J=YX?A@(BA(CP)h>@6aWAK2mowUqD-&!w0hSX008J<0015U0047kbailaZ*OdK zFJo_QZDDR?FJ)(EUukY;Z!U0o%{={g<2G`?`>#N>^&{m-%UX!11Yj^<7|aX?7>!0sHk+y`%UnfC zxn9Rb8p-8ymKBTg=;(PZ<3@^Dq?u~!Y`$r-vIvyGE>r9R4Yf>~vfc_9DUz~iWYMV6 zXmoV6sLM4Cgi!!}k>xUnZz5Y)W!;EZ@clJ@kCm92FWo`1uFG1PAur7D=P*rO#Q95X z?vBBK%?Lo~R@Tj|iknrZpXrj9%Om}(AFq^a}WBVMpSWf6E8uv zj*gB}xe!eq7b=HUi#m@TLxeIuB_eTM;(y_&Wp{hKC^<0Pm;b+YXXunKWfJ_2h6iFT{CDm2LLy&AR1TZC# z$WtV%O>v_DIHRdVd6LhI%Bvleu5_?c1w%x{gmd8gH{lTS^jgmN2MEKuqK;=G5oc!tbkuYcQ}OJ`c6}nAGxE&} z_!HNt7CCBqoQsna`T>bjO^jlBzmi+#J#roywTvvNY@v~Z`9M}di;r$?(ej%ZkFPzj z*uT;2ZdQ`Ug0%$2FJKAwhNEylg=wRcz-yDalDj7hLR`6@jXQ%}fZ<_!QHAftIg6OR?s+?vVadon#;N- zax+Rh*elU?i3()6L&z?^JL}<71m6*=JNIAr&E1*r;pz5FbU8TDbKg$%dSpcb+Xjjy z15%z1K)ATcD(IFqDC18)yP_Ef04*#mM_%lEv3$7oije(e0ND;Y`qL0nkDKf2QF9G& z;B{G6;1+=?Mx{>jQlSO7!nMCBH{h#uhiJt;48>1=KZ*`N{{3v%Vrl95vTSgZLt-T0 zQ!eNuy3s%uZZNo=Enwl|_qZi^2e=odC=eogb5yHltPxPE@O10ho{y8ynMQUdGu%fvA;KT>0!vvPOpX$bl`b>r(u1@sr_=$^!2f7u^EjVG+YH*38-*Ka`e-sK%= z6ky!Zk@LL{KKwU}rUw5QoMONc_f;?qA#|CDMIJBJ8T|V7x3AxyzdnES@)!8>;_dq{ zUcUw&9FWwr$(CZQD9!+g11U%!iq` zSNHu1JJ)_9BO?(Y&p;e-2}TKjvy?m4buA0)rrmqsP7#XMZS`Tt6H1OAJJ`Fed7Zi|T-amBbi z@jfrH!<98DS?3Q?%k<@g7#cJ93w8Ji*N~k-HDytdz6A5--%DzI`V<>S%Af0L3T34RidT1+9!AVj8+l^Ni7Nah0@`>a3a+ zO}EL~X)5OsgoDvNew1P>N&@~o=uX`UszJ#iTSulMA zMTI!_Qm_U5K(~+9p`v4?a~j;J-|lzdZ~HtyPpatYdOO|UA4WEo@Q93Q+yO!NS=LpG zaCp9Yt<}3hkB!@fh+82sobyMcd71G?k5r%barh={*Fn%-qPK0RG$%u|Mvo3yc|)YI7V^=md8n6<))@LJX5!wuj*eAiG&-eM3eSw%rU?_5q!fh6f9^AW)m^||S ztQYhSrASBE<>|R(Q*KBZh_jjfq$Y=h!7&_k=ijY8+Hly?S#=3l(Q=TzmL00gBp8hG zGQcmc63)2%e#O8YVsEQ>BMpEzR$f@JU;1YYg6o~-%rKKc2rSI?#X3j?19G62L?+6> z(!%la)XQgO`Y%pG!sP4ghnQC#{|)rfjb;on=;_e^hy3N5!Lnfy3r-n-4}bm3a6JXc zeD@l-wHQj8Ys0qtc_t*u*qdU}_iLZX+b1qY$ZJCNeUWDFwb2{{-j&zwIj)P8-X{V3 zb4joFk#n~Cgxk>jCdndjlx~@~lfE_C7%_G@E-)y?ueGb^&<|w`wblWm+bie0${G9e znWHCQiEyLb{C*uhe@<4mAVZfftvf8|i5*_2$%zPMMrIroq(Tzl7+?oKAcK$D_cH=t z&XOyW`iZ@uJJ+@noR>|<^O4*6fGeHtLG@elOXbX*RgcE8KZZ01*P+&sOT;Q!0%?(i z_2r<6)}>5vW4RO5uv}*PrZ#NX#O(lhXSQTgPc06?Jk-o!uVSBRQaIhoo1dD!oZAZT z>UL}dg~`fuBY24AR$sGv#s3^)dFd1p)Xt1sHKW1cbx^LMawNEtP$c0A^U#$p^BsJ_ zn4`9rFOt-uVkym+Tv~}`#pCMfi4V;~AeA`DyRNPMd4GN$o(jW`hkUbg2QmiG(d&X~ z$USsf&KL@zf`;Y_r7SZs8L)}e7D~Rl6WJ|V;}zUFEyB=*Y~Vab0TH*cw^^u&>9U^e z)Eoh2Sr|})knSOCKoEmQnkhE%+`L{`-dBP5io^71yZ2{x;@~UBn8k~l&^1!en6&R- zay4bp0ysUDGSMEy`@kj(t z;^BS`TOs4t!&^TIr>kBt`z~M}a6edz5#=7h`P5F)Pe5M$N2Y7N)`4v?05%p$>JLlfabRn6_+&jSm=C6V7Ip4G z-{(Odw=T5h1m-umHWbeXtaz3w=W{tNf_K~{X<`|WcNb2)f>}4g4_WTozsN6!`l*=tO)HivQsw!vQ@ zx7sU^YxAq==Hh`$ArmY0Hn-|jIoK}LID@-CU1iAawQyIdTLf7H@yq$Np(8~aQpF-7+2!P0-&Idr zH;FKStH#~LfO&q)nFH+Hxwdo?;=ob4Cdj3tXoIK z2dEA;%C-mqqzA5W;zHCADYk+5gNx4Z;m0nIoR_sAbkFje7-?g0Gy7M4AQ9ow48x<^ z_Iw||jzJ-jh;pq7RfI!lS;I>Q#G>FO<^wMFJ9URRprM0eJM%sry2R0nn)u*s`L(x> zYU5o1_b^@SQ|wa(hX{?rliH*QI>G4AGKArKheB!%yS{9s1WQY5FW6k|2 zKEQ*D*h$Ot-T+xd0UB9Pc)~77)tsfPhVH8sl5O6leyzdDEUZ(IZerX_e1Nq?WBeaz z@v9v$&6I5fk=mH(s}!CJFb3(|)1-_|XEe>WvA)!T{xalOPI=I+0gws^0ZJ8nECzvR zUm9b-6i>Ql(_G>0%6R1G4>&72=UB+@&&nsey)eurCx*6`D@UOj{<@?nG0~k25%{pV zVy|g*C>&nW?`HRTdfek_r?BZ5tYC8hQR~fMg-@6F!c_r3)A{4$f_f6|8Z1v?f|_%! zteD*K^Ax!y0smXJqir5x6i7}ZJy5R$BOTSz(;~0^oH(}8X5j%c>>?=j_7Gsy_C>eT zVGsb)Ps{~E3Rt|ct8uS406B!R?~vQahAvNG?XXvUWj}d0^@lI;2--GcWtvAfsBZ2kdVI3`*yuY zUe2A4I7lQcyV@-BZ#WYPh#(4g;U|_$OcaO#lwLL?IgXy%CSbI_5c|uWh)r|AQBXy^8* zK|s!)0@@o-**z4Zlwwbom0D>gt;g)=jvdQz`wd~%z{D(D4t|BO?{n;kc#hetSPZvZ z5x$9;uGQ_Y8}MK)^D{**US+cHYuxNoTybIQ5Ij?wNWbC6(CN249vTn_Gxptq-SI%@ z4t7B9!kt9gEBYcE3qd2lfGHYz7m9h~@8xs-0Fcp`*UHN=0pY5$;GJf|sU+G<{OSd^*tNnTuOx9(!%j0=X!Qf3UdOLZ+jl(Qu67~zJEAq8LYtk+h z(NP#`vL~)Ay$gTxu6?tx@JI8lQli3~+WLt9jRT+>7L48~c6b_Pt~3LCv>GlI1R4Rv z!ZBE8LvR4cs$LGrVs)x}S&SlzB)FD567Ot z02nlrW4?U;bMNl_0DkViW+>x2_jW5rpECkts$iQVT#QtxX-RAp=`e{RIW+`@&U8jN z<#(UozVW?tsJ5vZ@aCeLgjkAnn8exUea}I~^fz4(UMPpLJiFWI^M`7<>Cxihr3J^` zmG*7hw1zlWzzv>=aCVP20=ENHXMwQ}R#T^RF1b?v_JQH{VnNO`n9y2$|1*=nI+tZ8 z4ee;_ZNc&Jcaix)Yg0g!7jKh+;}gohCv_10&O)DUVDBk6!zMQy89Fs_yen!)t|kBi zAGBvxI3XN<1udJ0EyX3-rMns*CnV0^hoC|i06A@iS$RA#=rg_);m6j`01sPaU~7o< z(yj5mt&C^*R-ev@ds!<9eBDJXrRicQdb8auveX)qv~iG~aTc*z#*SZ4lUUzbc7 zs=uN+VM~!;8`qs|ZxDW6BhFmv+uQ>*N@?5 zFY$dZ1V4{5&r-0<=mY+=vL!RM+R)l^oF1P)L?k31BUQ{?JY{%qbMuT;3z!y>UI=p>4wyS7LI&Q?2!z z+>Xu`BJH`%0Z|(g41_vLdYp3 zXqLv1WdHfrxZS7DjiTOs?ZnqQAvaKVvn;g(JKXd;X>&|1eQgqrp4O|&fZ{QeB^+rQs=I1ln|wi)=S)F+Vd+vMT2p|B ze=Mj8i(;3FvzIoTg4I$B3@A(VHt+gNrOY?rJUOvZBB3<3Xs@RLx^`qP0cQ{_YWEV{ zs%0b8NZ6;J`uXHV6RE6mYrDKF+Bpza#vpO)sFX$-JJY5qpZuH|%w_$BZ|C!DNvgZj z{dnP~Pxkg9UAMnl*k%TP%B96W5u#8$7T2%b>**qa2BsQZtZt6xK8eCpUx8E>lXQSv z*GG99{aO&Lxe&v%wk&7uR1$B8s`dvE!#n@?twp?g1K!z+>&I@nSuKz42IJj zF9%l9Q&dr3N~|CI`$h{s@KRja73orX#~Vr6Fww0$3Rv}UlipsmrS*n$vP|6FoHp80 z`w}PHE`;|rppd4Ot8=a?TG+j36vo7bC~V~qcV;zXCMAE^5p(lsdLtu=P=3=fbXr!? zd{pao)8~Ab&q;oCjzI@alSOLfB@Qu_Ig^__>#U%p#jw>gVXAQ43^(Lx>Hf_UW|Y&V z;`=fB&WH1+XcGm1cA=nYrsly$_VosJ30KVdDr8SwOCXjG|FqiF+2h(b&q|^MRbd07 z4So>U2a>E`x332wHe{Ep_x14A6{W`~a?y%$*$NJ~ccoVt}%69K# z?^zv_8#0dd+rSEpICC3jIIIB}RpAi`%TqXmMaxVYJB{#3wo0qpDmSsp-4GZ-l0!K? zwu=jWF@8|(7hvejjvsUXvwWD0Ptu>rITPz(RhenCdy{&7Q+%tz(acdeU}A(Ey`<$EAx`hGwRpV+ zUMRKusGLTJjqugAW@A@9+#TxjM~e2iiYZ^>`dI2tf-~ZX_hlV0==k5Ujo89U{%+R4 zuJvzE$ISNp0n#eFf-S=D{W(fAFhgo(0(eX0W@k!9g~V5pP};qI#;7J3fsmpVvCt+~ z->etwRU5N+D%kK|zT1nHgjcJ~Iw_pgror|nATY?)zfZH?6SkpiV9}y5JhOI z27}R@Cwu*4YfY=}>Q6}x$xp-N;bR_m%)_Qs!YkZ7T@Xzm=u&ufrxw*!o)b`9Ci`IP zT(v^n5H9Ut$YLvHrO{E01{Dv*+ZUKf@UP#8OKV15lOs0P#CNuvpc(g%ZJyA$hlqN~ zq<&S@ka)|8W0VIWMJ1s%!tuxmTli9!Noo zzhpu1wYX~Zwt4*$aXa5`6BCUF&W3^cAJg%JHQUK8&QFIHyFuWc@{sRuUn~-6o!ozl z*LrMMWV*Jd3SiZoKfMR4{WgNT#Am!QpgG7xLrDlyY*P7V54eD_~Z?EHpE6$%MY!YpL?nZK7fJ)UjD|DYYA81gV6G*}aX{P(QFpZ7OiHz1>}qWwC~^z{=I?+g7o>+=G{vB6J(A z%Zl7kJm0J%*X^jZB8x&9psAwL2TMll8qZ_dZjDi?WKwVjY}2HGRSmGdEDfr9nt}4Q zyWE0fsRI$$gmj%FoCWK~AgOwXiVhU35?8QCK$AxSNxFz1#Lphu-5k}nW8*e>y-pR` zWYHO7L%xk+C_OfHdOn#Udsw$W5_v8ZS4dWy#=uyWXz%Eb1;`sQye~WG&o~!DSvK_+ zUBFKDGv!8kucve$G8r(5%_KDWOQ1RAQi?^L%p#6d+|;9He+zLYVW@&?)%@6*Vs1NZ zwiP*M&O@58a+q{8kCSRF2$L+Fev3AxB49V4gQ~~xXoKK0lSi|LJh z>2CvG%AC5U%e>xNNQDsAew@i1^+UxdV7T9vb8n5meT!Bzm*FjYaC9wydaC?`r2+&= z!fz}bkMucT8iaxw8M8}+8mLyiiw0BFN>z7|WcxlHp4I0xIWar$jr3vG&ZixBBk(v>2FdT0~r^OsT-dtp3nh>=KdGIeOj)r&fFqEP%>3KG8qQXP;AOIHq+n`fP9L3p! zw0>od^4j0O`BNo*%Fr%W2*_5o6x`}{UivJUJ;+-_xl?>y@;`)^Xr~9>OqomH1f4JC z5SxI{Ycy8rJNRAH&VY~)w5weJKg-HQW1Zci1@$f{R?*JJct3xxcZ49 zlVgJCbIc4eq*_xR7`#QIC^AUi>k=g%5I5GG1o5mH#TOvz%LY^DLAInTY@xopPPqE8 z8c^U@WR)$uoU=0Yskt7$2_zbnxf8v*n?mN5QVu*Fu%g_q%b?wlVyj>H)+V)(Kq-HW zxQ!XgKZyJ7P)tDCNWBhEnnDh+cYJ4+iuM)8J*SIl#)P}aC2`c4*0Pffz$6}3t>|nj z8n(!%jva!1tS2(`BIzT^me_1h))(Cqbv)%VokL%uhkdiuLh~xbLa;VP__1NIeuAl~ zA2N-~QHp+N&mz2;%Cz&bVnBYrYeux~w1Mf{MWf^al=M6G)ei+s^Tk1huE(gpWDmTt zhJ7i3-{d`+E{=E?EYp?7_rGgL^~df_q>_eEiWwn!1xDsC|LBI7oyYCgLo0S_Ls`+q z?Tb;cFM-;R9?ggtHv*SIRBqLnHimbegybt2?b~Za?d<9%PBU|=sSD7~goBeBMWNmy zf}_nI8)q%xI0Y!at&6ifqbM%jU}lW9!wfK(#-hw0y(>2b2dFlRlTl5UARh5ng~vK` z>Zkpg`_OKez8wnmFBh67u4DUm!#qk)td}kg$aO3Mj`cEs_}Y0F{fj4WQ7W*0YJ*Mk zko>Fpe4d_Z=)UKWRScqNH73C|i1i{!^ zsnFK)@1jcXMDDo-wwItWFDG?ouL9{asmT~^s$Ff4k4${P>mL7fkzidsOvG(nT`4XW z#Ho2~CLcNP$^!)H5Z7|2=3dJygBfr0R6t@|2B3>R_M_}TD|U_@kfjYOd3yZ}M+?mvX8v$AjIni@FQlX9 z;)a4bA}sg|)kA64-BScZurVqcX)qUCF176nyD~<>)hlN3L(mkVy_$xqt}TT87#OCz>s4x;d6*!;-7+LmWdTvdd-`oV`CK%)zi|e84Yq>VN&J&GbqZqf|rd@}m-;F%S zhuW~B+8=+Y`;&$^MJ4XjO|m*QdZ!$46D|rFKhr&(Em)X0pbK|}NV@%-8@LZDNd98A zbdzm)YNqTiXu{0Un^Wa`#DJe7!JUO;xxZsbOSVH&R(aH~$s#Pz3wjPLo--8jpt&7> z-}@gS7~lse@BIDLVJG|{=u77R#N_|XX*HRX{C_|I0K8xT0LcEYIZf~XH||lRs$lh( z4Z(L$j}Rx&`ocvB|06z8Xkteg+D1|c`j{iyFwSjdJu%_$jIE!Kne|j_x0eO{MVJZg zocE)}(~LP)5w@!2B^SBXl<|_~k$R0AWo>4*D*I7kD`gXT*M{<6qXCziB~Mq+c^P8m z_mVkD7JV%Re;qC3K@=|!f4)riTa?Y-lOyuE0-v2@u<9F_18X)>S{gC=)rihngSM%X zN@t$2Nnfnq014iKzqUhn5ryVoqrrxlAGQ-|t*{|WC&N@W>07|WM26sJ_2;}&^&ts0 zNtz8_FD(?nVrBz>JICrF9xC*T$xn`KTOl0glt!h#B20P8zJ2fQl8bvz&E~2H;}#_p zruqhs#?US-w^@0gGT*Za8Ag9qsN27K(8zZ>qR46jB=N>5b`1{|B%W_+KZ(YN7AZQe6U^pKOwqTaqwJUVsN2__>WiMEFB0Y(*xeD&ML?Ckow zMo#JWfAE9AEk@Q4K8aYyyUit~z2Uos_46K?=)r2n66zw%U%U{}%7x~c%ge5SUjT{q zxS&wLm(R_Y?%g1y6z3pG)iInH-pP_Qvg_?I@}Pq40%3Bg>7;QtDX!@@Oj>+_gU%Ei zlWJLHrL;sQ;fX-DFPiXAQWt|q8pP%8scY+;U>7KoaKne|t zJOJuN9JQ1{KW>VZ_qZ2SJuyA1aL^Zc=@ zg?Pjh2yX_az_lL1Fs2a>Y^ZIpteaI+$|Jh^)T+57uff3-@v&O_YMCEL*OpO=27c$p z!Vq7F7~vGu+o+RWusbwTa}2z}?rEBbAi_zCJxDr?aT`ox+2bss4mG;1OJ+tNd>QTl zv<}|0X>AD+QfoZ@(a;yYhIn05gg?sQEywQM#{Y5eJvi0L-7KJF;$b?v%5wfp*G}ps z+_gu#3=dX4-HkGW7Q>D6F1S<@)zi$YD;yvp8Og)<^YeUr%kChSMLHF+f1CZFWb+j3 zrLAy3Xy}aIHR@5;Bilr)w@KgwB907I?$YtrWv0wxY3V>fSUb(doxRkfX<43P-S`6j zPb`90@4Yns$FGx-0RRa9?^tAQVMu51k)pn3yTyUv^QwkG2Q*PbWS!LpAnUfUMOWXG zZ-EXPD3DJ&c@l~SniyH-`#md_NfAosBSmwfa6(3?x!~f@rC`ziCQB%E&dGy&u}Z=Nlt}RSe+|S$D0}y5);J2X z`ggQopnD(897pz>_2~Acsu)AiLII_-qE{1?fs=oAq z?WBNGszZ7?3{~v&tCLv`nUomKh-}yet40SZz$23$8QG~MOY2$V5YeaMZX}lLcZCZ?Gny=V zm9ktV-B%{Fr_tL^tfUU3Lw4MCH@F+69yd}EVt$Qa78I#>f|qrUUFBACc>X@$())ei zzpvyij4o7UT2AJNY_n>kG&n)=)MEy6yU&gUY!xA_#cPg=(LEhQ795Ib@sgMVX^1&i zVsbJ%=D)(MTR?u=s)uX~G_Y`IwSpD}X18-r_w2QVn(*rKr0;ix^VHvVm_I4@>QBPY z`^(~K3eL~0(}ZJlfvtT-O@4Hf0xf7t8PyZ1fO{(+;;@H%BwI(01Y55e z(RMrveJ?$KL4KxEcF5*S@O1meJ2d{9ifomg<_>WQ>3+olss`y{8Q_)Z8wNV` zNF1cA$FUhGKUAU$iv>D+f+t z%%qO`l90-*5N)+&Sx?XSdJ+8BU(xw#bFD&1mt!@PbW^IZUJUOX`8K@)vT(pjY_u~v zAs2Q-uqiFYyrEWG>AQt)zGSz7jW!`(=3JC2h+igZo+?I5X3PXJN>}Q+?d^iF$ci@He~S{uZ)Y z-ugCW^Or?_f;;*8j7X)p!+sQwtXYRa{nvM2r%SH6_@MU&4B2AQt{u#qoVV922uVDV zkEOHflb(xH-E|27cBB3w^B>@n_H`nBNq!D5il>Z4v~X_!!5}kA;rr@olLIQUviAbu z#jG%-YW_wq`z$u$EFPgbaO`$LKCzTqt|FQt4~D75&KT7=nv(_Ms70k~<}(3SR!DJ}&;FZnfm8!}thSi^Zy?W2qfavxvjR~su|m?z9@h7L ztm*XAIs6r|2=tucbkdIMt!awULBM?OEB)AJWEFlO(ttlT>82OCCJ2nJKDq7ap~9IU zcFtZX-JMHYdq_n2+aoU>BM%s%{{*fyEclg|YJ}C^!T6c_vZh46k=^>%4A8zbJ)DFc z9Vpp;m^`40cgIZ7A}0nZ`j-5S<3UhkMzGv>x$&&sB@G=U`kg%2mOoddNYt?L`u_~n zTmi{SN?X^aP-H?jMmm}A=9R;vjR2yn6;0LiM{J@}-~bav?v`hkJ3sS2a(rD(ykBNWZYF8} z+8ipB_Y*PuA)S|Z&fG(0M)LB~#naa=Lxw`i9E6jnKI4LEl|o+ZUvc1g!O%S%;LW&m z4=gApr>t`S@e#YmilaXO5}=mEZ2s0{yj7iqx%wt3Wm@HPv$f>S%Ibs!taTep{{@v! zXB-qtgavaB%z9v4 zE85vwC=C}OmG2N>>QoKaKjy?AXyr8E4MRBM-xN zQDXe}ctOAb0AY{-0Hpu-6y;>(XkqW{^e;`tsLs`8aUk?Qs!3N=#?wW4dMTE;RZ%_9 ztCa9Q$=AdK3m?+1j~nT-eP40|g8|=`?BEcM9cA2R?O9}B=db<+uhRnBd0zD}zvhG- z6IE4iy-covwi&N#rLA!6dfgT5My?Tm>(MlRZ zKc>%HsM7RE0mj0@No{de_qeo`NK~#NTHOgW3+y&?_Ra(FTV(mxA5dSbKqFhI&K2H+ zo8I0Am^)R>8Xa7z=oLrTMY19<%D}=_UDB;m{q0|T8BAjuY=snf@Q4t1kh57x)C*}K zeYu0cSCPVC+|hp_aME6Y?`d;QK~{FA2JR*SacKlKurhJaE@_&xFfPnG*XfazMEnW| zx$*3b2X&{NE?9`=ai=ymI3quDy^FC;K=T^Mv#YV&b&&7yWBZ6DzL18&ylA|z48;eWJDU>AVoZ3ZFQQm5s&O$f!_J?m zucwfUwAXssU_QSPijRHgH4<~#I+Z*7^I@qFP9pc@bqZG|*!G;gE37>FTTkV6tULy$ zuI6#uIAI6}o&cwtqsjC4E{(NasOKjxK9|J*IOQ`GxuaG#lYXsy&0n)I-75CjEEIQ( zqEa{KWqTzKC;RYrA*b$Wrn9>6-A2PETjn#X&tB=yq|>8C?5$G9rp_7O+~!W<#0ZhN zweCy~jEWBE4m~)xN+eTaR!d2kCvgO%toB z{r0ZyjhcCIXSO1hS*qFmb^O7s|1C5Db0PY;8u$guqFs^$#uh+!Av*aPoG z@{C6UuuF#1xpj1Gxs0=W#Y~q^y{_NAB3g7H%PdC#^N$n4sY6ROpN2?OQKPgU`_E8n zIh}M!2J9?jlj9kRPaJYAyEh>*sT9AA0u|dHc0JdA>%n#O-=eEHO*`xm2RF@wL^x%gA zF&%?1!b!ZY(wour`OSec-A49nPqQVhL2C~#a-+Jh89pA~{@g;H(F5{-zG9syN+EVY z003to004^r`4w9mxY!z*n>Z5K7}#2vnm9Srx!YLBB+5wvGa`)KexooFoDu3+2}*A4 zECvY;1c9U0F>-H#J(}fA)b7~XDQ;~lQjx`L?`FNvNIh(9VyyxuzSQm)9l)CHC)YJ= zp?w{{3rceo5$KS{xXIt)h0je2(na+5X61_Z6$Q4Pl@_b&lR{RZdOo-yOm0<>a9@dK zYn(g7qUgeBr2wO?^==jdp*x?&g)g39@0?rCQxiOJh_@^PDw{JZ_R8GMa%MLx{G-P= zR$OIJKFBJ1n=y7Cts&hAf!_eDywKG8jTX_WOd|4P`I^#yA@XX(>J`L=$%a>P>PzbF zTYk;-k8D`5A8Xw`M6$|M8Rg4!<=r;>k;-{8PSsrcVoi{)h@JJ*CCmm$X|+%J0XVIm zwM$r_b)|&svAy*uKbs74ag9zkd{5r=8h4P>g6#e?_&!eheQ}@w0G|I?KEeMSe0vXO zHX}P5djscx=$WG~V|T=c(DSKQ&xV$&CH@aG^`k&^jN1g@p;2~#cu_(Gq>^XEkU$e9 z4}U&-2}w2cV%xaZ8{bSh9y#vmqv-aW~wRjr=?9e&2usC|N7`)5h%@9;nXZ87(hd@PfqSwVG^ zYabK_o1wueI^bJM^|G~*d-p8-Wz_9hg^ya5Y(kWjx{>7no8eD#Q(~~Ic%K=GRTatV zGFpRibJ}cwYCG}c6JTq{O06x|;KxF2lOGF&$eY#;0 zfZrH>UudtXiE$6zXh1q(^r6xp8iirxcJ(TU&*%Fy+@H}GbzOxEu+2I8>~S{_Wz<&| zXE#P|EWBgBaIaZeO-LOMj_|j_o-0G5rTSWAQ%i^XJe)gQV`hom7X>o?gocZyaXj&( zTMHrh@t=1N2+}KyFL3nI!|F5veuhGfYyjB{Py0!-G-uIxEzB3w@IEmD_)H5*X<10f z(6z@*p){nDO@i)rDS3D<0)kMM9i8v@1nbjewy0BBb5Y*T0R!Bqlm*Pia!3U zU>XHXAdKoNpY)OMRj?O2c@T_rw5TufgmiNk*yWS1_zE3atr1KL=3g>Iuf9M;r4u;!AHoaxb1LGL4N&%27?e2Ie8^Y%U_bk zG8F)R9-e9C9`|m8!?!<)QPh5CVqbc+4oYi6;$2a#dK`sDtJom;D?%oQizxJn0%>9t z7na3VLy|uv82lJ2EagdJ4d`Dqx^Elx$l!uFE(%f0R6Z5N{@lAaL!;M8wx|9ujb3T< zsPv+8lgkui3e;YRmb9=yf8_qiI|}QdDBsYvxKWadnQ+kbhxTbVzdL_7zBY)P6(1KA zC`b65ks1%|2?ky2q);d1)Dli{AViRqttg9lw3tx2ikmqH``yzl^#`vh0KzjXzYs03nF9Ii$6i zi4$XJmpWkUWR{Je()q({C+nAujn!g+IP)OG%?Lh|mf?RgaMx~B2rJlxEw;FX=%Q8z zN%hf->e!}pzz*#deHb%oP^SWNZXr8UYK)#=iv!}sMcehS7ce83baz>fgR?8Te=U3i zuc72tf?9&VG}b6Z(vtP8iF^+5txBI<2U`WbyU4j`I3E5vuvMnSwFgoEUXSE{<;a}L zTjlXR1?n7h9|8u(HKD70?X8rHno)Q_a?Ks(I`AsC40@GbEGrhdRFI9 z$1b8REw2`6Ex&c?F>Q=f6odGru+QdH+Bh?q4>=`=7zw(ZtNc z$=Ss5AC#-aNkI)Uz=*u^jR>Giu$}kL6Fu18v3$R%7oeYi+sg{vB#SYU)a(PmXrd-@sUjC=JE z4mk^)I*Ow||F>>0=HzlQ%0H^_3;_Uu^S^wWowI?n$$tq^Dl&H23rbmwmLcjG>g@VTTPz!2AG7JKG#ZL6e0QwOcDvI&S)-Y`E0gaFRkITR_Q>H! zJykKkv8(Ar7xNNLkI{9wmU^51)UU2@95DL+^0}KlsWFkEXF1$YIiv zR)JR$rz+L4(=EJ=Jo!{yl1Nn6I>%}pNx^?TXz-B0sAZPM%?E&+c4Ao**sM5^n8L+K z+*J;!sDgG{k1c)-g=g~u!$`JWMOe54o@x|v*<1Ky;;s*ZV1#je-X);TeJrY#>7+JQ zk4Z&-moVWzhJqp=q4~y43ehSi=z%JJd}?kWXerV33LMAqHl-n}>;HgQB~~}rgApzQ z?q>izt>ZT^EJ;^XWV-Mq7KVpAq-Q!0p9ojfLGuj1uu5ATt87%Thr?|Pu4#`7MCl$Y zU&Zob!dgKqP}H}|5HCc8a+(x9=^SkA%} zq&HNva{%floZR5Tl!!vE9x^R?OrFzXfNw~qPO!5YgCt9sZ%J44j>ym!ApUAiX1+81 z5bT(2GH17)vc5dSB)@q3>KX301P(Oeo3IOwf81W(+yXnxk;L^&%5dg`X4PJ($y%IB z=>Y1DW-cKTN_2P9et7_pvz3dlT-%-4`|RHn0>ElRtnUA*U-+QX?JQ8rHS-`-We96g zzR#x;i}_H-y3oknNO+3rvfErBd8#isYC?#ry)I{eh4ZDaJa;~#tSpi5WK`pYIyK(P zFybLR=hT>1UMwDWF}MsBP1|XtJ(?iUs+LLPwIASXx>5>Vi~58zTwJ01dpas%S^H(N zti0O2^oT(-Z2IOKJJQ{wmfnWQX;peYpTOLKXIoS<^zjZ>-R%G9sxH{bbf_nz$nD{& z1}=9q?8vj*!D5DMj>j-8WI2<_gUa4bar)${MCX?GaODTwKV znaYJ$o}k?wVSG{IwC1-PZY8ccf2FaxrIp`e$1QNWV+0|?b}4&e4*BneGf2QHi`YMq zNc=~+{}-TeGH^Aq`+qBDlSCQYUyZI zF$BPfszWZ;FjH>j{<7Ljw;LhCK1}CI28cp%K&%);m6YQoB20$10~i+|;F>8zd6}_) z&U(5RnBD;Reaik>1K74f77$fde=v2f{xT^VyH~!PbMKqT?CbR3h1-&$egCLc;+`@yyBi zA5#C9V4-ehx6StNe3sq-E^#~xIjA>CF4zESaa=g}v1l2XN6!%S}{SBiF>492xz}=)IFxeNh%#ryJ$Lr({m@A^y+k~Ffn`3J|xIRVMPlS zE^Kk$HVMZ>>O^a;nHm=R8;RU%_X1HgdM#ov=O<1I4dYy_*piTXwqS}}Fw5g5)I_(Z zM_2mIdZsqv{0V|75f6KA72Av&>d4yZ^%I86K6GU*j!Nn z-Y-4Vk`fVpwl~cBb)DYz%oTp(!7CI}9hjoveZ73VhKF4Zo6nk1+?k2H$}ZCcd0tQ{ zr8T68?oum$BprDy`itXCT(c>d)E1eDlc*%#FsmO_v@I%Vg$sRCHPtxthmlE&&SKdD`9ZU3GRHDA1S!W1+Gb+oj@R&B(74=N8Cw~)82Zvy zK|HIwQK86rJXJE1?|_Pz5Z5Qd6KT%Qmo3}c$7OJsJ9s{o(5qBBb?7gff~gPP^MkyP zqL-ooL27@H*mr=-Y8a3)fzJr8A4f0n;ud`8II>&4ZWU}FR81ItTJ*tyK~{>B;sIQ_ z{I%P9_GA9mEGrh;h8)B9yLwUpC`skN)R)_rQR1a&y9P2d-b1F}C{ZvO=D_*dco#@G zu;{10TrT;F#5gsWbo9}mm3Ic-kaCiql;-jp^9`|Wla_!A&6Dnm>8t7AI*d0Ik(XGA zBLL5~8Blx^$6#CcJXctLJii2GCkwWc#uHh%=8JX2LB#7z;|V$T)8ET*L8;N~ip%)# z7;OJ<%dZfC8H~F^?jBa`j*Pli^q+lSv)0C588hCJxEzN{lN+}f@#)}DmjH*{E0GTd zo9r&!Wt*5;xM&Cj6Po~S77?vkf6@E6+gg5K^}XGKk~HHw3NORVxB2W93r*~)#?AS7 z{Plh>oZFT?H-@H$6Mc&!(r^hQ`42hnh`d3(`K)po>ySHiB7q=XF;|l4z!0BrV`4u} z&>me3_2s95yeY@V!r$#sveSTp-v*%KoJTvg-ZZ**Q2sE3gPhoWi(qZgCvpD`#Hpar+AE%;?8kV zKzY)wa&@hq(Z7oy2GRpu^W*fKfdx4>p9T`Z7ToFgjg3^WGp<}zgAAfCvNTaKoqq;C zRue^sKCo&{osmEsq_ELQ`nbYC33TB)u-nHknMkz?mT)0zl`&&uEQ6jtHAj*PXN?sJ zZPT$KYY=+X#UFA}ICoC6`dQ?8F<$F|QG1jXuheI!u>4xEue$EsRCnw3F0+a!jpZ-{ z+Fc+&Py2n`j!ZLT<8;5TJ;RWU56;4_cP6R}=%KM-Vz`A#)>^p2hM;;*d2+_!h)N9pB&AN7QA@c!XP)}&@O=u>8WST zw*;DLHNbxFsMO~0hkj|C{2V-}zUe&oZyH&8O&j+ExUX#YEu%pW>n`S}L%C*CQT$|-32R=`EQXjE1K%Y&p7TTJX$UC$bz z`-3IrAQD~!Gq2NVlunH|kSlQA65iQSf1=aOtmD>drh-2YG+S^caQ31f=3Y{xm4}s8 z@potKqe)19Eb-q=+?NBRr5tG#S_cxzv^FOH_*!+seC9&G8ktMuX!(pbWQUSe)qCfB zw%;I(m=andiQ&$ZiEr4)q1r+R0ydRNyZ~Ai@O0vqmYrac-x6|H_FI>OG5A*%lxt(Y zomM?S(SJuu`91qrE}*^s`E_KqnOK^i=C7_>W52ywy*LNuN&s)WdX$ z=*W}UM2dA&Y-VdAo4XQWcgI(q2`%N+nQy*J%U$R{FFir@t<)~_Dl4z&5D8j9tLe7( z;|E=a^pBdf8Kq^!sdBS7T9P^0FroqMpsxje7su|O|2j*FL8E4qb{pGS00P#Pyad?t z@zl4HVz#~Q^8I>gak-W^$h+ms{*GzVqTDz?zLetAzdAWPc1Ds8wLSGLr}{X|czTcR zPBrf&U|G6zstCX7Da*x-`YsQ>f17-}xp&N16Y4_Y<~Di}R6zym)vxP@ebj>NsGHP` zJuGe|-C<;rvG$>~fdVupQE(O5c}pW!yhE@6u)Qc5m^D_!cUNNaMP(T#)i zu}a#?LHvdPPeztyKQ;FEpAx$BPYL~BDoiI6=YN#=|4~7;;<7kUeCO)w_BCi0NvlGnX3ZH9Ho~ z6Q70G+Gq!PU!++w{>E)|_~(#4K{XcY_V|yl0v!!EpY`bIIwr$(CjgD=0?Bt1U z+eyc^t;w004|Cp`x%N+}54)=FwN{Z;MwDjx?8>(NIcv^$P2Q@4(osbH9QT^f!xT&i z%f+&!e!Pg@L@aI~8foX4xxw0m7jQ>WP*_RJwqVWcJWWD2HDZt@nihJP`_i zWztEHyY-qbs1lOqzFm0XY=(g9Xb0_kQ2pCR={;__N>whp-(DiMTZ|m9yYaa!kdd@$O=y zmm)FQShl2zRGL#>B~(GIycp4#OELW&+3`NT6>2mM^Dbc*{X~nBN6}$#w^T_kbm+ynq$IHFE@&y#sa@Hn z-*b=v+^PD64($o=8SEB&i_}V2S!`}6I}wz7ZWyM~B?teV6#+czOOzDmB?T|!fDNVB z9>cVFmciR^1vh}DCg0TBn{J1r@jOPh-3Qlmn|T(J-rdK)+#%D>;ngbB=2T;a+{JX# zv6Dd2m^STfYZ(z%8Kywp<$GZ(p9dKZUv?Sfgq)7A3KFY<_l84f3?94>GU>c2(9R>y zi>w4G^DjIBJN z6xOYJH2u9~1&M!Io-?hz=rrXw|ER5~$Zn6S2cxa`U){XpyYj(t%j;wSAZn$YZhx=- znM2f~A#K{Bxkl3J?Cum~Z8SrH=98qP4|sCR`8(iniYM|htSAt9d00vA^mN_KXPr1$ zD0qvV4ug*P@}BI9o){s5z>A7w4w@6EMSBK@hGYyqi-L1iehQ)AD-Vi@`wAaH-qiHWL{;lklxH{A9PpJ?qw@Yl|cihK2awRR(FGC zd@vPKDvk1!ejv!%W-ko)U}VlLqGC?5DBB~zwCgr2zn@=u@+{Se*Ao$AL;*wJd`6)- zk8JM+!9>ud#kx30P9Fv1svJj(g$*Q~k{VPe^?Xq6FJ{s`CErA?@7Mm8`cD(4_Dq@Y zNO|6nN;8hWsd9PPuN%y6v1czfPB+P^}x}KnekgY;K`PGd+nF`mOs_@e@G2Bv37IEVSs?XNPvKTMs}c| zufWy8#ope=nf`~3{a{HGdYAv=k`A8L*w*$N9CzM+;4`8`(5fz%PXoZfJ|}$btKd)T z#M(Own1NE#fB`Xd*T2bw&*%1L5|XH7+^3t5!PZIHyPf*cJS1D)466+~0Lzi@0>7NA~>4Y6EtZK;#FaJVMBl8njM9YY%!vw{D);x(rIcc`1C! z&wb&+N@!|d1=GVYpfvv7b^)2}<*MV^i~8-n$(=N=dT1VXS{(9?1G`6)I0xHp)1!}%)*0#^=)hC~$|jaT!)YpwI=qImF&^K^6(8H-ozdD8NWdE#Qq z-0J3(S#qaK#KTZts3)$AfnllFu%V-pkQ~8#BL+WU7Qcj3bjhFu$KfAHObLw_Pu_wn zLf!AJn%W_@dNDbe@d(YWMm$s*S;z)p>;%d!j&+tD>Z>%psaN&3{;U^tV>*0x7s+-^ z{sm5!6Qo2saYz(6joPgf9Bi19%m0~0E6wzKf{sYfqSZNf-`-L#+uM7KQ7yo;8$y%F zDm;2aBLIg;F(P$pbJ&KXK9aw-5AAjebECejj5OeB$6Yj)u@I59RmLbNsKZ$|{>h{< zZLt*6@$Qf1D%tE6fL91A<(uO@Yw3p~Ym+I%|9;jgqX~)3Yb6~Y3%=)piN8)B)(}+s z1uEpPDR-599Pk^=eT69O*C;bWLsv{u6{i?9Wro7HY0R^BUSBmQjFMD~D~xXAj?q(; zs3urmgq^eN>yufSpo$pHKKNZwE8Fp((Gcmcv!u4(v*-Eth#i*l7X&=b$(@xC?L?OxBL-Xj=s}Bb!xu)PE=d2a>=q`ie3X;(_ErIm# zS)~DV5mFq$?7WID-foe*Tf`(iA^Z)5yyE2RFe|-^*sWH2)m-|zHsvH5#|?ewVcx~~ zT7e;ld`X1JbK-^1S9>mTu5QN2P5ic9@uNgwU)jo|V9CA_b z`Z_UnlBu!yB8AL)X`L(N2roO}fx;`R3KE@=J#GoCoz65_@U>K1Zp{?T-*_Y?vx#RY z1`dz73b3nK1tm8DNJ9r=s7~a9jZY6$lEN%5 z>2>L&)R0g)fg-wVzv7i*jScvh6O9rsnOoPma@}nk93UCsLP2#46I5I<%`g*J96Dt==!0$$d;L`bm(!88K3=*romR_hwW&KH#{!T;LO^eKFd*#^dw~f$bmg^Gz_w~E zu2$aNTI`{nyh{G+CDnQ>v_Z zL~o&D;fHkfJas!ZAmNmb?@LHfuUc>#tx2bKCd6CK2dS4&QmB{bj^BNkpQYn*&=o3h z0)lEwNwJAb-o&_h{CswTi&N3SPLqJ9R?RQJF5QZ;^*!niDi^{if`pf6CO6@0y8 zXkte8#E1M&D>bPn(-MDey*+}G-WuVmoR>2W?6Cw|3u4d_UD5zQ3|B9ly~dn>PKr7t-#Xxc zs8j@*dF(|0Ymzr5@H}@C}Be93L|lkL#8> zf=Pptx_8sKn(@b-0{t7KdD{nJgJk;-i*4Dt;SOlYLJza@_WbC~tYH&@;{y5_c2CMV z`ZF?sPmXL&Jl%A^3Cz696I_N{ib+$rcyqXR0lN9r(7u5!Hn&7vE_z}wilCXSH1Yt= z*X$~}ck{~i|crEmJ_NbDeGo^_%ip)QlNNG;sakrmf;EKb8 z5QHqqy=SAM#61fM10LLA_r#`@NUkmAEZd$#!o+2cUIsl7#Yw&u*Nw4v|HxS*j=1MX zbk=q3d>D}v(845!TQt~9Ez4yr0OyW7!kYhLNr|h^mR%d(lfaPZ$RI8o66RClX`9~7 z%^mSt3Y^TbIq=-S|8unnIz>HpFBeG?FTiU6F9&{1F^aterj+-@^kUye%{?F{FhObG z6vIcOo>C2N{K2yu-m?*GrzBgC+%@45+r~T1En9^@AQrOn03q6aqLWtBLU&IH$QjCZ zKq_~Z2}YfCFQm0|PNRSJo)B2RKNw}{M&k#UPAb4h-uR3$kJ`h15fOY|MEF;H1AdVU zMEKi+FMnD91QKOt@`(;~-SzxvRNXELw-a~BJ&Ro(UssZ1cQ=xr+K!V0dYp#rO4+F2 z`Yr!1-PK#oPeDVYsWsEsii%m*J0*x#g&18EqluUNA?5iVziUza!U;o)#i9kxg(p5? zD#r#pI;t|wY{&>mumVM9&OteS_)_N)jLN3WTL$#QVbv^^m5*@vGs!B<7hzEBm$qUt z3>8BmDO@p2qGLA%l(R0-tqTr^Lnv#J_j`KT0xg7;Zy%p)@5oL1(h|o_{)ooA*9jW< zMWeTuksV#o*xbP1p<-`Cux(xqj|ZbWh-FwxF}y7 zS((EgThZWCJ^rX)!yp-!`QdRzG*WD}_Cjg6`fKQVuE*_^qK9aUS+CMl54(1#?{`TN z;dXCesgtqKjjgPFy_0T?ghZb+?Pw?z*^j{q9ghzKQy|3=#&YCvg|j0*Srg6yBl!_C ziue_z9!X#sPyV9ucnr-y+K&EyzgR=_xA`r2`ZQ~AF#Vs)O$ov-=(4!*;7ObhO?c&b z;mwU5K-knhtQkkGe9%!G--KI0wvd!Jfm!?=Al8ez>Y)X_a+M^RC)ceZ8ZJXN=X(Vl zD4M|d`d!a!@8{=nD}sbM({%%v>*<4-7jWN)qZy1e1>^ z@t<7!&667>_s;IX*uTHf5rXbX^ZEs}7FV+myD)aHtseUX`kVA&e^CEPs=W#L{I{Q$ zrVA+O`GfiGL{ik`@z|;ts1e_x;Dk=$Y!rbK@%W$2aEE4ZSUwB$99A2FZG}NN67KoDh*`?2s+WlLQzNci z)-~s!%HWO{ZXG=Q`tfTnP<4wbF`lvMGU3L-7R3#H z%ws$n)4OWzskd245`SeVx^DwtBG#2z7aS@5+tIGlU-`2>f-D5oN?b5)H?G4vMuuDod%lRTVb z-xeA5^{<0j5Wv7OG6(zexV6{RKlMBB<^dpOToPeN>1yj!d^Ym>;MmjeM8mjox1@1P zc4`AzL}DM}!Bv%Iw%bSJFxRG*ly|tdmfEqM{+PInxO+=Ro6_9&N2KKY)^hr@W@ACe zU$TmB67nT@A%Vrcr+QFd$f03-^oiiVufp!q?uXld;AGrSor(V6!_NOIwZ4hH@qcNm zt2NJmW*+44tDYbSB!#VYDFRFHQQ}_L+Og)2%ij|7+83;Wg3^Gg7@9MQigNGP?@zOr z_%iXRt=*5ly1|TH9=~kJ&j=bnjd+=(!hg6)>s1*3ee6l6E?VlLCa+9s8M!iBmlZ+R z9+oVI2QjlHY=yHSVj{^WUMXXnu_>IA|3CsmvDea(8c4|2?QF)g-IH2^Kwj zhMr~b?G4sS;`v!-Y&xRkc1Ky!!rZM)_^qJxK#8@4hjp~qCY>Y81JF3315t3Qd3 z_W(JrVN!PU2qg3?wI}6y8V@h0TVxbJplOlc&eUKB=Ag-s-9ls|a~1kQU^Mw+_j5J=al_9F(iR^I<7qKxiFce-cj^PlQ7Hrr@b!!(isLA9 z@T>Mc1#A@(2Eylmg9BYMR1i`CNER+TM?<-wkrm_jGL}$zb|^qrsz3FBXE~`!>^)$; zVEdM=8%({*E2}AbNHa045l}t|k#}XWX9-aQ`mE;Xcg$(gcF~XyZ%jx5vUq$+meB(h z=%QCG#f>$sP{%73M{>%eArpi^!r3mOlO)V$E!B>NsA6?OK8Jlb-3eQ~2uN%$zVg`` z;x1`$$~bm=hhhm$6g}cGjt$>j#DR2Cmk~+E2toa+ppOVr2Yvgz<}(n9Vap@G%6)-M z0H}CB!c6?xEAPcOI^Vx?)Mm}6c|a3`4V=}f8rZi6hF!McaHJ~2(tW~qQko%93?4OU^}V+V%?|IGI$?g{-y1 zLxKbb5L7R;-Nj-7nqIZ}_+%Di|6r`gY^f-{R;^wdgsgH!fYe>rW>(@xO?8b_VM^s% z`uhgf==34z*`aA_3_pD?V!d_Q+Gr(itac!UE|MfIGIuEsUbrn~8#}y0j4oA;R7s@f z@z`n1!!%WG-ZEoyCSyB3V;!gvTwp|2kzDck{e--+h$0Ba68K2?1lX|2*@^yInWG*H zie8uWSlJ*l*SS*P|MrtkJEJa<0f}FoGQ75G>jxcOyW$AV{D&i)76!sE-n|=$P!n%8eL<@%n)|>Yvw2T}$fn?}3 zR$LzrKU-vX{py{cmlOAn(|evrP^oUv?Qg=mkk>IjcS8UM?pp{)KFLJjHWlA+Pv%xK z`=N`;klmVl$^z^{H?!I8!wWj>K-3lm7t6pk@M=K>NLG44RxeOKCgrOykrZZ86!tLC zU7#sf?;5=GzJ(j6kc2sSK5zksD2(~{%{%#q%+&|9}?_G9NXk7 zK$cT|{sALaNNk#?%$lK(%~C#|7EdMAN4mXT5tnT^)pj_DrgKbuA!Na=JQpKqT#4d* zy8FHS-wDZ&*~BI&;ip5fv38+Lw<@VlWIChrCGHGYET20^b^^<0(?S_XIT30!ZNZA@ z!RbPd!}nn%UcU)o21}o%22;8m+Ntga=o;WSPxqQc*+2oBUz zz7v}#Y+3GZHkCFyF!&cl*P(03nu6wY&Cx2=C%{}rlQU$ z)9jVI9U<5j^iu1D)VcfCY9|yq?Z{Pac;-7gbH+SBYfbRTW4#KWr+|oEG9zRp7jZTB zoF!N}ajl03!oRaj7y151S|%niQDQnt)09B|8Hihg?SPDi;_Xv7sjdojZo^;j0>PEP zDQp5>|FS3YvWNxtw&l!jeY&~f+dhoO0WgcDzvRn$e`~$x49o_xTX+;4T@mI59t#k* zg{KDGB>A6$q*uKUJf=*?zYIIB5%bD)?T@+=~Ro?Rz-J<8U9P7lRc)>dCm1+Z05JiRSi2NJsR zlVra{3vYn1TQn$6usBnZHSQ{@;t)KUL^b(Z4e$^~FZh{>4cQRcJEhFd-V?K4n%&%f zzDLK8v6;bE#oM4{|GLedHrqDygX1qo*1wbl(-V1xg2aUxDHzEPG#|cP4!e*ZuDlru zd6x%0A6ZS2cdk;jpB(gPkf*1gq3_Uc3tACF>iE^cYx3o=pXD-NDCMY8&T4eKmPEeU zrK?t`{$$kJ#Uuy+aIvaCN-EfkDtV zdld;pAfQivARyHLZ2auZEX{v3iuqo3lumALZdVvq8}8m}s2h%$-g>Aq7YMri zbxtH5X1E>&-Sn%gQ5BV*a}j~hrX;m2`6rXA=GS9Io$JI~71r2#aD~>zf;#uMoNU6h z6@q;>BhA?DHT8($4Fn=A z4#5Z*S6AePyDsvE2|kzzB9ha2JMp%3LrH>U;d%h~AqO4@Pghs)QUhN4pH0(xbt}$0 zGP^`=`j-vxV*#!kY^&9IA&y&T+DabK_DfJ?M>D9NyNF7GgxX94nW4vZ*K;@U!G#>p zO)9uHqM2GVs|^A&Xg3v0BBfj40Vy?B1A7m#iS&+n+X(1~_Qb4Gi;4b#KAQ`(_i9n^ z0yiJnMo2n)FVlCr^wVeTJ{nz0=S3ynh8u5DDKocZ$I`wWkj+wz>=avepYvQpcmu{J z#aaO+HJy2LuCciUsLee5l%nwZiVnv4Q^12bInBhG}Z_`tTc5MfwykjOW@5-j{v!~T+eZXGKvDfE{#7QY(j@yVeNfL zv=*pt8NY0OWSsuOHc$}C<+F78Oop$btqjC|es*MMCI-9FV9BGX0W9~oTAhL&vpvP= z1O^bhh)cOZ_l`v|^G>ym%~jcsD+Qqj4FW#!54Xv`*@t`A6K7{$it^PQ=3%);vtee^ z3e0&D=P)8#fsL0u_5#a1e<{uM9rh_s>J-~T%^RyR!M*>0~abbP*u3aFOFT1O^Y)JI*lOpTC#S? zCXc=?SK8-AE$ysfVp3iN_g;jd0F*3>NhCSINuz~92aDD|w5chlcZbr8y&)EDo}!Ib zVaiLD<8okLob7$#;=c7(aL7~sq$@3Ajg5u;s6T^97~7nuAmX7G1geEF!;wm2B1xiR z5V$2CgBFHX%=H{dwlqQ1A~%;Q(9L%$(d=B4ynq=bpCLj!oK%U=T-psdZ>F2TJyr5G z>tbko@|v#-Dief3gLq?`)ac<_mp-5v0@{7)cgO)vRf(Risw^cLERPe+G8C?hSpJo? z*)+mD7cMsN1-dg<+hoEBfa4+7!RUc~xp`3*fEqd&AZ-hQsvedTzf324AS!i1dVoVMia3E6uA z!GcpbNf3SoTEPd8BfHjN2c)Xq(<3(g@4iR`W5aoT**er#w<=Q4)gV!UKsh?LnnHv+ ztWbi?z8RM7u{Vu_K_2Yw)){oi!f4#cseER1$)s%zgG{g)gCXYuOY{*XG0um znnRf&vHHBjwhgvafPS!rEJp-F;K>OTzT4Cj6f4*m>BL+Oyk#Q!8ZKAc9nz*(MD@S`JUt(y|74?&@ zese?MXdw@H87D)@aXeUjtZ4n*DG?z{4R~D%aLN`2JqZ)#=Y4saSP{Z;0T2#seZc*k zLV+M<`DY42O4$)~RDCFgUVR+)#j8N-?A3Toug64p7lxE*|0cza2OFq@mf>#pLCpno zwR2{umZTB78D9*{Z&JE4{izWKHCl<38WByJVzi546AWciqRZ_^lDq&7dG~&1nFOr_ zu*v6Ut=!||wL}3ivcP40Rg9O797^Z|=k~G;%U6za2-GL&1>0* z8^mVibi~D0m_k;m^|1!nbL-Q%elAydYw?yM*dfwS;H+f~ZeANI+^qp7&F;ThB`qGu zd<dB8Efpl}2wT+HqqmKN< z=qV@tda1T&Y!z5vVD)X`j>kWD7&|;J|r^@zDQ`w0z39IO`N?)z6?REWGb(?rM8da(6 za|kOpNB&5SEW~709o#H_!N~x`1c$^ZdRNdYOG|lj;gz2shZpxho|N>6X_uJ3KEJQq zsSbO4vs@qN`?(Ez`#b!NRs#R0xej^z?w7L#AN}CZhox(z-vqf~k)wg?rGxNsN50IC zNf@cz7B3Q_C`h8;}L5?96huE-fn3);p`~8oG6~O-hKK!v|UfMYmyvSyT6Y~i_mwf=EV>T*;rK5XDfrL3ggAY;9o6^OcRBM>-00lC+wh(dypZS9t%gVe@I#=FV z*ffa_NPpMekpI=QC#=D5a?=T~)&9GcTA&{x?E&8EKm#>gIu|`tih6F~+xBMQ$vx)8 zV>pE~C{s~Ovme8R22O8`q6iw*`YoIj2U}5E>xj3tLKrUWJZMn^5#l8cA^MxTMZ+nT zHYT)`QdMAok+0X5EnRIIJJQx;>S*}kFTA*n8gV|KmHaO>a*K3ACB*VK{3bL2V6ib0 z@$~6lZwf#-m7O|>`A9ZpAvW=m8TBF1ti|Sq=e((nSVLvyFu3$inF2$^;!j(C9#^Q^ zu!s#}z0|FYG%rC_=%fUOBN(>WlON3lajYs0OhsbxjtBcv^3UE%X`bxM@pm+gz>u;Q zqA;_RbU*VXdz-2mn6>>r-hx4R`D?pk$(BS5dy%bqDCfOYvfh)D=L?T0-A^cV(JPRe z3n#Ui_Rrzdl+*H=^xUhSjNyaqHbJF+Jz%iKGAp@q$ZA@D7S+RUQrXb;5Gv?;_T7K4 zA(pToEcB|K2#&{DJ4?mlqANS@()vtxo&wuz)3 za^RgC;aYrVxd~ZoT(N+0xAYtLD4l0`-{gA|OguBdu}h!58Z>%RNA2o{U3{(=AyafKR481F59mc+}6`KBlZefw1~s6QZ#a(y1OUM*poOd!>(P zHE4KsqN#v|H&BD3O|NemSYIU^_x`stc(fgB5~aH7up9$xq|NiiVu z5V4V1c_Gt%hv$P9KoLCLlv7F%DV!Z!7Jv!5bHmbAIww5V$iVx34AnIK<4e~^ zIUevN)Q3)cn{>8p-(T(*MsF+si-Z<#HEbtwLlj|;ZQh$%(?v}e;tRBg7D3PK>prgI zlkpd5!_`Odma8?d6WBgLid>M{v=e^C8m<+dYaD~!yjVXT61rFjhmvfl(IX^uA0nrx z#7i?9P0Qp+WB0CgrF6}sW&^U)tytv&(}BjbAiH0Kjrjw>vYLr)!yQVCex!+xUQfPt z;_TtlqPLlzT5{xvNKwe1Ll=$0bw>JKsRwT_*j|sJx`JpAn33Oi?K8Qf*K;0(BPrYr zy6vOCOZ`R;7fRJWrb2WzsYEn~i4gMVf;9H(=8{80?Vah>=9tT4_%^V1V3!|f&3(v6 zM;!+zK71vMU*&px z0$HF5pAkx0vB)%HuVseqV-A7|4I&oOE zZB@R=fIw@!zE>O)_?oP9a$=J235*cqx8-Gi%K+F7q}*3;tZv8%Em4c{|84NAy|^Cc zWxX$Jrw!CJ$nay$3je#!-;a#dnWNkqBzRjzfyh!N(cg}~eN^8r$d3_-eKC^vAw~Lj z8~eHmk7TGOhpTtP;(I?#!pS{n8d=`mdD;LEU)Nm)eUGOK_R!wq<@f|i0+Sgx=#}}I z_!R?Oc!Lr4r!|E`8)!Y%s7ft2U7!!F4s+YN%dGMM$sac85fF>yQSR%q$670_nyFML zb=}9cq=H!ck&BW$%px|cG3iYZ_N(eIz8x=ejDPz zAwG27>Mw^sPpT>L^a}F=*K;lI73G|@6);PbQxBWF(hu|c?gd)i8Z9;}@7Zd)`4V!+ znU_?*fLe}ZyWWxs$aOtZnS0R7<$`qCHP(}nKgDnsN#aZ4(^98*j*PL+S0Iuk)z_Iv+H7qN-Kn6iH8V(E{^7yZ9)9!yLf z^j%#nZGLtSp-NM+SqwkfJ*bTrfrO@>0aBb#KWLFxq|yQew3W4)wHfE|(mh%d*UWnHO z>3gvMogivc(pmxiShc5qYKiuLmDAMD(jGnl7Q&xNDjz~{2`#HnhjI_D>?AIJOFUl49 z2Q+_6)dJ4)%Q5;*U|UuZ2$0) zUfStV`u6PZb7`pKe&uQR=&tl!{rKrP>wH3ghJO+_ymQm{)3v;rmN{?%fqOt&^>)oh z4YkTLDyVAoGP;-FYwG(%bmTN~R%^6kwW7lQVxO1&tDGWbF-$UeK z%u<%8k$J+4FRzExc7&T}vERW6Rr9&9JfxGnf&>JM1&)vL{I6V9pS%>v;bcRZhisIP zgkco%LT7oJNCT}t^1)csuIjFCJE`0f*;*N`{Ti>nVmm;lpWiGSsQWFSRHsU{#dMgD zX4-5(Rq>rG0uI%%m}z=t}eo_$)(iRaM@d20X!zHv3J`Hp36t8yp;IUT_b0(7`j zyauQn0F@mTBt|>8;i;%%AgFlYtIasjD3($+w?;f(<*{G0=g(;2il7-*(4eR-0!Ii~ z`S*|mP?wk(hm2TCvwZN4$m@QvGGrq?(zNs^!OcMtmwz~oEIA0#NO2-RU}&_+CC8^I z4DB;N>mxVI$6NC%fPSQ>nDf>BqvT+jiFdl8TqHMFxm^lT0`d$JDQdhegNz#MkF)k` zdNPRbfPk9m`Y>2U-pS6Hv-M)TlH^I88VU5HfE~raw8$5{4{n*=jJ1vc=Q}k^F!iFv zdJ9Q4yyAFCp&qpj7!ZK9*eHX18`fC!577!-nFdro9mPp;BY&kLZOJJDV0ygO&aQl& z2}h1U?BO!9b5;L4-B~GA8?+KLo4h2_&Xdxrk6QZA2Z82-vl3GzObzGD_>CPkDU=Vg zS&d&Sh|UH0Qp?$1K7PsdZobQqHXSwH1RmAC zCgLcMe&fguEjY&UpT+b9J=1O1Z}P5Le#JxISIIdv_V3rWGBR8m-e@*{Z2R`t4bqHrE zv7p81liX}xLoj-ek*C|qZ+tG!gh{aP+!j^7Xij6%lO{H1ngZxYz3mY&;|f})Gtiv} zs}l4qzlP!L8W?+_hAS?zz{lr*g!!MhddUZQU_@3fXe%5vsxA6QF(B<;jMIA}xf{P` z;Ol$u22?_dZ+mce%s;v5g^BUaPnxHLe>on5{T=OO{ey_Ois>n-oaz;npdWB=kQ6pF zwTkN35R9T$bhO=v5-MvrfPV>sJS9)->y~n-2(Dt+aBS0kt*dv?dk%gomGbw1)<#Af7at(|{=>5gI1=xtV zD%-oY7aQKhFEMn?m%{ixCyKmdCuXPZGFEFEzaTU?^HESHmE39T7hZC=@?jTOy>Kn9fw|yKpbMYlXhq~^ zF)z@r>&};(yHCz0plgJ!?v9V$LvGA{Z4)4h4d6;RdIATM`ez|f0ktwhDhx5=cw64w zv~jx2b@_Kg;(ns-#PEJ>UAaJHgfeTy6N?)s%PiB%UTbRxAYEb<0(@~r6V-?_toUN! z)+sS23{Dji|LJV4ZmB~1fTInJu?%N~+^>n;?hc<%ND_K*{U8rHPxZUHx}P;5m1O<^lD}TXEM(-yF&CVw>8`plHP9 z8KW-Iz+M&V*5OQ{w;0LWq|oquSnh0D?}eKu6PFOmBtGBhY6sd>;x~CV;uY0J2k^Ez2>)$KeK-wzaQ$O?je~69- zJjZcaX@1-lB|tzwCq4d8hsFO6Lb&v`b;cP%fwKo^A19_f_47v`y=)AO!!%cZm&YZ$vW=2X9?o+1jb@yv>64b`6?=Ep6(G|0 zjy2mF8FPO+VB`SJ=SElW96lWYe95y*qYS|wyRQ~P3C_CPW?ogh8)&d*?Gy<228Py5 zRmG;4#`2%Q2@Zjh^Yv+T+&t8qSEX&g7EuO$!-R70Hy>TN%I1y18U1v_mcwxJq*lBS zeeF}VKQsJq7ItrlmjI0=YmZ8Q^`&-pOZ`+c>&)Wnm#)|MnkyL{8U5|0sfMoe z<4?OkJt!7g&7P)DT5s#W?sXfh!-irsf16_1HdfSbVs>mzzOL0&I>4l;G}qP~=bUcn zwlE0MHC}%0&!AsI7*GS{?Huy~IHL*9fZZL&UVU^*C;%L}kJ^o8>Z~$)oSqJ3L_lSZ zP9P!Llfm_I80UUYVkQ-nYy+=CtgUKZZm-TS~Ma%mxgxCV3;PYX!m8=h9();ku?nTiBCMp`A7l7zn(|f7K znt4{Zw$U!&kL%L2jEx`fPQBTt+Qe&(Hh+Fn#7UAdI3HoVkIF|+1^WcZ!J@N}-0khf zf)G>)#c>U2J&(Aba4y!fSr_qbK{|Gf7{3t`p{g>^_Y8k7-}}?~H4JKHZ@7fr&@4LI z62*FDPoO}aCGT6M(H)O`(Q0lqnBZg?_x>FYr8^Y~7d8GfKfCFz#;$B4)wUYWeiYF^ ztmf6;{aaGnT%cxFfOUoxy<3*-(j{{WkKMTHhjIsF>Bbq?ig3C^RiR7;)O!n!DcAT- zpMQOD+a*(7LVe{>zV7%6H<=i>P8OD;A*P114!st(Qxn7)qqT0E{@SE`3K_PMY%LwOjOU`#~ zZT1>8-%}!Wfih^IppkU!?e{{G-cx&Ivo#L zz)A063Ig{~q3&$z+%r`OH+>tdX!UfrfM`R-MIGz&((`@YBo*CsyJv=mmPiFm&-Eol zfFMPSG1AG)@m*9Q5p!&mV~Dt?Gw1+f929d>4o ztq)J;`Gk??(oqss+Z?^9x7r|2XjfyeRQr7cszyKmkfXZTxQr5D>b_5>}NWJ({~L ze+#`Y?k2Oj9&4$r;EIBm=QVDP01$CGNiGF4ilIzZ-Y`su1gODqTr<}m|a+wONW!1 zoDaTLPLWmmGfIOqgyjP)R{81qZ_fAapX(mqr%M9Cqa=P4O97(OUWwXxXBQr~5W+2Y z3Fjiz__BBNe9Z&~eSj`xCXIKBgkf-GK&WR3DbT=?pa|66SPJ-tFlDOrc~l(yC@m8& z01wf&_eLaZ8HwjSydv0Zzip)(P`=)onPX1^u@!hZ;lNT%4mOJyQ=;EOe`UA68V^Jl6o9n*~>lS9Tm*k6P3E?#s$Dw6C-b$Zt6DN9xc=05}7I=Yg4K~ru z0QlUSyxv%-!8<>6Efjw)X$7pcmktXK?YAhqG}B3lAS7MD7<>Bjyg7r4RST9!zH#3Z z!xn5%AZEk0nK`nBA z63j*0-r^#MEu>bHBo3;5!u`JO#*!9$klULN!L zb2K)fZdwapGsdAl7;iy&aC}rI$};lEnS(nb&H{>{2`hj2Y^SLTeN2jdh#$K4dSs@Uu>KPcJ%a=tS;OOe)GoD=# zq4)AEs6JX@TH*COy;&;VcySKzT0Y*~u_ZgYg{ktOY~B=p_B0lrcygo1M7pwW&OG!QfcPV7vHdDIqiuj1d(9a}B&U zg0DK(kpa;sGyX#a6DHtmHbMdWc-!oMkav^=5vc|oWcBPEFNX zi<0p?IL_uR35)-OtaEA%tmztMY}>YN+qP}nwrz9bOl;e>lZkET%jJ3A^CP-<@9tGq zjPO~LPjRX=1?q4d81fU$>xY!apfxmd^1xq%@4xz_5cNvlzaUlEZqFtPypuGSy9=ZF z%fL5wGQ}H(nsSL`9t>?>nikw!Iz1ccrfp#mC>WzKiq?G&m8;fHT9hKA>z#$539KW+ zm+hK166Fyzniar(c{NeKoxl!Xum{i^@hULH#Enq;o>bn2f$K)Dx@ea_;z^(ewf1@`aD*+RJp?NXJN+?RnN>#C zycA1}BU12RHi0Zh*7yv5EN<-F;Tk>t@op}AQ zCi=`E8TG?(EIkL-_buw!E>c3Y+wz?1XG`TjX-fyHVHnWxsO;G_>HlS@OoF-?-o!y#qVC)b|F6?V;4 z*I`;%>N^oYCCCxhtqD{^>7a#NBt@2+wRFEARRXi7YA6NOS%k5XmsQPINgI6I*=xkowy)}ulMvkcnNq4;&C&VjDN|{1;xfsO; zhUbEbLvoqZDidj1wOF<6yL4BAJ_)i&!^NVIMTFI@5)9^o{uU_nn@s~dMPwL`HB`(+ zi(I6NLJwnyl>S!`^u(mY%7$@t@fv{c*Oz2!YA!o}zeij|WLjmQ4DGdZg%u=eyI-Z$ zd1WzzZl=()YHL{)g*4@aWdR;J2B|6g(e(IH>{@`hBFBGj2SX%PC+ zFd4!X+UtDCOuWpJJ`43*a5`-8Qvy<5O=Nw?<5YE-AK-|$z}{1X{~yJOe_0syjztQQOC#- zx#unmFsSm#}H5`4lqD_?5Adh=?}8o#KOaXv?!x{oZ@(>`s#HC7}^9wGYC@S`n6vN9413V z&=+8!T#G~!TG2#crTf&?5xd(<(b-1Ihb4vGZR|&S9UIFRznMlsTws8aM|M0MCzL?D zJ(Hc{wIAWbK22Ihv6K$qOS}urpuK59eoVjHYEhh_1$FAdz!?VfBh732w&7p4C`_mb zoBJhKMjQf&;{sIc_1Ypbx6-FpJ1FihDR^XJYQQqBe7 zknY6n_kWPy+ZjrLlg8ZPw&-Kd2D(Rlu+Hm&(?)-a(}{96ck>hx{EF@`T=v04yVLX3 zJu1-U8Sk?;)vCKed#JSq$33*!v>PS%W{NCSV%lTUSl6VFzw@Obno0 zyou8WMoYzHI`>4tO+myBTnZ$HY^3{7hUW>(FW)JDr7vJLfdUCB3&-N(wVyKoI_P+^ z_$g=eK%r4l818Nw&G6l0cdTr_F~Z}Kn#2o zYfvV(!#})=Hgk+q91&>~fmGOu98(joExx=+1jC#zXz`>vzgr6tx7mxd0h6RbKjzp} z{<&BT7;2&?egjLWa7XKorpNxCUiZAf6gMpXeZxT;#Lt)>RF6MM>G6jD`nJJer4wVp zt8jC2IUrv7Sa9g_i~ij%3Wp@Mq;GcNlrK`xgZe8bwSHu0ZZCoxc!e-A!{KY79gc2` zuw|2!Ro2Uhy_ z<);_$_CGr^^B~zLg>_Nwoe3%AR7Ov$Nxv(@UiHDertiuz?Nq2MA~pz*D>XwI66Rff zFql6~CXN-u=2&MNG=^Cd(69!x5<}7tz(;sywc|wkD>T?`=ctj+sP$;FElmLRA?K@~ z5gb~R@D1}0jA>KqN|@rt4J4z_CO<#MdkVrdPk;|s#!G(VQUl~U6EYs4VDYyE7 zb5QNkpbH*q5;%bBEo~<^suaJpsBoDwy3!|;;W-^El@nto=FGJ_HA;flcZ$E#n!lKS zd!6y{2hfcZ7!)Cf5=2PBCwKz&pXW;+=cO}t^KZWZw0TkWw-k@%|$mh?~j8u11?^-)gs(LGTm4^r7fOoK>jDMtHAa^Q0Hm6Q4pBg(h@}j zw)kexX@rt6aNu*Xi^K~GqW0^PEl?kP#2EHKoQP6qSELE(%PqjbM3Eg2qQT?=zL4-? zp>SC5ZyI(ikP%Luk$#HuT26J@IgFL!EqeGrGCVmli7=qT{N6D>4_<6{YSh%$pL8aV zSvfJcuTt$3=*WU!J_h1*aAKT#2u+a}Xixd-Dlx<6BwKQH4RwaI*h~oayKihHg)x@r)ec5Pi}|47Fx8#Sb5=I zMlrl9@fg59rioW%ItVMolj%Aconucptme%ACVRiCwZuIqa0hLUXR01}t_JCxb@wHp z)^jfpixQx(A|y$}Yr!N);gvfsM(T@ZPdm2b=Ahlb4kHn>-DJD#xWpx;w=!5r6`g8e z1XdPM)3=1Q)^=f#!lFCXO46ihFVCCg6@v@_F|Vs&rI%-rnCN*WH!z)sj(ipT+tSg0 zi5q>(@tzyM5xlN*{HSFv$4Nev{bIb!Ecn4 zxOrQ!7rmN0;j|l3w+305Ror?@!7n&we|ab_=TXyydwnw%c=j3ChhYQ|5O$AWl(d2t zP)#{Gl-x=`^>I0`P)L3(F8uQ7u|Y>E&vn<}q4Ik_Bj2!1kfHzpQ0|Hs_&aEDcBtkP zPPm4{12V!V1-3C?lkGy(cy)-T#v~>ip`iQp>fR+gFE9#JO_T_VyX4rS?Im>JaYKiD zW_-jeGvT91Yeyj|Ec4MX{RhXyEdW1SceDc6jADO4cus;=Yo|*r4;y^1h%%@sTYW9G zUO|COijt$Vf^u|z1E*>!)2f~EVV~8WDd{y{3~6b^g;wA9?jO7Ubb%D6yMVKfNr93Q zG#5_W#F4_nC$5WuK(WR1H3>J7Lbpn8G%mREADMu&@~({!!fk=YAqyXq!0kp1!B*Xy zTKU4*_1WoJ+04RjVPD~tM=WjGFKfrp4pG?$i8=uoY%biQ;I`g>{LStd;l+RL+cM*0 zX<^AK4c!Z`(t)BueHfy_SNDZ0pI0?vivHHsk-lbRBvBm*(%ZwzEh;<76yaCaIeLCG zn}<5J0oH-%s9W&i_fmQm+v~aZ$(Rp|o~hH(chg$vaFFN)I=|OnOB~B;P**bxClA7( z7le0SHAFf8E6{cEj_-DspNzZ;#+MNd1z3oU7Z;#EwHRh#f@!d(%tM{yQ5abdnd%xu z?(^a$3ki%Y$G-)Onb2*OOPUhky}ScUyDdQ*9-a=|aKwZ>mt8>R+u4WL)Ds435T&1? zGfn{^7v!+i$%jG=jk2fzq)JD}*9(%8;uosON*MyK#nDrcYZp3A5^&B7?an=Lh`jv- z$DRt^pY`OZZ~}pgc>6SZ^m5^R!sdAC2_H*)t>7Bt3e9Y-Brq53lHq-k;crc8gi6;`$>4E|gYD+G<>v1*Iqv)CjB7~5WZYk~D_ z9!3$bs-pK{Q|*Op)#pjyvKUgj^_l=w>3G+)9jP=i`DuCPW*U7)p?qA(0OjH=DM?>V zM5)aVofG>|L^E>Gn_mKrhftX!wHpak5-SOC^l8Pvx|bD$ybYM!L3f*8(ZwN2Ww>YM zW1-7$%%m>AtYi8qXKP~>NRL5(Bh8)M^%De0Xi8ciq6@6CwF*IX{D=+o`Z?S8$|J#2KrZz@faDF8wwVD{8~8g(@Jio zg=lE$ODEVbvKg6F;G$4@>$%mvzi^a;e2~lWt|OA>!9a>R>12?@EVgLw6oBHSTbSmB zw(9iC%GIlxKNYSWk_2=F7`TdjdWzNDGD+vrOU)HNtKr?#Vl)^Ik(mnQs4fpLQF!#^ zn1RcccEt3Q7V*8GgoR~UTw#ebVU zF;Bh&`1e^y1fVC`dh&py)bS3>lH(H*s4rd%tAn1TAJ55S1h1~GSjdIqq{a82E#o=) zP)mn4e0@YN-B}gC?%y9QJQx9miJzw~hySU4qCSvdH6P&Gw0g+03nnz2c1x%FM z6OeLnr^O9|5K?>VDYA(k!NDTUw&U&&B}QL!W@9frr|`U~>-@Si?0MGEp{zSURfJhTMn(f*~l(Oo&*VFdu={HFVl+ zS|H0ppZG9q^I#Qj&oxG9OHp$_N-P+kT1FgBx_CM!k*%tK+#7Z`5C43;M<1{4O1ts?+_w&{=GRi`Pr zhaYgb$d13|F_1sjVb8Y;7;zc77eQo$@bo2bl%^4S7@M2IdTD8%&uL(i z{$d0%|K=z7LGu^NW9kTbIlhL^JNt}(_Bz=XiRCLO1qYt(+eVLt{;y(uXS*R+t%z>D zrPkO({BwAQm{P&xJr?Kkz8-9*^DTf#^V{yqb%~dayAo0B?!qk#nxaqF_o`NY)S`dt z)7fKQ-}}<&jgjw$Y~pU;yNmLhwpM-zdA3&m#*6VvdCGW*XOExt1+#)G@r5(qoi={u za}SD?XuEOauEBUS*~uWQ!sd73(<*L=p)n;!CA$PZp&<(|Sb#=KUvylsWzeS>QFeS- zz?|P<+ThQZf?2oP4$41wVQhXM##7M_IY2)*A&ih4vX=;++ zA0>oXvYT!M4uhHIJ9ns3i4q-`Xv*GxvG$Nn;zwz^X)elu;w0hGvVjC4pr!(zIu?nf zf3ygf-h_wasJrae4_qFCgM1$d?2M+lBU&Iq<3W~u+9~86 z1fui*{5jUrRpSMNbw?Go2hwH9Df&C=a@{S>M+0t`R&(Zf0pHloF=9v4jAG2(nP=$j zzq@QkL7t=wA0}l5Y_H%6l_Kr&M@c4bRyib8hh+9-ii4JkD~*M+QF)9<#XDS_(_6J3 zi~bhO5o*-6|D!*Up;ZW+CD65Ss0kza7pHS(y?qdXEo7yLlWR_3c=&6=LGIefOo@{= zk1=m9&oIph^4yeTf?e7fnoP^QIb*i2_eDE8e2ekMk{=4X0^f zArX4|PR|h_zBLv4Pn5b+GEV0#oU^;yYXGocdM8&BE-2qPZjpgJtngVqS8MLwJ$_g} zXpyl&U3kteFF1+JIA~~jb%z;5RyUB-fZ?*!c@p@aXQwbQs9B^R*qShGX66F41Y_-M zj96kx9*)f{nlw03mC9nt0{J7w3*$Y7!_tr`r6FxJarGxa$qI(FXNDBkGDq zBH^-3>9w?B%6srx7nFBVtx~ENAITVti3!2v>!{tM{ z`<`q0_Duv@3ENdO9?VhqVr;23!i+kX$l1->a?}Gw9}d~a6i_tA`5Z+o_Ci0XSeRE3 zJZTk?SHQI%Uy!0Ip?Qlz2ps*$53!ECUz9j44H(CLKbNvnCb6?mQ0q>yTR3-rOrr;D zQ_m2o1o#<_WZl`Zv|Bw~K7?wUDeRQ0chv_g78LyCYy6-FCVqE~UEEcoku%pl2 z<<6C}sqtvnta$vC*(aP`)j>a)JBg$U$E&_@hIq;=+cgO$}~EK2!sH-yTeD6(i}#vllfUQy+>qrbE5Z- zGoj5HDfw8*jzTar_R|2r_Y)z_G;BFM2~=HpR-MzH_H1?B>tZLWBj$CL zc8)_2fD#*;?~b&4VfXJ7-HV^ak22T8s^|?F)s$vHXPA#{iH%w9=hdTc=R+wS6Y=xv z&TH_;`LYF92bOMHS9zrP6)kaU>f>{zNm-%SF2;17 zS8^Z=qxr3X`&b1>iSa8DxW%yR=Iq^4NEM%cG`H^~pV!4IX%_yh1!VJ~)tt#3oy_oe(fCNrs~Aa8JuypqsZRV+#E{k2n$5J_c%&=D z%4`u1HTMWRmvQqe8M;&lx5=_zIr;-Q6=U_AfR1aGr_(IE!uCd&NLZc1m3H@39K_IzuUiU$$=(Q!#6E}yR zi=hX^;o#vb)G1*~ENLGn4rfP6AVMs+>)K?5GHK$>lvu9G7wgRpJvnlo2p32Ak}+Pg zIXd6p_>)(>`8&}v-#qxu2}kVTsHLP%SRJ9pnSYZkBdWJ-K9)Bnd-Revr79~4t02Jd zK~=rpm*IML5%W<^LWyFgOjKS?Y^Jp%aA>Su-#SEYHJbE}nh>4$sNvjet{}$LVBTZXlu9!sknFl! zTR*5PhL4!QNu6;IkjY#}!x@T5REvr7bDfGU+gLNxk!-!r&86wt?XX7teR4R=!`t|!+GmG9JOezC1#@udrw}N0e*p;w zlNUf9Rd?$&wn&oCMs4{#k7}IKP|bDNs*FUYRj=VuLG?^wDK_waV2S!?I2AI)svi}n zkAC6?3XjAk5hOI|E`ZTcO)wTQDy$Q$(k7$C-tnD)fVaR8^+LykP&*p{=hko0Y(tY^ zd}L1xwI>Wj=>A732v`L^4GOz)uni+w`;lNB{`U3n=rfJZS{=Pr*(a!n$m}xq9L)|) zht(!s+zfAjBP(yjVO25nAM8<}g=u&L3mZ;nN8S=fE2rd(#z6Wv;)6T-0s?Qt;-eXVTk~XbP^e#e>3Vz-!KC5j;YgNWKW6ks-~kP+;Jr5fe;_n(*pqf0X0Bqg<3{ zlf&d9dhXj!_9`->;I@K{feV(}!(JZ`VU{=tUbgtI9~|(|4?SozkXl}USOCnN?*A7v zYp+baUjL2W^@9Nbp#OKs*wn+t)Xv$`-tLz(i&g25%VB`&en4GmLaLX308BkzvV&KZ zU*4&NGVOzz4bL^er|mDv|+@s<<*!P`dp2zywj3?X|o7@C`MoS zD@NYx61`&eF@$}Cmx`=qs%icN0QY4<BTlQfD zVH=I02-U1WbbF@YhDyO_04f*XBB2F-AoE9K7ZTM7=*S#dpyS(co2R`?9W& zSjTS4LK){dOqkXEuS}2@r^(OkP*}HE6?GC`gbpQ4M{^(hp~+B73^-!Qm||l2NG$fFRbAtv?7sHm)P~tTe94g+tbg3SBXPHRp)l-jE+_`%3yDWb7)$X?@T^><7be^ zLcOF!a>U1NwJ=m|boSQ5IggGo0xhUH;=5q4-v6f;dqvwL9{&qm4*t46asU6-;ABUy zuWxB*>7uXyyC#}{$>%LLn4Z}>0y6N;@gdrdRy6FUaGYl)nvJ4#B8Db5UgDuN9L1Sh z#mC?;1zYo6aI8}Yj+9uUApUuk72Xi|Q$HR6{?S9m&mT~{ zUle!yh5xrYDp>vr`bYuU{Ey$3%67(pyRJr2mid`IBqguXzDotTkoMJ`fLOO#x-wL?4w>Um+iT3P~2dpL)G$!$s8*fAXPU z(@zsd8gFsZ$h1W-V4cWHF^Tx@;+t`086lh2<7Eh!)`sI2OT{RA8_LNt4w*zWL8ck= zbTYFJmy3Tq2AN7tA6kze)Ei|cmBP~t&iLzqhL?Fi9TfSCgQ);wB{lR&x*Lkk!nRD- zz@Bh49xIbXqnQ*$p{4x<8y8vmQ5NZ$1Yo!5XnV(Q(kjCMIeTzf0;NMcgUn-H+e_*` zp@OtjJu77Xh)@$uW}xisSYOik^)~SHHmNf7Q5YSG%tL8ZE=JROHKH+_2xD2*!Gbku+=g^zS%=YhS(RZ|=r}HIyo`Q-A8NwGz&$~{ zHoJBHYomrbgt<)vlzyY(M7Rvivmg5-lQUyjqc1QD@KCj*k$kXS&zBIMEr-d-ThxV_ zyAE+*4~aT(NOo?5jYy_kHXz_xlKLH$gwK|=%A`DnuaQ2>)=*b~8&R>^Lf+=!Zx`$_ z9J}D8C8Wjy=VBq1k~7wiaj>?rE85A8u_91x62lMoJwTshb^w#Gmr_X{Xa+d#Muge~ zJfOLT&64Ii&Q=^vl8JM;+rJk%1XthPm@0dZZ_CBI#UXTY%32q;F~BWxBj=EAOPO3g zaO`htZIi!wv?m>z8{S5~%Wb~BA~X8o!Z#FlTPB}s(@!1Z672993@QB`r}`$(q&%U+ z@wsH32gu*=SY=jiZQ2;ugvj$$mh^=sX2y|IFb3rrd?nc708TBzPi@YDOHR>F_D)8Z zf*9oP1>oSlkxF*+s7!yAga4p~^Kf>t%0!PP)#yrWIvIj>1ERm_0Iz7Gi(Neiiq16Y zoAi`3I+h+ zw_o-D!ZYSJmPW?E>$gU2Gj5X&!S_WSrU{m&u%*lG;IecZWtxl@h$e_YGBLab!NQV; zky?>Ta`;ZV_tzkFq|IgDq0=1Hk;xn(21W1Cd1y=f(fl%%R`Ep23a-q4)mGFzQZ%;KnYNPP zdZ7zZdxIfJNu}Y*O{(HrQ(5h!T(;(Be8nM$7+9sXrL~39L@QzRk6m+Pb_3%~m4xj@ z-Fbgxx6cok=fg{qI9k)n_e4S>=88*%-be7(FG=7rPn%k2UY-xV2BYV)1 zuBDC@Z*cQRJMEftq*c@65w!aSjVwOr^i>!D&jSFYw$8~`aB^S*aI}ug8@LW0k2IK& zHc%Y+9n*!uKi)HudFHpyvnVtNrVQ^`aDUAX5w?gk$t($77Ccgc-GmPafen|!S8dQ) z249SYDA@-lQfW%B7Uz(4iPA@)Qk^^uJP!_HpB?bHc|D?-T#r9AN;WW=4y{_P6hyc6^(jQL3 za^Rr1tgmE7$^d7Y4pcZO=WK{mT$j@%lc8eE3R=2JVR!rXjjI&mLhB*e>8qtNrt0Q( zeVX6b+kZDC4Z)j?fA)-4?m;*d|<9FNExLkx&RAt;T06OrpbC>sh?I9Dh zlj$to9(8l%(N7-8?|kq?81E-i&=*H1Cnw>`ph)I%)ajBG!1v+pdtSypo-f`W&tL3| zca8jy=vZ+;lZ87(!cl6Td2rr+Fa1LLCud>H=_E&aeS_abq2;|$su~0)Jmb3uCF>jA zJ|QXUu2^}Q0C|gu#ky@%Q&Ig-bHvMW_sJEp_>O!d{vxP3)?Tzg0^e{)5OuV3?w1{I zD>96F(P@>xTpouEel`7a8Uy~qKgoFadrLS>4ipz*$Ozrv;vnC~iSKsvDFZ=+syrHw z!z*b*#z3&X%iDMlv5qBuj%s2?a4$T3n~wZt>2dc3V$Dxn7#I#*9=FaI&Ngu5H@+yFbqRq5txMHiuv?8TW9jhw$IJ80OF)-xg zK5~^-eBqEX;AEfu7+^F!3aSZNaAuN8DK4gjQ&vT*U~`NcbS+AM?OpEURHEV#&^`tE z`HNl05!a$9Z39@%Q8a#FfI)(g9t^gnFV}lluCP<=5-@5Z4-4iVqJp#*E4@lxf@ita zQb7|-nam=1uMo%fyVvIJRpJaMsh?#A!~ce^WT+OfByPMm7<<89`$Rfmuc^vHi&0TT z2uXI6b(jvG3&N$tmZ(>h^7hv+gF4 zt3AHOGYM+HEciooP=Z@SIbwI{l_>@36?tx{{!GQ1`d-YEkFwT7Hb_s}h6xh)9x_wQ(BI01l1 z>V&0YpiQX580Et#7-|MoO;|M6%e8kXV>epJ>J~@>QWg^&amoso!N=d_+1V{E=1D-; z`7m8@RTNfFe=lDTv{zY0)Dnot8X!deo?4Qg4f>jqgU9Dj5gDoAJaldf0kb939g9;w z%f`ErFRe{Z(57wQ0$ayr!XHeR=yzwHGu0n!@CP~EMqDjQGO-BDE^>h87_y==Z2lKI z0-~r9_o)hv)BJli_6WC zRZuyVk2zX(hPV~T&y9${_Q@^IE+X0Z7*GF#&sS0m{kG`5;kVjw2C|)GAPUpw zIO{sz!d^d+ufHQjd9 z#@QN;3sWMYoo(u2|0h!Sq<*kezwWuWG@V=x5BWXG5w#v_XWDC`&7A2aT{C($I>v>i zeP9U8UnLa*y=2#fv?hWrmiAHCRjG8Gp>{EDebZTVpS|>OdD2vDRr|B*w_aCmYwRX6 z^Uu-G?Jm5~!szo;cz>vWt@$dZIX%@)d<9yHJ867F2zOAP&f!z$gX%K@r0Npo<+in- zT}vMx*_}Tsyd#o~%aVpAoCOy~{KLsDNM>EC4r+_OGfCg&ph;`e0@Q1cmYAzY+hx0k9Pfd76@5Z*p1XJdYk_W*$ZYt=D#wWMWcqBHd{ zz3le)Q5kOM@L}_A;FM(Jgtj3N2mlbAFDQ~`xge`&Tt`UV8%fnABI%D}v9pvOTk4mX0j=***UlEPL1}X?{0lrX}KR%b4Z^HftaB84^Y6iUW$yyl9oYhIO>{ZHfM)i z``GF6_x;>?{4o4&u%dr_!(s-#G#wk=6LrDYb|iwVZ3_C0?yx5& zUv@`ahP-^m^KC`E{gCTy)5U2UF*t?oCS{rEu$!}(U@dT7!$Qz3ACl>S!$V6ic?0$; zbI`FSlD{42fORiE9-)Cn)Dzz%qJOmRA&pLdfxkccf2?l!Pp`RL{P~psu}i~SC+Yuq zs09&PQ~S2c@QKrQbzVFVFA3+UWz?rn&Ia|j*M$Xt;<8`qZyOBN$P=V*yuo(Z_wN$@ z`RV=1{;`q}4McFl-T*N#knTCsJf`J2B4$x>OrE!QSd_)YDaS#x$-2tXQZzW*GYeh8 z49d5^6O}E@H}-2NA!v=ArO~9sMi+mOHXBzC+CYn*?Ol*={o7@BSRi}BP*WXKw#IS~ zAS7?WnySwA-PMjO(1`hm9TI9y1B*+hk&6me$9Fqwq`kOUa<-Zoz8|V&7+s zXTv!(T#M}?lUf+nrz}TtS*c5DLeQr`sPRxi*$aHsu;jBe{~5^Lz=hW;7l3yx+Do{VF%;PZ(fo_G4{ z-l_h27Cj!1d_zZATT@0K1{(i)GCDh5r3CcTq#jy49#8%+J0?jfWj1sT4ogXFlt>dL zJYHB6CeMOxg80_ZD+$$vfk^rA!~r=t&{;_|cqGxx0_0)QO-_sq9=UfYw2P^?C`436nxM0E8EIu9U+4q+aSGe57DoFPc8`nCEsS?+0KSPM-M z5r@t)OM##jumWC!4>ylw;Y;h1A2#&c93DUNbo~)Q!85;^ntu-4a(4Vs`);SZ|61yM z2ViX(jlK6~q5Rt!jy)-N1wJnmO+PRMzCtv%?j)CRcK!H{{kuOoOE zD4-n7>IxuS$bdF*sbFOM!(PI`1gVO35!i_6x_9n*HnzN0>6X6}QVxB;@7kMA_sR+} zI%oaKgM#o+Bpn}&W-w`J_Uu&0-V!;0oJot$RHA}5z2WE&e`#>P5o7F1uaQ0dtOQeM ztjXP43Jzc%_w-ua6{sh`dYWl}fF8GtEnt^cEBcgZ3LXW*bvTfD;bm!!aG&Z!VIU~0 z-sx%k8BwzlOzwOKhtO279J2{-qf8f0Q_%EmCLb`U@Uegeh zFCupK*~GDY$|@8Z0G^I+Ii$CJ=n)VSN`#6*nCD(9I_9h=c03_9pS48Hh8J#C*jI+* zR9}reHYP`kBF7z3^3F|dq5KHzwCv!T{HEq$p*@yD2tC$x@#2FVbUpJp(;)Kk309W7 z=wd;GFxrg0-Q@*150{yMEpX+QF?2Fl|6Sm#%-THR$)dfW4>>!c!~FsO`??F8DTR2` z4m%-|$X^??`h`ua+`YoykmsdJC!d0?%M^Ami)j`JYDU?t%Av5*$Rm*>Co0Y&9}eRC z!f^|~<529$HjDGBS)gLr6jYm3dx5!e2rE)?qI9LyYs^HuMo+T3MO1vSb=gHll6J2@ zkXW0w<3PGWH5R+GniFl$xrXAHCr{cJiuYII&Ae7lE-dAVak?2nB5n-$eb(;XY7q;% zdDq}!v;!>f3#yP6-;|RVo3`b8!%oE&+>BbRY|Y(gK4x(9a_I@vp0kzy#))vTaUG8aR@pNaif%AZ0Esqj2C-Yyz*X!C z{n*4ElyR3k{=z*N+-v5LU?{AO{c-YFRL(8*OC(@^!TaZgMgs2YU|b8Q!6A!8=0Xfc zj1YszcedmOLx~ki)F3JEXgErLnHiv*&xHF##ViIWFa&oB#o$lQ%4zCz>a-+ZftQnmoG9N-Eqd zY;Y~K9ZGc0I4R{6vuH)118a*Ae$a$lYgU(aR~bC@$_9kokal?24kM1h$0A>tOeHOH zW6vxt^l+r~NN`y@DuFUB0x4rt7o+ToBQ(k?lhPDDr$(9piO@`|=)wk%j?Wfji7a3b zX=O?CLh1TWCw7)j&E`4uN1h9S=nWc?#mLEXi|{O`NNPCz7Y-evWawWu+3f9}y)EhO z{xsT)&!Pt7RbJq)Lfq!Rc5JiY%NSx2KwqKoQ&>SNw1#E{v`eS&5!SwR1unM>Ftv15 z_#U;dE#ocsd{+Icx(AAic$DZQ9 zKuI6MJan*=&3@QBs;;DDBDaT|)vBM#^1Ar%C5=Qgsxg5;WuP1qU>_zDZLoP+SgM_| zlAKFJX`D-x+{q;Q%Y$8$TN97G>~Mif(8I^835O{ zgY5vN1)-kW+5}4}7xICp>~&^&8m*WFsu%v#Ct`YRVp2PZRzqPhI_JHri>j_}oP|Az zwyWFS>FR+3w|2TN+=ZF$VrGp+tL`Cvo6?A@yEQk;;5>B40-Qgg@yXF;g55*vEWvYf znl0S>FHnF_8RDDd(Btu-w&8og;ZSj#MG5mtga`3+|D82)xw_4L1-?t}thplJ(dHh8 z@9XZY8J1_Zxi$E<+zF(Rskq|2y*b`=D7r}8>(s=(cWco~_!@?<;b;kbU4gGF(c9oF z4qx%;T)noa*k*xJtapx+EzUB{6}Q*Ln=SxR0@mVQPTZSb7>WLk;qQB$f>iZsIR!9T zLDyG)Z^f1o}1#Ozi{=aRRWh z0<>zqG{~RRxB&HWEoZJCPQ|KD)Fox6K#$;vvij!%#4*1>XQ86j4j+s1#wZDW(M)23 z0#cwZ&~0U*sV}Jjc$qYeiogpNk{#>+Sj`w! zOSj$utyu-CaAOtf!#f$NL78_o?yiOK6=?r{C!}=p1r-SJFaRi}`?1(sX=)>W(9iGC z%Qb_&n}X&p#@fO_zPXK-uOSn)f@BuxLTnmRknLQ#eOfUnNMhhmIP*+f0N-sc%fF%0 zq%@nssDBE<)lm9jA&LR*y+onsSZt!Ow+b1%+M9diRJ*HN%EmIA&j8=B8c6e* z=r0@BLG$;o#y)5Ot+lps6NV)W--qF(GCKneiDnBY&sA9yq1|hz0IoRfaS(6Nc1)H8 zNbq1nJI%JDb%6th3kC?-KFkb+x{+7|#{O3_R$p15&+B0fLInL$B1kkZy?7%kTwYr1 z00oBj+=?4j|xDH9L5o&^?I00izIZcv-!`>P-1xHa}vTx*t#cb33w z+kOn-GQWKNtC>*9$oGH48azR|zzZZZAzh z36w)9YIGzb(&?9Ax)Cxj}k{uG#j zRnu~{G8bmaXck$dZV}XlYJIL+&x84rG7fFj2Iq=s3YbPosnjfR()EC$8LGl^rO948 zAqOPz8ngBVAhafzQ?BEbH3C-)c?QbNPRXP^2AK-9yZKF-WL#^CW)Sy=qh|47xW-L; zZ^8zGT_zjTP3@X#RC-PTm7~oiXw_!A2L;zc4N3y}vh~v>G6RdvP7i>Rv(jzKR)Le} z!Hi-sMGM=ETD3rq(`Lw54jJVM^d0Ch(3Gw3)UQYsw(Y{Ek#(y- zsjfK8lxAH{`$#jY$)V7Tz%A;YSMYh@JU)Z_*|U#5kFh6Z&lBt!X3rz=q=N&R2KG}C ztrnA}w=L|(fAn;=zAAp;WdP))3=;e`YErA#UBQ)tBN-ewP-%9`^(6>2fhEy3Z&N*$Vz#fm2$VV ztmSf}RMB#It(4nxd7~J7SV*>qgRkBP5X`Ywo>-oU1WwgQtJgk)zoqx4k?;K8nYgHL zEV*5t*7CSvfjp@^nYCpk>o91WB{l|d8v}R=0dPej0q|!8SS<$L!S|zL;7xpg9~1?A z%VOXFzBh@1J@{TO2L3Azy9cQu6h!87i+c~b^+BdWDVrnOf=GF_(kv1}#tZF1%A+rW z1aC8z>(vIrV&FxP?pHxP0T8{_X*!|AR*O$jkc(pAFiazur+!I~&f>^ZoE-OIqslJ&ey^VB=T?F`aCzaQ(9P zB?t~O0Wlx?R}A9nz?gATxv|M|#%K~@w4hwl9lDw+JdCX(K!U6S9L; z@s78o1$y1scJXyi4I#8-eXj7($=H}i^cj(2m=yRJK6maIX|J0eLKV69EnLfwtrMRb zVgvpWE)vHc5x2j_;=e8aXaTBPu}7sJD6#KJbCuZl#o!B&Ho&TH(a{!gQRkt=XyCHt zGIGZV&h*Y=R4&B8EtfS-&z3Kl*N`9*-Wt^u74%QlG}I|q6 z&dLOCW@HQE79}{0lSS_+bq`W1ITOv$3&!lW0UQ%S4Yp#^;r^sPazRomqZlXkwRx}2=HKLxynu5cohHz4j7ASPR7}y(UZk@E5cXX^DH+V)l#SOkc z+PDNW>;Q^*pTy)8+c|}eHP>t&Lk?3ECV>Z;9J-n`NM~ldY?{fC4#^kw=|p2fB^cgn z!er?t!W#bE{cews_J9qcMCL1(?CSH3Kw{+mEhZ!D&DQLt(E}mZ#lnut1Y#)nSY~w( zW7LOm-_zD4$onKt&Bv=Dx{{icwsA7t#a5U6xl(vOQ0QdXX8 zXOU9Aw&&SVJgWQYSN+&In47DW_eAp)roCxEc5DRP2~6Gqu-b&;wmFHbgt+D>AfD(? z;EM8slO||;@Pi7dB)r7pY6+Wg+l;MjRz?>P5_+2T4H9+RiQW&Py?;lO)deD{jyKfX z-dsW7k7`<1`;Li)PHxf-PHr*$y##+>!CxHy?z+**t%EfG1C7hkDt!cGrwy&Ikn0x- zt2ALm`JMiJP>dflp%LNe6a%>Pw+ppfwP*)CL#;TUMCW%nc}@|u4rgkHx=HA87H}QT zIT;mXR%;aq_Gh$IX1ZHr(IN2KZ48hi6wVju&l&2<9HMuUwMhnDjp-l4jB4l=;u z%_(HK)78!RaRuT-qp1m-%}c7gLuRIIs|F<%5y}tkU>Myv1|wyaz_qL@Xi1`^tSaV` zIE^#D>p0YON&{oG6!UL>K58QDOL?T53u;@wOI$rf06jtSDwl?(nl>YFz`eT#IkQH~ zaq3H0B}DEf9k@^Q$&AP+CgTEqTMROCstE?Ol5czg%#u*0*-ZmC>d1=$^k35|1*p1Q zarN-_=I+fuwVfjuv4kR4fC>T;o_{QF-YM%rud6JxK?1@?OW2zvz&v)4;u_WCbm&0jpl7@D~FP&MDl zYBGRiOxU9#RKUpHab2tGWJpcoxo{^#7D*RGFnnn_%W=hrBWJXn2hcTxAr8am*1cEE zFt~z0g;w7N!_kN(XgN!|*=lJO4sdlGxjX(Ta<{%-T7;cOZ_G{X&D3e#kUbl-*Y*A` zx!?hv3+5;P<{9WtX+oKD>87TyLRFtDm&R?(_Gc}JKIh*&KOQ?jwE~$wyVh}JYIt@; z2@7@Y^o7Z6>BzL-X)WX0A+DWvzsG1WqiD$plznThn#*U;*m59567 z*s(^g*vYNdiV}V{7IkfbB?Nzk-5#%xjrOgsxb07F^%1JcG2)6Rs7rOlLax5ms7V2Z zRrjq{v+%RFp`m^S`M9oT)En&BvBX9|uD-soUa%Emxjtg*aA_dc`kBW3xCOZ?i!9}h z$8F|f`m0X>@1I=%yu+$K`n+x$P z$dV_mp^7Ihs;dt;-W3aWNmlY64cy9cP^lpp-t64En7Cr(4Ad&W)zS>Yy8yX+EDF~p zQ1CJo?xYhL3jKNu+W~QGakLA1cbom;_22E5Z%|6Nv%TK@MtoCcX3`l0HO)i)bLPvRbf zLyt6qXdr#KVD$#+Y#3S5heB}qm+gePQn4i5G5?3lYQLteL`f@joDivbc9&WD2TO~5 zqclsRz&W;2)SyJmKU(4ey+pscaTCtSr_tP&h2VfBE2RM#MWbBq=jmiVu}R>ici3>P z(ba=4dtNtPj=_<2_Dr_U-owdv08Y^i$eC)y)pRd(VUctLit$yt#FSXC=xR zdTa>os#^Lph;8><8lOdMTyb2QSL=HG2KvufkXje_8ynQ-ZbvElk~I6sVC0h&<}_mL zu;)q@gd1?06-ji{H%b#uHb%|WqiEL6a~T-nO}b}91ysvov;`)51vd+H-;+Gk;^@C# z>jYz9SQ+RYDI@zp9$Z5tm1c6J?+hfa@9wl@p1bs&<0<8ezONj9dt&O@yfZMw>6zy|czofwFh!MN<0D~YIiR(Pwcv&Bb|KixzoPo~3a&dbF*x~i%xG-Mw^%5)Yi%bvkUsu7G zTFmqfZNAc(OPgmV6b^HxGF-6v6lfC-_3cUlgGBw}E24SGG^7siL5zcu1jS~8vV}KD zSw8KwkDdTxP_6^w>JYXKH|BuucAh~tuwB7)gp`eL?eu8+C-o~vv<+>+pAb0dngfj2 zjbroRB^;Z@FgUhz_G!o}axQ%ZraS+1nv$E`)^UG?y#o{xTEGytPnUSo8U3C=m!{+1 z2Z=d`WRXUI4mvqATZ@j?_%moNr!$Xzx;&3{hL1}5dPm5Ud~}%Yn~;%Qz;V$`bzwBk zM?V@GvyGNyhrh*e5Hjf8MBgVguaMp}Wg#a|aMM{jm4aR|j#m5?cX)0e@s@&C16^@+ zb&O5hHqCK-!_EHg<+f9UUpZXnsbQx)gANTQ@$un5stlr*WwnKS-$9H1H`QkHl`0F4 zLD^^(VUQ!Uk+% zU6120(l|)=d8p|eQ|%mokstEUJW}HGJy=iO2FT+tG;dr`Z zjkpzJwl22dBOf30@!`aW8y~Ciu`cvFuF>2rpCC{YOy#a4)?|4HRU-(9io32L%8>VrWK$i6fPf0GL%Tjm<6b)OLG{;DF|Hc2n zt^S(_|Dtq4!F?DF824dxAB-zmW-%TqJaNCDtD#$1SvV94bbto(kp@-`KmtrHYs9&c zPFD}Jw`SvJ97niPm~g{VM(H$s8ExVAgz~RE(!-7H!1d5?K@mwuj9gpT1B$!q>IXbM zzgSL=6ydoX_w&Dau<)cbqvm;ASo}9kt)uF)3u<*Ab2o>mWsoPfV$cIOD z!JI>3z=7J^rO9pFo$b;De@cVB*(^SZJL|2c$_~?=m89BAB95byvv{&p0=5eD)-p2) zhPdPM`p4QVtrIJq#kn$d*U$?f_S=AoOKy=YB`YQKVn?%iy_cO3VcA@{P|^6P9>1_n zXw7C>`*ioC>)V7ok4iIJF5N8UGKjnm)6JC$Xv-)xhBu6Zacj+`jnEeVtlsI+53SS3 zdKfYP8v*@qJ^_Xi_o8Ok-?q#ec)&1Cp3e5x#{*#y6+LgzlV-Ndg1s7K!|MEd9yorU zZM%bh!}?u0Y^l2{!OzicSI2WBZg0riA1`7C-&Ka)u9s)Qe312PeCF)N=d>5`S@Z%v zOMd~+HQRHJuvgY=>^1FK_DX%4z2@v-ubZ~R>laU@hG(I<&Fy-Hz4=}H;T-~t@-T*j z-7ryfrgHF&CfiO--1W-LGOjaqH$2nPPD}muOiWFfoGLTmb_Uqz`4PKqS8OKwDAV5n z``4l?2byq=Z!_l>G~kp{1mK`c43r>DWBRogTvz)|FGBmJSqkN)Nea!9%vFq`_VakC zW&e2g}fQX$0I~$9%YOF~lac)<7yUzSGg!)ZZ5T0zf;07?B?cOE-s}|MD`@-w|=I(Q#zs z#KMTv9eO$o)BXAP)8coS5GrpomIuP}8R*Lm=1?#WS)evI)Qo^`=D6_~Xi>Iv9*Bon zkk`JEWFKVm&LmP7ebQMo*MV>U+QL&RtKt(K^9piQxpdF3r$CrwkfuH~djWMd=fqk=!5e(!x$IXdV^eW(s((Tjtq;(;g!5LNDR z6fxJn+rgNa0!GL>UGW!nok&Xa(jQ(#ts8;V#f^kPLpA_iJGu}^@tA1zM?~&{3ic0- z=o=t#JTN>caisUabeMLm0H|+xSf1XQil5kTTFxdYsJJdJxe}r!TA~bJk;jh(kpLum zP8p7)t6v{+@}r5-!3~090*)b~Y^1ta$;A6fAFs%-#&4OcC&W721AKEYB-skaD z2c9CZ?|*hO`d9rJYX++%JiinVd^UZ$O`}(ElVY6#UEX@x_iEhc+SdsTyqWbJ*t&Qg z#6^Js8DC(O4bPb%uZ7C<&>A}h6`r~a*PLce>_-aS;0LZhdT`H?~!xuk>7T??UwTfG+E9 zYk3+Hg$l(?XaSX#EuaRTgmKec-Jl68&D}f{(9}yh0kzI@w3ImdZO|_L zCbirgDz}8xUqCqzt|7OUtx@NfIi2^&7s*BX9`5(<15#*NVw}c19gz(KQ1%wwFj#;a zALY|u9mWOT#4*(cShU9Ah!Ke3-2uj;vo# zd51B9wQ&_PLC5EiTHUSDr_zuSz-po>lu1J)j5n2W0S*+)a$XGha2W6;6n)}L%~QPqJS*zw11-kCY3$y4l;jtET|9 z7SME+SZcFn4OvodS)-a=Cm`Axr7Wcs37|QvZAorkYisKyOz71UkQHw+ zi)o)|jAKX8p1?SH1o8jCj!>szoJV^v$<4UU7M%~se*QOP<>(x=2=liM>A5^q!d%pF z0o7()wvF<*91c`Qw?JIGQu=Zs^UC#KpVvHZhE~%b$D=qd+ffm%d+GH4O@H zBu~DKPUh`Wy**cckUY6x4^4s)SSv$c0D5~d7yWq|bFh8#m8$^W9|b640NP$Gj~*J0 z-}eQx&YleG87m;8lRSACLN_6ay6Hay0D1Bld^6R&u+vQy7Ih*Kl38JxpZdRGx=rZd z+ejg4rLB3;h)MQm5i1$&>8YUJXm`+ZR%d97yVE70W5Twru^m7a(m0X^C}aW(Fc#Ah z$leeK9c(c_8l8sGpt)<+g52q)F(CKah7rFh=*S`@IUjJdPkWdA5Sxqoni~WA#|B;* z8wigELJcEmJ+7mbPK=2(+_QNjzMXzPc5bqq)M3arh2K1Ik$1OIORP%MW6C&k@rbwJs2`L z*S4UTY3K#Un8(iK>2q!6I?&U$z+9V0b1-_{+Qfu=<&-|*Hud6!Yo<^1B{)7*xt5fo zmpy%yty=e7#cvS+ZDw*w?nx{vX+;5mCPghMQ{II(%-q>BRd+v|Pp-S^OSoDQb_$8nA7j=NtcRC2;>@)QYUwrMQh%%SJob z&w1&ekbP>koTsrnm-3owil%#MJQx+=GL!as)rye@1hbr{YQ9V?p zhYskWm8Ce881ZY2fbQzPkerjZG=j94;v1s}Yx<<;qg&~iKKJRP^zRq+IOf=}Wi8~L z?V}ejqpLGxbji9+V?xEOEaGG+M2n3nWIBhwLf2!t)b+8ZAqTMG+Yn`=2H$4tk0wX( zn*{psTWmEE1#Ug=LKPu3Hikc9GPm&+eD5;PK~8Pl%>ouZ@B#~1SwJa82*`^JwF?3!(PcK_vdZYMd)ea8BaN*!NZPD` z(ji8wyOLs|DoNd^KOUj(1y@sd#!!;Fry_NKI&>{{_Yl!7xth}F z-hh(pgiyJG>0ld0;-dQLC2=3WJSwYoLZn#`&?o?b$M)OZ^xr2Wmbk~axdeYot1H%8 zcd5g58PBZRx?1aE9j;4U8In^mkLVvu$rw_Vqr@6m&%b8_y!2I zF8(X#4nL2sZBIDQOJ=&NJ?S`~g{ww_ML&!HTNtV`sM%y` zZei?h$B?>|-!jdIr`~9Ze)a^+yJ)p?Bp+(Ut(M0~wHX~UrlLc}L=sWDXONST%ew3J zGgqC)=JO@1KgHvzp=}^`XCDH>LXw#SwYF6YtwMAnNK{|QC9vw=yfImwy*VzWC;BNW zB*(O2MSZf5Yrx(VaIb^;%{cO|w4yLb$Mr!)o7D6LJVa$9G}CXS?>pHRm_ZCI&?CB> zdXE72Z6A-OLtrWzoI_}Yh=DSkXx4!M`=b@K4$tfPK*2t`qd0keL6&}|{Ou3edM3Lu z<)D2Io&)DPQcJHZLu=ZqOOWdtmqR&?Ln$bRmX4GlCSBuq=w$#$WOJMoa4gwS?4|Fc z!~7QxV~5}P>VmmtT;l^!Na2whH}&4Z*7Bf;akc>+jcUD!Xo_v1(G74OA6<9*HK^X8 z!w^?oTkxmt&`|(%@3laDqCJ*;1J^hgO7hX-h5AXs+x-0r50^8J52ONRNRwvxImRgq zu3&lE?Q{+xUF+6v_h>oK;^c%&qR`d#i}b#iav)HXI2JP_(eLuaM(lEW0|;w_Q~i z5zw!3cUI}(z4SGfz)*4twYY|xSOxa_c~DV1yAeY#eMa|>V zk&l-w;57XZbU)p3MBf9zx?;n+ZglOYQ!@az)9)WiF7+eqJ^(;pq`@<_RcI%8_jmU@ zxr6xdk(i@ny-3m$C-pjc$8ghEOvZZmQ-q@b3zW~Mh4wk~*eG}OGjGsZ=mc$U69s@{ z$uszg6I2F?$J2GBti%}ER?JRMeQ7(DI6qaDD?WXQ9IE?$Z=%7V7JRWi6nL>GN9{Wx=9?Z#T95}C{;G2Yaig$ z`x%P>LHYrkuvV$nF_Pf5pZ9eC>eeN!_!NjN`{}raCYfWFq{VAHq@v#to94q=~{Km>S!7^vPL^iT(MfU zauv)-D;kpX5W3A3LwD~g!G{wc6?4nR+-gCxu(Q2(H!q3gtM3e$jk2JG&5n+y3($09 zwNUSftWU+{6l5E%2+N@Ff5ohe{6;qtL*@G;{t9Pc)>DQuw=R)#NV`9!wlE^ifhnlgzLjdlI6-rrkDjAj`q+Vm zF%}(`GDF+A+M_M&u8mHHo+Zs^&}&D+J+%k^f&`qq50j zlnaQ{TAH8w)5%g!=}dfOm(IdhS}Esz4v*fJGu0jMA!t0<;7shzv9(B?KkRJ162ZXM zB1JDG=D~yC0yC-2RFc0@z)dSK?g~m~$?3K(u(zPGm&CncpuLZDYz>u_(bE8$R@r6> zgypZ9`I}q_O{Kk`X_}W5;b~c@5U+AU>VE;oxujGwEcVg>dM)DxVl4Y-etxl!&OD3U zQd_H*=Hl&Znsihz!4tj9OFii2cBZ^#VQH;&tKZ`n@ggq#zpAnF=!?iebMTW>t_Q>J#gWz8S`a3{_E2M{g>?K-S@RTI9nOals zQkR+Ari**q-Iet95A_b6przq)QxNUd<~Eb&GPfEkp#rEba89~SX^wO9uUdxkrPP+8 zborN165nx`#v!dj%fvu0pn+p2@g?c9sWN(TY4jtOfQz{77;QS<1B3`#G=uG2xveXj zQd!oraHVt!vAu2}VgOALcf8G^N<&NWESPTkqFJ`E?Hn`%Z|`%(Pxc18r15vN%2QU} z1r6$wzrwb_7)r|+jsl=?Z%MkeICxGf6%U5p06d$%->o+?tIY(>(;KIyjkYwJMfW8@ zjF13H%gmL%Ui5W1C8c$waM)v*!P1+}*h;8hfv`$Grx`}}zs&3g8T+&Zbw5Huk7f2i zBk-Bm(>iS}bCW@9U?&p2S~M317jHR%wiV~fMpcfJWpUJ`J)Tf=Kg~dwVHf%@mO`zI z*55;_`@z&&e;0{GK1~Vnq9f9DyPFog%k*EzMd^k_cH^+miv@IDNfuDG3$OH2i|~3c zFj>*nanw&?=Q=F8H)0FJcXT}lQE~;=kchn ze(hb=6@y;6#ZB*dhiScdBh5??nEx@*%liQe*EUc>#%b-l2mx9_UEHVT{2Hy2_UK9_ zmLl=cfG4z^-E3jgaZwDQ2U78LDFgjChVU^^*x__TUG$^38RG-GX0Mj>BIIC>Nl>5H zNB={&dJ_rg7@F)hWH6Wi803U z_+DT7iSv(t#G8>Fol;h?T}mH3u?rm?qN}_(j#|z!tW%ELQX&I{*qmWobc~T-Un%5S4br;kWwOv z>!TzZ0A5F zwm2@zR>#l=i+)2*ikb`5%q&b6HY$RK&NkZC4O8jEC(y%bbocL>l}Ifoa6oQk%gyjfIDO+? z-?V3B2)S-^3~ii8KR%8wNF%j>Pp=)|#lT~lE(2DryVCnzbWt+t*qb^TLo=8;V_+uZ z{&BUr#^dw)4WVjljYq9BYwLI|2bmQzTJ3daF<7skEpQx_4ycCct4XQwPht=cEg-+) zF%`#<_+$gTu~{d7$C}l9U(yx*8rP)F>{1ZxD6=H)F8YtX%y&w-%2R3%9wPm_4pPiq zel>9q(J?Pxx0)H2=fWUc;Mc!0On-x z$#W+^J9#FvOYR@MNcsTE3J?_qmcdVqC!4Yz0Jl+S5*+}$A$@5fBussvz-l`OUjlrY z2j3q&qrA_NH^^yn7VD`$WZ{%KEqGLb-G}P+L0yQM6|W>+cE7u(rt#%RN6uv=Zx)5( zR;zOu2UHZy2lES{=h-Hcb!KIF80^mn3Kl4rhe7E5ZNtr>1sg&ue{Ug~YL!`eoaf|Y z%!`4P3pC|cj$^m1V!#T4=*z30Vr-@y&TT-4T;#_x9=8FR3!r3U_efR=wj*@>9u0c9 zF;`m$^kC7}S?NOEeX)+gKr_^o{m8lP%h)ZJH)ub|(|(Yv{a`N5NdSUIxXkPGkk4>l zx1GWTJMH8O=Dq(J`HDpR2HG$m1rVfmLAs`W!Zuxfc#BM<&+p`F=+A06j@kLk$l3zo z{ueAERL|wWE*Z3Vp%+Ga}pQo$ePV7B+=|h=UySXOURBm_^ zHxhZ;aC&rq4hm6*yTu>k>Vd~cN>?)vGZgjck~|alwx-kXN0Td82lgWU?L^@Zv!a|G z9FTaB1?bi1j^^Q!uS`%W6TZL`K|eKA>VCPSX9C_se+l_!zq#I?%DicFkg)ISPiX6a zQ19c2^=C)%L=XLly&6dSim25~ry>|Vest91xt$JqKgl%9?2tWyz<-eX81 zGTwS<_D~~k8};tP!(qDHuo(QQK|ht)!@8jjmri*)>9oFU=ApMUw|Q4L`uF}TssMVA z-;J7aZdy_^PDLN;A}{?kUGI6A^{yx7@hUKYQ%DD1`_)751Uc`apWuF;s~d8gQy6jL zjYm~5vzcrIm8xtW@nXhR!BO{Pz0CY;%lu?Ehh8S#^mYBbTXMv2X3A+dC*L||2(VDk z=+TU~*;&5mc<3DHG-!0yNk$gUJz$pvUq|&@_jaD=r7!-CjgA;Rg*W23-vGO|xm#X4 zdZ1&d3p>mdZNR)Zlh8sPNNUsvD*6M4$u|)I3*MU`gauye&?}N=z-VlE(@P66O#jj~ zI^Oi*H*jU}7)15r(Fn*tksjuT>5QIAEZd<5>o~e$uD{!MYB@TcTh`}M z6~Gc#w_(wATvu}DFB5-LZ2#n>|6_v?{ry>N224%GNI6I-gX&(0iY>e30pzejgHu)Fgu_p zb(sa{Y9ARcd<-Ze9{Exv#~%H{m^lgS&WqoE}!{NU-C zEB99nr^~Yeftiz|d7*o{M^b*VAN^V&(S(V$JgGAik3d%Nq&jY_?pGh=(WHXs{etQd z04>}p8B=RrO!>&5*7b|Qr_lFBjzLUhi1#l7n!LB(@xg`^@`15Brssm}j&~vEUB~-U zJ>D<(1K#liL3SKuI1lBopG1zH{$lXmnG)c;#K_At5vg0FQ$qK4v-nqZY%z)9`vabp zB9OazyrPhmNbVNYr2=$v)QARVb3d3^j`tIrMb&*F^GQ+*&;ss10rXOM3h;C+735WI z&?&9e;&7xDKClz#v^0yHoK4i2l_E)6mMsHw17UhZ zg#rxkbkNG;s!6Sw9|yHc6U5*}oG&*s?OR`9B3Ya9;BL`txJ`@4fg&G@#wzn4QFrjv zfQ7=+S(ZfE>284qiPNGdDlfJk=91+?>~K}N{#j*dd90k1)0I{HFpE((37Y%}@-0k{ z@3JVEC9gi>l^}CW12QK$NbiM5LQBS7s0meBYuxnnLZ)2eDSQU%NJZEUyz*Va%D7{f z#LhAcyD(lYMHJck_OEj zs7_u93-`$Vex3|5qbu^MXnf4vh$EUn27Nbhu?G(ignq`Y10k?1?zp_MoV-zZJko0p zEw+>?RWVIzy@2PRLObH{QZ4ZQ5~Qay-iJXq-`PUp0|Tj8&)xD-u&qHyPDRg?(0yjL zidV~o&^_=WsAase`d=%UyUJ_-iuBS}S>ASJI1&is34x{MvN3%V&qxed^0UEHGu;Ad zAA3%~tV=UAJuE)l;drmG1|-^~$Y&yX;~I(9PwtDuGuD>b>#MN?RO8Dl*J3h1mlllwsDS`Tvh&eUt-VMS+~B0 z-O6P0((W;dkBxNe(lOoYvZzM2A~(*C5RMYKbte-5)dGklV=77*B{E6*un#6^pia-- zK!aXibEfi^cKQpYI;KUlfb5hvG~2-G&v2T~Vsh^+=mj30IA$-4%^uEtPtH)|Y-c@0Ht(pIU5)r0mv3N>PkP5y zRSRR$=Qn`d>{=Y`0=Wqw4_x9& zMj_}uUnR%^*nJC9gkw+)Fgx%b-f@p0uLNFV)YyC-IgX4H4{a_6np5j8%wE}Ap~By= zDBDQ&1(^6}W=7`$_vm2T*_5b5&zw9gLJm0-H%zK8%)FORC<-yCM(eA^9g1 z3}PU})P^Kw-Xo|0P=f$!jgY{rUZ>2=;RsMA5@+-5mgY=O&SazqT=QkRV+@hT(>J$P zpwa*!S)&A+{y6Gfq1Rdy1j>}6(_f_D0fH>pC1t7^>XLED^dJl6KI2K`YlylH*t(x& zhaNMi3xi$q6vs52XQ8`6*JApBoTkjdDE%Jz&|Ul}kux7_n0u9@8rUg$wC13uu``;9 zyEe`qV0v?Ad-Se>O0y!};iX3o;Wot?dU!6ngxvQU9#oEApST03ITcC*Vy?`CX*UDZ z^$6MyTk_N`W;S`S!-6N!ptBuBm;4^wL&kf;VW6K0!-PDIzI7nEcc&i~_39|#c7hqN zS(MCJ7?`}bLkaC(n)!lm&w1Id_gLGQ9XNT1UDa9p!iZVCzh??GtoX*UN0o@n?6nQ3 z!37`V?HuEV6F;-D^o4dk>nJvE3|?&PXgZ zl(@*nr2oEwv9oP?LCU!kL+YNnP<-q2*Tb`ACn`oo~++B4WI9PrdxG^=YbiCX`mvFZxI7K@L&VMrFZ9A zTbI4c8VcqC2IA8ZH!*1o($rA?$9Pt)J8>vw6~F@=i zFKAuX-&*}O-mc?M!CRK1_lgH2Zu;H@-EzE>gs{%SqsD3r$ZE$C@yVA^)k+Bkogd>J zXS8Il{_7{P#EpC98bc&H)o<|VKw#RBfeG>Y7O_7yRNY_WH-th6Q{&e5V6zgr^;JaO z0bwO%@N*&7TDKQ*BtdKx;h_6;$06*v8}JT2mYIZ*kc<)go)XqwNL=Ff9K37p0JfhK z19+Nrq)fnJOragF{;aDCK7n`S9Y9EfxcxW;v>=wRv2xiuZ;3(TOH$;S;y#K<&LKFkTg`!yCv=ga{!c#VT~k{E2ndRU<;2|T46{8`K0Dodxag0a93 zhDR~OV?Mj#!(wOkiBDVtgSz*6^nK56o1nwAJ|He2*=mJY+?#Dg`a%)_QU>~b9f?)v zLN*XUaY5XPNl;fcP*=VYf1*UEBoe}CQEgdoC(o2HjPThuzO3bP zhHTOC>)^7S`p~vo5+Bqa8x{cjLs#aqj49*7aHR7r&D3orzBo$REyKOjnT|7wr|fr-o9@czS+J94N1}-)4oO6 zKK#u^)}YM@^38@IpH^Mcw0dkyiQX1ygkcYU7~f(|$=2Io>@YBX(Vx%)V~5^?-5~aw zUPsr##%1`EbD_Q{@M|c9sn2KegV@I8?UM-|bCqchNuW#hEC&D8ao4aq%{KYl4WF zymv~X&Py%DQ<&{sK$}?pJk0-3@TugpU3xQNh!ip+YFNSUh^nV&o@XcMERB6QT?h8E zEo9tvn@ShzdFkvCbdts^Oyr#-8*npe4kB4hhxR1l68Ass(VcO+*smak^4Jy}>C^8% zBbnmCCAad*hX(0&H?Bm+>E2iL#+=X_ zQ*w1WVDdEwD-}DpCeNJp-RnOD@b`&c9*a*L)>c_sK}Vc%YFEBOVIAZ zua=UIv73M+y64DcOv|*f*YShhg+2+Ow&9Q0;C7}3e~tqt{N7JNt|aegm`-2%{Z+e{ zH~&6)J3|=d5ai`sr$@WkmgtZ?y>&X3uFi1fce*BpKhDPXJ1@|S|B~466yzM>H=l-X z@VhefABMr7%~G1J8d~8Uve+iJ3eLrM9+hU?BVUY883_vaNU2)2RsI4|Ft+A89jC=0 zZUGk0z}wNS2DvD-iMf0aH%$+@F1U#+F7D;r^u)o0>#m?x$L(@_{a^71aN@hcIB)0l zs^tgqr>A0u4R?k%n}*e9E0i%)FT={p*gmEVt6jE287?z9URZ6#^Xh!-j40o_(xesF z#qcmdKW?7--OJf;-arR=es|T5?D^j&c4S9^Nk?=wIa2tRaw%nVb!bxph3R8aNdG1Z z&zE_lUfcu!%04ZC7ErOrgTDEVt3Pwd}bZrYrAD##Rz%u63GFnG+3}<;f_-j_Y#}hT_h#;T`8^`8-)fMyVN3qD8yM#rkUgsX-MrBZ%A+wZ%8=bF(5oQY%X$`=FYnCM3@1L#Z~ zH@YyNZTCT+Lkr#}MU-_Y^tL@FdL`}{lK$M8 z#(Jfb^$MQ2xu#cQ_?y81_zE=EI`qThcj$9!yb`>(E%w+%$+K<9*9(288Q4?9P` zKtnU|jH)X40oH>bOdXgF*=Yz53`VCUyK>aaLCc}c{sCH&(y=d}{Vgsdx%vPzv)z@8 zPOw21)e(B68~wmhgP=cqX5^B|(Mx51{0#ai&4o`*E@0SPRU4g)S8^TB|9f5%H8rD* zzOxlrPv`ba(9Ap0@yIq%>1Dj`)pBAmX0<6rYA|K=w77k^)DOUX8^Pt&$;Trie*PtEuy@4CCcF~(oTc;-@Q_X1Le^qc|Oj+5$vv#>UV`r|CZ`mCM=h83meLMY>1@q}&*t>wf$KG@4arT}^JK1|aeVx4*(0%NkM}NcK z#q{6VyM+GozY#;Hw!ulCW>FP%J9}5r0DCW?o7vkF!IZAj-OO?a3EzknMTd0 zCQXx=Uu~17>22aCX%Y|%{^}>1ghZQQ!c7hxnqVb>3E{l8_C7Prpjhu~?(Kc|b#S@Q z+26H4XYaN4UVAN}_c!>6a^}Kc$sAi-J{wf}Ip&Gd)p_(8 zl*v{;Rjm(NCZ)NX=AzXHEthA3N%a{dwyWlz7V8&MlNKNW~U#S-o^P@me`2%&o~5?5&L?~><@fLlM<3X=FW z{P0L;AyX$0MGb_9WSW&0$u!R^qbk1Q8(_X%<-eZ`vtj`0 ze3MifeyZL|748kF)TLi~EA_sYaz4gqYV~Ky;~7HsBF!5LMDBd3*CeQyXPoal^N=#MjeCz5W9u7tOsGH8>a3SF_8cM-XAyOB=qt$POXwg-bfM=E z5|Zo-1v~^`{wKk=3G@FW@4S(8s`@pegCS}oNCqT-1eE{eI`vuH?+&0pDCPIRQB60zbHmM*0$5Y z?BJW<#879u(yn&4DilY=sG8m#21bl>cVRfVo6uFkf3pFW15Cx{4XI0&)h>|LrOF}S z+68iFlfv0dazEkA9mb_EE{P>`Hp!jMa*XxT01h+`3|z#pS%#st{&}1S=LkSOzyW~Q z0QLer3$S}9T7my*n=9qvHgE-S1#mmS?EtqE+)i-2!0iIJ7u;TO`@rpUE0Mop6rGA* zsW4u|O7{V%b{Uw+T_}eP?Rd0t2V&^|OlvRs;CJcYBG4S(xNi2&K0Ml%Iw5MH6T-f~ z{9+%J>v#mq?fD2=I_42lUvHmWp?wmKeNw%P^a)1Z@hChW0B8lMOI1ugQ@cRn{ED>R z*QE9S-7jmzO^P$nS6@L)(hIeIF?aaIgGd8?_Lai<53pfWGtl{%>r)%|(4D7%oNMMr3PI0%w`%xi{zK2bK^BmIP zr-&&4$u>6KNOGsdC>^@*Q3ZHr9}3Ud!V6mIu6bL9G4blh~|PMX2kK^Z(lGjJXg`9q!+W}#dg zxRDnbAV>WxLi%Z4#tW{@R?m3h=pNs8-kCjgJMRL~;N{)%B3f3B7x>IpVb*ifrq^$@ zzD+M`YmZ3V2nV0XCEuiSCE-p&m~)|8)tnT8L7tKDqI4&PLlAi3jLj#hoE9bHlKJgM zWn~NUgY=G@GjRtwNNv&7{FFg~qAt8C_LL;;sHwhfK*dJaWujsO+3au`UMF010P3WS zYD53$F&ps%pmeC`Y2x{)8&+k~qP|s6{GLZ?zAY#)$JDjiR zbAB}pRp%*q&UeO);_WCetIhC5?Vywa*9Q4EzDVxG$_263cN#s| zOhtFl4xmeAS**$yDx7^AC1ihnm}oFj*~SR3z+(=L0$eLS8T+rWQNbzQMx{$K66Uj1 zK`cb^hCZ8_nggPyGtiL6udBRo#CXPlEe#t(O<9a)7=!DLHezW5O>11kc!fG%Ov9SyPqJIgoUh|879|zDSfcK|6SxNLRw$!5#i<D_vWH3RQ1;H?FbO>l0BnklludNyk2hTGk< zH}LA;yB0;M@!G653cc+aEbluMCF;urge}66vJS+IzKFx1)!xbO7a{I9A{5yE_ zYOj);uvf+f3?a|3C)$Cgu1bG?dPT6mFUT15RcZ zUjAOX+;k%F_XF@NTf&CsR~~(O2!3VnF9>b?!qb#rnSt&B@M{B5J$-}x3g-Uz`4xi0 zko=022M^9BfO3FBfHeTi0n7ktPybN-3KqtTSm{>)4gj2Z`oDu;iFww?ue3fhB)>BI z8PX>hc}EI77Xs{f=I`(;82iTf6_W3NieHiPZUY=T0J;GB0F>aZ1_%eZ<=G#KU!iSe zfdA6~mID+&`vdVSzRj`hEa7dXWC6vzhj0Y_K%I3vaMw@94R`j-xyWuqii{ltq{S|j zPm=Myf=fvauCb9>LZy-(F{>_;Bj!-banPfLEa4-R&bf-=$Y}yH9Tf_wvjxlJc>fH@ zBto%K%@0Url|Ak!6maX~l;s%lxc>qAPp{@Un8yjj@Wo?+3`6N-H!Ktor3~aHMj(Z7 zT+%k=(Fpuw*E=Nde@x;RNV5zyG@q*8>trYGRk7o7Yx(!PMX{{!Jx7n>Mghz-yDQlk{j`#54t$4zs!z~&(*TpxJjrz8}Hf%#U3qisbcGq zLMN`DxhlWN-{75LHE_BwX%PkhM(~Sem8=BYEER2_|?M({ufjVFJJPFWrro zua8Wq?>Rm72!D7Q(whp6pNuUa&D4SU|22MJmyAa*t$Hb4BIyzMTV_g936p7Mu;mi7*=!7 z7~zRsK7M)6F0WvZ&%hMjVAUVb%HFaS@LavSsd5HY?2G0W?P|AUyiGKEWuCA&(MTTi5%R&)_uVFQqos!73h-ROL3w1xEcX7$pAr#dE zzxdshcXd^^I7NfTjaNeW*>7XEcz%X=9&n#XNqmBcV!2L@6NTftQ=x5FI=8AAE*>!K z#LQ#QCqq*ZzsP~MAe#VKaF8qaf=2Z;maUbWg8s}r<@ljH(c~~SW}8hDa#g` zzNgKqyw>8;@G#!99xn7eCJq=dP!B8x)H-aTQj5Y7D%8~}j_#w9UBt*&Cq&5CpC7Jvr>?8%TcK)PG`8?b06_C^4x`H<2fApz|`VQ*CI@Rn`mT7)%R>& zQPoe*t~1;zbEUKEI|O3G@GuY*anjlK?b*O+UVx-{B&`z9@~FfEc-nRpY&8p;Q1l<7 z`^%)DOj~7Jd}SNk;#ST@afCLZ^nS8ykcCQ-{j&pPxAD0r^q;a5v7pEdjDZqaboGPa zHLl!N;ISs+YkcK7E*$9yUo3(TJ1@&76Z#&Oh76z+4N=Skk@U@Yp}bZ2;|}uOw0efa zh!oi%-gMd}L-aPDC$bK$Zfm{oX!~sz`z&BRP@%A!M$s_g=D;zJ!~aB*$ELYzksHuGW4goIXxda8?-J{o3|y}Ak3svfCr?` zY=dtg+Sq1ZnocZz(Goo4ea*(70Y>2Ri#*_~Aeo}3J*;9E*(D-Nc__UZp}7<&VyLBR zk8-t|>i3Bp6QOUq?4pQ5L9>K~e4r5InL4j>5+7xOI|Rp! zp@Wj|x;i=Ep1-oAi(c53#8P@g$O z(|~q?XwtGOpyHJJPWDgHosj!M|J_wWp%V5!KAux?lZC>%z+Kc%7r~HJ%5zIRr)Doy zRci5V$|+?$;N#VqoQRsmFb!%EBho2(*{I_^evS@2*bJdbLAHeMr7>!{Sp(74 zm4Jv@4iIhEo?Fa9)&VmAY#7G}JLbhDawD;c%|fZdr}E6%q(no1+*!)i@UZH}$vj=a z-L&9xyAztk79xDPgQzTbaeZV%S^o)cCpSS8PQ&mqt6gza`|PW=qy=GqYu}EmY%Fh7 z>zi=*1!zwqEd+1Jpbdp^QQB2*VwanRS5e1K?*bdFJd=v)2C4$`A1nN^)~gvoc(WD- z)N%g24JNB>vv9bT8nbKi>b_O|L{gAT%ZzhzSE&dIcHz<$BFuZ(Z|RD_X;qCHs(Z?a zh7DrdN&iX3GWb%xJAC1|f}sAm=`SMDE#UTE7+>YpUhQm^5$zsTC&+%EGNK(fP9@FK zRO2+?*!~njLvS9TdER+Vjn{8Tq=ir8bzg1n_f5urCI`sN*MH)r@KO17Uz72BpYm&^ zJG0lOSelLpY*}JCL0G6FIv=C(1f~q$!pGa=BqYr{TS~E6wMe3KqXJo}_O}RuiF48$ z4+c&ui4P7jC)JW9YW7cAWJ=PX+%R6)G$=7c6MOFAja?}291f_YOJ6t8g*c~p=0dxo zAAqV*h7?V?8u>cm7fPa5T;IrP2Tf@jXMO*W!rtE5<9jbpsK*GNPI6SRC`vp02=2CX!{A-nbMcUt$>_N# zsbR{G3Rlpli;A-=Ajr#Sc|sOC;utpAP;->~W+4ph=!P`ksx#A{yu)+FSdssjzXVh? zeA@AeYw)gSoK1EBg&5&`GXvc-I*M}h>gFH}Cd_-F&@y@xq2)^L*6Gm5e4|iCCm2|R zBlI6`odh5MQeg%1%cpZ(nGv3woG`Ojeg=aJg;bp1id(w)FwDkzMXss7g5UosP4y*m zncSd1!hHbDM0_O*6OKSN8>UDo3Kp9WH8oFSxtUtDIKI4{gUs}&H4m4_QM;pdtJ0?M zv{TwM(rf36twS_#1tL^#Z$(p9ZsS+%hjnII^?U5;y5R{byE5U}hTjfnraco;JZlK)|}sJpt8!BQC4}jJ7t1O-@I{@FdcOlAI2lj0a?u#_R*6}f10+H zS~fzJJeumgkS!|hA%pz_QnHcs2zVER*N^Zkhybe6hfU3S_QzZ2`;|XeDu0ad5-L6J zs}b3M3lIsOauo`69}gnli89x{$kOj->F!1B!0ZZE)zBZ*aqMxfm70Rk*pbO<~E`*^o1-GF1;NiwKxw) zp!KXr$vGfKh=2%fB!ZeK`Naq#>TX(4gSwm6sn%LOijkp+IgRCl8A(6+#a4BzJ47b?x-W3r(Ppp-LgiCMx}1-0Jps_Xy~-hd2aY<=8n8PVO^ zy9cYF4~j%WG*p-aJ@q{CY2?;m=S9U&BqV915PO9j(cdeK+~#d*ud>qk++I!1ZmN3h zjw%$@pjoh=xFTqJZWIKClOP=pYIH@=_IGiefa&YeXyUj}Sc|Gvd-dPtY*`vViCyfT z{f;^ zVN$uqkxF74ZQ{8;n=Fgy&obl~%tE*g|VYH!qD^4grhxYrXER$m2n2$J=Zu*U81nN(n}j=3s)SpN$^~tPw+U%Aw>?f zsj;iQ5J_V2ec$H`A8F8T;_khS0ruUfqVb#u?}OK4>0!c_Ei!sqNQ)otvTD7o9njs~v_ z;1vvB=RA+ET1|1D-w)})`JOs`=!nx!;|?vM-!jQQ`B|7l(taG+H>V%)%^|wD@$9F( zNv%K5w(v6edftnRU{7YGFBL{<2yZ#i@sY4(;L(z;f4R%p;mT~&cfxcmJ|OLXKj42- zRtp3xmVSAQNN&kv2J`-B{jN+c+8u*W3biNG0B(vfm6kQ^0q;CWKaHK6=~_0MKXgWLnY8)_y8;MQ z9*UTVhH@Bby3ymvf#0->ZIIMLo8!?mDC{A`K zDbrZCZeft)N+?^5$64!YRlLR^nzYTvP9&Y1Qbq)Y#^v_2i+N4mq7ls=u7}BH&^>EPco)XchwK0^fcN@h(yuAm+@MHwqn_=&v7nal5a7U#W${uV|gz+JD zCb4!=aFA!3KDUbtCIQddWHu34G3cWfqDEdzyp<3?8TY#Imiz)dXB*9j(ApcYj&e^> zoeXg28>5X~*a1*SO%2u%+Yomd?yDPKeRNZBayweO07gKw?AL7Mn!@1`olsbJ+Ia5R~0y~z{vOzx0Ib%!dOj#Yj|?9!2q4#{yG^uoz8}S zeM7}0cbc5!8s@AA8eeM*C1>_HjEG(*qgE~r6ggh98)~4eAOj`SJ5Xj6I4gTY*?+f% zEiZ5>aIo~^V8Mqg@Gy-JX-Wy69_qOb2Tur%Tth}rKeq9c?~yj9{wkVDvTq2X@>fp; zuW_>@l-!ES;^r6VtWzN$h{?+nw);* zJUZG}_7n4MXr#-gE$qczK%VoHaWHap=Dv;dpSe*_Q-J32DMBPEK#=?5(OtSa_F6Iy zz0$EE$~eSR8Ha;}D==v%98H1={3J_qd!6+e(|ye>O#YniW}py6T%cxztylasBWz`T z)qarVbFE{ozp#=_MA7Gdn}ad19(5bF4m2R|%5AO9?Qb@o#>p9&Xm*$@x24G_YCWON zMwAs~YI8-mvDGYS!ibG5FI7}(m&iEn0n~U{bA%h&)4&))7%nK@*vcv$CeeWw*c8!? zcsf~6lwq+8(%4yP>~!I51vy6^Aqx8{0&ef$Q$cU<<7SmBv)41OyFtaOAZG@0{;JuC zmLd&!+|t8F-Dl6TYc8 zA!BChp@X<-pl=|i?6>LJ7+C*j>YLfgiMR;^%r2xzWFRL^jR6|C+1Nocy8|AS_%IzF zNI4S|5p!0P$OMD4Mt?|CqoE08^c!x5xe%woW_Ao8rUG&r=w4F=oU3+!jaFr(<@+Io9UfQc=L#VG-c>W?W2G%Qb;{}`D z+t4OE4wwjtL1qFxS4qSjeVpZ}{&kV-a2rp<%mjb?JFUvvi=!EnLn=snjfAuLxkKG~==aW|=kG^p=-=LtTjA}jk|AbPM;lN#Xd{>M zcQZg+X1nhvn;vac6iR=YdreqIcLOZ@zk`th zEhJ~}x5=HS#B3<$d6i^7P|!DXl}U*bW=00XU3 zi`Vs9r#5pz!%SL_Vwe#%BTjABH?S#*IK0?f6Bz?IH^ZBpzRBsEk|B0UV05kLJ9KZO@cr8|;*Q+qyCEfMR=MP}IK5M_Dr zfR;0q@F#tcM2bnIL7pd|c@TAJN&>W_o6YW&L{e!K^6;j2Kzc=Qd}YVB^DxMd3`nZr za3{hlQFW@jO#P0F+hSBh#XxFR+t9A9zZl~9Y+LBDT2)-`_uLft0#xh-Omqzy7^Op{ z<16Wu!k;38X$zTDHuyebXS~v`JvBo9S4J)v#mmVJ)FL>AHo5<1f1${p|PdHeNGLxQnW4q(IRyI1GyTDF_ zbsHx#smiPxT1dO98jb1J~mS{!%;{MYq99Ph;g;7%26pL)TEy7% zsQTtRPAB}w`al-D#8-a%MHx|-a{-St8`<}H+!Q+nT=wxS+sbSq97qt`9YB)^p=xqc z1z#Jr;d7ZPsJA6#3yEJ#1~xBq71_eVC#khK1@1-twS;ays|hBWYW#`|*)9WK& zZNG!8qm*Ln6V~)g6kBKeSrX7EJpKelIS5fsD3QWZsRxnwdYeYeG7AR|4MM7~P(ry+ zNXJZi6_vd?!Uh{XL+*g7Ho8aA2~3jq#y?dd6eV z6JA!hjIA6O#0?idDD)B{H$A&P*s~zdNCD3=fK)yBGnB|^OJ}e(48db#niS&IG z(gTic_%49Ug2`|+8YI?k9RpOzR-jdtoElg$87i^{UM5cXMFH7`a~1^7u)_;{GwiD{ zE{RbwcbY7292?Zc==cVB_hi{pR%N-3yEDwfxrLAmx0@%skw`gSW~1Gy@Zs^N{np0M zCO3Q*9Jg|$k_%p(2D5D|e0mR|D#)t-yJCSXbE3&=zG;1Zkh5M{;4&W5?61dD{B?!& z6#oRCA!vzaH=tyUC){aD_m&u?E4O!RJYIK}XzBse+;wJU_aQB(svQZ_S%@d7cAOJ9 zCu47tvsoF>^=>%^nZ)Ia>`cfh_B|X!&VEIulJEB@Y>L(T4=dG>LM6^m0(?AeFb(1! zqhPaQlevu-V7=RoYIRVV5}lDc2|b}EJOmxSB6ouC6?S3`pvJ?pg?p?hIk4PWsR9ln zLwF$_jYJ}Og2xFHaZBt1kSi#nX+-u1UX++!Zigor(kQtQ^!otSP+!2q+7Do!86h0b z_fAiExz%sFH2BF8m{2GVrq6da!2;&4?0oUXf)`z;b3~lPWoqS3;V;_b&Gz9V z%**%RoV^3cM?9K@%E7St!^hrZB_I^WaQD;YWZhc2^|6*nkR04agq{}UxGGP_=XT&p zO^5KpE+jM2i#MLbd(1XiNMTY&Olwi9y$MD}h>Q;=nC_WJkK&Srj)z6@dFgEqU@gwY z+v39C3JB@!nv~;;Xt&CV^pPuquROws@Nk7biR?+<*b;4Q^C>s`Mm3oASPLv_~cq9WU@T1OgO%fho>+7ATv8|yAXb-g)5l-kZ+01y| z%s1g-+6i-(u{%4ab2w2?i!a`E>uFD7$GCMGs7h@C6F`7*0_;DYbTzG%RtC_x^nBnThkr zQD_HJKOI7DKB0bK2=%RA75k?Z!u@GJfdz>&j}ksvL-zX)uL)cw7OnBE5}7?l^%Y$D z&ypoIPU3aOczK=Qu0aOTxdw?E&y2lV?&iHRc2c)dEoUQyZEJ9(;C7H;S>xONIOD(I zAlU~Kh}#5HMW1kCfn+z2n<3n>CU8yJzxpaAk+Joj`(csp#6!z*C_g6H zeMt#txyIE2S}Bcv*EzBD(<&ODOZB-wDU)P=I|OEdPvz(I0V=DR9ABuR5KVOnF-StN zCbp=Ni_w2aw2*SMgvqM|+vAt3u4)e|@-YpPW)*1mX+)EjoYkIL(48WmsDv7^$#r9) zQbEwxp5+Y}RS@gFg5k&T#FoFb03sCV%e8hj{D0HN-~vT?xMwarkFm$V{}CH+1E2Ap zD9wI6gO_(FP1Leskb`R?Zi?(b>QQL+AHzI&4p$2Z873Ol6ayauMm|$rcas-~>;W8T zRDwbpK_QKxkVa5QBPgU16w+=81Ci+nqeq?UE=|AGH~pWg>FK;QNU;B|l|fDZuL0Qvy5eUJ{o0I&+c z4zL~IrvOg^yaezLzy|=W0387R0P61&%0Dd_KG}vQ8_!SeDg*q$8H2f%@hNMDPby@Jf@7XGgkPU#pE-^@W(JSm{Nu#&$p7g z&M4)Ii|HdC1O#IfY8gc^6D-#%jYeY-{^rCmW)fK!XI>tnV(yNK$u@^TC3U#IGpaR( zYv9K)o60xAPX#fU5Jsf}M+JZQ%Iuwz1f85j%8|(x%Anv7)v(av>aYgP1a4hd1}9@?d^|t7lx6isG=FYofXU~~?cU*jeeqQ2_?lC0IPfjtW zE=XH=?|q9*i%*tM#^KUCw=B`@3#k5i>1KRB7$#VWsxGWFT+PPA;sKlzX+U;d_9m9k{=Pp~cBqM|R;471{aPb1a zS0-hNDQV&20iUIFV`68Ag(j8iEam0JMR^vs2!>3dr9xL?fnjL@f0nhDl(RS#i_0u9 zBnz#&WSzI{;-a;7i+!`M2h5| z2(em9bOnHXNtxXWdB9@{i8G60OYw^h3%y;JG=K&Nd7Cm8F7o?w*utU;ou#6}TC%oy zvo4>r7nQEll|oh#dMGR>y9w;ELgMDbVFvii@!@Xeq?$_Pnx^a`NfUxFfIFeygs4E6pQq zO7OG{AXQqy+PORyDi8liU`lbZ$x=k?j`h9^>rFoI(lTycp{}Cbl4m8&1p~lR9ME9? z?RDp%_VU%;N;_}qGTPp3As}5=nrEGLE;fZu7b_KPP#dmuAGC~Zz!^}oTYf6gRmz_M2t6k$oyBA zmEyF02Q(DU-eh9+<$q^9?j97U z1cqG^TL^1HK8}L*gX0g~E>fa=3u}SsVYJH!fAn_i{hYM|3&N4IRQkxFA}~9Z6qVva zRD}JF!<{STDzE`JT7JM!9_kPiKV%)OrO<0-r6tx<7Gh)ExFO?O?CUs;SmDc;d`|^1 ziLv;>mgAi3LkqLO>5YzHhA|c8*~==*3RqoM5vgTzbhNKM7STx$fy1uk*W9g5eTq%hWyJ<>jsF_Af&`I7rIQ46c< zj9cQ&*$!B5VNo`l@#>9khNIR2sTf$63kwTXs*p|Phz{ZO~u;J+EZzpKNp z{!0T&>3VG)!KOH`7h96@x-I1Sv$7VuHnN19nWFkB<@NtA4 zW)_!i@I5a9ZV4YVtmUlNGl^TrRj>?mFIPMMYtznve@(R`hKc)t(}u- zwtFq5@^XI_vzhO-W2ngdz|8VA}4nhIJB8xDTSOBOH5To%R50-hJ&z57YC){<<% zza*cyE1|5-z*UqiEh}T`>X`NqtgLuIc)H7glBf(5$1txIG0d}1TstmG8=-qna=q^t zA`AiHM+SxeVQOG_tzY=J(+o^M0zB7)dro@B@Q3{370xj*#d8eT#bcB{F#PnO@QZ`O zPYeoQpJ?#a_3lK&kmYp#==yj}H4GhYN-{7-N!L%GyWskGM&Eb+^gmyG{qR4V2kO@0 z_uMil-ZM)F!d_lFbbDBH0?YHyXZQ*OGkL|(;kgiI85CYWDE|Yi0>l0LHEp$lS-txD z^*v}CIz76_im#vk;#1%{Uw8J7q?(6=;f^<eS;{|GZ=AG1jv}42+Bci6c0zcT=Fve2y=}v`URIR1UK*7zUp4$T)>3=1Ij;wm7qNBT%W#uLuT9t+YEiR7ftKq2YB;ln6voKs2m^V*DWhC{L=A++mU%DuoUA3mYS)MOP!` ztCjpl0^B44`cIMk=Sc5K(tEP>ZkEz4mHaa#H(Sa-M=HBm^2d!89RN(U#J0U%!Zlcm z?~rh=lHBc5xKj$Rmh!<1cPNVUwDi75!si94ykAQG`z8ENO5q<$;SnLUExc{!ZF7H@ z`A_-}75<-%KUDbt-k)~J9}U+H`TM7${e%66K6IerLvM=zbMgKmfB(Oa0qOVu_)sVu z4Rn}Xsd@nxtTo#=Z=WLhzw{|}_q<5ms%LPQ2e^~14&v^G_zlm0{Jd_6e5?AYYmnSG zZZLk5&YD)ij)yFz!^~bi4@47nv*_KaQuQ1G= zTWQMTztTOsWGVc=YVO`KKIsR2moZo4iuR$sze10J>HONjlwUG1wUJ58?(tNyDZ1F# zqV&VHwO25Zwe$qIxMn{KF0SD!aPcF)@TGyQ#jk*i^hGVWqrhDWF48nn;En^g?+XJn z9^Av=P5}2IaFJHX2X_*cGda0fx)k* z6d0ObI~lmmT^eL4%<6#D$3TmL?6lYVKEb(&d&#t*iWF6fbQ z%n-l9{FS4ertiE&_ovMn%Z5sNLqBuMKbHP9)Jr>wj%%-<|1*B${nD7nv8V^YnHR?e zTIN8-tmgnO1B`@<#Q-b@z>6u~Gzko)i#IYvE{;JRPk593Zvc3?@(utKK=J@6aWAK2mowUqDhii(PgjUra8G&u*b0w$h`&15^3wzk#Qw$|$Ft<_g+xhf_Ea)EFO ziriG4f*KM!8Pw8#TC95P!Huy75 zNm?a|e?IAd{3LVngY*ovq|@{Embvi!@%`oVuzUixvJy$U=W&}f;!So#BCb=KAZ4bc zOVWq%GGD~C<-<>o=(0tMhf^fUjz3c0Q(9mVgCvrx5`_|vAHMesO14~!G%0!T=2#?0 z#{XiF|EGVQlC(VK?8%e0dlzf)Jo!N!And!Xe;yY=Gr8iPyS2Mv{?8Y6N*BQ2-v0S~ z@PD$%CVg=^7KAYwhV@wn=BuB)KxCvoLSLmUc#ix*KHvXAPygS){|o=r@NBn34bOMy zsA0{Wr-qlfUCK=5Cgo<;_{J4vpQ=Wy>8TH}lWTDDj=ZjRw@3Wx7B%v)sg}3!GMHCS zm*-%x{M#mJyc(Hh39`-_bJ@M}*ea}Fkym70Saoc+ZZn%==T#jWue)lxmJRi@rnhFR zY%@E}e+o6I*8TZiP1f0}*%(XlbU`88g{rv`UIX5PwZ-O=RZwVfQlZO5A(hQ{t18pn zWhz_Zp4DU>-&AaoR5sh~3$P~D*x*v`RPIn_H?}4IVSn>(QLDe11B*aq_ICzDe$NIq z9CDXY%pR3B$ScxSc0AOo4Oy<5^;O3%)@@Bbb9S90)T$p+BOy1EieTgkw=V^sez#AJ z%ybt3XlmH+cJb?TfkG^C7f5o=>kkbIQQ*(+`Z%ajH6ZC{4^;lB1*bor-Ai&lP)#IG-{n?U4)43W~E`K5e z0egz_#RexORAK^qUs;83Dr-?$4_}*!!Df{`AqLFT#vKSTd)8fr@6{V{WbbNB8t=2? z7Y;XdHOLOA>_nu@K?nxj;N3u{J*LWzD&eJ)ye<>as>Jh!8qVYQLUT3sno}O@mmp<^ z1<-_-QKa4}ugHg2U+AEAyH8%Xg%^s<_L7<}w1BVb6e41CY!8IS>%)9q%@%!-rydgJ zr|Nx|9`v)0cC*IR1_xO)qS{v8mX3(l?J=>+=Y6%4Rlwsv_RI20B1==Mq?jdApu7Yo zqA3u*tO*O93&8U?a|n#wzhTF-?<@b^tz~0f%AKCe^g+gIV@t<1A85 ztLE_RFr8O?1e6=+4YE(_L-zRi=ODg!K&q!6M|6)G3Az{fBiGFH>?Z&;z?%j0AeZSpv=32sHsl2aTM&f0RV?7cX)VN`f)Y<_31BXJ z-_r`OlMv-BRP?od)Zt0|xE-<0`PwJ=Q0MRp8v=&-(<2f7Af$ISGJr#6L3f$4$qd_n z2ep{ayY?ZX1+n?32yWBqPgMJNQSF6^YDb-=+K}k*!1%T^M%EK5gT%cgD;8IQakFdHDrZ*32Hw=DT8P`(LRCl$#Yqh*>E_0M};s62Jl^NbHCo$xyKT7|{=9l>{C3 zw3^Q2dy?r=fmo;!f7Zo_P6evBVPT#;R;ntTtmRP2CddvH%e#J2tcj)q%2G+s4k*j) zQ$EIlz@p)6OlJ4MYxtTpz6&H!w%h12_3?b0RZvKvV$KsE#V2+;Kp82vMvqwp)hd9e zfD#B)_#bYRhWMB_AhEnfjl7eE>1;EfQQMbYH8-i|deytDQkGYwgz7cN)C|owHCvB1 zrASCIDO1Gx=to#JN>|)Hh!*ff0Q^>hB%Ud3VfHeJ2rCYGh5cFx)hb!oe>Y~i6shR3 zJ?f?wCW0^}e8Xe|Vm1Xi& zNK=hw2gazzAqz}FkNy?S20zeknrj6uX?6s>`!Q|lIC*S{y-4Kr&O1lR`v4qx*kjDscK&%I(IgKQ&T2$^VnW5Y_=#(3t3PvYRTaOH$) z23fqrOmtXfVuF$VAi5&^31`qcMtoN8QtrI#_GAL6GUxrHEfUMV3w{-%k%g>dhW)gOhLbwE(^X%}n z^8cDBNk)qqbt0ZYk@pit?l^0a%6O5_B*gD~+zU7&^YX51@_cg5?}$8Y<6ljHOg*M{ zfzfjs@U9$I_9nIAm^~P=H=l2jjL*iZ5A2u~unq+*&z_iJkz%HLy^V6P5kMu(4%>?$3%8w%aM`o-p?i?k4Wa^wTj4RIG4bn(l-PNJ zNK9Kb5>aZgrxnm`6tt#>hgwu)eSvB;0J_I48i;rH^^iOECH5iW91NLCBC0h2M0yV!~?LMG39JdleM6Zejb94Aq&|~E_59GlEW;z|JJUIL|MQNFz9=XtW4zbOfx?&v^Z z-he(s%|-*%{QmpBQVG@zP%M?@H5GXT$KxU+f$(Z?#yGt9xP3xC=6}BcM{PIG?WiJ% z(3~7pd7Nu4lXr~=Bn!HIVL*t+-ahpIH+OD=egXOij2=hDjq-{efz_7yzkvKkJ4E{` z&QZJf7@wwTslogPHJk&&b}4HK7#&vy8ltIsk$6di7ps;#ckbNf%hhl$VpYIw)xRqR zcrt2pRkI;rw&-1r@>rjQnc#n*`j|9Yk}3-@fA|KFFmA|!av(U}up9n5pgcS{{B^=# zkG?zh)LfEpRk<-2{-6Z>h$0Z!jXzWfo*aKV@ux@M-dUC9mZCEODbL*hAlp-#S+BWa z3cJ>)X_M-J{ngrX<Wo((>Z^Wn=!;r+uBOLd?^hdm4&~B* z5|6rBis1>%`s+W8*PHM1~ykD%VWKWs3c=Zc;rvV6Jm2O1c`- zv<#T7+FZyII}H7ERg6fUpzsZOFybyusQenbpQE(A%+|d-Xl(}?7o5-@C~v%$4b4$maSl@*s&$5= zOR>sYmb^l-8XcYL(>TzcO##+Q*d2Waq#{~NrAz@{1qtmu4BhLe00=&YGBikYlY-%( z+f|CP=6V(6X`V8PauzlU{U8W=@@~5M7NMAdbZC52fSmVbNpRk$Y2h3L+0e72lpSN6 z!ZY0qRPS*uBj`P%%R%pYOR_KqNhf zNzEb&!`j-Q_cM|7-J&-HQqb1`XlO%#%y@RFkw+{s2j;aZwZl}@IFDe3!?k-+McX?GGXd;&v_cH8vrfHO z%bq%0OP@Mf2YzuhW>X^%pzc;UMBk=*4`>$$VFV@yLE6gS7A$&#dM7{rYI4)t_|sIY z%1&X+$Fb$%DnM|9>g}!w!boW2f^2KN0vv;dKkqHPh2KtvVNkR(HUAT}=vf+zh1a3B zfqWHnweia#SL|Y{OU>Vpxu~K^l&iNcxwkHxQajY`sgM2|a&N~|W^fC>VS>qc}Ye0@ZF2sJ7 z9Y%4mN>F#Tdv|~}l#be0I$<}2fhUxX+JTxX(AuE8uyn$9ifvXg7KCzK8j}JP3j&NSxlssTyJLH;UY?Z(l6fe>>NBP-8iAu+zDEb}?6-q}DX+B6GCCZwn^9wMd3Nw~$$$ZBqp>Or z@>-S+L&ohQ0S*MhE3c3wKieIH@>OX4^2;kn&jPaOs9NGKl(Z}?T3|ef;G9wj03XRu zFcX3{5&c4F=D?5vZl#P$;8q`63E7noA4#%x>?XCQRr?UU1pl7f>UN`R+ms+r2mgtqcWCARv-1R{%orqgRl4Z)}+JALR>_0dx@2f2*WXflW+Vuit_!>N-$7uT{GnP*u`Dy*4s5eQxz)%0%2q zG20U*qsb-PlFF*aw7PRpiP@v&K~EorFwgLkCBT7z{|qB8pF(==FE-;Ndj>rCGUymI zbsN0zhw1Mp6dGWh=_2YlM!f=2%h4vBAqM6YFeG@@&uz9Z z%M#1mX|Aq-PyiOz;M zq)`6IbW8MlN@^o3J4CVd(P|gB!zV#Ee z+&OJUs#ADvFlc6reFy*FFCf*ScTMZ(4wR`w`X6`(`a&) zf7h6Z%jr#qHY%Wv_i$8Tv|leKgTT0=X<5MdbUR;t8IYjSI8(p8G)|28zfV99XI-4g z`B?_#d=hiwMkl|cHz&iK=Kuj;&YzPp|HB!pM`1!LB$&=w8)=jt1|6MODHN`O%J>pr zJTIZh-s4co{nO%6=@``vQ2=e*30&=38f)SI#!M|!CCL|B;+`+B1UXq*ja#68xnxt2 z)uSl5mEU&|%Jm?w*6h=n_DMw-m*x13?y*Yd(@_4<@X(1jD}VML&`s&nLs^oms57C+O{vAA1SstN0{_jXy!y zc*G{jA(Si)uSFXHB#tb+Y-hmQY;FhgQHzMNtWv37DwS70*r87Xn%A9&H18Zh+CvcH zuUt+vZ_pZHY2RWxcR@6pVN>Ed093Y(zds!lulBJUZKdUx~D!iH^3ftc@75h&7#Q*XF|7f*o^Oj-cKujB)V65 zh3Y+4k)?WjD$|s%5}QlE*zihPI`qohqfLknN9)&O=-Hc=KseP8<4|gCR?O|@Mrvtt z#eWmPxMAXhxhe>-2jE$$!h9u@j0F8&;?5!aBT9#y%V^K$mp_j#w?=7O#9E$EK+xI9?D^Qc`!0@2bylmdjiJPlaijl8l3?6wS!^s z!nTuWQ31wQ>>}ASY$aQ4xY!M%Vr)c!Wu0s;c4L9&Vh27z7=>J!)id%^a^o9Lv6KWa zVz>o_TMe{R1q`-;NSeInCwU;??X4UQsw!^)B350VXC5+5qudRMIsyL5bEE;XLD%#= z7^&SL85+OHfmN-TQtVt~y2D(Yt+JF_hiazCD;i=Bd0i|2>O!)U>b7)iEXB0OYpU6? zEI4p42Wt+nV*%F5_WJ6gs2s5meRW&R&AbLM!nn%RY&H8H{W{*C`N&c<5Fh)=1q13+ zx_k(#s8nT9Eh}IwCXg+;u`2-zPhF`bT7qWIK{?sn2rcQu`7{_&qwoSfS0ulA6*pnY z0svdi0s!q@C#&hz-)t9~I9*4j#3oKlirDwsgHrE26n$U?E)KBmr7Vhjdw$jdkC}ef z2@l%x!@WO#&r#DX@$3kA_v#A&J0PED-$2ot%))%-AW15GR;co_3Tk65E_NZiqfPr1 zh_i~Z&Fm`9^93W>&u%kKxn_+dc+=o)5|tJKxQe$~n}kN`3BmGu$XK}z4KyvFb&W+U zcj*K5vr4U@)~aF2t932r`VXM{9UPk6l>ApK8ETUDFGz zG==XPboRc)vd`WZg*8VnNkhFA2IaW6(pPt}f_q~#-9G&BD-86!qEvMVSFmbtP0ztmakXK zTh++W7D#$3Bj-CwYB+9#wq~TI%Tq5uXXx2Dp zk!z+xzy}Q*J@?2@E`!A@hpJL=?I>~xwKAipSPpH+5$GwALz5}y8aXtP0yk<88a=b* z&=>S}n>O6&xmyl7>8)H2As>jUHYCX$yylzC0J}pf@pdb$X*KF> zvcCb_fIK-4>;@Xwp`Aq4s_Y+=b(k!{H3gs|G`J| zu0S8gK&7*Y&<#=QN_ybUk8ic1c!_7}87&2nahn{|d{rA=iqYmPfys}jE9|Hoxd=C? z)}>v3qZAQ=ia_BG({?FvlzbWvL9Qq>#7HIbxJ(Y6kd!P?Sk1mJW zD0;D6vlA*>bsmCuquDaoUzDq*gR+Acd$T-+;F7U?=FqqsE}lY zX?`q}9-9_mOKJM~h0_v4D2EoG#C5yDrP=3(uZ*RHuS|?-bUw~B43&_PfSam_DRM;` zKC&t^O5@lRn@qEYbqs}HpO#iCzgN-|8xHdaj~t3iEiH$zt%Q~I(0g{Ncl}aFpnEsM z<`5NUP{kG25>^k>v(%xiqq)sgj4!%Nyhlsq>yP?@k+9@RQw6AY57 zu&s)@Rq<|m)DCrPE+7r8J^*XB`!L9Mk?93SPth`~Vr{Oqs^;d{cJ%haDwOvCYt8&d z)ojG}(_viwvVm3=M6vWLZ-E@jq4SV#r|#30IFLng0F~;~=t{Kg zd?m8(4zkQ_;}7E=C{Ta0)S@g38U*W(r7G+GE{R16y43RH5{)Jhfm3RE7v@K5#mmMC z++XZRA0&|1ghj9kEn~Qg{W4MS_x-^1T;_I#o%GaKe~q>jZH(XB2?7MmE`_SOgX#g1 zNJVwuQ%}&3^!Dh(AjbsE@s%q%N0s*?-9eLs)?8o@*H0m&!Qt^2&2-O_Yi8gW;bdNd z1LvqrLkzqK=BsOiMa#jLe9{>}cv54z5SyY=7FUeJG$Qw$iF|ZkzUKDlcSCv>uv_S= zFUU3m%XRS&x=oWJZ~%fByNeI)A$)ac!{OJ~uRsC+I~0Jb{hs=ydGKs;lPf8OTN9H7iyHgd!)p z2o@3qT+yFFpe~JQ)zmBWp;eDsF4G68Mso^9MX!hCsUC{Iv^V}cIeI0=-vgWzpFncY z!zU2hvG@eaIvk&i<&ca|;CE^8L=H8Z(AFof*h2h@_gsN~kKQJ29BqNqJ|&2feCqe6 z2?GUC`=%U{Ln&mRPR=mudzy*pGeFCsw-@LmN|;W|5(ttU`2$3ku1RSzq%bWM5lA_am)#{EGvIC39Vm`Il0y3Y?;I9j!foMf4b9|s zDH9D!yDN)JY9Da~j7(E$Do)QR2|tnr5ryzllmS0eFs2M*f&rs(7Kqu`Cl{`0WZCCJ z1aRFY?w`n^08KTlWoTOtdCAFho=q(;2w1;gD*>Y{%9De6M6JA=?`$kAstQ*4icOVdmFwyp&O63QDD^=x%RcD4gz-*`cz~0F051~qE zHhUYFgaA>-%z@Wf8UTaw3Nsb&{$yh)j|KvVtQ3Q~Arh&;LspF46ntS{%|6GD-jTU!wUd)v!liQE&95=vbRCmTvS| zbsGd7YGg(n*2!^L?PhUSEC;t0CSzW;*@|u-in&2WtAc5jpSS@{+1bNV(M{3yFI2%| zR>+U0n&rY&1FC1`qyT%Qpp=yt_L=~C_iAfe^@;p~l(X(@TxAja8dj!^7F)NV4`$nY zB=V)H{-y(P2TCrW)u93NSoIVZ%i53p4Xu?Ri{w}YZ^CD<^JbapY<^4VE{+tzo_)Yo zpml!gQ6Wuu5vD>SWW*=ukd%O-SwVEVi^~aAEo;Pgm#3AlhSD(?vK(#~(ut_Q@BL+3 zGU6Sj=ixR9_hmE^;=^J`(sbs&g_csb+jN?5ip8&*&Trl%yI)q#KHU*fQ+Us1m~|_} zuEAPps#m>9Tn9(y_Os~kpk+rvI9b<)GWwnX>rvSe?#mP19vOrVgTlO7DCp={hkJwO z_Si()VdlnV*x}g&^Pp-u@AMB{dW{VQWJdt5y7LP}kpOG=M|=)%hL&&E2dvwTo{K7u zM3jR@Pwt}BRiK|cKgBW_cT z`W$itp!8dk(l;m4hf;d)K8zo1;`!(JC z9W|}U*PK+mC-wT|#+Tsi^+ABvt+T_>MO#e-gNm}*7Vhfn`^9RFsR0zX3MjV1x_cd= z_)8oLg`hYJP<*F&zth+K4^W)lSJ~4=h5mi!w#!Oy4IN5A!%jT zvaF6SCC|`u_*)*~FPUmKK~-+!#Ly*|K<0fQf?+Po+NJ;{&foZFN$TXLI2S&VRmDGUj!FZ@^Iq!xUExD^sBm+JO`SyuV6*_ z59idF%P!)h(E*sWJ~qufEw zYUop+*?(`c&sPu_MjFRcSg{NFPienVvm=8zM_yB&H>lD{dq*IuLz92^N)oWhdNS4~ z_JOpx%{dsp$DP;b_v2@WOFUnQDZu_O_n35M!`Nner@fwQk>tqZD7ut?3xm7NLNmc7 z?WfnWp}cE4%)}hFjo0lm&E=4Or-jCu(-d8<7^f}zP+o-81DNVW;GceI+#MTLQq!dm zgG?zfk0V90BKx~>J5goMJgQ~r0jPNOEvpp>xh%=A-@ zj2YK~4PA5_R?JSQ>`Jw!OB-c8>ab`qxv*llzltea`4aR{G0sDW?Htv6YRL!j9qugZ zL8|F|=~V$69uWBa%*JK1JlbF14;ihkDueEs6Z2k`q=Dl^1V%02vraghP0J)h#c-ZC zLXslajp2M)V$*F{2V(sR)e7>*MK|q7)5DTeurO?_DfY-}JPXMi$qk<9k<2HA4&&Z_p%&8o9jv6NEZzf8WA{vHIfW z_*l^*67ESj2bZGX+4K&z`>^V5u5@#iJnsiecv-Yx*-g7rcc}6k#{~M+n5yjW!8L1k zEJ8EOUyj2lmpOo%s(49| z?t(tQfdTRmGEsnB4xJzncF3V4VjGa{LFblnN}Ut}*$C}glIqWVc#sElt)b zcw~>YmqO1KrK(5*(GeHKY1#Na0bs|E8krxNmYdxYeT9EXKRB* z=E?`fQ9yLUnS+BkA~rala$}u^%ByAr)UHP{%RJ0-Nu33t%AYz}8z0X)smVGSJ^2zv z^9B};Tw_taO$&3HN?`E+8&rq2=!6!_ZL%T;PT+sWDB3I-Fkc`Ty$M=;f)D;c!0XQ+ ze7G;vPCBc?jw!5@_v{hgQj`4hihW9GiFJ%V7M8Y?Jg8Jwi}Y-|ywY~-geIieNZ1J< zdcCDU_>P-f5P~vnd=@$);GDActX)}cqp5BIfQe4FwIw3SktBMXpn<4&P~Z5iSH>Me zQFwQNI#ElLnjJZW3+JW(LOFNL;%|l8FpHe#XNvP#v-qw`DSm*=SmG{|GzAYD!n9%q zexYL&h*OHVM+;P@@Q^3~;zH0}hW4*ns9MYcouLNmij7Zf#em{&`&Ot7^lH?@u-bop zi1xe=P%ZY`4+Dj^WYe$>VJ~gs5M~TcxRpgb8{_q_(_;bKt*4(470Y&;T9y`iERc9M3 z(AYR+(T}K+$QY<;4fe6lR#a;N>{g8fm~!?##6JIzDm#tL%3ZzNhYKj?FbmjlhCw&n z{DLH{#p-bzdYXkc7a?UqZHieBtJ&LF@qL}&eRC6xr3;UD-5fh#UU7>BP`lpmUB76U zlD|E`>aUFiZ41!<yscKyE%&-e=r~9L1!T0?o0<9StBe})WzJnz zfe@&`+CZi5vRbsPs`Q+?&`@j-_Z_S$+Tf~m7sf!*+G-rBSXxuHKsuNVbA7;QOu5`GG1o&)-uEl$)Gf`Br;Yz+ zr%C1ooWuT}An`Mw=uh-9o#5?BxPx8|d{7&r8mn+qO2T6>PotA*>}RV{+2q|l#4i6T z98Ym*ykjzf5o&(qAfr1CtEmrz1>B5B0U4e8Ytiidt zIt|G}$SB%C+qOzt`wSO57^I$9_&RQQ~VGpguW+V+8I8WVROLjCu|X?gpsn8ZH&7WG<;g?qcPtW`D#9_d<@3vc18v;5(?j+ixkr$db_%K9%;<*$dv;YDdZW#M5Jq;)BX}0rdQe$|T&*j#R%g0ZF6Ht+U@-{4MZ;Rt;j9^)vr zepH(OfxZ?7uKHW-8$znNjc;vQp7CwAmW76ak!wZY){4HZ6@6PveY-PDjoh3Qh%7m1 zqfW^y(~!u`MKj6z6dbpMBsArH~D5Et>5cCkTHMeJ>Zuh--Kj5cr-&_IL$wVvD3 z$hygM$UFTnxadIoTL*7`*5NI-$)P7<#8$g-J8AYI60<>sL(B9M;yk|>%d|yVMOnTC zr8Mltv;M4&JJ77pIApGIQ|4b`=1#+6>LcSXpee22iTg-x+8}=NThm1Q@x(WF;+p@9 z$ZfTBJx&hha!oqa(q(Vi3rkL}L4`q(g4*xUtF71;wr9l9jm#0Y+bNJ0wo4e;h32+k z#D2>^0U?gtmyS@&H_0pgGjirC;gDJj+{j#ySz@1wtkuU6O_mOaY<2z-qo>z~EUpWB zGkuC`W3`FPe(6ZHd|O>;1oBSIRge$4NUe;00xNv@9_)Z*>bW3uXY3LEwDY0RPc=N| z*ly81(TT<*(D{6HKspyj;GZ90=8rTyoXEd`ap$*ugSrWdkukdmhV@$oz0-Ov3ZR0N zp`JR6^wc}ZW@k*xMv+?|y80A4aUO=>W_$NxL9j@JpES@0p|a{pG*x@hPWLd#EtROi zcpJ0_Rc4Ug7vk?W3MGBE%9x8HTD4(D5o$MHLJ)>E@Zuj~H7u`xjuA;Y_K@Q#!%Dd& zDgOI|7&Z#xja`F{O^3unjHr$x5#jBWhp7cptp1c$434S3HR@LtgGJ)+DK z+rw(aN%B`wStqif98kG1ONvD`76XjHQpy}jadZgHqJxfJjlJ$Ps&FhUWJg1-jU1AU zRA43T(uUF<7#9Jx-X?%_4uO`*|^tUMZL|8o$Mdu%&tNdm<)3RG+`1nwg)Uti6 zkXm}}m*&Kc&qz`mh^Xeowa?I51_-TwCVozjWzXG(=6h4iHl3JmWY2^MliYO8gJREf z;PHlt{f56IHLZRQ+HY1yBf>XVW0x@0RE?V?#ZA@S_<+opZKuqudWma3b%_~*7)x<# z<%E8S9%WK`cx}BfG~l+L{jVQlC59LU8VsI;p2woZo`YgbqaazA5HOq0CjjqQ_A;n| z^_b44r+W>}YDBfHL4N?Q@PxHT^RVn2u`RaUbUsgcH$&_&koUgBjWy?gVVp6;VTP@- zH2!Rq1T2tw9;dv?`vLJe|GC*~NpeKg9DdQ3q$#3xL7vOKf-xN+3E-|9VA9kmW}cyn zx5?sdmUwfCw|U}iuy|V_-fZG+v3TpE?lGcj6!E2qcur6w<8Oj^+4&ZT7qjupgEU7> z$lEASL%}h`Xoo|QIa`y&>{R|cj#EJeulpu3jeb!@Vj8u4Gy)wx0WEu{Z3kwgjf9Hs z!=u&S9&M0um4s&*f#x3Toz@ieAqH-B1sBs>IKbA-@7@MXsOgT=s&}3*Vc8FS5TEBYzb9MiIp~G5na)#~&UL@! zZy;HHo}-o@V+T+-@CDd*{zeN3Dv`S^O7#g`6^qD%;)`2Q_^!)b?4 zUa^(`$Qjot5g1?X+hkhs)xP5nyS+NBiCADLol{h#D*!BZBpr|`Am0VFm9A! z%23i;6&ryi^j1)1g|>RIfXs2j3jOX`Lcu7DD;S>o*hr9N+zTdb1odN9+^$m=*I{tW zc20mj(BHqGWWt<;FMn7~5Db87FJJMgX|fr4YI$c@!(;kz{>kSkc;Gn&+FAg4`Z5&5 z8hlzdUr%Xd?)uDQb~RYE5#dK1T@5*MC`^mLILG+(v>LXCXXLTsJV-M-zBO7>!o_*7 zkYoA9+_SFN869Zq#C3g+=$Rnq-amvkIYkqgB=f9I5^*be@en z{l|$ds#_WuoI+(OtOKjM?mbg+? z09n~aUQA7UPsueKA*Z|ojaRfP*!;d-AXk6CeGt#*yIpjpRY5Rvd2KsXam=$Xz?!@c zEfZ}u^*P3g;T4DBM>ak{!5r^gdMrXF7g66#C4|W~rWG}zxE#8h6hai5<XKR{pga08m6bU$$qGVRO1Q1 zp$0F3s$PDUEM7Yx+nN(du{~$2u#PIsei?G|KMqDi2dvnhsSB@$$lqdQ&0vxl9{Y@7 zoIw=_3qMh)lWKlDmo7g`)fbb)f_><-Xw}$>v?_4fS+d$NYk8x{R%)%kp81;`eB{}( z@BD;D;WvN6QOI#w=$4h*B3J_@tG`1BP3J?uCTj^&u1m>pNn$cpU1{vsbz?kg6Nto7!KtDe&(BGLjmm_9(ke4Q08y=s3I^Cy_F{TAKz+{8K zkMqo50NN<_Q2vM;r%88W(1F^>wR!w|+FYS?V$0B=61KnpCD}hW&{q9E-5x22cE zilqBU2JU(FUGsOCKiVX=N*GkYe}rCB0TwN9ib9XTZC$a^@O3FydXW%G0;2*6pfydqpnhd9MSRx$14yM}p|K50qw? z>iw|dYE1h(_R8C+6{!uTRgH}9K^MipbW#6~et~UlVJzG`9%;Nz)jKa-DZmz<0Kg@GNzc!ztg6^c(${eNj?e5}m2RK?2d(q=d^BaIiV@xdyXLyR0`P>bB zZ1;Af!x9(UC-u&U2j`O2ZjXykHnTk@@y80K_>C6gPMYj?REVGWj;8(mPvVK|QO-V- zt(_fV$N0_P3*$QCZ=)QlBk8{urLthT{S`W?++H+A8-gz1#`+w!p~I$H8xUWkbO})6 zwbBN;tO53Z!27-&Dkfj2>5fvY^9nqFVD#Aa>|ppdhZ6Cfj7}6$7U6|BoEm+N9I3-0CS$CdHvAKx}aJl;2=nhKNJ?iTxHsbUHvWw}%O?SQ-ru zEQK%)MD+91!W4FveTwWGP~8t_|5!Y36pxu7(bfv!eYOI@=u<}!7iK5Bz$A_~vOVOw zu)x#B+KmG#atO^(6nI{W2dWZ*;}-2M{?y)t2}d2L^}8AC z)jh&e*-qY`6JMhH3A3MrN5U(8LG)E&F8h;6d#YdBuSD7+k+vW?EvEBlv2U!Clp1X1 z0m7o?q)@O;fW5Izl2ml74K4Z&Ilaib9&ZEX{a!2Wm@Ng?edKOODZ9`e8w<^L?xkj< zdy|^w#fOpfb0F*%JFzB#Ubo^1uT1aD^&45U)l)-C~R{BcxeFM1t1-~hZyMH zuV=I0lUw^X#oQUQv(51E?$+#>4-<5r`oy`-LXg3IKRmOUy=M=g zB0N9s_cXpKG@Yq+bm0Y^MjttCIIfONS`DVNF^rqA`~0}aB<{K>jMw+d9w~7z8mXt* zPeTO%*SCUr=FpJ|JlfHB?lS3~F_l@W3+Y5{zOgvZrcY!(*EE;?w<9#?v~l*l&Ius$jKVbns31+91{}8;Rgcqj+2(AkgyD@d*kTyc=^Q30`_xpM+y=U?- z0K|9+@0fU86#V06q@@s9_S2*e8JL0Y;qB5! z0rB{!uj;f*ONHNb{co5jz3CcLis30KPZwT+OV^J9_GtDhZ@Nx5Fde4&%|w2_&>VsA zR5yaBn5pso;235z8>+mswJrqtiqIx~OihgJWa;3bkg>OKm0Sb)56X|t`xYRc+ z81H5*lg?Y2jTlE`U^Yf?HAOLKM~Y{U4mHuJ`GsZ=7;ZP@Og+<;zsZs+?LE?Ai8$(a z?GdQI>uc0xrd93i)8|yStI1yRA(5D}5Te!?q$g^4+8^l-mVG#~l5Rzpdi2Vm(?Nux zy|-4si^@hh@?bnYHvLPaC3{R6Rrp!aLyQxTJq8$Pqi^$6@hIa=`nM?lhf` z_Le7>H-z}?iMjrw3EE)QdKv=f>D`IIA#|85#Ge8+|Ag8O+_KTL!ymcc;%P;9#z~mu zGM(eG(sHhNztI$=8XxW;ZjL}+(pLqRqY6B&K}Wz;g#1^i13`{PPDWSbvA~ z-?`C1(3)bE-mO|X^j@wB62*SeNc2DsO~E5eg)Y4Nt{$FxPyE@L-w0}Yc_-ExAYgj1 z$AhTi*-$}LB5&9xylxT*TKhRfp-iWbDsPTY6soo`TXPUy=h2=eDplk*1Uv*#iZnm; zpeZy+C5^r>=<5W!%2&7{A=z}QqH`Tpwo9qq&i?W6up?A~1wyBFl_^-#S6#pd!&H`xh47S;V?RUvGM%1ZD(>$q^nNq zx5mw~g>hR%!bgK&@UQsYU+B%2?7cP-zmjn#pSAe)UTp(?Jv!d{|69|4xQ`8QgxjOO zg2$OPdG7K$Tos`m+FdWF=|=;r68CBK-PNVCoKn_;u4X~&CbfG@V>@XR@MXM zZUByUP5dgYA_!j`50AquwnQ)^)TOTmVrT&&2Yye}?X*C~ zzb4zF7G=K!iZJjjA%D&FN%rgHa|xG&}pfh_`HsWLgF(w0wOg>3>`;n{&V*%Kc&oxx?GC2Z7&6^U|k4IUK5 zHh&Yg#(rfwLram>{6enj#zuZPK1*JK@hNUQYX@g-?(N`x1L3|IBl>(cKNZHo!bW4_ zGk9ay4}Ajm0N3tVwB$V@;xaR182qxh26ig!(}M2a#oc*$4AO zMfOFIPb)*1|9pgC&R2~S9Sd=XpEHQzZ*4j|eEfHt;-^<$euPf1OxuK~S7JN)l0?Fj zBEd}w*zL6g`c#1K(|hrvN{}lrK_|d#I@Io?0dIZf1b#VIGj2(;VIe-2Gg`?bd|E($ zV>cSb9DK|~VWCD2y_GkfP8bNZVXF5;WiH47QqYI)T^NMeHX*!3i{+wkyWhW3Oddok2jEveF04SxTKI7y44VeA`ch+LS`d zlSNNg*v9VdFI%+bN|#@DxU_7~4z`)Lxc+z!UEKI>H)6OPI!tFR?axB}*D_ltWKVNc z$)UZtuhT4S@R6A)%GK5r(YIG@Mq|=Y1R}t)WcjH^)A{%o0%bj%BEkiyWINZl|Qk zPcfB6w3+&*T^3*))%?bQb%Tn# zXTREJ5nRhJisDx`F28{GrRC5#S7NY`&HSzsDowa`0N_hfuRW zjqdot+G8)8&Y=tOV+66^)BE25jbCd)gwN`v^#KUK2|c>^1=u%)j@xN?0aZ`pS43{i z_LI#y^0wQRMu&_yiXK#+TZel5#;F;4X6-P=Y*O)m1Kt&$ioxn*<`7A$*iQ5kMF}kK zXHEY6dH`Wk3%ZYLc>4zQf%XaUW)RGiSY4*`eVxojms{~@XS@bAzfBNN^x`3c;9 zW*gTaLL`RuI-qD#;eIh%$9_kjqZ=Jgr^q!QBziU;dPb$r*0)RKmC!k3V+x{xF3$}Q zQ;en*mHry&Z*Dl1UaOCt#%^vrb2pXd|3x>y(F9Ij3qYT>t9wuVpsTp$A6*ae)Tisv zVVVv^)3=L&<|R5axnF0pKvK4dUaY6Tx$)QP<1Yi%t!PPJ>Ex!7-$DluaDCqd^|OZ6 z=zIN4{(8@j_8vbd0ttA} z$6s#1Zm zhvL|Rez%+_WFZ=^_=ji;)beA7d0HRB2iGSL4O#&~KB~oU%Xz0g--rYAJPpi#m36B$ zFcbd{(Z=Uv@&1eevwa5xlSczHk#Bsj7sP=A)!ubtNPfY#@z30N_7aMA`SV~%@*!%5 z8yjgcoqzc`IWA+R4~l zQuKgBcLmwDAZy~Ya)IE1KB{VO_8X(WtA=Un!|RY8(y23L%0_K69X*T1&g~zah0$6n zc`|$%@Sf6B0et*Qig%}6W4B-flQG$}=(h$VccZa0=>5E6q`YDfIcD+m@D3`_x*e*y zRrMaN{7PXP@|!>kzM!P`LO1{J9n)Nc)`oD70JYz=u=UZSq&Ne-pgNwiEWBQgX!)mA zb{gu!R%FpiLsM@n+fbYOiZ$goLnAJK?d0BiLClG(1k@1ovxM~vxyu0Mkjrb8YM8hglU0x)Q&ThZ=YduY6RzI6#>;5w?lu~GiwT;@*3%T)`L$U5O zoiEHs|BW8M7gULXehbTLjN9@d(Q>t$asQo4X`XWQu3dpew2;}Z5QZ==?V(+&d= zWc5&CZx+*O`6;4i3n0JE@7=7Yu@g}|4FX|-n#+C?fCYpW!duaQ1f+dL)kT-7ky~Lp z_AJWi!)4X@9GFxiUw11`%;z*QxTiQVJ~27GD%R`t-8U-A!fhu3_Oa3X&9oQSP`GiLq}h9MLdefwYKuhp#<<9yf^fu z=0JbM39E(Os5DRYY~kbnh+PDF$bcR)pofurT?zT^4Bx0(fF^o6_YXXHkHUJm1QoE5 zdlf>e=z2m2=2t|anl4LWL{hdnUmx= zz5sZB4)FWDxZ}9kJxF$qLfT#cv>oWXt^#d`KH1-TCPCXBewH0v6?Y2q>?>uRes(;_ zqLD=wM5Jjj8R*>m&z}o;wwcZq_u*Mo%@Lk96w1Y}Fr7>0Vq&&^Rf2+V^@p>&S0egt zl|$zWJd{IYD6mbgL4P`?&+{JD)9|)Zw!qeX$6}bbS*5IL)DD5yKywL4th-F-h4&$H zclf=Z3u>giODH{0T@}aKM*$%g-8uvBol9W$+ml6ro^JTC`1cNaz0R!*H)nT7OkZTzjpz&1^v_=I55DHhV~yPJh3@`bo>r<5E^gt zHfe5{A_M`5Mju7sWut}h7$DdcM5(i6P8?JP0cnd0TkPcFatrtOj z#kCINb~W~)a4493iV%O`iHUxn(WzmjBZ!{~Wd4j!jP0TC z1}dFF{AS<>(Ad~0o`g!SZ@F5195>`E{=LeD8&-L?3^~uA;Zv&{kTe1q->B75%(2Qx zN$JNYSa7XIbHQ; zpZ^?vx^@_qnBjn!u_DGMVsaqHDPoSik*JAq2AN|L&g4PH@BT^|Ti+0<0x<_f%t{e6 z31T`#%!?uhICA!fBIdUurVwJ96(Yno7i17JItMB60n-c*mj-iqFo9ew|@}XS{ZHxbJ#38SYjwmP)N9 zkTjSFaCip6Sf(VJjQtx1Ytw)7|DjLuAqyELKEO9+y?(Qppj#5(-ur5KpZm{%&+u(d z`V8NDeV^Y8T6f_0_lV7l5AZd|z(cIc`^(0!ta#lpcg& z4hD1dX%NiAV4gmizI+QZ%ogNZ3I6$~MEOw(5$6zc(3l}UtsVbkS-Gm*qROoxY>U>D z&sLSAGK4N}g`f`h;1^*~bj{@#z0zkJZZTuGFgj)HcTdI75}?(2&g~=@7Gm}xrgOw? zwCj=1TKJ_C? zb}9z4idbcW$y@YkEVy^r5m~J{%dvAj6vy&(M zGEi4l(Cy*?9#MRD9l0$4@)V7E`xSJ)qSIoLY;!((B!p)re17E66XX)${BVAJ!{Xjs z$OlypRg!h)|7-6};G#ORh4JbIXqu%P1qIhm#KeTCxFplq8oQ;5jW&h|D#>I4p%EfN zr@2=#aX}jr@yd)zoGgFag>ovJ!@s#$hzrI$fppaBlJ>cR@Cp0^3JnD;fzyFBRarrv|N zw~={|40>Nry_K2FJMcDcs2>CO;Y>-Ra0P^Jn@dA03CDP_9dFZnY??pdG80zd=hm}3 zgJGxEQ+<2w>zSx)q1$#`xD#W%_%;>JI=Y^gRDSerc1^SPj4%;%8K)d^F?FQuO$G7JIO{+83I^G7*^+camOGibzc)0VFj0yjdcr8K*P!f1Ko+w9KCFr|g>=?nt@ zTeyEOc`)}k&^syYp~fNW@jX56VRlOUv+!{82o0e=66QteVfJJqKPsg6Woma4`g~ za9j*42^yXXEYZKoRqu;GR?l8~|GB##*>1iJcQt27pJYk0JpTc_itx3d&#DtiR_z(_ zTKU!IdaSM;&(amQi?pF?6?`=_+Tp*TU9=bePhPsyv2q0Ja7-PeWY*uQai~uK_oH-& zFJ{m?H}dGMNUY!#=#|Ny0Y*R5CcVqwYCvMLuS`Knovjjk4FaE~5X1Zjw1IGZr$P*8 z{*b+CMGo%x_%CSKs|$#R>9-RZZsIU}$wDwV-ojQ2SgUPSLQJ(S4_y$Cz*Ua7@I@n3 zxOc%UCSqu@7lsOhP$FP4SA*g(S<-66am>3wCyui}IHhJpHv{mU;yBZw7b5MZt^56L zseyiuvkfS2DqL5eu@)W2CoRyyTF~FP+hN;R*~fpt;IN(dT`B5qd*%=DAJF4%x_&NY zul-DuK}-T$rYYm&F-qW8hw0S|y7Rmm9()@&u^^0I90>nw#BoxSzf~(3mf@y*^#Z6e z@oL+}`9tK>~AFq}Ze?_%sLo07F>j`dg09@kx@O`TbH2L{jz+Ox;IIlY8=VNj4H z?AAqHkGt4?xGu+u_tA$8)Qi>F_r^42&}Zf;{Yvkoh1q}!N5%3n(^u15YrExJRJqkq zp5VN6P(B&Pcmd&77z0l{4UDJLChK~dy8EnU_!a=}gTg4Y04XqTAqw2?zeFV( zV&%8j1~H@T!Q)|ElwrqOn#EIVd&=T3Plp`U^H>v8ZgVd$}EnVaRoB6#ad|j!lG$7kBwPsUfGC49rY8OOYPN_jj*pf}z)!xO}sRD7k z!W<9sdrDt##w#auGZSTN-dsleN6GeX?muRu$UwXLp!H#)m)o{eh_PF*6$ewH|6;rY zz}uy)gLBIUf@M+=@5uKqW2gP8DA_L#rSkHojSrMhT31fSO|Np;x1U6dka>ZP5Ks_AzPZfVz+NOd!po$d%X^N6;cVlP+WGK}o9 zwflzItrZ&KN{Kqy*(vo{rOPq-5WM{#{*-#Tpc{PY3zSrFj3|_AK;bYd( zV?Y0wgHZs-HCM@Vp}?ZcKR!YcC-^7aU5y$(u7*W%BCM^2Xs9qTiRv8*M8A0&LD-vT z=v}TqOrw&Y5VvkX1T1g+$i1HoGW5fqq(WJ|_jRMkJ%}$w74WRI#Vmy}xNVs<tq8@srC0gUS&G{IA7b)Ij9Fco48Ev7>{Q@9TcXTDhZ#nlQI9IG0{XE zQ-5=$y!9Ep3Qz4x(9y>5=YviGi+J`}|96M{s5r+&Gq&+z7`ST{!8}!Re~#>2l37W3 zX$s+j@ga)oQ7fd2Yo`Y~q&0BhsqSh3QZbud%FvQ2MAg@S*}D$*OnetbI+-!%3_ffg zEe~18G}=3)9c`!)@69M$H{i-%d`NcHhu!rQPQP|j{S$aBU8qcv2Ap%D2ruEv)KaHN z`g81QDVOb-$&c5B&ZHYOrdrf`;J***!^VpJBqmH9EFI4)9c-XDL^oIsKb-}l1uV1iKaVo0RTLLZYlX{vn+ zCx%_TPEeOo8(t}*uXfc>X_iZop6Hn^4DW)g@F-w0^hx@_a*IDq3nt*0qFZnmpVm`j zWxpo7fw=1|P4-BmKR+53o9EFK0!JFZ48zIRRd^8Pf%qQA+}$X{*U;oN7&O4YxGrL~ zIZVzAPU#eeW^I@DG(J(klaKz3l1q?+yd4kJv$c^Fw)?)|96JoBHH(8Ptlgpqwz$ce zd=*TB-(*t8iM}UdWY_$j(6WJh7*0`r?&B=nKKqQEP7e|@z4264R#^Uh>WOlyTY3Yx z)-$9l@M#TLFP^PiOsK?=^p#UO@2b1QVB2G==}j*!%t%xca$P7FWU4_0ZvMrIKv7im z6Z{(JJLFJM++jQycbG=sR@tQ}^;Md{BN@^@x3rxL-5d;&xmn>t2?OLjDsZH1X!{lJ zw$I!Xl$40wMex)bg(aviB*^0L?m~J~Y%d-r-&~1Pb%p_Q=$t&AO0RLDv<|+NVyZ#D zGRt;Wut~L4Jum9q!2eRQk)0?FvmMr+C^tcGvE4tJzH7!_YR{C;v>|KcOj}IE>pG%_ zM5B^KTyA2@WGodv;4%wnovHjQeuUp`-X%=xHUWk<<(7;rZ>B4|@llj%K1&y43J&5~ z<~j`uaV$&wi0PVG`zXJ~l$DC-&req2&Wp#@A#MC?Dtm!9uqPSY7Jd&?w;LazXb{F{ zm^Km*yyzF7WO(*b~~g-+{Ep=rl$Ot zdiSyo_rz-sQBrapL%!-t#0-{p6Xc>bJuameKFpWWUDzxnPI}&tdpTQO%P6%jc!Oyq zuZkz)kl_1b@<2sR! za;&?B;C6MXa~Th*-Zh@!LAnu9b*p%_EI!<0aaTU1D70*Wfp`*dh+jxuuvgB55j0?c z2=XJB)UgE8b}^=+^M1~Q zN8>_42v-tp8I(DH{xXj%Gl;5Ns`LFr|AhHW$=Se(D-e7u%tJAzL9VocH-dw3mz<)f z!{bZ{G5~`>eNMrK%RrJ|xt)oNus3){%lD$)wrhSOxKxi%n;@E4Q_3Id=z<^|wR{Cy zP*qsH)2iuMXNF#p?DoB)RJs&EspvQH97DD~j+1u-$^+87b63glKgbVU>Jl%LxBh0e zqO@(K%ciSo5%gSJT2%+g-AucigBZ|b{kBP8oK$ItVL0( zVdV zVF}Upmdf;Ja5mUWS#(%l$%_S8gi;mYm9y!!H2)U1Ta}12VKx)lIVj)%G8PHEaXWT7 z*Ctx!Z`CkGJj?M2)wEG>ZNszOpcIxfIbVG}U{~8Ggx}v%_rq?GPSGbd8ZV+A(*5#A z%KQj}?JHhM#%Te)P}F>PcKgc#GtRms@Z8(R%g zjonC_xujS4%Pc#*m%Yu$q==<&aka|E$V{mXCV%;yk2a*3WWD`zt*C9UvQbbRClB~- zj|0o7--HMObwp=ljTbeqG`g1kM8}%Vh_K7Q&_KlAZkPd)T#nMYC!B6GJM_{m(W>rN zD>8v@>40Oi#?1CThEdU}$Z*ebNEa|y~X?^i;19_S#*%I`$HY5A3eJrj|sLAHX<-Y)4Nr4ISi-!L{b8##-6LlbhN z2?cp^69@rnR>!s@k?ZoFDSp z!$UNh{M~PH=^glVUl+a*H+QJWp%gat9+fGC@%n9)y>LqJ*3BSN!hWDR$6u*D`3G6j zd1qaQ-VM}Kx7d(TU#QsLqk`ntOynZ>VPUwk6*eDCq=I!uhjb_d8bcFEQWDNjfR2!` zAegHETov%l@1d}8T|)k9%(#9Xp@N7@Zl$v1yBsO|{09_kq7a#>+hN-)o{|noO(~5| zU9+=}g_UYI&?wtc{JhykqjZG-P7UAStfK(~@sOU=c3^Q6Q1%P-X~m{RKR8f>;H!WW z!k6$-Y}+C6W2f{dDjI4FpfpmfQz}KdT_F-OGu6I~+_SA2*K6C`Zr7n@#}c}DyO~<{ zEiuyRvdvDPtC?Y@Y;x=bS}p#Nl8*K-Hfw$FS?}oMs?X>n?7`PSb~;v?#ukw7f})#L7Q2ZGZGKM!d+{a&tCB1f6F)>*Tp_6B;ox}ow8{^(#p|*3?rsb8;`k0J z)LmFdbJSw|K#P&rN&a+HPwR|1*L9LV6_#?@)86bHl8I~vOVS~JD$ERGmto*5g#DrN zrs1?8!XRmeUdn=ga{#8UQL^DZ-;RA)*pYVjB6KM)ajNY^A1k7(%he$Y`5{rc7pus13jPr-QV+MOQjWY zzTK+Mw{+2Bm$J>Z?}`aj9azVd`$v2%Xh4czI~j%w`i6VA5gVFv@JyL zq}%zohk8i_CdWKuW@n*}F<(<*0*CYwUbRb>H{FjnO4Jh5t6IF+`)h%)zM@TYMV9Sz z6RJ`oTP6^u>-aBvCQOZw$YtV|ILeIUC4`z+kn*f08kcnarTcKUy67;i+2yibe-3OS z;Q5V1+L>uPjh*OpUqzFg#qA)Un zscm&wZx17;nnx*yP{?$|Y1CefBssGhUoth1x~kY4ae)a$2!xU8qk$ zp7H>0?Oha#-Dzc~i7*hz@ie5R!Pndyp*!K`yV68GMcGw&R8&6T7@SL z?!tzSY}~d6lfN8y87V6U*CjUtwKf|dU8v?Y3vmMnTHRE$l2fSW z4Zd)2;REU0YZRvOZKqI%z9(K+lq_J_rGu{eY_04%#;75_OJ9)JQb~oQsA4|lkV}`F z>~*fV)}?HNl4P1P4l4=$Zoty)6l48+6}i-}9?syXdZLz9a};KH1T26nOeK$B#KCr- zyo0&4y?8NrM^@FB!?e-}H_78)XH$8-OCt~16ukR3+*LnQL&ue7x&CMm3&zi?G5jud zMcqjWPUrlxAwM>3(u=~gis{vU+sC3)esp>0_&^y1K0f?u8LDa$EG zhv4$^UaEi%%Kw@1=sc(M0G;P}3-w#L3L72LF=SQ7;-rbX5R>HVmhm%n-7@ul#!F%TF9uJQR()HYt|54^zS23$upT(r zO%Rq%UGw|OyQ}HZ_p{Z(S?7=7EuFF*hkga7^;%Qya!lNIRCw39a?vQOV>5kLRjW8! z6o+Z+K|C!>K7HIl=>M{(%h&#a%JanzTbb*^xxMmonS!fZ7Fq>u(F z2)Edd3t20S!Fam&UAWC!at@=U0qz=cL`a-*7-t~FN$QBhBAkb)7-yW?Fvu^YIi%gbC-PEa~%1-A*cr<+jNt|2PfT#^YG2 zPafaTRAa=0>2W)S82bEbrm~|gz_)npE~Ob}{>uKD_0D8Xwbdv_X8Lz%+ZbEd+V(a; zC}4ZAfT$*A1C1O#iU}z|a=f_jrP7yEj7mbOAk&n zQ;wg}Rf~p9-SM{9D2IPEVD|s0Uz!NW`g()6Lw6KLyh+x#h(8{QQS(MT2bH%m6YcH zQ72yJIu27xITncLm38+03}99Y-<3zd2TKHCTiw!Il*4zVeDsd&l=cGOg6#a5cc}&$ zeppgF0<}Z|%6*iC(&1D~-2IF2IWs`|GkU!mMmXDcSAAIJctx4Qk+z$Dw@deR-J(=i z8&;U@=oakCLTs@kZ3gLqc&F8mAC?96?7uHaxTa0|_r>#X5B}l)f z8q`Y(rz&-OR{RlNXX#yW@o1~HJKH;spA5(kj~>fB_)Ox z*Y$?g25Udpu5CE6zyPX~E8YRl$jA`-X`G@2GfxOatL`Vzy)K1{0@}VbE&nr;{gvI4 zeKf0SR<)G!X|t*X0BxnuXlz~xGtXtM zdyso~;KcbA*F7^p-nbB@uIm!z`h}sAYzg#cy6q>^s!wq`nb3bRPP|7b-F)em&T_H$ z0gJJVel|F3?q^i)9lEjGLPgm|$hR+~%3`ix*db@uN&TQawTfxX!*g6|yMrAbnI36? zrGJV%h{Zlz6;uz{C3Xyp9ViD*G~r`Kp;Ggc&NwZo;KzyQ4Tr&}5*7R$3na*Yt_n85 z_9{%8sjl&VOx2@aL;WGY2da9)_NfK`K*0}xzsp@`PjuC}3^O_%oFh{>Msd7e?Z74c z`@8Jx6TzjvLQ_}uB<}eiqd8V>$f(&T80xAvJ2sjF5x}8)oh#2G<6hu8rc97CG%n627&P{>W$FO0M8 z7e>jiFQEF4q7-@Mg3DCS&^(}C*3PHfL_dY&pmr{hgwm~o0dgde7Z#%W5Dc?ngdY|XJx|8!^CdD*|?V_>}xPDU- zW)EWBv<-m(G2`Yz#fS7pVNtYFdA?vmM2BYL-Fwh zn%RB9%-C8Pa&#KMqZwk(&J}_In2M)jv;*0z7bEFWoD(Z6NiM=eNK}qaglxd&^t&*mx1rEtREXHBeZ`_=yL|XN1r|4A zVl`O$iE+sPIw8u|2=?q^BjkYHP|k>C4jX78C>E%V=1uJHwcm69Y{mNOO_w%JsRmsxi~Ei0E`=EU2w zwEm%XmhPrU@Ir%HUFGON)qgGu*1MApgYxWeamrPgmL}Y_wjlM)g)!54>aTwzVw|(y ze#yC_h9c62kCEUrj?M{}6ks{}A#DM7A?N#oN9WQ{Z6~mxh?Y2nqTrAY$qz+v4W#Gs zg#=!SZAe5amR=SjV6&Z?e-G4#>HZ7&GWtcm>4C2(+N^ZXG%M_7?~j=yjk~Iul~Az&S&o$|B|yv*|;tWI{?K41C)UmX-i*;l^8W*^!G?A4zy zy}TRP4P^$atFU)x;lxbIy%Xr9x+u=Nv{5!Uv_=@5aaO!s;1;i-6GZ>J9z=&LL13XL9!C0~gix5*)ms_!b>oX($P|3}M#{#2b`^!&lHj z={qm(zx79LQdBVZTv!&>n+K>&sxC@2T!LnO7M4hDlkjC#Eao0s%=2n7_d~9FBkpEC znT$Iwu4OxLCh4LRQQA?LO{af%oy$VCx##&^#}t45hg9uS?QVzZcMYgnc$jSQ_Nevv z`U=JsF*&xH zu0qr{h4(CXVd;VYEv#gZYjW8`I`{_kD3}UNQTbtDhN-3Yj1VnX0!DSI^pXU`2VV28 zJ3H=LXGtwU6KNpd}tD z?|eYeu>ttXJce&uUsN7u9VNV%X*(hua7o%sTa(b_w5AG;TW-gY^MN(nGLq8mewTDk zE{+YZg>6ly+9#>ulBt%i%IjyPp_te7lYGOriCtDew-IY`=k%znK2L`miKoiB*jaDU@z~RiyKEfxf1cO8hQx!0-hYzFVO~K05>5FWteoh z{R(_BP)dEyNO>*2Pa~_aSQ)P3oh_B1VlyFNb* zw}6M22MbwqfUX@>F`!M2J)jkfXhE`9K8*z)8zG-AQmT|YE?He*h_ zS&}~4g>MiZkV_hS*d+ej-6+J4yVbWuQHcnAdHGBMu4_*kU}=mSJl@4`1P00VWms*j zzp*z*ov`-m%Swj{{D6hAoo3pkzARVNhbXJMo~8WEeLa4`;HxnTZuU*qNZ-nh+t?l< zQhheKY4KHC`Q>eFfEOmXq>o%F$6U7Krr$IYyuz|>5KXf!;+K#)V!x^TmUEuucvvm3pqFs+M zOqTQyd>}7|l>OE)F-p#vt8!&{6B#Byh=cEOD+#9uVw(dgHseKtn*qnbjKz0Q4R41b zP*bBiPv@dC_XF~7e4zw6#@8X@*<-H$itFrg)Q5=L9f!(a-K}OMD|ahQIsbS4VG`D1 z08>q@Leq-OZF`>driI5Re;bp65NF_kPqBF4|`X$!{0hM z6K0^Sxea+!r0BhqRysA-n@k&T*BG=7j%6q4O2)Lc#qrLM%YLM+ULHVP^`XWYM8&d&d%AKw`Uc>M3y~-X~$9#wv1h;GOT;iSqxUI5@ zN+2>B^Ww%6grMOS@2~R{g*wbCHx_fNXGZwk-?znJiuWcE`#|hV^FAxI&XDXNK!klon#*rg zpvYA9$u*wr?5-m!?g}z8@ ztGKegRyhx-3~JVh+S2rpU%=S1>ShB^mX_+ALsG>a?a!VfSB$JI;`Caor@t%CLpk zVY8lFG0BMPI_l`gz!|KlRGdPsXc~);|4A2^G{I36-}i4f)GvzAxFj9S#-c3k;=-`B z5#*X;d|WdEy{^O?!tzp2a0*%DQ4gz-8EVrpl>;U8nJr)o9PhE2e6asqA5-nhPP<2J zO1Bk4g9sSDM4tKxW818b`tf>f=4@cYfX5sI?z(f_;Tu!UZB&s%27Dg{;;|6Dcp)WG*kKmQ;mjjx8iNZp#mzL}EAe?XDP&B2rCUtz)8a0e+v`sOba zoYv98u$5Zi^~Y@&2FtJg4r3?Gg{T?zWnr4k!kw=AX!A;qV_cK?QHFFnvv7Z4q}_Ut zMo6t*s2wL>YrRz`4t3Puq<0lIyL5YGFH7MXnt~7>mRWcJoUKX19tX-CedI{l>D0C2 zp{L!ICKBOlRwHRN8eOB7xTOa9bQtARrcP@4k&sN-4aUn;l*-Y82_^uD--dccYndEtEU{lr_FoWVe2g})DP18=I$+o) zy6`0dl*P_Sfwn^a&816tG7l)B@M9dbKY5kbl1ulK8*6{6L;BE73G6)#nsPK#*H^w` zQx9BeRX*aBMP!NIhS+Ifr96j8iJP5i(Bn+C577nn?f6&%_77Zcy(b^o*h7*-^C?Gv zTVKx6ACxD)(L>N5@8X>X`^wc+sRfM?+f#(y7(w?_0AB(@?mjltHWAfw|H`H8!vCch z|19hx2ZS(rASWrSyYBjVLDz^PCMoBJ!D$SPsW9Wg*tVkcqW9PAK6tA1KF;;S<+}^m z?aWC9>YRU>0&{t0KHYH7KD+Ha(2BTMNjTP4j{xCnd8Tc;c8({g@joe32LHrm+zQf6+g33Wc3SJ!Y6TM!BSSCY^C=2I_^O_y%rN&2FJrS`?+jn9gSN(lT0JS@#65*c$;kIvGCg)EOv}U*1V0CxZbIxCA3>7@t$K*W>-RPk2 za+lm~+e!5g)8~5Bo8sB&s=j>G2;ZB&3`qr8&h7<{D1+YI{zx1z3wL!Ek?9bjTX`pY z&8+LKaw<7UA4Rua6#j;Fp&WpML3JcSbvW$S6fvw=+8>x|+NdjT`~*0L?Zr{e#SYt4 zvo97wuLTjs4&BuFz%^*=S>&)Ra#$8QG>dH^S*)R16x-eruPwIi7b0CK zbeF8~(wl0Y;cvMG6|S!ahyD%zR;|)(zg%a1_qVU`KEYU&6qB&7S2Feb4dNM>vOCkZ zThLqM#2>72Zj-YS7`jdhP($>I`A?eNb@9n=q=zh2EuEX3=uTtMcpV_ zw)ZOg6g!rEO4_sPpFr)D4j4kgRcv=l5EprPz{$KF<@}kr)>kn2<;&aB=v}VVJGR?r z@P(|O9;pz)$fN?-6f$LeAt8`Qk=~IEvbFj$KX$$Fu5Ka~W?Arttd#I0uJ)z)J@Qj& zYN(EacS)#Ece%&pr6Y%TE!9NUId{5}{ABj!XweC@xf>4}c(!I^ZEL@Q$FnK_J)GX>xFteTF_&?&>PGPI!DBe*fp;^3p!l`+5c#Oj@I6TLpA%Vd@9FE{{5{EN6^l`YF z!{<5N%;CEne!<}x4z+z4jODN&hshkKayW^@=^W1H(97Wx4p(sa7>9r6a0`b`93J8D z5{HR>d43#D;V_@WdpTUq;nN&$=CGN=k2yTYVR$01KMsd+IG#f{hqF2KaahCQBOI>h za0`b`93JBEGY)^`(3r&Qlfz*gj^ohHp}=7^hpRb!mcxJatLjJS4ae0v46eV6K|=|H zU4PB5F!$U0cki$MiVI51JVh3v!ZODrSUgpwf~Byc$YUw?Rm`(^eHDeC%E}SO&~Sx5 zPl4bG^|K7EB=C>^(ksNWB1?G%rsXNLsLmw4pd1~GOUsJ@W{g_rt{0AFVB6u-jjDW{=_R~Gt8y}}6Z!Ua5EUj`tb&9EY59;qaSq=NW} z2mVHoB2or_&_1M`h}3)yYp-&#tn8YO`UuB=P+?}G3n$@PvpypuBMg7nr;=B&|u3IR}M)Ydezm#uDLely5S>6rj8mtX6*Gh z{K}d(&NhC+jT7yTN$JjvnGA%4!1Zu&=4W*tei}D2;~bU zrInU~%1Y0?*<}kYMWU~?e2%3YlA7;fp-Rh3h0=nu(tBz0##{^!w2dfvAf{!uI0x*O zg%zSN6xR`!Ou+&{=T%e+P}aE~NF9sg^HhpuK;Ffc!h*6g%nWJ@aT;D&G0#i8-msB{ zWxi`H#bS9Oty79;K?hRhm4Z(!6rk|%k9s=G%CZVdS=q7Nqp{qyYnE4tb4o0g-hx68 zt*){P$hK33h1S=oF7*{GyN5O2^jucoLJ1&UQC{d7@yqKYG@n$=2U9~FJ2ENa_>Z=t zzgSL3jLvA3cnZ8MB@FkgpDE{p(uyu^*AefA9^+LCML!eodW`24p$6uc`UJ6{tfP^z zHEBQ$H@3(0@2V)rp?4%y7LLGlPzXF? zUL7A61~YJNZ7m?4np&M*y#i*_VOLwTXH~=e3X^blHtxAuhE=bqhFAoq;gXUPgCU~I z>s{dWUN-;!zy7ma_BSl}ce&r?e=gvRe(tZPo4?K>mWBLje&Jte{N*8k+F$sm#1rL?O4H@{u|;6o3u`Q0OrKKA(UpLp`Ar`N7~=Go_- zf8oWK*8ky;FTe7qKfk)+|Gf5>*WcKFbpI!j!Y-^qS6tjN%sA*O}tV0?^2 zatZ{|S5!dLxye_`O|ZT%5q*_G8zHkiMdh9lhg^}_vMS1{V~)sSfq>~?e2jzPFbw+B zc#}QqUd$|5239P{5h(MG?lUSqzME&?4Qr0f4zAq6^8);Dymq_895o#$BZ7~bh}x2zyr_$tN=N{5l}^pY5hT!K+Qk}K|MirL9IdM zK^;O>LXBd@!Y}>iX*bWvO(r8?{f%~YKWfBmnhdzlE28jrp5H=P&CHu#Q6cm=@pk%Y z21S!WLKGQPWF&)fBgvq#1~O=Lzt+T-J`G8O!${27)g(rjATHOi3}JUO9uE7+xxV}xAbZ-d)55DznYK>!wAV!^TTvUYqKMJMUY-a ziKN%qzND8Xoe<2x12O%%h_lG?7{oIXWy=lV~7`MeyZDkVNoH91UUP4J01i;=wH*+~P-@ zy-C+Zk-lS#NMFru#M~a+8r@=SFnA;K!?RgiHv@u^mKb8$kwh#)BH+;%aOguUnqDNS zy>DwmOGjP5J`NU8wjwB@`ExZo2@E4$k4U`tJuD!6XjH9#`L1|6R ztJgF_=E4_$g5{Mo80umy@Nd43*24JKU_C$`2mqnpk^mQ|iy+?1rW0bz=}0S%(Pyga zA2kd5GJL~T{}9?&>+)mpZ-eh99_A95hvpGdtj6iBC%vHzy+@mZahBgo$c9@x;_L+T zg_ zU+?y~R#Qt%LsYQM?8St<2VW!4m!>znBfZ=?gcQQ}(Fq1M1Ea}6pxuE$Lj!?^20~c| zj!tUr+X8(gl#ZrD-Ow_}K$(HwbD^!lJ;?{*3>snpoY{C~plwFW9HAu!&qX1u_TrxKE%e7q~S3cgN1m=zc;j3FVZ_b_BCU> zp*6fk-=O6<<^^dm4$2F3_->RpX;jShLj*G!4C8%&NU!ghUcT7&=vHHkp+PO1H5d=* z7Q#^4jn$Ia(Z>sJeYUBM930u zr+Cd~cnw4Q)lnHq>G3df#U98yejUqIb04n(6JlF37~I2Rs_d{ zcm71kn|~(c(NG%7jU&c)!}%Nu>tv|kc&K0C1=u*A8x8dlMaS`^WaIUH#>8#wicOG? zkPd-{5~s(vceJ9B_qP~G2hw^7`!Uq%vz_@6W9mQdD<_)>8MG^eZmuwrE5;^~E57U3 zp4i%_CBC7TH!k0-@-*3T@j4R!tl4YI?-+j$9)$51z73%?F&+4y?#H3_j&Z1iE;M0U z5;j&tGy@{Z0N?{dN|GG~G8PML?TM9Cv0oys-vV6dosU6lym7M4$Xg@|=?Ba2bQ90~b5ritarUFh|Y2IBOTd4$W*w&`=#^SNMszD%(ZeLkpj z)zPh=QC>n*hTIE1UW^Qh3%LC;L=U+1=-r~ttaN&2i*x39eA!TVY{<1(mYM8ml@$s4 z5xTi6D&~sboA_ZXGyv|CJcvH&1zth)Ax#LLDuH~d;rj~oSPVuRt;~_sfWtETs#1cKkfwmmgHW6(UjdR#SAsD_IQmeW2bTt!7eItfvsFEl2v!Hb- z4U%@PyP}|o9}_xIcY0>l00dl;33<)PY0;|kF?&Q)FHb-Fg{aP))%37>uwP}zJ=Ky z9}QAo$jBFJ^=@pF+|t6ioSt8~oC=}BawwJ4t(n|X=%(vLY|D`hylG#7WZ2Dk}L%LRK@%;P^Yp6CtI! zSrojYfMxuBr%!8!o!hf{oax*>hr?Ms{abn7 zW!xPPK`ex=`v<`1Napom~i_y2d27^dFa(9`MXd6?kymoHp?1^0gOID^l;z~HjAtrrm5 zmsC@@9>O<1_x^L19+F>ni9tJuZ~VgW4h}a$_=C@W_G~}$`Lpt~zwSBxCC^aPEx?f6 z^8TIgTgYAS-~ImR%fr8S?Bmw+gp69kV*YT6@lmKt813m@!vEizXY9i}uiO5o`D@6} z*G2Z|?&G&#VD($A;r==XTT&U!=J~2|Rl7=;3U3$nr}DvhKl1xx+&+xkBf0(Dd1hDH z;(Tsbm%hWeJx&dOj@f&0dkeSs=Js{mp2+Pb+@8ekc5d&-?FMe|ucmjF*#~g@dTt-Y z?JKx_Ft=N{-NNni8D>}eW&3Gnzf!F?Zm&}D;dWK-DV5vrRnzD83*4T_?P_HkxIOWS ze=WrI1Fi$s5!N@Y?LZVp`>Iytm+IG#f*hp8M65O@7$l&{y3sbd)RruE}QhPflK*M9WT^8Rb15drTVM(GQak3 z**K7$lS}@YU$*m~i{Hxewv6e1eCley#MkF4#2@x~8+^zCV1LEOkMOlAe0}(P`0)5L z6~1Zk&C_(Gi}A)0wwA?PqNq6ab@=cdtMA}5L)ekxaS^3}(YsV7`il zu>!n@n+1R?x%qj3N8wuq;g11~yPA;4z#I>7J2&qDIPDtXufe!Mqya(Ge`2V*sxi3G*blUkC7y@a2Q~ z6@U-Ipdo;H4Zvj+03S?q0(<)o>t_eRwi{s%0QZvs@0kc~7pWm{0sL?x!w2C7ZbmrC z&hm8v++b&UAspj?IA9(N@J()h3!rlnqbr2V;ERUzYXFV~hC3e22>%4%IvB(@06d${ z(mx0Aq!aLjFy{a+&ww_6xrtxd0Es z*8=7X0L@caJs`YoD$oYF-wyDbsVx0=fbV4ij{xq60Ir?})2LBHq2*>qGYB8O1;!U} zf9w{j*MK-N48YAftlkigp25l}%p_#*OjgEy03EYXrw;T}fVHz&_!R)hsbLewN4k3&13pNSYzc0Dw>3#@yEd`~xhPE`a+h0MqV(I)^mJ11z`;@CI`cz?be~ zd94Td)m<#^Nr2zxL)(D+4*;VISeR&l&H{!5!bRMS@HK9>&xZDeuMGP&z?a}#h3Ny_ zF`K2+4DgX6R<}Cl%QwL}tzd_#J#+2>%1X#q$|` zRs%c(-x@HV12}UD&<&XL0M;#qIsx-4fNQIv9b+J0fVVA!HUe`Iz^EE13z(w;X4V1z zG5CTQA)mrm4d%}PPFn?Z3Fd5oe}``~nDMRB*oT0Az-$JX_Ymuw2*2j;?En`(4CMv< z7XiFw4KwEg+{w))z>HjcgtY}SG{1Tb`WM8t0+b$O?YIhH_3vSh0yDyv-?O?x*yjmm zP6oIWzC;Mq3~;)sN5B)z z170R%_$w^^RDjYeES*&VcfEpIdo`%Pgy{an=vEK#g+DQRSP$@nKf{;>VLn8-0p@5h zBmDLM0a^re5x|+R0X|^P12}pUtRImk0lvM7wPORo!<(7;7{C>80nQKx;n}wsy`2O2 z&D(75OWq1R)`19>~j4KL(lrGs5pa5KVJxf$VMZbsStbKHy& zW!lk#7r4^T@31QY-O00;nVRH94}`TQx* zi~s-t0096J0001UWps6LbZ>8Lb1!FgX)a}WW$e9wd{o7`ID9sHvN=gMISXtcK!5;2 z(V(JBH0vg?G1(B6;Kr3*A|%0zG;V22!#RLg0>QIub24nDt={Twy_Ji8FTJ<-*0%D) zR&bZlgb2zne}GUMYt)I08cR$TvgEwaGiNsm*!$kTe|`UX;gfUD%seym%*^vV^E@-p z%vL|RgEMj*$HSkdaom1R|L5fX_kR@rvS<7un|mew&6)cROWvIMK;xt9^Vc@*=zsuDX!~*xNyV$KE%QlkB~S?1cCIk3QUp`Tr+e-7bz>VlZ-s z-;$bSTsLPlWE#>r?hObm)#D~y2M-HN)O!KHQ#dX)ktg})oCdwq^yC%>h_EB?kr(^7 z;1b8p{RjH=fBV!|!s|8ABZ*(AaH^R5I!*jD~(n0$^~b#v3|hopx%t}$OP zlbZ#9Z(R)s^*V3X!MMYPSe`*Iv+o;l;eWhE|Np=LoBwJ^MS&1<8`=bCpi92wS>`P~ zY?|$yT2Wx>;AVx^8G@g0@kLFcpJRTqq#(DA&n#If8y83O zOJ>Pag4z~~&%e@3x3RotTgI1hw!>F3mQl|WT2f%G@zQ$82;qFlJlb=GhgvrCnJYsTe5RaH)l$4t%0Yaf zLbKygQ+fx-VWj+}pYx5D1*PYK^u3>6f)4N-8hNOa@*t5&ANvOM=RvyLOJ7MxWambw zC80hLfLZa2^!dE>8J27%&`ju%2GUV)J4RCg&uxdX|Jsiw|0x#)7-JvVT#!dP$71j2 z-LwtLBx?)ivcb+%>o~PoJecMtgX+qHJo+!Jzs$j~G+sP-pJ8zgZDlchFf4!3CN6GW zQjizulD;h-Jb6F;ZZb(qQ#Kb^IB7{66p3U~9z6|YGI^lgAdk0&?MPLS!ii6Zk-|<6 z13(|FoWuzlu-LHJO*_pa4QN>eL~y&NX+VP32B1A4`*wJfL+op$|27x! zoIHLfmtV#~LFstjtPHsO6;dbcX<+iZD!VPUPV|(Dw3V*pU=6UW;h(xBLYtmTL zU@YfPaB>ixR{_yljs*&W`d0#R@JOq<_xm~a-+)iIA3)3i0{G@N?*7op(b+H`DPgCZ z4jXkw4J(J2w?h~3z?f#gcE6g1m})r!mJFqa_yTv0mc#3%q&2ocDbf9eFTi}zz65bt z8F7T}<`VQlfB*^)y^3vgoDHo@*>Y3pMK*;4wz-6F4Q(>$@}SM)44eXb>MU~{4M`@$ z<`1wmzrjmyG9ky(#v@SUGWvKXyI@JD4o6RweqQt;&EIV5B!2~`^F zfwK{H;Ocql$ko`YcAwsarwj7ob-$M`_%#T}&};lW6cFV^mmdZ!!;-|$>F8WbwRFC)J$m9({Dk1CpQsr^5Q@G*>pB#C`Yv3Hz5*4v213r(%WjC;Gw^S_SC9!e4yOy zls9^4%`^xrF-@AP#D=AbODnK+wqu zY9&V^mr|AP8If+2kq_yB`x&6Kphe1~N2XtmnLB}5b&qD3d*s<3x*lc|5(~L3Zm%Yr zJ@jlgP@JpBb8>Kdyp>*VXwVYg#boF(50mLOJF>CWgC2Voi zj|;E^&D*MUcmQ#km2kdW&oY{WwcHVDno-Is%-y!itZmh_!U!~!6?AAe%dY3m8N_PGY4mDIxs z%7;eDTzIlIP3bf!y#{#zNVr=tM(|~U*Bi=Tjgj6I$#n5Qq2LT1?lXjg3L4ts$tU;~ zIoucQ5(7U$^7fFkAUmvs9cXgH#AuN-p%^h3gkbdgHj~m}NY*J8f=YXf4k>?3&H|kL zkn)jHnlK6m5O*k1gZw$F%`55~+6OxkT$-3HL<~F&VLevO}(v)5VVA4F5(CHd`jR*cA%S7Ai1RBNxx!-#zO zK8(nhs_bh|(i&1>yYiNW&1(5J- zHFVi^OdeONvJjnwxes-^VmN{HqJ0dRQd%ctd74@mhZ2{G2Tg7&K&DzCN@HboVw~j9bHNclpI(F*@R+m)|sc}GyaRKO6?3xjfO;fDGZT}eriJ9u_#*M4Nx z*+*)CKuEO}V<14Pfld+uz!?%PgJ-6Om2P8FPIR(~v7oNqk%i(|PPy3LyBlRkLV$V6 zR~?mR6y^`pM{Wa}trSSrS~Z(gHL6Q_lI_S^H?@qD#*?h=Q$Xfdt&`IzcMHIoNG0z` z-7y&wClbgsk}go`dMt;B*a7Fd6xpg&txJJQ4ABfCK*>%X6Fchb4)Hn~$_1qMP<0<& zgY4kyQ}%-f#~HRv2)X*)egWI@%LPoEh+0U?5fmELg1C>bQo4nf<~S#%k?NT8(7G#$ zE>lWr0mw6XJT#DGt%3#sa2WvCwS(;dr3Im$+S&w5DHrmAr|flRc^a*l1gaPQ(kFgoYGs*9?wZk&ZZh_MX%?a+)pN`!7&{PZ{EyUmu>!Pey)?+5)3^ZjaV=-A9!|xoPSho3ra+J2h_d?U z0mL!CKxd(%)(#(w^2R6$ebG!}f&x;YF3@ddp{Xya0C<@+jEcYu7Lpz80+^Ew#@uuv z38R$0QiwC<ccx3sX>`{HSVs3@D*tPekY`K z@&y$L@Gt-rzK)$(+maicbwSr_8=t687QjqOj zxqVtOC`e-9PdM{TTL9l}F3Z26(xfz-!Ki;8JGkiASp58Xkd4ID<}*P}+N2fj#>lBG zvQL%ItIa*C+^u}U!?$Cw$wvnZL8_Ug&mnM+c02v55YTgt{Vo6i8>uo_77ndmPY*Fp35uf{%T0IjvQaTA6m4Bv<0q%u1L4T)w8 zC(l(`6QSK}rvR=v>~Rop&~{9g1W52;LOad2qIH1-h6@G=*gnh*gu0Pf1IGSWGFD$% zpwH`J3_=9`Q6fk*FTHppDqLP#>i`9Y_S}ijjpOjy#lBx*&tDYdv*-?dPDeucY&JB< zbtCph!7ils`XnJ$KvN8ID&20=8RG1%2`-@5U(uzLe|h749PFX-x+xP6xt;|USO5g> zA8t^a0ea;3>$Iw1!n@EWuB1t7F0ms76elr;iZ3wZ|0%udOqJO-Hx zw7dCDnPgmRie?b^hNEWjV7SIjdvC%9f?XyX(@pJ~X;gYn0F|T7C1}-Vx(5ZzbPWwnRs>z|yi@+`Fo>%aB;5-JrnfEZ#((s5w!SKU;AH^hqzn@LHEL3;)?LAs zf+HCmH&AJI%Jp9A1YW591KROpRt0cDfb>O%Q`xG(9%k&PkT=+pz>mi+3E+CbrPMJ? z0x9GWt_O(0Z$od`x*TW4KplLwO;AH;5c5zsd%gzG)@QziXW*0=m;v~dD+dsOQ=dN! zFL8S&#I+romtV4c<2do)A@N|#a+pGuZqYUXX32mpEFKI*HbIm>EfV8v)!@^R%@GlQ z_+RNDkP3pCHh>Oc&q4R@V4cjmZV&6yJ*+eLuuk5Co!PqqvOzrx&6n;`s8PCIp@KB0 zs!Ga%kQnsg(tHTvh2DEdzWLroBj1Kz8?NcG?-sNx3PzGrdUN5soRxC7w5;WFqg2syd99S&a(SZ|d{{`fhl8))2N2A$R-Ra% zhy+g6N2}L9g1@ErrjhUb-kG?lZ!Ec8p4RfXVSzlUJejp+BknUGOJOL2B)oD7R#8!(>QILyb z;4xh4i+RMS{>EVt2VbFOk_CuoIs6G#RbucbFw3m$tZ@CZ_az7pG669k`d19%>cE(BQn|6oa>i&9VYHxJ(&W@v zv5$djbU+J|RFZzw16a2h_$?21@vxk^^Jx$cY7ip{dv-GM!))iRJhl~j{e8d*+WJ^w zL=0RHWn-KF6%)T%g*0E>w>a)@#CC>)*kpGoh+@G_?{zTK1E!`KolMeUCD93Oi{q^f zu#>@Iq@Gd7s<#L#B55N$028u82*mm)CP7NWnWPPsi(8<`CM)VnxVwe>8 z7(RFI7-_GY9zqql_bpt@kF67*8e#+f5iSzP9uc>{#^S#%{%8TJTCqo^A1JZ!NpqFh z_r>4~kT$@oZ_&{fa8c)>#Ax8M9uotcf>{b8k5PuM;fa_?*xc_fq`HSk6SBRo(FnZ87|stC&&S8mvT67+o#B3 zQohbKa&DqTk5;rA!N=?1wY4n=5Y=zXc|gQtfL0;U=QEN(j+^9hi7|mjmg|h?={2IB z#hQY{riO4*jut3%y%^XVXXG7Fam;aU*lR%cM2PFTYsTEdB*LQr*~S3)nvUSx$eFFd zcNjh6JcK(8y{HSqpjnWi@5Pck`GH8jl&km5Km=4C@%6>=D38qZ94Io2;}~gt4m7D# zqd-#~?{1y6nRj%oA2)bLImHdWKiaqiGwcA0c%Q`N6x%t4jWyS79zzaO6efWOnH;*B zG)QM=yKI`tkPgWg_31=oLM0g9YQkjcCc+y2-2HBkkM@8Kp+x2@m+b2Ej6h=K{VgUV z>&@2erO^W+*Tuq)$^>F4_gH3i4`bAaaNn7{)ncD7c{RqnggrY9^PSO!cdvnXlhf&V zOYSdZM0he5oy!E)j%x%~H0|z|Vopj$*spb1y&~lR@)Gp;N@Np;#cro`+pn;iLp8vnB_?tQ|>~Hdp-Vqy6$Ucm1#@` zAqPeiLm@1bZumNxSpb7t|KjEGK97IC4o7d+OHdA=$l~<=mevHrTfRm1jF~p}nY0jo zxc#P(s~=?Svk<6sSJID*5>i&4YiE&CzP9JtQ9P>q=~w;OIhdQPmG?yR6sEmtKz3{d z+zCwH0I=GG;t_s3g3^;%W(-aNCTnY*t1W5E6Qt z^$ikr+lk%}p}l`clhp+xsg5_)+umG3-;ZiqSNo2Mg-&kL4Nh(`{JjK!U%_7-{_eWb z$*qGl{{xN7(JFleWTy?SuaN5(39B?=MERZmd{B%ZGocaT=oACE^S2ANTeWBhJVUKG zpG4<(IC)MHv<_!#hPp}Ua29YK&N&$!&g&pp+~Hh+`-mh9^KFY@4o9Tv*cyBDTVfys zsm*l)%SMBZ6o;1cA>N_7dJZzc;ms*zxYO0m_;Cf|L!+q)o6SqAyF+HCY^w$(6%oo0 z?O+()I0hqSmB6*EDriZfq^v6Dk~obszUw&DbV>tbv=sAiem-g<>`Qs1n+s}NzDry^ zL;yWO@+y~xrJ6P)aKOF01v#@u%W>*USS3X6CLOp>^vR6KCnnLJP%*! zZE&%NacLZxd@keI`D{`&tHF6AQcVppL-HA>FFgPDl@WV~SsQD%KNDlG&;|B-{s?;o z53|=xVfOkjWX)eZ#Tc5n_)s<9$!aoyWK7tjAymM~-Em#3>SRbw;<<1qLl#LFL@<15 zIm>ayha+dSoCnY~gCP#X=hnSf%rLluKZRD`2E);aC1^QIy4h-J6%KH99JxFGDRQ^I zURs2mMsLhb?9J3^-H<&Sv)A?hF1g?VoeSnC|K=I!PH94!a_Od~uR>LyE0@M?%=Tw3 zhd$@uJU<>gKeYmxKD*X&WNLVJL4Ug;n>hRTqcw*7}*o{I~_VDvK=TjmK@~V*0C30Pm${QYq-+=P>LN2AupFF*p%LRJA3v zjH;eESz*RqgX#;)(6H1Hx|<8}E69>3t)Yr1Evl;zINlWtc1c$99u3^eaZsrt7~bsM zx|q0P zx3j(8{6>6JWoFVDOeD($zu|r@2ji8)0;x9B>u+V-;P&NaX?&yJBd5s`dZQjqs$*)E z`C62I`tj8$DIc>v9a1Gg>kiE4xIf_F*ga-3a6fz`iako-fu!C%ExFw0vkl;?=p3vn zRvXmh>+Puz0NHMs;ng=ALQmozgF}xrf@mOpxM1}L>1-HT(T75C`Iqg4xl*wt+%f-$ z%WA)-tVBsGbes^Wd3Kjs`Ugvke4{i=qQE(}QPiMB%RgG;0lh@Oxp5QD$fwcVmWAMe zBrBx>7)7I8?&s-bKCwyQrFYnHt$#b@oiQ&fdexcK}Y&49J;k#MN{! zbYYQn1B&rgy2P1C^RTKuEoUXl8G398?W$V(Gl*^XTNF>JPBuo()uU+E&2t$T;Z3?{ zL2CUI1>4YYbjl*+3xppNmF_EQr8%0WEH&pVN3{mX zsI1{(?ye{8E5>Xo1qbAGFGcB98@6!zK*NtQI;3XWJ#V|OwbM|S-DsnD;1*SXybefWz+}3e_ zguMe45n8|ywojLM(i#1pKbNNC-Uo>}hGdaOfDSr2Gh2&}*7!4MEvGY&eY!l4b%u{h z`FcmllYDfT?VFI1T)=VBOm$&2%||~P8nca-WQV`Sa1b)++(h3eG_R1}G-V+tPjJ&& zI+cQ6F^*RJ6?b@UAMuugRs&sebajkP+cwQ{e8bKD?&Y>qgI_sZ=BZ()JcAAmCh_s% zKdKC(mSwetd*4Be{x{WT@|7wJjzQUI8>nP*LK*Jf_-Ima-K%tn$|rrQjQi1!)O8TK z@eUA4OAs-jKopx*x9id@*}?{FVO@{oFVZ+j_Iar398>Kae~};Z`h}zrTa8N58HikB zFKvMs$>ya$nZa}+G1$cRg)C@UxV2;xdR@2{543Iu3{a!1ZHMex3{EoXFr=M63vFy? zdIS#`l4hJjBfV*B#4p29A>nwsV~w~KVzw@};3FR&^YP)thZ`TO@UbrRI&EuSDz z5=`Z~n*9N*6(;j8ejNEjhn7V1skSumq3>F z2Tw^Zqsvlw2ow!lm^8;ob^pcxz^(q92mhjULcx6)4H)-fbRUc>S!OXFDLiq%pR1u; zSXnp}33Px4@{tBs4L|}+Eo;QNkxo|+v$tmBW*kSjQkZbVQby@Cd>L)w_Js1UJkrCB z?7;QVZ$S}BM~qxs*aM2Y>goqPJ-=8^juhd!9QX6Tc(CxKG^6HuTUh)zOs%8pvI}Z; zA9FW{sAZ5Rwqno~hafLy)0G-qTuX&2QI4+YYNyXZ)GqXM159++3pNYb&iNb{rBr*J zd1F3xfuZc5Sj#*>fIbC!j9K4S(!rcVVZedf+oj2E+@0;x1b<3{z1b{2i9749rpgY} zot328N+OP3 z5EVUd(357i%YwZcWW(zGdmcD`o^88>e#81*Ic%xBD#6duZCA&0BW`cV+8-}s2H#bN z-L98s!F-VQYkcPH#^2ao#5nhMt@T!Gj!& z6CiG>JlIg59GJY+tF~u-p&-4C#_0xL%V`AMU&nm7a52OtwAMf>GQQK%+0@?_`~pBb zf*6q>2unAIp8xVP(%%truhDU26lX>MWUMEdcwyx!*Nn~Rq=%a!^pMLLs zR5?26M}4RcWYLR*sN#Vr2M|^6aTGDvzT3f=m;y$~I$iM>b)85`^U@z)M6DZv)Wwa2 zK|?kGT|2rENb#6x^hZSQfeQ8yjOZI6a6B+PC~>6sz;u{)tN^HQcvzm^nTns-Z(7bK zD5$tDF1Zq-C0e2kUy;X;1(5(GdQKURqpM#Zaq^>y(ZiTG4Gd_u)Y&mA?DD_qPT*s{ z2QaM;sLg_7Sk8vod>`5`;oj%*R0p0Suhg~02yCklnu|BAg_hW^UxYQ1r?sU3)i9^=hgLQ z`!Xs%8G|ZXn!kV|kK+=A{AF8qpi2y(*Ri;_5}2i{_y2HL6*KM>s%1S;%y+uxgK-f0 z?QVT+qBpixqObH^aqmL(^?)wxZfkiO5`_xKG$_rm*b&?C8E65Ol`WtKo`iAJT-~4v zE6v?J6wuU5IsvuLa3B3H%gq3BK#sqvM~E8L z^+G~q>5}SklvL5(_97f(F}Qq~tssu9Ur%|5F@d#l6*57`=a5?6t5_>wZ4^WemU8!xq> zbatb%h}s5`&ubeRM>u30scbCOdBja0?n7m@zR^QUkt?+K1}fL3h{4ZrlPeWD(;x=_ zj6T*`RO(N%Upc?)JhYFL3%k16+q|o%0JRp-bd^|Yvtm*F*)f12#nn7aaqJ(K}-I0rFpJF+UoehS8w8Yt@3>>7_9s_u7UL zzbWX*A|yE6ObT~7CfR6z5bx|k(2W#-KphFFI{*_Ux&(VT>a5l z&uW2rR)cH=qXCV5j{b0Tq2T{p)$#wK>h_b#s(1XqRjuU&Af6o(NYtz4V7;UddUUE* zWSIk9_K3b=Fapqu03G%1BWO(ov~m&B!92uIC|Q^SdU_%~8|vSVdUzHqp!W~JNHDlB z;NU*-sis|nK9B*A=)*99sOqd-xue&~;o8p@E3}|M?@TfcTcn*7S5&YPFoFu{)RYnre!sduct;d#!B% zYT5zucqX6uQ*T9utB>)9g?@OP@kV{SUuZmnJuiHcSjrXyr~#460(4~nLI5dI;)2&^w3c~RHcUw=%JORIFuOiYm9*I>b{VileaX2w3y-> zqX%pHr01hs>6kwE>7(@T7xXyh*sx_S4YKtL;!{c^Ep_AKQX2iq5ZVbzix~G1(Ji@}(&yfQlIw&}xq<0m8%5%x`spQcAHO^*t93%8 zSrE`D0D;H$+uiivCnT1*$G5oze@d$>)>?O|!*vtY?QOI#V05TrqbDQ$E9MSAkFIS`IL}LFx~e_tIG=^9MuJ5@ zi~!_3-HBTwm1eX$e7bii9ynVVsxqkAWNB_;>~6=9x|H8C&4;JnXo-II1kAf=wQ?jM zYQ?RV$4Ipq9Wth(L&iiBQMzZ4lab51>-95NoyO+#C96NhVO)nFF=9 zRST^`bRtMpU&tk}>fXFDS)IK(E~O{>DJmq#v|&YkvX5)P-V|`JgZa%k@~*U^Fi6Ms zK}DO?^aVUbWg|4xZ=~-#*%p{V3@p$ix}18C0QYSlkETOlDjJ+aXoQG?GMs4EfdKoX z6|@e|>-j*zKDwhgd3`~aey05G57>GpyD{aUeGZ-j=Q>hLuPZ}q+Nw*C>l&9sIgLXp zD2A4flprQu<9Fy~07qnVoD*;?*--4I@1w)~7Y<{G-}vf+xn*4A15ileks3Gk-oe)L zponp{0UeEMy@+UvZJ^N&a2_9Bcl$M{-k`$}S6o~0r|r;D0CexQKzyP-mV5)(I2TIt z(c*>rNx|Fv{Rt13Gma0W0%b^(X81YADGRP(dD`uC4j^6Y)^7J`InUzcgiE5()%Al?;w;(3 z&|(Y3I$3O8B38OJGL!<1dzQZQHN@;fB-jzquW@%)>EONeHI~3oatXD#hMQOg_WF5H zQ9HX4Loa)Vykcl0xF&|2sOZEh0As7}-|LPEUPlJC!&; zRh26~eTW>Y`-Z;=ZiiHr7>|hi%B&u*xbFuh+bLhDLdXpcY?w-#&7{igxYU$RmJ7zS zj-jTEyOi);$Gc6G_4-xC>E-!{8!dytdCcEsC+-%x@t&d)CzqJ*Pwo+q7L|EX;g^0o z>PEJlj+W0d!0RS<3QSLN>l;Ck;vmj~2%Rx_Lg_XncVNc&#pq5W`cW!_?G)R;VND<7 zvSkZ@GY2Sb^8s(_IS(VAk5um51hq|ML~$aTcD2(N9V`K!Sqrf3jioCf+x57TxC>=Q zds0q%>8h`F^-y1lA>NfcrMxm`&XPAgcDs~K&V1*bS&5j9?>mk*ees>J*?7otWW8Xw z%RGrBb|*5R>tVV{9IeF_Xk{o>Hlu4F;MDsWivU6T0h_Q^sns!=}$16 z2H`f;s5Y$j3)<;gb<65#8aA>>S*iR7#A4493wpoGnij;0IHbYrzp?})5V#pD!Z8?6Y-pznXhtc(0cHxfhT z`y>7eXJFP-hBCJSyNTr?oSqQHo%o2Z z(l)Lnr)eEC8I%rzn4%Aoc7=*ki9$_MVHFtLZD*6qPRV)7a#o*Y{`(-Jw-X=Hi3hRG zJMj_CIEby@iI2qArJGLtik&g6wS|@DZlH`a5NmgJ%V{tX9Qu={*#*Sf_$@1O=|UdlEnxr2ZP2p z?A7O+CzI;)NLap=YQ;D~bDfW#qg(pefrT*^9hNdf+ql}JE$gn0PKKT(&1cYSN5Va| z2mXRXz|yWpY#ebVu`&_Y33c&mTbR-_NpXx6vE(We*tPuX;7S(sTN>Bl;68dLDe}$i zj3Yk@-wQEHfpqszc z7Y#(VNKl*D+^uV8ayv=4+_qxo<#wa8$zqfXh|^k{pZe3uQcmeid}Wu;!dF@;=X?&2 z-j*}f9q%D%JlNn&?9H*YNSr_HY`qe}z}6x~FC^x{gWm!(sm)Z9zfr(VD=_W~N@mIF zwl1)@ps|<4y63y~|5I=;d~%yk%i& zt#qs3;Gq}Kumx+JBbRzTZrXhFHx#5`CF8sf$vGVAP$Ut-OlT)q-!|uhA z)!JGRCcySsKi$Hhav2opy*;`JC)E~@E$mg($lu5^b0@A&10xAiI?4i9VOZ zdU0v=BbI=Rxa=5hI^F|>2wF6Q?OeI7E1FVS*0OM=bP2J&ZXjX+O%Qjy&7n#|OYtn2 zZu+8Gwy^CSGy`w%bHz{g2D_y3ceBbXN_0w!j!l%NULVpm1+Vy0kcWPAU}- zhTQ->o4((zH!`cu1kKYMr=^XyG@3>CB|waj07=WtmAzi{bvPxZb)<0EW0=9xo6Xot zs9%AwN;@V8v;=iOLP3vZ_CO=>nb*@gZ7p+?L2F0vJ_6oPW{XO3%vl1H2NJbgr?_kg}c5 zHTGQjlK%P|DS8=-@_0Ojot~31r`zZ8sIGqPUDXwXUb)3h?|Fx5y?7(dOb?j^5XDm>hsM8}W3MTg%yx zi!ta7g%@t22zBm4ud9*!P%KR0R33>j#_{-GU;2sjkAK9QksX~p zyf}_p&M~Z0j@#szmU9G!XrI1Ng73rZjaRv7Ibnoz_1j#1wm!$8oObX&C^?!LyeOxU zj!3s9vrlE7*Msk>MOZ<7!-`R*1^u8!y7OdmNdiSbJ29|XaIkY6O?gy-)WpdF1fiKH z6MkpWDapguL_hoihQD~Q!oVxt&icA`y~Rfiwk~_>Cg>S`-Wt`BA?`!)fGhq6^0p{!LLY9t5oJqaW>K?%MX{Rx$VsC}RzASzkpnca0;m;dWqN z5o*fxdAxM@@0pcIEhlh5Ze+{N@JTp*<6YmhXJiPuZgUK6oJT)CjxI^E#xEkV*kPdtsPevER_ezMtYuy0mWbesyCqFxRCbLWKAG}EV0Llsw6$O^TPmCv< zvK;`oQD_n!0J|Z5X(1#`eW1Wu0psXt`llsPSURDj)w z>h(cgh?y0yBwcpDyQZe`2WO&7lPwLMwl7A(?8GS$Ul2fs_k0~ zK!;r9$1)zb0htS+WMlV8RtdHvbo?F-dblxHTL<)D(bie%Lfw6_j=?}P)Rg_mx$Vo? zEtWTEKgiR5kgNS*F3m{*f=0N^>+_J$a9+2a!Ua3+Nq z_2`m36Zf{J)9*)z!O0~HB{<; zxua(S-a~&0`DVYl-k!?5X>*XU@9Ixz>wr-28w==hSS2z0i{wt~gdXL|YnsIJgQZr6PAL=46{WM+gd6@OCC*|=f zFo07?2VVQtL+=DR@1dXIex9ova+^~aapH|fRWP%eYy*|5Y##Aq##O;l_hY@x{A*l4ihYY>7KzI-OhA=TQ~F5?8lj(R5r_a^^1+e^YG%0rnMMnV89L z3&WF(i1?OrX87_PbC?X#DQY6P8?c(wJhV6z5 zBq5kHvhP-_<6vHh!PAi73FX~NCaBB$i8rn;i;-phFue^NGRRWoGJlV9dC>-=f6;^F zUfyx9Am4@CXD!O*{PmN`8>ge8B`N&i>6t6{R}81ivjKsblcRZ|d%8zbez70@S|HJc ziM2ebGZT+MR`8@cZmjNCALP-bg6I8$>Jb1f+$kATYh6tF$e`Bsi@~SR_eG9DOk{}n zF9Mppx8Cu=h7|IFu{x&bg6xiWA?97j`%*pLFZTo9@dH729Ar2T<*%Paj-LKv@ZFgb z;Jd`g%QF$FTccA#_ja@RS9EMKiQ)SLo|PhyyLr5#kd;X87SyEzbaK>)24-_Vm{^YY z6PrcVeIfHnQVY-m?mq$aQg{mRbSxF*Rc+8It<~aiq!m7}6X&!vi=3QI-eBE&ItrDh zPiEh&cPsW+q~}I&U_ch=)-h1EJcR$i!k>i#4DWQ%%Hpa?t(YGNwMrAj;6@zy6V zP{Nk)gspC^2=n>IN)tyXyHsnFl8U)3dahlJ`39^;2H$wN3@^gFO14(wsfN>Pk4r<;Q6ib+6IenY-^)GSC$Hzx=`K1YpGZTskDH~OgfT#x-~V7i3QNOe_#Ql zGio%3%Y)(OOQikLFyrFDeB@%Fe^=~5)hVb>UI`2L$o+nv3^AiC@~LQi%-o10nm`79 zH*m2B4-bTX#;pS(uq^Jlys@0TQFuJkYYr{8lqpp)O=-P==bu75;_y-}@ct5{r!(G% zK{wyoLg51gsaVh5@=>s@K}SwS&y&!7X0?h}%Y@K9@FA#Wyt4XVE10{=YyXP$(pFjC zc4Rmb2;&KXrRB0QeG|_}3|R8B!BaEc0%;$6PQa{7Gc-LcKHTAWudoIr+N8*5B6;H) ziPlfP^&Fq0E<6b2B`z>Am;E;xA82f;7>W&S=o5x5)U#krd(RI z!Q@|5i_7s1yrV&o%XRs7DS!PGuq=6KffKnulSG4@~c`eNoP>LKMD@8&TJ1WTWXg*7`gzmdW zcmx>I5S`?63tQWYhbnH1tAe`35C{3T3|F4iyW(oaZL!`G)OW(Y#prJw!o7Kr*`3tz;S&{6D~)1(>t)iYS;w0yidS zALP6>ku&|Ow6l;BkU8D$|&8Ju4m62znp!=sjO0$N|`W3sQt*Pz*3T@E+cAk07rE zUSibPd>uKCj1muRE(V%Y>n_Y**;=8(->@j#Nc9Dn_-AHD=K=TVVB6W0s6)@3JS;*E zITJTbsxQpEmrp1PF{no%|HP}0@lYZ8Clm}~AjH&$BxT+sr~pud0BVhpz^h)T%*^2k zP$d#)^X!)9Ois>Zqz7E{Wx8Vwk;cRh4MS`!4yl%msLq~8I8 zEZ8Mwsu}8%ame%_3*|oJN#tvYx((R6pJay~GpGxLUGfyiG@NIlyFu4t`hc9K%)u!A z9{A8*{3ww#A8VL9^6C5 zd%|I$p9#Z+JdM6}Ah~y^9~SlMDByO28LwHC%vczhythLM?OvMsf^N@w*{=6k+n60V zd52xqS^L6>S-ihz3N)+{#c zvt=j+cPI?TP|hb=135WCD19#reaRYX>%`VUDn@P{WadM<4?g`mZJBH2P1C!-UZ!q zypx2m&cdU{Y759}#}V<#mr&J82?d=W;~i(TWUl_}C$Yqhd*vEKBs$e^@aRBb+K+(= z@%k3AKQ&a{U*k7~LI_ji*7jht61nwNMBM>lC1mh(A=X;A7jYy(Y!u<3`*g=4?6@27 z4n3BcgpiPo5&NDJ)?G+k;`SW8YwiHHpA!RknslU0z+p_G9j^YYs|r4WcjO&FNQ1cj zI0UpHmanmL**b5DLE=kNew&u*Kb z!?ZpiE+E-zg;?C1ZAAJ)5&%*L`g|RURp&xB5I}K3+=)q0S2a*qz7c<-M5iPY!f53s ztcojSv=Itc!P8M~S#KxLlrW6&**3nc<#L8>(edlxvYh(RwptP&+YYdip1^TUhsYVd zl)^JOD)VquJbH}IC8MKp7sD4J46JF6c5(ZiEDkFzWG!(3PdtGq)qC++kDJDy&&4{;U;i)Lf@iVb!N3UTai~ z)47e&%rLfZ&p+P2ZyCPXz6T9S(jL>kMc6+4%|+Ir%?R?%h9I9-UDC9AY)gsW7HEWF z4}KWmVok}`+hFW4Fn-aW&;nzJ-h$mA_L^Qt*TKeR_>*&?z9{f(D1_w}M%Z1HZW3{O z8}aB}f^p9{J`e*xOE4L0E@?09aEAg#nECH9uw*vwK|sd`TaQM~`r4CD`4F>mZ0mJ~ zW_^%>SGp~NIzpHge||yRgCN@ckz#Z7&QxB)qBuS8)#WP(FpiVgDhC*hbdx`|-p)8w zw$k72O>TG5KkUVsD7q-Yy$5meHhOD=AU5#w$$Zog*7?GieSY zSxkraB;gYGKkU(+ak|*AAcgYS798o*?>-}$;=v`i^2&z>>2)`?7wA`;5aU3_eBK~U z9Nl}lIi}y$4BEDP&q&)Q(EIj` zZPR~Xo6b4fN7^)n-aG=p78vQ?SMK^7bz?+mOg3vwhnudQtzX_j(grF_(3o2h zm+o22?KGz+aU>=|4KBQly{^Yz*CS1)Z@$8gajF7+`IQm${!RmD?@2W9-)4_oZ=;{D z#or;xqfM`jEQ>N_;_~m4%c6cz`U!&L{sgu(1c{Pkh!$?(T<-ZQvIPy z&0Z@=c~y3ourWj2YZ<7>n8wR}_;X9p?!vE@l8&*PfFru+$Yo5+w6WLmgWZKb381#& zkJsRKrUieF119|5PeHCE?`N1!U;6!3yO%frK6yJs808S;BIeCv!T-@4MI71zb^FhDB!J2YG&X)sF1>-zIis zM}bL4bTv6r_?B`hWpj0CQv!wQV^K)|CJN9D>u!UT*E)mtL7C);|HkF20n43)-XVCL zJ9}&`SN-CR3!PQRD^%E4{O3P&93FSf1u`G~!4~V7Bivrx1OLiCEr1qKvB!hH`HibT zbLu~A=+Sce5~s`5QUrpQQ7DlQZ zE^D*Fsk*E?1I&RWMGX8J3A0@cyoe-%9woRl#eSA4Ulxc7f91xNPl_%uk1~5*0s4hl z!Qeqo;{U|F4K+DmcRvvWPeH_%a(zEz5Xx`5BUG_SD8-*B-Z+8&2w0mOcC<@*o!qfw zpgD|lQ*#d4b&bDvk*}Y$`3U7kQ6F;;Zm`$oi2-)>wmMII>fg~4+ep2OG!cebp87>PNI8Fa3?~R#e+t%Z8?3t?NUX$VSJix`eBS3Z+thKHKlR zfajXg2Aqjw?8+Ad=a}e6F9YaI95=c!pKbR+pF<1YCPkEWDD<{F*)7aF2#Oi#-3Ph1 zlq#|Ajm6N&WUstB6M7}?7?S?nnZ|mhll2OoxVffRV)&cE0Qd?t*5jk|f1=-iE603n zbo;Nak+%&*=RoI#T+oVKw+}lDsdlG3p+pZzT^Bf0tjGqc^5i%zgX7S$1Yq#OOfQG=jAduHU4$D ztxwaoZd@>ycTdguChxktzcI#Vg6E`1L;NDQpYzbAJJ<;OJc-|dGq9TQ01XnDhmB86 zCwC9+x~x-qRJIKub1>wAyz{PV3I57hS>mTFnP#}y0i!q_iP{20ZN|pXN2lpODwqo_ zcwR+97()>-YB~LEj~7zYy!6T6u+z|?M=p#E|Fb{+JH!8zpW^Tru;Ks4*iU5s5P5%Z z?7fNepWAS*-oVp|zrl-M1e(p>W@=(@3myJ%d|T-Nd*{+G@O?Y|lm+wYU)Z~VzQ^8k z>2da+M?2YjK7F0N7tnp|okxGe-o^Ca*}H`P^1l&7r?$aKpJq`NbUS-j(Exidp_|#; zO(phzfUafl<#aWBucRy4dlh|vy;svE?A=H!*n2H4VefTx0eeey9(!-11?;_<<|RTaE_l;bZ{VLIGIMxrzTC4m|ty^rs-|sCutH83;yaSnuJ7~V8Trf9hzVz zfC=Hewe~(U%%E8BYwqoR_jPc&&)MI#KWFc?_Fj7}q4ziVh;rt_U&$j*%ED*l@lkyI zkUXNL1K|XDMBy%>fjmBokNe0Y+W!__CXagwW&Im0d*-SDg@)`LK3E?_G&8_FQ285j ze^#jvS|s_bCq5fg`Z?x_($#tN8I;LZK2@y`S|+8ro93d`2Q8O;rcs}8eb7qDXB72` z&iCHpgG_!v?4gA`puLu6(6h|J}w3 zLgKFo+31R)^nTM`uaw+8o{*=?+6d3b{OP#ytaAPm4rNcjsvA)oIzJVNLB$g8GEkq| z+6bY0FA`U1?eCK3jeuJ}*b0*PHT>{MXCYH34@C`xhh&3ow^8h)zYN)_%6sMMujdMow5mvTPFXKM9l$>SM9 z_9D$23PkRFsMjQ@muH;sRkg&A=9Sk*K$UqyuWEq&w3(6QT;9G31^FfkU;T2R9kzR~ zUeQKBK7ikmUk2cp?!zy}+vww<(a#Xc@YICHfrcI@xcv%fxW@IW6Ot)#RnH+JvN?~J zC&;*2(5TZBEHZ9dXd64RLC_{7$+>ahIWobb;Iz&LrSp(7w2ga@7h~%icTA{1)9S33 zHTE1L5@!*0a_B3_=1b@xNOYm+5E7E?3k5s`VE!k;w+ZwABjo?KvqA2u_2Pp%F_8U2 z#eJ13zJWiZXwvt?7t^cRjud6p6=Ionvez=}nCvX)mm2368h!t&)tqY8>fH93<9#Mg zM>n*~ou4V3S5)@fF25*7J=V6a(7`kxSP;b z!GE&>mIF-1<_)P!mDMhg)uqZI-`WLoXOqI&OmaWr%N@q0FD{8Cb2iDH&2o(O(f|%L z4h&qxuvvzowf=dW2j>VtJ-`8g*8uhcJPWXUCt893X`3tM;Wlsua0PHX!0iCH6WmU4 zyTI)Nw-?-AaQndRb1RX*VHBN;Ua2r%#7g%8sCF5c$XzIh4DEQdaR*}P|4eHy`QUfy z-y+Z)-nee|&OSWamO3G7pcBHrzx-k!lvQD#TXfuX z;ZB;t*g+XQLo;w56Zu1)6=tDa8@Q1d86ZdfD?<8dUB(Np%vR5M;piUUcHWsibUW_? z(ctCX@giDQjTiXLR$3+Xx4r$0gsSawXwTLYQ-*TGgBsfkB>; z@S=1lg+mZ{;f&2Eshk!ic7a*QIDpsA@r~~kQV$TVR=q%O&8!jG z8H9@%=Qj1G+thATN4iaB7C!{9;BI4=j2l*E(xSdqPyC)oX}&RLL2-bd#7#rhJbmyG zxo0;G9Ay^1*iQq2J?JCh;vB4|a8mNu`tc7C!SBX7B?9pJ#>p*{oLA&q)y^vlE_@G~ z#q`V|jw_73Ob}juCh$OX?la!AS1K-S#;@Z2XUOg3Ts&F+)O)hbJ`;Gd-1oHaWI4mD zYBzWWm&As7Al;58zp3aeVAx4QQ5`_ufSst zjRIUNJsJD2uu;J&-A1KLG7{#qR6#66@rFK|nVJKlrZdox#;>cqZ^U@UfGrIhLrqzX zW*CF(jW%Lw15ImO!+3>FA(YgKBAuV%o698P^ShrQmV||@n;9n8dntXey#HO~DneRc z>=EJS8Y1tn<;^pe^5&?eXd4#|7+fXpkCzxyqO_T2TYurRPYk}hV0NcODe2vMh&2Q6 zF5s;Nkxg)JiJB?0!Fo1o=7!tdvp4YS-@6t?sqxyvmftHGZY;gGkn($#u#k}+P#3jl zKcX#NmX|Ir#MbBY9J)G+s0-2K(;YqY7%0$Rd@ zIMg`zPIB>OU!!Kfa=x<_C*PpD$qPKqj_+>gf}N%axhKf+T{NcvPu>^~6XiqqN&BbO z^T|V$=HYl5u@iEejVPP|b4yk`nLpm{J)sIyngje_Xh z2og&JKJMC6M7mHP#$|{-El{| z#c^dE_-|A=+jY){qk2<##W+A(6>sdb-@+;N$2LrXS0ynij!+^J=e>o3K~LB|2N>?69gz)Z5_LI1FkT9nbY`m@b@n zQWU$55i+V!hlQr<6FnO6k=vN%FqtWuh{y^W_LIBf(4STGo~ z+y6iY`6lJ~AT*TDg%oa@00T~D7GC~dy4-Xk@b?4oD_g>b=2sqldI)}H?=J{#{KC_e zUzvgK0q|=BP(6Kv{0ip&_xTlq!;t)nlm`#aCV+B)LVz^@%K^*)X;1%9{0bJvi&*Jb z01g10c>2GCUx|6v$FH@4AJrDOrcyoYcE{Xm^{ zJ8;)e#tnD&%elyILyC+Y1Ej?+luwfJy@E?g4X&|~Swf|f9x7B zl+L+|;mBzMG948PsIvvj<9PoJ$Rt9sQOyrXWtBbdClqk&c`m5Ty*{B}O2Ha9q+h#mr2qbm)(8+8^tjiI`ZMkD#4(#9O^B&7vCI&S&|#^pAWh?tiQ~T zj?dMy+PF!mJsa=Z2E`sNaH(SJkwPb|Yo~DT$KLC}++-Rlq(HN81Vr;!uZ^1Uj^Pb& z&Awo>@cCisIJgp(a@W2>CJ@=yY4IlQ7G3On@wqC^V~3VPccf?8hLJ0~9fTW(*gy`M zw0e@nu8UhGV<+$qd?D9=t>i8*IU{J#!R~$h5%0}oe`IhBCJdZsP8#F^$34>8q+C?`XlyGz9HvPo^dIo8gEDL zvWD@r`z)$t*VJ#xp`SoSIvL?)XnVy)G%&`U^I#m$kra!eGIDN`Q(#yv+C1h)W!Snr zstnsV9z}+&TO1vMOh$++G8k5K&lur}T|Rz!&n~ZEkI%pq-C)%p&&uAiLLWwO$lx3B zi@)TaM+HbuhHAXS6VC0E-Fm=!&2k z8wU2)ai)k6#GQ1eXxr&GQ+RLh-z+uKHE!rD8W1@yN_b}{k-~jpXW;eznLB;_oSc`8 z)9k=`su=>j61jX&fQdy(*-z~G_*E)yF7RBvyQy*pd>=nx-cWN;(zb>|Iby2HJE_DF zae+2=BFUUe`AYMsJ0(tSriOBG+WE;&KQTS30+<7%m<#?8MAt&nH7u5WmQQwji4TSa6Ul_ku?Ot%208FoOuG zTmTlxy-J-yD~_466EbK`oJ|JLcD}NO=USnFH*isDBniG~f@sbWVl+jxp+6W}vo%Q3 z3EZ}`vQ6YRFKCYzsV!0Aj$NWx={jq1tKSZ=-N}!vIz%dUsAB9O`<>2u10?eNx#7zo zS7jR=3#XhHCpTR5c34x2N-4`0n!cyas=U_X(eNgWoafY=4n-nEfJL#ui|WGF-;fJd@=zUVy=p z4c%`#;i_zPRi4uu)tc(nWX}oh2)Io`I;zN?NGCORm9tWiam!JuC{Aa%-E$xDGV=`M}iTOxGezf17AzN!9mkT~XCf&aN}uDRZT>>pKKu!|*T=6mino_3hcfXkLJ% zcqFY7&+@3m19;kY6l^sMn^5#0qWjCFpiEn3TYP03+u~NvMR9~Sq4a*TYmkLXk^Qp+ zWVi9TC-k4P6S1Jk42*#iS#qQm{tt@F9+Cx0S?w=!JS)eHk23V|x z|FU%O->MkNNYoNE5|xccqE>@fS%CrmD>cJ^8`i*oTgxF}9U6`*L&H%U(QwqZayL08 z_L`4+o`*91EJ#JVD!Tv;qKQV$H$K51K{KDnqK`pM&YU)c!}F28`LrZV)W zxH&x^IUBStQ=7LX+91rNQh*1f&TNBkAllewUYbrUebEv;<9*G>p8-bT@{2s+t00-8 zrai1;7uh8uOL-{08KJopC}OCkYL9ZYn(Ft79222$y6mEeLP4{Hg?yk8GU2%&?L@47lU-{e^%(NYtE+{h+ksS0v40i&gO?VRYL zUYdOj(v42Qn~70T6Bcd&((gJmBNinVg84#V`$O5hKzmdD*Dr zJ${Z3JlG7ONkO)R?xitmx>*C!)s=vVSq>0w*PdIE?|7;k?2Rr7)C2}LNiOoW( z!l&}g*`!26f81Hh)$p+D#>qTgz}>Xqa=R0n#1`a8cS-Zeo|4g;!C>PVWL6 ztUQy7=?1C-@*gYwvDT{@L3pzk1=Ml=ybUI+Y_o85zw?9@D2%fCoyhNnh&YD#DYzPw$=oryh~(8>-&%|4=C-t!UPu)@dN<0K@_ zJ6lSzS+z)_bE5)TsrI)Bfr)d{8xICfDv1vcF(=iMBx?3gS!7DmpWHBB*fc0HLlb-M z;f-A=?i>!Nq)T5n(1kdsc;-U8q91^&P=*vuxf=O8;TKAxR$Sl6X$MVd8fSg~kiy>H z+2eaJPvupF4YN}=pNO9~YLg3r5p1QaIu31{XwJ$K&*EWe6T1wxn%`bam-9aGNQN-3 z*K8BTyD=7woVjjb$j!n<$;5l*$at=gC3@E`Vmc_n*{sAuxINMgiF8>vMySUKo=$R9 zuqaA9{0Q#0bHm_W*>mxbmdWV3D5+t}j|x}Nr;CcSDNgypS;6!#aNO5n7;&6G<@3eiEHq#W}HoS0EHOgdou&wGdhZL^Xldx3?|Hb zpwKdU6QSiw?bhkg$b6$vMkg3pgCq1GZk+@l|59NE^2?`lT$vG`o18GSSAGVA3x!mi z--=th_%O`Ic}1?NzJlNXDNXeya+%zqKf-+g%tU-83KNb%H5;Z#C<+#v4>dJUV!4@G zv^c)JorBEur!^0k$WgnacB|5+@U&CfGtz74imgL5Zv`S$Zf`|XR&L{0?1yz`S@nDD z>AK+wD!Ve_*oNO34A6+2;CVZ~GGc2S#zyN;hW4A})BqNy`kJN^fNH241_@OO$21QD zVJ6bV7d_K0gDgtO7uDXrpmr+)EwmW5lO5eP3 zlrSB27aztW&H-7?7xvMUOn;iTm0C7Jl{}j2y^t*`?IDBx0#dS(^aywtgV&GnD~JH9 z(uYmWdG^O!=lhjES1Nyu@DeIL?yC{me+v)^o^llmbRQ2Q-ib2YBzteU>{#?VM-ZZt zyir8%pe0*)<}?wEZWSI!HEqV0oc1@!RvmD{mHuMUq~EDnbR>Sf!!8px0oVrMCV^AZ zbCIkWYvwkhF!Y5i6fV6TBeggWN1*krN69%LMu>n2Z6t!4DEY+*BI<5hP=mUg*5ipK zd<)3&MG$sCOE?0GxsDvGLW7OS5XM6MY++;#InQo#TaWli^P7vVA$1yAM5IpnOqk_# zMD~;lo)W3kHRRMX;#yLtepB>Eg@AA-PSIztnxdP1Q}j($fwSzBjv=P#M+Z&OAHWp- zz9TSkE=}yYj~GnX!rCwzXWymLEP5Bw%dYj@BbLJ=+KJvvy%RMMhF8cWi*xh@;l~c| z!S{_$*An^VWSvuZW?hhlW7}58wr$(CZQHh;j&0jk$2L3pVkgsc`On<$eOdLKs(os$ zdb5Jn(Nu+b8!L*$LqL5U^O#NbNq8E&^6}3~3;7RoibEKMMCyCW!L2HTJTes~Sqo-M z8aGrJ}L7;4|dH>mr zzue)PPc__KKWk46S80^fu*X#OC{hiwd)>kT6*2qmz%Y(^1hCzMq4S=YAEO+vGle_0}D$b!iTqZ6`>5* zsZ#TK+B>n;!V!qlyUzcL=hRRX89ost-UchyhSDBF7lKmcSBt98gWYaM98oyrj#?e} zp|)i=Yx`Z}p@U9Fg1aF*ZybDP0Y@!doBHB=sZX@VVMCA&YZXbL5r@iQIKy6=%D$1K zuHuJUN1Nqm{{*}ysk&jL+&PvcZH#Mo*vX$m8*@I-e2g_C+!!NAQh4J4>`cM#wn*)+|a!wgKG|} zf!87h&@EH|a83}5A+%IBR`()F83X+G&R_{0#ruEnD0NXr$V#AaiDS0Z?{~<~qWC{$ zBi`l^6Vd1}!ijghkE0!!OEr2({xI)@gbh3!iV*8rFGT@K9o)-WzxsA<%H8 zuH$5gsvvn%wM}_QY`P?|mO3FRM>eapSWI%Ns$xiN-AAa`?gepknZK2>G(8(qeRLZ- zyQW*QyUw8O+?t4osE6H0htogfO{mwFbIRXCycl@P=k_~~T$VpVpex#Ap5%Yi$`o1h z$6MzpCj`tAcXixdm-k533e2?um|wkjV`2;y%zrbWi(5fCa4p;=HJI)%Cf5dZPOl$K z*)Dqwxzh3z{S6S<4^UQz1*1v#_ll7gh`>wRA?f)6x+#Wr;M*4ow{@lXNVHNwOh&kE zs^6Tfmr*IEk8(UP%7#6onKP+=Pj7fO*RU`Dt|`+7?{wvuU}Gyzu9NXt!!AC4D)+I8 z`^xsXT(+IUV`q-T9VEQu>eYaF__p|}lcn3l4^e<=rC0{Ck7i6uXS)Wz<&_kO%gedY zX3r6D6?e>Pd57o*fl@sVA9o-gp_boC31!Lg3A7XM7*C@yI-fJi!Fy>C%0#9=&jjpafx3I8ywENm=`FyEh}*@ZX~8QB;- zJkP?s_pb*Qi@HyZ+N|nM*kdO>2^8yXz_UR1IKeh*evoPEILw zn#AXgEGQFDW?Ic7br}hBE|S7p`VIBuxNwt?vRKi|lv?Y7J1W@I3poNX1>4Lqx-G&? zUtV{VD8-s0uvHGdBX%QibXRgrw8-XfkAWozp5HWON7iIIFTp4l*O%!@LlVG#=>nvG zg78}4&PFV3;x@!PD=6l{IiBH`#ObXAD@w@0uOe+Bd0^jEVLyE9tOPy%rtejXdr@R2B-)z7pWF49gJ<~lwQ}>D zUV#0XlC~y+jWQ7G!j%pO^~fq%i3vnpEa>5VSeTTre&t#NowI&m;uWbqHBVzmQ!dEH z)46F7C~xnZ8=EI@F5KTwWR%n+JNFppv<4E#zy_Ag;+ZoxQlFwkogN;IOTP)%y0C@_ zlx&$t(HxDF#z$l$pgoL^!I8?b;qlOLFoFia7>8&j4V_PL*$EG+02QYzBCa6Nc9(LS z#9sDIoh{Ym09ACap#WCz)ch-TXOJ^ge1fkEB%ipkcyedX-MA;w&;nLl?0K1U&VyTP z@&MS_2YG3tmn=Iw*Z-K8dsE{X^}){a_jDQE^{Ad;{zHlrqqFO2U))1Mr;>t7;OQNe zFe#N_;>Y2lUKjVXHZwx+QX}yc=ZFe+L`WzNqZI|7Trl(}sf@Ev-V^q+-z=@{ckYdO zA(E(Wp?PSn#wY79TQk2E|HNaLT9exThGbdM#WVk$5T*tKH{4bPR-)S}yV}{m4($13 zlh~P-?wK_0rIVD_d_}Y3spzKGE@JJCE3}qFk#V#PYO2;56P$m6|9EP;gyL>24`2yn z(NpfOPf_EOF9u<(qbXzY+`;{6w+Z;=s;9<-F~rwrTJrVnX@q&)d3AUL;qXSl!!tu z4j89nV_k^38wROp4zF+m=f$15o$@FxX|XePLUn2^Ow2evs($P^S#{! zorAwM$;9TW61a*SmcKIY|6v|=%)4(XatQ2H(WC>ieB?C!1XeLh9r@;mg@I_Yq*y(} z4^RR{RKgn1V44MlYN6WFcc9G`v|8`2rCS}EX3=ayL)VYTNAAVm2A zm9>vNEnvSxwXcj@i}VklyTB6|YhgupUZgV;Q#pyO$X(-z|7!v+B(lI4l0X=ybSY1= zuZj=9Djo9Gl$iPYF_M`VATXUJ6+q#aC>kyGTPUBR&jkKE&CN8vt_I*GAd}TwzW`K+mChlYO8bJsI8`Z z^RkWh3Zi-qChH21ja4dAdPH-PI#fUsVg;L}%Kpl4Y^B{u<)~iyj$(mBO^PIyfCpL8 zP>_-6@Va?2K+B}T`NU)|a`TOFID4Y-t`V`|ftD+N#6vHDXWOA4=8MT(L?#)dA?m|7V zsEy|d_PO@Nk9Ru?x~~A`ZYk5IfP#YAhE)4{;Ay`lZ0=YQHARle9OB4+bHo!S&Fi!8 z4PF;}U3D*44dH$fsXem(Q1O1sBTw-;{w|2oJ)+_NA%?A#;R2k%g1hnJwT;FDuKRpP zyESD?j35$=)Tg2(2nQZu)0>hipu69yUjWT%k~z&{CLASS8`W z)lbYcB~mhyy~|~&J$sYfGSiM43kLBUIDc2znG$q%X0|N3`Ol#+VNHffSP#jb{qQ}B zE&jb5>gcv63{LET%h)cClgv4L>35UfB!~BcASnLp5DkORnWXy-s^)vyzMX|l7f1df z8Hfbg?_^%0zPP)hK<_b=c~pJ%j@Vi}%n^7@e#%D_l4EX*j5E70kFA?MkWuxTd91>} z?O%%ldBWXn=N~RT6%bnEg3y0rtv68@fK?DXnY$fPdeqj>r}fv>ISrKt(cwDePr4?& z3mjQvr{3Ja}9}>I0OSHwBPv*2(G7B&zuwR)Z3D5~U6VFAiTj+h9NqEPG zjmdKIty)mjsixBuaDEr98x)h##*L!txJO;X7x5Xo(Y5iFGSSIv7BejoJ_3tQB zwJg1Ad&FMD*@NJS?))8+GqMtx=NVGxAScP^niZ~qq8l*}@s&7NU-c7C@@o8xPO=4$ z?xW1@U!1g4cKHoKNaJV{@Hfvc#G#{;b|dteV}D8r+(C~lxRN3}hW>nH1P@fM=?nI; z{Tt`zEArD4lHsV0d`3O`p)G;N+rH8VP6tmqvf_}g+T(+&PN)~ErRCyiGGS9ULFkjq zzls5Ggt=gV%{2_e`m$VCGtx&XF?nRu+T-E=899H2@O&}dP*ykVjO%8Z8R`s6gl*5E z=uVR4(l;;JsRSI{m4B^{&69KZV&Jtq|4xS0&xL5Vqw)1dETW#M`tCLkqID^rwC=O= z^Gj^j*V<<$SiY_wSNU`cdqn#I%O|#sGUq5XjiuPOl730YDy3=nu;JDBNVmKMUf%xa z%YGrIE3d+bUe=1FsBq6k<)koiNN(1`o`16Eg2);^iIt-JQU8x6+PD{~Re z9Wk>$kvm{mKc+uI?!(lcCf$FtwvV8B0Z=Eb(r!ORMvf&emXQ)BgUZN2(z4UvggVv$ zIRv!{|A2+usul_wan3#;{F<45*~{$(osi(o4xJiocpDzyH6bHH8*_YFJ~7?V?s{rW zmrTUl77NYCIPRcU7(a90my(MB4AGOaEXHu;5BtopYf2g^i_6+5RrNxPi$}&Hl4ssz zNhBO5hs8&T-FaQuAsEuljcy$d?ZH4@TxX{qMO(H{MLj0b1lRKpMF3oqOgq5N%iAna z{0!{`^=2wm?(*VkqOOl=iH$KkS$9wMNmG)Nx0}`IRdjYDLyxw>RYxtY??lJxG8)@? z*e6jtbntS}qPEenl*|w2d8C#w3TZ-K8D+1S+bD7HoT9F!cGpqtY>zr!qV+Y*dM%i( zVl{|@vNA_Z|0+?mML*DEYiF~Bji(w-#tk|sQ@K&PI4#&23J>k z<&CvP(3Xg;n8@0&`s9aRVR0W)l%8WSwL zs<4pd&L7HteW2V8s7tKiSIRE0Nau(|0%4nK#(zoq$@yRKR@`Dq_7|YaixYk?KP%x$ z&7*V?@10MvPiQX=Yve!7oWwmTYTVgVYC@dkb8%K|FZMaFl|<%;+JBnXQSrYpw#V1= z#@S`(k$u`aPCZmhO%1UX;9@~#5MrTyW5ACGaX~|ni@v%36jF9up@|{NMgzcM-m&DB zc&J+4lUZq<5?;Q2ud|{aCX_58l?CvH?fHxR4WXWD_0d1d(TBdQ`2U%HnG;a>wM3pj z5bB|I$uMf~YEiQI#GlZ0-{+Ib*yIo0#yq|9_UeQn7CRxLaOPuswQo*)ncbD!mFO&f zh1%IT{@!;_G}JoU`r zvTf;+9BFPieCYDQ3-hSdA?qgvZP7Wl0<29H=eNey__$1sQy}xyDL|EC>dyma9;9$` z_6ST}orPymQG_Jt2F)ZX+(6z|krcBSAkmWO+#EVt4Z3xdQC(+^NPW))pKOk9`D`Vc zlAgPgueFdzQcw|!(>Up7Qlu=ju$q4YkEw=q)f;>;4j4)AZvi4fJD+ZKXZs9T9@_^I z^Xjmm=S^rFANWDWbpS26%cq?6=MBm5ppg61WRw_ULt-C&EpVx1`Aj&>>xrNN3x!So zkFx_x2qMm}qUVu<8F3AaXQ>)2j3Y!GSC}ZSDEW)>H!|9iJrwxN87W68P+ztYrJvpr zursscbz+#kaBs6(emHR6F7U&Nnsca1y%WbYO@CCbdGABTYr94sd{cfxuEF$W?B(r2 ztriC6&>?VtuEULv9~xUV!Z+U&-7p>yC-efu0z4x~4-~~v=GQug44p>9v0cjwf0TG~XV11Bv$OW(kkcEG@jwut29H280 zlHi&MhM?;}itqr+fqLLwFiwaC5CCQ%e;_4MsRn>D5fm#!!!^BU zFgHY*JQW3TGf^nz$*MBS)pInjj}jM8weN#C<+weV=qws&IF%7~CU046Ba8ZL z&ge1AC}5nCB~v;4*L-_&*Bs?Zbj-ys0x&QWRBLQ8MpW80>Ns%|r0>%aMspM`ObdO2 zV&j|ms7dw+K{B_FK9(xBFq{2x#+)gRK?QK8OeFDA5DD;r*Qx8gWU#zk(W#_K^r^yq zq?Lw+gUbeFoWBz};$aB{EbPYHuh2=T6mqL_onF>|S}xjWI-c6jv)bpoex1&B8(Yk0 z`FQC12K(zDCfqQQ&ML?=mC;M;c;5QO$i`%3E@zn2PR~r~=RY{msGrtp_l`BOGwf+M z)HO`B^>zGisrmHx0iU*8@349R71&kobi>_PWlJ~C$exat)~d!I2Qdk~YsUIE7#U&q z5Q-@sSSAT}h-PE7w{{Y%+OZbn7@jiMisriS8Mx)D?C79HT;A+dZmSrnYTo>7=8iuc zDs)D#(?a?y;w#ziH{ra%D)jh_qxen^mwq568{cyHfcy?4>CJY_I zoyum?L<**V+o5tn&GF>K%pIyxTiO*o&{ryJ2gYl_1UiZ(##rVq1|GIoFM~A@0@5po z8H4`*!+CwE7$&c@cu2dc&9j-lpcyl*ZaGa@9k+&6UC9br$CQfRJJ6J{3+`x`BbZW) zxYVAm9bwlkXPUEHpsv{!RtsO0j;h+QsP3vZkw<;pzIH$Qz=dkzL@PR`kK3mlP}_TXkGF9tQ@kEEfrQ{$wv=vDkvAMBMJ|Lqd9 zyp)_%)>qHfE({tI8P0 zCfgmvN7~m{oUxh*(;2=B;EYj?uY>7FxmO~v%>x&4@rL0{=qDS~)Kf5;dg{oPX3nlH z^?VqMQiw-k!q-~O=1dQUe)<*>RcYEpAR1kLEw&~X35B{;QOMm^(v}rj;xY?Tk3f#p zPs62WQGlA%e8LwW_u*z~@9)aJhhhJDp3i)bcfQ+uAODeCuJr@Y1*MZfaIL$-qrt!N zfI=e8BpYjMprTByhz%v!>Z@3t!1oi_qku2P_U-+C?7sf$;ks`bQ0WWrfR(jZ*jS~L7mDsdfuF~%ukT}y*E6~54-1Z; zpTNBpKke5&J`hvT0FHN9Ea0Xffj9VX_}IXJ$J^T#!k?jo`JY*V>+ovY6&}Es_!W=h z?I1t%5F>Y08&9p!w$g50BjFU$Wn7sv&IsoGp^PE=fa>Nd*6X+Y37aP-TcS|bq3-1{i28zaV<0-gKA_Jb28lhX-S(8gc;s2OtKAcG;G0lDT*(4_= zYaZ@ob*n#Dcs6X-DE)5mqq&!NURC1kMK42FHQigvy4|hQmehpOnF1 znAF7>odLO7a zp5l8RUylL?zFz==9LUSngO_b)%3T&2$RT}wZdV^o7m(?Pd5c#VP!_Mzg@aBcb8Iwy z0m>iHYLMZt4>r5jAg$i__a{C}TyDOu@#y-3@8i>}@}J+A?+3T`h;W441@!{%Uyo%w zYlse8E`FaHJ!n|`uOGQh8R16^FB##))183Jr@M1L*Dvqy&&(h#uTc#&76^_;oh+O0 zZ@0GlguGhXG`fa#?Y|hS*|Hup$yz>*P9d#mtFh!zCUylix(cu9KKrbhtGdZvi}su(O=Fr#xojjp&xqIVVe1`KbjC6r7Ng zpNJ|`Om@y%QqZKjs;V%f^TTKjk6T)Gc$gogWvGqiTof5j>o@|%PWP1*Ewrb>Y?^JI z+fzNTsd9~Jy)cX2Y12L3o_!dfY*Yo!TSaNT`BqaiOTx)6eNHL_NIHpF%oLDlDQSVz ziGzd_nCibZ*PO3bwf>q{(7W$sFh_|K>liX-A6xya5?sfI`M>5L1x?5XM`G2?zbOqO z`2ulsS3ko_z1(e}vBBZLzXiiQzgQUUl$)}Qh8oS%vE*L2Vb)FmmAU)LOkkMEwfGIWVG&vzh4ajEA_qUN%$*af=8dSS@3ppV@S(%2CC+h8EsHT zti8~jJ{ z^e)f#Cwu$|%lF&9#pmZ8@am&&&8(&z={a)&2Uq8b{mXD1lPs6+tSxsQH3?&&Lre3( zj`ZtwJh+W*8N`oNo)>H73?(9~*aTzc zZb(pEA~qxt<+W7LF2mWDYa)dYYHY?b_HM4R@>Ldu~tB_KiF zt$9BlhmH><+cMJDt2e}^8GW1RSeLy0SGhw4rat|C5Y~e-`l02qPh#i{yt2nY`ul_I zQ(pRjQ2GFwxP`9A?$pjDAmdHp9TEMzAWlH_^=G%heS#2v4gT$;y!b2RE1ci8@Ib^N z`p4z&n>gU7KLPmS<>ytA5)a-rQ@7F^7^8-5i^HLSbxbfp8vrz7~u7r`Bfz_0n4U$8%+z z+x%&~E#aRi^Lry*LA#!DCQrv|>ac%_uiKRBv)}q=mx=!Z(l3Ka<0$&MsJCA@A?V_B zb0F1#nXxrVYUbunwUMf8eXaO$xV2S-F|qX#tfRwR0G7V)fZFlyS0A7>sAjZ2Fy>K= zuA^i?51M|7RcSvSwEY$ql!ah>cwZjqh1fAkeFD-0rGsi;9-{q804_9r9hN@6d2JJJ z1SSJxTP~8f!_$4`tutt_z8qZ_&lYoFbanxCzi!jdB=8Y)Nhyb&H6`%Co0~i zzTk(&|LAKebG)$vav%$H99;WUaJ1$Oh#oXHG7GfZVYL^unt~7>&S(H9r2w%Z7 z<(+B%Zm2qk)EaD_`#jiLP1(yfZm3r?UeGjz|J4r~mld@qoVN9Ue*U zY{3B~dF%eVsaeA~5k*)dG-xZ><6b#K6y4r(QKhgz7T#EpW(Yzn6i9WmGC*lwW;^Zxp{Ytv~)VO2AtpP;$V z(KW8WQcz4sAWkk{j%Wi0ZCOA4ZQOw77^hBO<-6zCuOpD?zx0MsH`eqg8loDq{(ygQ zL5#H4k4G`(sVj3@?2O;EQB`z#+Q{;?{z5L?;H50=xN?4z>P4fPsrP@NV&SvrW8IbO zrZ}m(F>-s&uV=d{%qrCNXA?3Q)Z;Og90?bs#9zzMl&%fB@rtGuIntwxuw!CiD;;DJ zR7BZcT4&xmrhZ!440$yPI&bIBJoznl=zpk1KDZb{_6+ymKEw@eJtpx!L*AvPj0&=j z&cq@6Jo@_A%JyA@=gn3;6!Sx0A^#h|2&JoHe-I#`9Y`P`tp5{0D`RF?2NnY}&woM8 zQRB+}w1NjE{^e2b0g@+5Z9yyj!4r{chD23ZthP1&*8bHChGuj?=@()#-@)Mk)GwUQwPt;4E%jWWIvTS6doG0Kyf%yPYj`bs?kH&vLVm3zeWYoc`2 zu-*fJitGw)ACp%tZfiM$hP>n2PS@Elq`I4cZW)}#_s?=lcgkact|*u8Mb(o=kFOyH zt*?Z0lhlU6(iNyC#tcEn`^DcHlNT<5JLNOV6 zlWMk6hTg;(&a9F<6R$wzIbo(_Sg>uFmkKYE4||0}c$$pxY^rT`cBjYE(1-UdFGa-6 zMMv1**YOhI5IWpSc$*5IOk~jIfeNb3ed=76SbA2BZu+tP$;&Lcg%k|ryfR9bId*^b z(s7wE1Q7~zwnZq=8~H7(W!q#bcek&Ieiw#HWuJU($8=L2!5Xk^%`_u;M}t?M^-8!B z#1XSkAA6w@QxwuFkl*Pt+~~!^(65z*=zu@f^LX!wffN3{JCi#T%p^B8?=$FkA2zqR z#^SvS7t-oK=INc*5b)oejT3R!-~5-ac^Loiqhse_Z)4{5FJD_V?Hsn*QNH{7gIkp( ztI#|BCrgOA6EV%D)2Z6>!Cqc*a&2xA>R1R}*Kwohvtxt9Iml&%RqM(KN^sWo*k zb=?VQ?@mXwuCAl1RbHZ1*IpUvPcz2OAA+n^TantOi5hF^X@RXb>G-Q{QL>MiepR-{ zc4+kIilj|TX{M|!O+R_YK%aX>x5jg2j2_;iZJTuh-l-gCM#kB508suKy~|>OG8J>L z`c>g{mX9+>^J(qNE6gSf(+xYRt?Dawo-Kl&R1CZkw``c_9j;kzf z4nSRkm=DK-0(RHD$(`xmdKn$E@>hPJLn>2SQw*mQ7#RNwx7jVP20|PF zc4qiZ8rLM+?FUUdj6GZ%kw-kzm7?C_>}$aeS5pKTzLLudFc8{hhj3Otq4%{YR|wjx z*b5c>Uc@+6WzDo^J(fi^g3qYNBdPe*K{||kItB7e3=US#z>$W%4{~X0Y-7V5AGa~$ z*lD6v^V`1BcIRDvTPGXFEBN&E))##XU-y>9sFgtjPnFak&WGbuU~%@6LhwaF^lbzv zM1sp?S{ze8+b|_XvfM}$7zR?F#(rB_e=SLvi=*#rO zbHd!VG;8c!&n}WMyc`wekBkV?S@_33G)AxYh3rWZN8Zhpcd;ch2i_13O3t?=relRD zsl#st*D&59=oZGsEg5xzN$HzY3YscBVHK&4CbxeQ0@58Xd&s==g)j{Nw6VDX9<^dN z=9napa`W?o#(OYaUeB^+Vv2RhZ{h{ZGX0fp(+trJX_Czj*CA?seu}TsRdfZ2o#N) z+oO?!SRh&XWZ^k=Hmd+PrjPUU9rRw`XQjtL=Q5 za~W5~4QjwMFhCCcJH@Phj5#4nCMhm3)^HF^oGMk{2g12b9E+EqB4*bfP0{nhZ}?$! z!KZL9?h+429El$x?sqwtS6WI+vy)C~ghcGeINZpy)ez37-_!5IH_SC908ER*R=^;j7y=lQ3 zkYtQKyNZ8zhoD~j%m~U^*|m|4N(m2ezB%ynsO^Asxo#5H?tx9-^|-m>GN4umIvp^& z)fsM8y7T(>BTy&?@Qzu=0Pg5Hm1o?e*KNY` z+vh4XBJWd=+Kkuq5X=u#vp-abJA#p*=I}SQ-{?=^z%nXo*MJ-1)bTR<(Q`@SlC}Ha zJ7F|(wMna*gcyHmvCPQu-9A0I>9!h$$l!%%wQ}zeYA94Daz<2{X6B#XNx&9ZiC0dEQ3VCz0EP0GI&a=fCpgaQ+X%HlzUtMX>O>`8IqrgI4LBT&?HjGO+X3m z!amEqRcf$b@!D%m{^39w!SXyn({XCMn1=ID?C-!%m{=HehAh87HZIMPOqt)b#O_B~v*OnZFadFNQ3J=N8 z{Cr*9Lr)_*TjOEFb2r+j8?$?p$-b)!2ac9SIQA6lZ(po2^gVEi2trZ4Txd(-V0@_RjC0`=m=?42G^c zBvwO?Ii?#fLjfMTw*)c|5y|cD+Ho;a=q7zrN0d`TUmZZE5Rk7a2zj}nI1-&dB^)-p zid5;Ut@-qgRzK&L?k_bCEVcE|w*vp|1xT~m-4#Z$AhkW^izprs-mA!OwaC@EMgZUI+3=e(}#FU(#)(7u+yZqZq)$P_L zr<$IRU-68q1u#dSFW(i*o^!b!z1e-?-lWt~9sflnF=~xd4h5(J5&Wrs7!0j;y&P$T zCuu=vkaS+s^`9nOSv%pSHoU>OzwI#83bH&2vC74)Cdoeoo^E2DZa3HJ0ywMJr2nBe zL=c=+VlTiPb}uB$(BlNaneP z(!?6b;0y_3B#JE&C0N!iP0;~96Px^lO4rN#6pedIw{&4W*CUncsUhnM8v2WrmD>KW z2QP3)#(?~Ravt1#m(1Va+vDBffT3jh0U7C;NiOrv{B`>6?P46(+Q<&@y$pEu`zMoo zUEWG4cSpNTkSJMJ^8CJ74zpD}nPAOFY@ossqs;8V#kA zAa^5~ZZ~#!cWvgbt1=~$TrFYe}?gm9@dD&wBxN5hTORc-nQQz!hEZt-|7|qT0Se`j1;=ry@ zBK+hv=dUw(Uj94>o@lJvIE4bwB~il?{pta=Jr8Hqi5Kn=FVV5e5&-76ErE@Ddt5bt z2i?sRbvw4{o8aLd(wn8QU*VI0mW*G2_5mt|+pcbH1OR_wna&SsIp78p$_%Ll0fz{N zQE*I76J4;~Yp78b*ng1KNC6=Q@eV~tD{ShIIi*NQDdk(XhH z%jVP@fA9*U&zzm$Sr70>PjLb}QcAW)GCv!xzxW#bp2j3xrov6Amfi4`jXSC;qFrIh z7Je!VRU{dL$9CpR{Q364q3A`iRMhh#6AIJ?8Rf#VT2-O@Aa}!tw%(wlkmqHq@t7~W zf0sVP_P%RJpC*tSjoh6(KAnhYg_`*xpQ>|tJ_f`YE%q|a9o*?p9&n7YB$=DKr4?l^g%XmQ`lQQ9H!796tSc#8aukyBcb9*r)5 zMPknM@dfUC01M4wqqdflM40qp9(l;}Na8Ct>ZL!4N)k+}H?n@)MZzEU1PR@hNWegk zUB$-ewyRYe>B$vr66qq|2HAw@T=R@}}&iw*Tp)ft> zkfODD^a-~547v-#cd<(j_f(8WJVh{U=@$1Diiap^huEiN;Y-kJB|fgDQseVMyio$J z6k_k0$*^JC`%GG{ZlwS}Ss>$*F4Wg7RV}y&v%|dZ5NwAFXkQ4lcK)#xYilHMd4~)C z^UT)h$Nlt2p5x1YQy3mv{f<<3L<%bA4XX4hL51*-PV=ecke4rd8CdEIceh~~N@d|u zv?+!FaKj06-YvbVu{S3J>S2j4UCKUnWZ#| zNS20os8B(q7f_RMiNFOO{S`nqIx$GbVgZZ_w_2-Lzjpuf)D2LyL3A}?4_?L>5wCGH zZ6({2N{@t-7)VZ;G>!<)wP#oTBzZx^?*3r5s+0R}4`^Ub0h81LJqfEm_Pv?s2b0hF zd^t}tI6HQu0{X3Gp+MVm;!W zNpQt8YV#89ySF|9-t#Xrr@3wx6@_B^EP`kb35d^W^FdkUV`aA7fd?_y$tV=4$dc-0 z`ju?S*Y6mb`(GhORk^Uioyq`DS=j_2qU)|l%w@0JZ$)&dTFlpEv>K$PW)3ha~8f3q>wI#G3 zVsBT>x7oJp4SL=O`Qr%_sOK!*@IKm{*1uFSsrb%3uRUvmX$7(v%&igFG0R@f-OwF( zGE#1(sfXZi9@^$9rcYd^_yo%Hunk_Dl-~~3gRuq&L{vsR#C}VJ%q3en{2NA#G0up=Xyl-#?X9K}P`$`7CWoIa;p}F3QKMQz~JXm;fXXRwuNt(!;|%Ln|Dq{_uwlC*wu1VGX)I9+(MT<6w7-BIt1}^>TO~8D%gI%}b2UdWxx4ZaqT!<2lDP|07 z7>M8lz#>6N;YIC6TBjFP7TBzdZBT--!g(!kXE^AB7PDt&>euQyOXbX{hkU)a;(6ij zwx)Z4Gk7jK&fY?vRU<=(J(TO+epU0QLHvR+>-_CvjH*6Eu(^!u%i9Z>Q;gdy-}tMd z0y{DP4b8c8EDfOs0uGp;Xw`7^k(Tz zv0Yol{F`%;a!yPtqqw=b8iMj_ZlROiTEEIIflO(aSI&X$j1a$v`W*Y6>9s1Ujm=&g z7y&0uN-Hbrw~Bj1!ko&*3++*1GD~4-k8{PNH(kHdscIHphfq&>P+OB7GNN%Ldf|pYz5b_IfVoTL-8;V(t--| zh5=Ol5DIPIV949`66=Nm)1pfHN6V3JWSNNU#9Iq;9UHQc*Um$|=s6z_*4`LAo0oS` z2aiHZj_U7`blcnI$TdVC2Z6;5|6WJ}QckfBg#F*G;Ip8&Bsz`cQyf@9pR!B8BU8|; z*%}#>)UksC0cEa+8rhjxTSNEXim}qxVInNt- zBi9Ebu=yL(4#5bQ)CW5Py~WxEeM2QHd04k3V;G_-!nZmBbppwyz$*&XXY12HZzlO7 zXS8!mHiq}u2Q_W02Hb`VmaIWW*z$yiPZl?T+03P&%)(za+qGlP*kjJ(E;2O~+Czk= zGVz!=kqnvmy`n68#_F9Q)lP++)%Y3zzDF`y<*aa(e2C+^G5Wvj$GTlOtu z2^#Z$`&4cm(sHIL4M`NRrfpzcPa`RUEc8E>l1J!XUTTiVVzT-=sk+Ss5=~KQr!r}& zEwX}nB2%vj~l4UxrYVOTUJ4NGUJ=@>3n*sPRmbBr5%?+%FeatRj{I zl~Cg?U4gFaD6v}-x`c}ok$f z(ZIV~hJH(rQb-c5v1w;ZtHe88_?cBB9+li|I?sm_F^~zBF|Mh6ww11;oA{u@m9X)Z z)ex(u=J66IRY@0S08@b_?@^=yjzce9S8TS`Xo*7_QVst(8*s?cmrT7NvEE^`NUep0 z7~6s#%IaoW__~Q=NhQ4*vysYOa#SkqhE+7qQEJR`&U&G=Zs9b}5DnjSJdLwv6PK+N zo{ygJW9dx|-OObg&$v`GE^lV=Va5}-*W0uP+g1&6O{`y?nSwX?Rc(lVxDsp_|J{sb zA(dPW71Ob(PFZn4PEw~$xaLgkIR)#r3p^GDP2!C+sYi}%HBcfPOoXAil?`$#+ZXq2 ze6X1Z){v`0lW~_4Vjv(kHJz((X%(OFv|3v*RBruXIUL8SkFWT+irS7cfF3Qi7OddX zLqEtmpmGcuNWz-abk$~AFY0D##<2UZ+Z%}PvMOUCkca2Z;S?J>goUVQbX7CfP7Oz_dayYl=@^R@*Yww2!K{jc4myco<`4~=MjtZ6>{zW*=ar6F+t zSIL_8l(O0eF+TQNh;D>8t`pxyZe2_T^s*emGG|vjOcpP&BdhS@Zq!f1On&I+KQ1aA z`*1%oKDK7b{q1IJ=BOFLHGegoVkVWO7O7CvoKJ4=zr(VWG5>+fb!{h+8LXcdQh-UN z_q`*gp2HtWR7XoX8i4QL`h&Hy^M^|Fp!)gbbqq(5>F&y0s)|ZFc#l0Ed{SzOcuS@^ z5o8V?kgfQ}y9J~t6cRqE0 zU^6ZevUuf%Y4$1OpC{_H;>dH$Dl0F;)3~ip)8!>uRrXrj<)!xdwAGdhZ4?K9&->h; za(q=Wx8|ZO*$BW2ETU>E4YroT zyKbO$CYCQoqQ#Ll2SF4O5wfqF+5aQkuJD=A%G$0l~LGi)t z+QVy4(V?}M0C@G3?2N|hCt>umUG(wrTO0*fcfbc~a~#QE1cy0bk02^lLpCpWrFM&E zNGTGqnui*z+EQv`dxoua^{iA^eGYWnPO3FO*VXfJ^-L?(3(hjx=Hmk~@D_hw*!pIN zvnGE($91!EI?An2BGPN%CjzUDe%az^DLQ4Z!?xLDJ(&*R`oK#Im?FD|BpL_N$4(Cn z(U?wK%NiU?Vy!An9<+^Ul%?J#Z5j)GaanW?KPi0!yY_uIB8KSq32Yyz1kI-_)o&Sv8bVZ-Iy*pC>7{QRXtNEbKwCFLpOhVQ!9 zsM)AbIyU>Z%mAnI%`6kmXb{>{PI}erbD(ObD%2-M(wD91f~=%5t!h1d(OA&kQ<(vj zw3H|Uw@{Cc;v+Iznw)c?U6NOiqM_T&iVUaIE6Ck*l=#}-ClyNu(y=5~(CN!vMhfl7 zo;cc23x<|)E4xHQNW(;%kg9(+m=qNyn8W$%Qf~x!z9u2HTI;?Fx9BmfFzwp%xv{)` zWU#ltw$ei7LY~hkMV##i>NnUC7q!(ZiHd3jrFYZ6`rV6aM)B1AzTb~x+|i3~B+fTO zY}gmWUhVh7_31YcD{Zq?C5K2j1PnwReD12#>t%Yb!wjw4BHeN!N1@e#T28mp!RWMj zfVItR(D+f%V+_Tg*nq9pMkoaH7@@9lAQMWEA;6NTpbxu`aMPPSMd`l3hq5g-H_@!s zApE_&QLtq4KQ1_+GxboFihHehAOSPSy9c>*2pS^{#8*WKmcn0qWOxK$N9hpRXeqZ9 zRF=_kUY;o_*R=mH>|Xr$sX=B#N?LGu(qXv=04&8PtC^4(B8tvq9tGTXs%{CWSgPB} zGE29H%ACLQR5~43O<7Q^|Htip(WJfZo@XNe4AX^iVh^jZP0`2gvK(PkR=TWbq%Fx?scjW}w`60IpQY zmgH4HdE@OnIU;as_#g%EL+jLVJ+=#!0#gSa7&IS*AX56(5prB+nf4Sie0sjVxF9i*#>p51&@3T zUgUXtT4)y55%8ZwZ%B3HZl{h@lr$4gE`Hrx{pjRV3a6)lAHGx3t)Xl2o0@jK6jYZ| z_}Sta7~h279-lVK*m6O2;3^*ZCs!#vB~@6pr8<3O^2=aEvv{)lc{^Pi%aHz(8T>{& z|I}onqLwh6g)0A>MeIBoWEVJAlQ^MsO)Y1iz!62`L zMW^LZ9^-G0sUwy!*quzY0~vFU+G=18i?nRBVH+sPJ~1~*h>Zm%I*?Y5rOGU|a|%p) zSHF3{s>8M8J5N%xyuKD%=D~NiR{Hz+=?d8n?r}<>-}CFhhD*%?p94gl8<^&6rAE=B z=94yh@7q0EpgXFV{^M2VNc+cE@Z}12C){x*Lf!&MLgndImRLgq1GzHVtI_h7F~YD=aPDd||@y z*($q&70rS3E7Olfsu+v^@*mD?+ee+R_O7AMim1e&X5<|!fmGuGmY5GS2U}eGqY|uSet*-{T5C2<+ zroydnXBubrR3(*%mHxcX+2*~m??FTv+33us{rCa{U;po(w3fT$ci9xisUc@nbbTCt zxwlm#XAPbrO^XBgpy#~u={})Gh09sAH1$c6+aVjySanZ8v*U0 z^pXA1QRDk7-)C_Y>vSsbb*fk4_Bu}NR8`;1tgaAef?fFR>hzV@+y8F`cot`_eH*SUUa6Kxa$wX^Nfi;z|`v2vSG3 zsR$NDb@f7y51+Un45VvDfC#{j%>_#c%&I!&PJk5Hy4c9ig-GUam%UUwMfRip?6j#y-|}a2IC^F`ZQD z%-p2?I5jjr7P~-hZj6x!RSD6@VhetPL9ULI3U{E#PJebU_cv=CuqEp#m_2(l(~qkg zBexeLzu}a}$CmJIDAF&r8t3o>s#ZSfn#17~+iK~gD^^I^kd@>m{?c;|2QbW&e{ z^O)UIS|6%_ALRL`t~930PS>)Q-U{RJ%~cC~?SOvxDLT$=!d2@A`gOj4?1<%humiED zbLRu;w{9$SR+|CnuUhKBsv8PKc~Lg0^Q;IUZAR>=!Hjr(YQu@WJkfCse^kVVS;h12 zG;8njs-sPD;f(L&y(E!cirY`!7%%dEXk~41{b|la9;PnZZS}#q6dxE zQF4Z|vMZXkUWahDHcPNs%tCRvZ0rnBeNy@9pgqHy@PrlYv#x) z@j&1|jwO*iHquIu-Z$bc&skybpLMn4%}CFeeNp|2+IjBV|q<4=Vye?)iRfodNDfKT>rMyCY+>^XprWNfnw zNfS8E%HX3mlH5`9?%(?KojnlX&{}J44^8H-&mOp3ZNWEToBCP8&Y71tO@sOc#YUco zwhU5dmgm%}ji|iVY=cG~>v#hV7uq1IO-HsIHAN3ks6eJaXqzkEu>EDNpqo(^(2})Y zPbIXX?~@bI?XjNcm~2G|K0_*=L&|tNU(mD5bOS8}bAwEfTb4s2qPqi9gjeoP5ZBY< zCajcFa^YBUS6=dMb|2{FUsIi`it@{<_Vnuta8iWAb+H0X} z+aUsQ)&S$dmy8qM+Mg{caN9id8+~;yP57-P5J-{MYv!_-AV8`v5&h)Q<`4TDtX#00 z448v6=gf`Jar{&XqLSa&#IPj2vA67B7e*u*70{_goOm`Jk%7xc3=`wMDF^~GIdL`v z-Q~nf9aKEfrEqg}vBA~9)+--f{Km`biZ7czRZs`=V5C)HUvSysj2w*LI)^9W;g|)K zgnc4NUZ^NqTr`}@6)^iZhs;s@HF)*s077}X;6H2fA}Swr-oqE^c;~Ow#NDdxDv-cR za1vgn8uBM@_Ir0v)$Iumw^>;=s3*W&YRZrAs{7mAow`#4re@Km4;}D+G`a1%wCT?P zI<7c)yDzrVnqwx!?ss9ogbY&NT(9(MxSq4Urnp9WdDWzWDE)w(vSc0DJ!;>F6DreS zKlj>?Xs$8%RR%FeCOYl#KH<$i9*@7KA2+5 zl)XSsht+ge&&G6|xs`SLYvf|l+8R0q<{n!`;vPc^76m+T(zn_$93;TJfwg`5W9&Dh zS78IKLP^)ndndGT=>B&zo5Tn@Kj=_PXB|DtO8+(E0+=s;{vYPR7#6S=0|o@-5BL8u zvv!8Irp^wA#-`5y!yu~3+5_1BhnYpv10%vo7tlrpZ*y1>UMva+i8iv|3^1UXG80Y& zlO%oUzk{PxOv>GLLwp%!dp~`eg%f|>3l-7XaT$CmS!INm%$9KJWVr3X^1mz*a+({F z9TZE2$Vcq(3gw!SPGn5tw~<-G zMBB4x1LI@+C@%)WDJXnr`vvgjW;tzF#hnuo)?BMTKmKPcopQPM6^r2#z((xks3KwF zf*IhOBp%Qdy^PaHS1?E$lMiqRt`*N^gPFaNaGVjnHRXCZhX;GkI=7*o1kz7wq&9To z{!kIFN$|N2I}S(feAe4clQU{2DhRjU=Ip{tF1tzG8M%q;30y_b*d(T0<)n@>?b$Y* zv1yhO32Qy188TSk^bjxcOgxhifLusNl_Xb{5fIA@w6%qn_>-Umja|Wz<#=8Dyw;47 zD>ovz;WFp)l!Ps2LbAJ+8P^Xc;kCwfQP;}2;a?y3n?2K5M%H?XmV{)^)vsZ}JnBzr zQAdvicL^%AQlwyooi?X0q7R3@4_g!w+nVTQ|ChYwsNL9ooY^6F4xiHfUs^-V=hqzWtWlRRi2_RFC=%x~aSJo%XH+RfT!H3~p#1@;Yx@ z5zemn{LDwhUwL+PEylnLHNQWBCo}(aBGd>1(n|Nlpj=cU%peC!VJ@A+2Ny2BD+c9_ zm*ppxsJ5A)xEsQltK~v3&=d{5Rey^hpS)JVW%FkP-0!=!6<{9B16ORItv97 zEE#clt<~Zt+E$^tgtK@!ElrM3z>1ZVh~&r4A}u@=X-hy)ZMu8UEw5ANU0li_1$70q z`i*-~#_&oaUu8oEA$-^ot$n8<39WaLNo>@<<0x>#3+^$$hias8n;_Sz{wNOsvl^f! zA)dK7rTNVJS1nPrh^x>Azhjzx=M8WfqUxn|O5^O&jM0pBdJQ=rJo%PcdI4apPVL)L zP`W|?lV{1m6)c(rWT$LSxTP0&Pt=4z4{hDFb}G@OyRh)HoA%5O#q1;uL75(>vE$WbdmVae3s)(&oP(g1#k1XHo5Z2KnJK_~{+4T3yUkLlSG3 z0KCM{dO?;GQjd=!8Kk8Y`UU(+eb3QWM7hH?4_$Pvq|N=;=Q|ls?eKiJ6Pwirh}s?p z2Q^v-R7c=Sl4W4`n6u_#$98vh7a=$+aL$I@wajNOp87w<*c!5c zJib6O!!^&1F;}vY4SPo$-%h>qUkNH?RRyl5s1HHfR+PkQ)GK{PdY=~XmgT;wuT93@ zu_5YGRm zrv7`ptPRag^)2m8{xA5y>ib`p5L?sv-4Aug<7|=?37Ol{ZLeJpn`{o7`7#+jLHF*N zhox2sNgbsUDJ8d6`>TEb6L0_!)Rdh2KKI>44qFox97OP-k0AqYteAb9y&i;RCb*_v zv?fl?@}_AQlAxMyx@fAIXD4Q?nD@Jt?yBvA4bDsJ(!Nz80X@5|-g$r3W~s%hK87W6 zpHIn;R@rRR1pP|BC-r4pRg{^%o_e)GAEo)T`QLo~^^2}eKzOVLyR{c~wERN7N^I8G zvOqK@{%G~3ltn;xSHL0pV3Y0oWX*)=rd*Jw>fF;PS1pdBe2{9_-m>x{l4r=v2~nk} zvhAfNB=Z*R!PE6;vbn$C_o46O*Gczl@`2}Gi>n{7OXZa0{mnE%e&2VtkBZt0744(G zNR!<535mz+fBV7a z^kDpc)P8#dAj}nK_&V_2|v?BBdpN8XnkVYwUSS$^?DR>*`TmA*aycl1a$q7yo}fVSPmXJpw||&@Jbn3m?;0RRuY7(n1)9$aJP25*!<^rr>*fo9t74b18jl^C>MN5}--mIR)*q^Aj3UcG5rJ$MF8B=-h&KaNIZgutd(BeLtw`taoaG4a9@1(}^D_s8YWWP<%( zpKk#7IcL;%OB_Z&*z?^eefTqJg#YCFz3sy^h25Iyo*1CFHw2R`P_Fzx2NBJsURvfG zm~lu;XBAndx+};dus@Mzg3dwmF&F()lcn&UuAyF#iRSu1_)h#kLLQ#r#Jyg>e`m?B zlb`AQIRPXA$cTLb`rE5r0x8^k-M`g?;gMT?l8@T=X4`btPE$sgKlN9(O;W##tNpS6 z*#74H5$Lu7MjwnhqmbB=VC90K#FN%27e|~YgJ>sk*AFD|&dh-18Sg?tlGLIvGNUyE z5Tld4r1c*_lJx*5T2CZr069Qfk@3xrbiw~5q2ma4@1EzL#yXe?mgFCqKO3(?SOQ%$ z0t+l4d2kDGvO!mIF*LwA3=|*8@xt7Kv3!`+5N=CNT%^zNVd_6nbUVv?tjZ zthKJh;v$lv_JX?6(AIx}BDMD9zR}e%B z#V-zsS=B0*UD4V^T@0qrN$~Kpu06|(FN>RZE4)8CD>jyM%c^gt$J;TUhzA20BD7_* zv!^Nv_}YOzdfyI_n&qILX9izXT-6~P)dfs*N_ ztDySYebgdxKduPStb49UADz8mYW$mV^CiLCp3wvb8j>~YncRRFsKxK3Au@YxbGBn+ zr>e}o=G@XMs7nZnluf`4b1Ls?V3m5=}oZqp5YT2BjASleWAF1vB2hcB_PcYN#O z&hh@O@@DgfvekJ!v+FM9Slm)3<)m(che!#Wpok8pQJKN&>BE`C1e@YqN=!4Kl`e0~T_TFBML5_Lb|8AGwrb zc`eiu2&f*zajJuf1B!}sLHcZC1X4G_fqNveNw0J0Bc~k?8G}bktp@n6lwGwfklZiC znk|GKs~`t|`;bwi@bSYtXPrje8k`KUi4qJf!XDn&k{asQ0eFo;t@HyVD{JTWPbn5t zg#9QD_$wB6O$dz35FBu-oP8-gQE=|N~m=n4zI3}YIvFLLo@5)40&d{Hd7L%IqfE9)sl+R5A%;7oucEL_yrZeVU z(4Rg5tT>Vh9I+q`TV?e3Qi?X1ZmFy)N>Nm>jBJXeC-jRYkS$qQlUGz>RBU6V+jkV4^i+Q9s4PP@Rf&kIwdOTjtYw!WC$Da5sO%0>8Bi~rPO2TtIa>0 zdE6rKn-j;(hwY9%=AQmqz7p(a*j5Bktd`_%P+$p6RiP{^R}Q`38NM<6X1~CF^IBni zNCY5$ULG!NY_t3uy(DBBh2{+)DA=HB5s5i+z_~q82HMGrT|IsnQYU;#bX%cjK%xlZ>NWgFC*hBhIg@7nLL~^KJsMjRZXd z_srq1LBntIf@-taN+j7#kZLku2xI{u9%M;+1_xJ4Hng$tFq2cWpo$7CHH140{bG?? ztC_aqy*K@gy^iFDdV`d`BB*i*UrnV-4XQA(ewFU&IG2 zmfZ(BKmrp^NKeL&+_3QU(6MTIJR%R~}I>g~0!K`UY{Zsz5yl8FX8&}YMq)eLUBPP+qV0ab|tEdHUv^kE}< zm*uZa*rX`}IQAKe4vv03yr~wWhhnPd@uvp;s~Dqk@F+G`@n*RUt^~AeMm)77 zVr-lkC3btM+7;*UtDF$nRq4^OB%18N)ArS)FdOFM76e}5$|&$+&96|hIPTnz;4k38 zkOvqOm4rpAO~0v{7^#^OF@a1*)jx~?!XA$ni{Cy;zFUm*37!U8Blx-3DUw0v0tIJy z_|FUpC6t83LK!gs>wqhRXj7xg5o@*%#R6<$OSVx+F3vO9;_tcT-3$`*e1HX|l)x~b zX5xB~Zh`{F59bwzz}ilIav_VzTY=M5{?}{@aRX1tgmgZN zdo8rGiol?OWB`Ua4>mc} z4Ky8nuWJ2=@F)<^-jWT&;5n!g#w3K)Xy`xJ2Z}t?{n&Wnvc8WNsCCr!q$O7_ z0J({)1K(XmE~#f`n~PR*4Ahj%wc{1Q}$SS$D*_&&SkoBS0y%R(d%8c zN`iWv_{7;_>Yt>CIF7+(v%fEj9Q7ET_V=t9EIk~l6`R@&isQ_#HMVirwVcqFI-qx1hoe0!xdy# z#y28{rC6?vzjb#WSG$S9-i-3CeEld0Rcn}>E$qme=Ao87+t>}j15NSBhRI^vZ5MaD zuW!HZIdd4$QHAlEje8pT;i}1M>x>)fJ{$?Cnq4|JQZ@@sAY@@cetKuK%sTq70(B!i zH*=z>fVhnDWdj*jjNbg$s>Sd>@9=BT;4gimq>jQH)9_f(vKll|lqECXPqx_K zz(a9wUG6Py{^CTd!6305?h^I=m zjE`YyRluqKBLa@>PLT6%ZyyOIJ1K@FDLHQyfL~YLS&`)gF!M2@YFIb(++cQR8MENp z4fzG;0ts?E@)(IS-2{aj76hl-rJK-&fq^@w7v>}oOlErC>#*EJWmWb35WLeh<+pt- znYsjv$X@q zBWtW-7$B)*L;{qcDjWmcMyzO2l<$j|u3MPJA}c(e9m)emJC_Ya9&=s6fVLx`3YKVo z3^F7J9oqrjI|$gvalD{1k>`*#JTc4pREfLo#X>IgLTH2_yz}pM43Li4dZr$h^ zwU}|K^*0?;4>c77SvXG@y3%|ExgrC35T^+^OcUF=(-h5iQ0gHqGLjPOLCWLZXac82 zVXOu?FEU*{gUtIaInWogL;qYE#*(ekNPH!RtOBQ-Z4Da-h@k6~Wq@q1Hg-=TY|vXN zaw36`?)Llrg`vaqc6$kO9NHe4MlrqrQ*Lkd(@JcXZ30yXrSbR7qdFV)Ig=MW(rmLtYFhB;LX86W49(gZ=~ zAr?|wU)O49l*>y`{#OWxVbdGNTi>2wHN1rTE)u518}QiAWmNXOMwXS%C+MBKW-2n- zK$2L(7TCt!P7za3a0XuxFwk0e2Hmk@xk#*>YcP!NLv#x_GHz@XdJPh*2utW;bG0ew z$661O2uYve5b<{$CCMu+O=W90Usgfu`e^Zr*Oy122d_%yDR?C;?1W8zyXD*wxadlQ z4=+sy)I_K)9Bk&UkH6*2u~TJ@dX4aPA0RFpZ6KaE&hng|+C z#5eLVqO#Z+a>j9sc44Qb-Qj(~LY9Fv$@sD-2G>afcMsfcO!U~eWMWIyEgb;^yj@&w zau2K&fMfh>%fvRU^y^$E!s%{>Yo^gI>zFZAl3dJeplri4xG$$qmo-QqDK~ z*N;hZLwNC@bqX~IeejBQF1^#tH||$+4TZ&t_AC1a9zc?j5WcFDQ!5DxalpWI7dVxK zlu)x`)ibMwI?!B`N`l16fDJAO3~@o@*N$2Vs=}U;8F&(#DtpGHY~z1prH~oiG%&f=WRPAlH`W8e8C^HVKQ3mD-!=Uw%=pmL@h98aHhpECH_ zEFQKEGuj6>a+!sH^8w%%R60dl3+xD{rz645d{u9U(#WT!BNB&acMI{BqYeH6$Vv{c zM3_1k|BcG7>;cLp)$6Y+1eNbG(g{#tUfKOXR(kE5y;;LxDsFmJLxm<E3_*en>rp$4a=*dX%N-K0IADdGyhay;AU*z&gBDe#hfjvhdUAv z4rqk&WIq1uCTLQo;zSvBy8ul_m#$8Vkra?ji^HN&!zS(Ji#9&P7C&di$Ot+EQf>&= zGVlZ2T<+MJaUe=y8bLWDus^t&VDqM``1lBqs^nU@#Mwmm4THzu<20w|nTF?^Y1l`@ zn8AuP^P;z0nXE1Z(_C{4o)X-|2^m%k9vPdABc2_7q=GBguK2ym)k9C>fC7pxC|waJ z2!M;NS7hSD6)BPv54HhxwlUtWH7-yQlA`hXFuU*QO81Iyz#wlk%DG=H$szQGyM4i` znj7WU@?fkuGAW5eL<7WZUZdE7bM5xg$7tohX%WO8;uUXG;l-hpT1jAYc$=MFb z0b=2mYyhc}B)zm*qy;!EzO=twfUJ-Zu3LGFz-(wUylo}ZgkSeADw!aQ8~ly$mKKwF zHd6EL*(%8V5>u*kQX~X>Rn~r-YNKXT*FefBAN`RfC1$NCp%pWRO7QTtyvn?t!0wSl zvqSnJxL6K13sfFzRnk)1<`Np>npVLz}jR` zQ0{<*|49X#)js#G%EdqZSDfJ8Vl(k~v>uh=b+>D1Ok5y3TcPdY82G}j=JhYjH1M;x zr_QY{3UQAo06h54r_)oaQyR^^~B2>&u*K zG$U~53@&s%i7WpolI`Ckgs!}N+m$-S>(HbCdT`nDiB4sNWlr-SGKlWEI5bf*wfM$j zfv#u7QU4SP2p5EVp%8yOHR{9@fjlGYj1}M5-syuRlnZKNkwdMJfp3>|AU8uorHzCL zJm+jy^O>^jiH!C(e)0@Xa`+@V&mv|{36)hm)kx72dP2@D@$wXd7MYV#K2x}w$1+V= z1#$Qrud)~nfy2}M0=jQWPhf|pj!U@Sfq zOJLodJ=I}8GYcUv%YB67@{4g9=$7;Ilh5KSu$>p7lcAaVA;hyHt#u9ODO+S7 zq=R(RSoicm$5C`HS%8k~@13^aIY+C2!<~DcHx+G`)iOk5)Op&0^+?5G*+;YOWb>fe zTuwlWYe2pLb}t4)PQa5gkIH5aH(fw0@YPI*coUY*Nu}7H#PVXJ)t>C6Y%GpY)Ps%F zd9r67Uj{4v$rvhV+i`$GtUtK10s6L>HeAqObp^tR=FzaRkSzSZCN^Z z1Z*4DkDilxY$RIEliFQV;bcQT$^%2F9Rg<%erI8Ito{gU9VSX=TkRjVgmrFBq$tvX zW(HBx@%RwqWpmsxIgn2vcZ!9`t8&NS!*UfkFcMx$HW1Uxp%LFXjczy_*iww-c=WdJ zP5lfd)ltCb5i-L|tAtr<2yC2>VXxxtaxpC_8)OkkuC;W94t1z}yZ?%tpx0gCalhH& zZ4_H+wUR9~iMJwv7O!=*bv1Yet2mmF?i+>Fh8^z*0E#-^l((KkrmO|PpUyn|;(7p1 z3tqzuccCQCVNI1T>`Tf+LS=*VKs@|G3y$!qRBiZEpe!s_%W_21LOJ`nZulZ`Rt<tETnnp2+HNo3Uwxfu}CChf(DbI%c z$i|Y(wP-J#^A{5&0aNqSC*_aZb&hTHf8&5#P?bGU z4;CA6$0&bnG0gSP96I9;>H7^SRK-Tpz4<&5i2W)eCBLoU4VADMbRRXp=?1i7vJ!4G zF*!INyd&80zK3AUhMs%luufUw_GPy{93;C2J^n7y0X^B&rd5w&Zv?)Q#@eg@qN5Q9 z!CK&kG~lKFxr20aISMO}1)K?|>dGt&m+;%}wS#@hb3>x*1d?I`YP{!!@|=e3y6TT5 zm$DKm6XJYVaH$mh7Kux(x*q_29xI|4$A|^X?JK+bc4S7iJ!ofo%|f53#Un=_65e&xo^^%byprcdg8OLBgGkEi$J^~GoMnf{?Hvn96&59qMb zumvS{0gkbs~7xf`Q)gjanFs2`SA~&13@tG83$xKSL01Sfd$c?jz4e z1TsfECp1PJPo{j=IWV~Sms#A-AK}{-_-W<~N?2pi8=5C`OOW-+s~AF)^f~yn_fM{c z^{4RI?ACncUX_!IX)dLPD>>WF!7_w|E%c~8D@UUZk;Xh|{>9@|qS*6MnRu1wog0R`j|nr}!e!LH z5#savI+(4C-}wDY6K3U)vPub|=EFjhkk9?Id+D6)SUqInv=|d|Kct^?l4gD}e;$?B z7#VF#F6uStxQ6nib5NP^T7!3WYHHbx%B7p^0cR2!w5a+4P!5stn#4CSND(N<;_#8J zk$Q0dlSaB&TN^n~6!F-y4qoNt>a}#imtR&S2mE0Rd?N zn_2h5#zY#H9KhIHItAuiID|n5_le;NiE{JBn!M*Hcco?5;Pn9dDOmiiYW!l0leuZ= zb@0ckr0xy`l4k1!s=Zib1jC>lXIe)@s8_>kO_<@vgH{lNAe49 zYdHLP>^6Z_yCk0?lK@a7Z^*NT6~USF(o*xO-Dw#^H9XWF7O+9e&AR#sS;wfE-+J$o zr zLKo9zs|gjh#9OwqJvN|vHwzFYz#nPAQMu9AP@`1T!w4Iu7+FZWzJ@m6%wrI2fTk!l zT`|3K_(m4aer%1a=w3JM-KO!=R1*51nA_q?hcon)f|wM}#5F_tUZ$u;&*4V>EvV>% zYAocoIj<)@WHS|!E?ePr+SaMQr|K^WGJzFxe1q51t2NGi45@Fu8wijU{LAl5q<&$8 zW!0nm{9diuVB%kxRyaF@tKx|=#*4){lXUy#Yu)U&>{GNcf*<(ha+L0UZqGZoM1p5v z9he_Ibe0e%-PV}kSLsr^?v|PbL}=PbXy)|xz#<+0KW`WILdi)ZAhP6alx_>)F&aLH3o!38+Adp>OSRAJ+)>R>q3lU{|6m2~ zhuMTM$5pgiesyAt_0GYg$|MH!M)3{&M-DqaF970Sl+f;+Y=71$B)bA6k`_)#JO_~< zMwYc=a#GOtk<>9vUw0;V?k_PQz2~j<2li`~{lxQVM(gjHZe?8tA?-s3Bf)PTMgPr0 zSH$4^fUl@xEm>lbuV!$e;_u=p6w0X~w6x3;I1^q!pnGz&;PZ5ycq}}k12hNHqqT?h z=H|xdSBBIMLZQxboIC!>42jmPXG#fzGb4{XUu#^QEHJOY&hMG*0^E$Y# zY2|9NrT4bo%_uVwn1%nojBVZcxaSo#v)Qt?u<53j%>{n;e8_L@BSS?8td;fR;Z#NdI@`3|gPaL&daVy(H zd{L%8Ir?gpYu;9ZhRgKhIH3LV6nHxfIWL>|({+U?d<27p<{+3}@2FL7!*zxWb&qh^ zc>YBM!j|$o4cA45_{kT(3)Ux2dv{qV^ZTURj3o4CVsH2|6qE4~rG#%U5G_}?tgkch zu&JEmzb~p1v=$W`aEU_s#07+YE*SUMU0!R5ev*9cqa57F1@XjYczI8j@{mP&X;)|w z(!n}ff}H-f7w^TPncGU4(boAltmaE45;JHh>~o>R#ns*^j4`izy+N)bK;h7(#1d3n z*iGE(&o)#gLW3bezq+=@wO=5dHlGu;Ho00O8G)Fjr9)~qfCalh{2cEdfe~{!+D!?ACjB9=dkv?~*!v{; z$Aa`O?I+B?@JZQQh1o$}#K6{58r|t~>ZJ|7084>v>TZKZcmLw~OqOnI4@;z7dZu*D z63&bZ6O&KbUTmP321NwVeSd%~>yT68ew_a?Ck5_Y0Vlo(vWiPl;MbGpA_uNM`!Q%tz+=|W!jPQWy^)uM0c1(Z_TGG?%jg~bcNHIspug=@i&xD zroSK8cSh;*`|?F}vp2v$&#xygzU=;{x_+=R#O@L=M+Jh)&_M@YO6kZ;(jKSXIp$xC z>28Y85rLufOOSMNi^_IyhzkogZ#lsxW5MDhUAaM`KJ**Jjq%xN&Mpfv>@sw#TCh_N zi{(=)5GVSie>`Ge!fljgUH_vOrFauHD*m)};T< z+TNC)mGb+Zr77#byo?)>p$sK|4DOZ2y}VU#v1t%%QE9Pq#kc-F>40bJ(JprKC(1g% zlilHq;kQCX{y;$`_YjMoiV?Y4Fma6F3nr~WXcPH7p1}??lS4ErC6-IzeTM+j=gwHG#ASBQa8?AJuFtQnX8(>)ydit@Ypi3V~is zkupMKzt!}35|c9975E#YiYVO5>_IY#nD^`f)o*L?;%Mh~R?KskdXCyFTwx3`LO0qt zs1)P{dQO$~-mfZjtbQ<;^HFuH$h+!Q@Ytkv$NR#;EOeE+s1e_8O^hK=+Pt$+5ttnk zh5Ma~a;v~-x_&N0#n6eyFhh7qSc>qgUfpHvf!7&GB#XUpa!TC2NYoBTXBYCNI1dgjouuy&(o9Us+_ZE3$b4$@%4x8=PZ9eVgKx`0g?lO$vkzJhLEO{{=4zFtW2*{ zTXJxU_58fn6eL&5Hd&Xdb|$8Xy@`7~6yz-2yRIPqQ4{_EC~>~iUIv4jPC z4t2ryY0Im8F5xD>10hc4%y_yhISB?u`UEn1_F{ETK(b2mr7@b(+U}g!RNUTANpwC* z#%~Bx5?1e&hX=^oL)ofydU778dq{(*JK^UV2adf>R)*65Ve6g3GmEw^;n=pVitUQ+ zidC^~8x`BOZQITp+qR9)_g{4X=X77J`@Pnldp&!OIZ)DLz^*WrjB{{MOrNEB;c9=r zKgBKMHNtqb6~`g;$JtPF20JA}y#}1Ib0OJ$79h}#$!J&rXdM_^7h8nft?$Eu)o>!W zhL`w?fLW=vWFf{%U*^@upZApB3=H=PmtP)88KK(dQ{6xBdUE29OBft@$=k}WY zmAY(6YyT6Yrcbmk`?82zx;jcCRO|H{EJdv%*`JZU+c3ZFmz_yaW09t}+#-w0gG`F` zz9Z<$0Dob_&SS?8W%(stwMe*{AVYI~>l{b_YH6j9mKpj!SHEIlJQXJi(@tk<_EIGX#p&0y6^Rx*9sgxU@jN2d}KxFg&~GcP)b1#>~0|J{_VvIpU!r!FUnxK@%@tqWHb@g@do7gssW}d?cm0^cyg;GwEr3 z9)fikXHd|k+k7tvOVX*v0$h8bNj466#jt3 z|DOxl`E}!iw~DU}W}NLSmEJZT%3Z(5`vF4veJH%TEvd3deM+a|$ujONyV5g4OUnIdR`@Ut@3uQ4)m5UNyzR zivr1QyK^hvJ;r#ox9;@3;C>lWQgU|L*&Lz`x*u&g==uWekokCuD zIK?C{#_mI3Ze@8ehiF8t-lHiR%nbwIDPbmOJaZlL8-%sI*+5O=LoM^ewt(`3K?NnI z%?ol{I3wd%O;@1)>k{XTcfp86EoICfF#fnziXITcUZ{_dV>!V7`v%VG{efCPX8OGD z4OCy0m8PT+2?~rU)}DF}DeDMU%E{7dr$wJeO@dx9o9oG6wGc!CnE=2!e+)0osQK?d z!u%dLW&tV_{?Jm7bHBW*+I&EhSgAX}%5*P3C>YBa{iNq%+f<fcpOuyx1Aru`;tc>6`wK z;H65_+Hw8Ibh}#DKY>!%LTEnOm?x~H8+X}WX{NBQ#J>8pjR2j57@A4+PGGK?KH=M^ z1J(~ra#hl!ggp!jB*J^3fngS-LvuV}%9upG_&}(bS8~a!x*mPP*oSq+V4{99q97|P zm^NjRHnM(Eu6z0wp>r#ZeAVjs(94&PZwK;YQSgI=FBLy>ByLBj6XkYm*X?7E5vK>Q z$D^)8sWeno)>sn;oagd@WP6*3>NOwg{!xz;uN%2cp%X2#gsEd@fvzLOdi8LXJTUBn zRqL=bktJ=^VXE2=pB4wHWB#<0nufesi9*f2SZdf*G+DVQ_3XH>H*%z&szQ-MG}Lz; zz`J|Mt3>l&8T6@I343grSmfAN3;L{G#QYa6J%mac1v!aX8g^nZI6N5T))E^Sl=W9* z4Mtd|XkZ^J4MDNC=)|wl;b?tBWd{U`+oa==8F8iWnATTZh)#eWW9U#Ooe08tf`O1>p^N^41 z0t~?(rtiz^1f$61?Hp!--{+54xOUj~L*bv4Bv%b;JmeRv;#r9>+ZD)yuX58p8hgq< zasy>85>*m9E{oJ6FY?ikR-x(Dc+5`PBt!>@Nl?PS^4CGsdeod7y!T>JVs~tFAb&mG zugn3cxj;0+=MegT98@q)e7c{*wr{7-`Kt&uW}f+;LgR@#N!|EqQqr%}k7inZB4aBKfr6)}Z-9$u>Nhr=5l7==!90%txr@hf+ zzl)XyV7xb3e*nx5V5}&ukXAM3lkgX>r&r_-s`QM(arE_2RM7**5{F0>3rTKdRO!LB z##og^DoU!eeV>9i`yJy0YvqB922qtSF1ozhmVd+gq+FhFW(agBE(Z^we;pP%qgHR_lOT*EM(vxtd{25^wSh5&E)C&zH z!S8~^?{P)8%LWqP834`@en`JPVF#iL%mQYOu2Cij5u$lpWBdZ{^k1e~kxHDPrIyyZMB$ap3gkSJ@Re5) zhbgfSMiel6l3B=A=d-}<4(TBuM!-yLFMi~`^|`nB0e0a4A72D_2sB@ZuG^qL6P!L{ z_pgL(JP`zZ=}17Xqn4nyi=bZ1`>pC;rk`+G%v`YNf-{k8vebOyE)p}>E>=)$0J7?* za`O6z%B2`BbDu><`PmGv^FZjA3)YZCAv~XCcLAEV$^(UIdoQ^WA?YwCzgRK#4q5VD z1a@wMbsF~p;rz;Fk@f1W{$v!Pm4s@SBjuk|_^!|N%k#^o{622`kGnwp(7ICwJ`4IF z$tfCRsN_d~AetYWM?86PSp z64n(X=#RUbuct%j4X5w-zFFSE_=7#e%B{Os18%MeIaB8rnXBKbM*xm&PM^O(Cj5-P zD7DZc5>Mi`_;0HPG;2~MrsX)~r%F4&X)b&TJcmQ)>6ajA5mu=6lHe&)&lbMqw>4K4 z6XyZzF8G@l|L*u(q#Z{0yb+7_W6hPW=oe@b{Vu3cx-s_zGdv1RjMgKqpj^{Iihg)M zRtCS|;be`OR8+!4*|RRD{3r)nP=7uvm{-EPkgnUWh|iRSflo|?$koc47(e{ z-Pnnvi~k0V`?GFc%&ZS42UQ4m73`ZeTfd^ zE&~6)=T6jTEbFao=EST3iG? z{MdVeh0t2=j}OuB>s34Lh{}ZKH*+tg^GT@gAwHiEs0Y>6EVE1qhfM9lI*EcN`^S8# z+83|6s_s{y04Z8gq$%fnTZKuCj0+~LhO6WXtGt)+R}=6zQqz!k)?>Ok0(||30Q8AU zso4S4Wqf0pl|-^e28G%|*)V+2fD{rsr?F@R7&f;cf`gU*lVK z{4%R6ZlzNcW~BG&;VZwr zpYS-h^cADuX#4Q&daaqH$pep9g%U z&20t&DGcV`fq@t5Z^E2e>w#aWZ%%my8vBWAHb*@tA}4_S8AN!qTv#OH*hNW~0s@7uJ)YZaB5%tU@<;qq8-xJs2O7rg^b5KRxt*I#T7kbRe~%Zl}^32M@xCK?i+C z4$KZK77b>K@D3V{G@XBI(>l?->aI!6iHJ-Ed9x~o(oA{vOhIr330DxrxAm5~HUz9? z^1K%fl0Tb(?{GA)`|ok%bltHZMiwK0X0I<2q?}%R+lzBspn^#hu=@eT$uIm80l%KX z{_h^cc$7iGH++Q{$+N1y(+smoU1-+1`6o?qVEfCYS{S+SwrK1t=R$3v+$hej7K1!jlvY;Kf~}CE}$y}xj%PWvxscTfV_W{p9vfn zT%w8Oi`3Tm{CiPU+U0N`tw7{!kFhiQxt!v;Njn|CJ(hTp)do$#AGbfmdr~7J z@^1{G5qVT0tQQJyUk;}yj(H~0{%3`?USzCHAt^v{;IS8xhgzh}QuJ`-Xx}RLC(MEzG2)1en<4SZ;pR z({{_q7PW2qh=bzrD?NIR3)sgA2!ZLRTiBM{;lL_cBy1$^VZxv4282C5ua!@QWiw$t zY`dvYGezDHs;W0v7n{quC?9il!@rNHM?l(*+FvoH@s*zQd^!Yv>+$zj2CZdvdn>61 zw?q_*0EgF?g;>k%S1C$~d^K)-Vq3UJJ4CC5;PW|z2^Yik4R^!X!2!a~9?y4;0z`d+;h!K4Xq;=CK@5j*Mk2EH)+6tGz*jMaJ|a@G9@@k#~Md_ z$uMh4?WF)f5Y(>T`)*>r%T*b*-BwcQZW%ZuSfIjY<<4KSp=qv=i3})Cmki?h!IPAW zMozwNxn|W>^Z5Uifjp!F8?MGRvq8C>)8n+r3 zg>@v(&ZG4b49y4MXlYp)au|3<`f^h#&DWdFb&)U7@`ucdDX{gw_xXzgBL#n*>WbnN zrc1V@0zUaaI&}1|@G8GL;79g6p3R;iBzuL0jRTa4qi)ZoL8KWZzl_4Yl z;e6VGjrae7ZG60WyppZ3$LXig!Hl)vjvcAHuB@A)>-29U*yeNyS(x@4!*M{a^CJ0U z8Ec}^RkCBPgWAk^Jy*LCEi3muMO|ku?bHyNEYa@2h;C6K#`)=kdmds9v%a!v4xwv( z9=m>;o;0X<9)e07^~SB&*6>Rtxmx5YaC61a8AgjL&7GM|Xue+|M8$W3RN-vhV>8Q> zqGTq#UGRAJs>bpB@`{IB*(tYHB4~VinG!Z}KLhNV3)j_FU}G^;(O*Y501AnJVbT@M zJ4kh)%o#KB89P%_{kMhm;#KSVOtK3>EyC9pBu(xDP1Ng$@5kk@AqALuoBAaJGX=%% zZttS?<}`=-=E7it%^3~qEs1B2jmwTXXKd%#hlPhG_+fD8g7<^F%-02unwp`f7Yg|4Ii>W7Co#9IM*o1XhjpXqNL8G4}v_9=Q`8?r8$C48V+ih! zJlMQAy!Dqq$gu0vj+F<5ee(?@1?|CB^W9M_% zNLN19U_paU9iL@^yMN1=Cngp*=1%L)j#%j-!omtjxgIOTACZJvmn8QBPN^!Szjhc< z?spfN#9=IkSj6WNGeV&lJSTCu#xg9q7EB7}aT1SikZRh^p1`+7eh>Vo@_2@{cy-~Dgk@TDfDHk)(uwy-nC=R9pg|VwbNC^kJ7ZxF0vnuf+pz}e zCH`)KIr=?mUg3&aP2Kv7K2;1q^|QNtT1kGc22>jJO$t?3eVhN{%&DH?KhJo!O+xeW z=Zs5#oGt#ZGiG7>KWD5|XS2?TwE2h*=~@ehg)^5Y0OV@n?;;69CJ~ZPM0HNqP$aSI zCRN$PASqc{#VOjB%6H%8`Fy1TRn~-58$!5_p@COvu1u3n-gb##P?qAg@ioa@e9I2% zyVchc7qiqW`wC3kH}d&@NAWcmd)XUhV*tGPn2e>``Gb40@Z#5+zTj+oQ`9@Xr)lcd5oHCb-NASRhoN| zL?&37dnvAB>BkSOI!+39WWLHRa#VA3)cU+@VbNvJkZtEDj@sePOBse;Vz7q@+{WAw z%S#YzmM{kKQPT`0#9evIGB*NSWt@vB^nhIKy+P5DxTGyzQWt9V1u{RIl{J?PgB~bF z=roNJ*HF@tkku7p4N?%RLuwP=taQPbI&36pZGaeH?|zB)X}og9FOINRD1PMDt6z8Z zOfbA{$ppC9Ed^}hwbPp*$nSZA|1M&35rmETJv`w!dZtX`-ivMxvle`U6&24-G05Ar z(MJleuFabx?DEYBPOC1mqOt9?8d!LWI4u6a10a1^;!=4{ty+KLv-{Q-c>1rMr}5D!~1% zf!6@G`oCDj(*ErWa_6y-`^S!#rfb^aUM8Zj2UmfTY7tJfTr(;L&1rsuuWzy}PpUHp z#hU(RquD4zWl5_1hvE%3_@}pkFDj8<8QQH`B{8=eX;Sme__&whIJlh6u}Z)sM-c7L)xz^iKgu*o$^pS6C0>>wlzpF84a>;7>tYx;ArU>8xS(y7yL3vA{XKAxd*8(zH^FnsQ0Y~@Ovf^jDS_aNATOKKPKmwQJZTHw|;gcJ+_^`SLt30_3>et_AptdmmSEv@xA&mJN1RP%g+{ zf4>;FtfNbDVtT2kxn2-i20N#si>cL5QrtTvOK9P^QB)s8&Xj&S&6HdbxQDH>{b3B1iD5vIE z?O^YcO+$f9m(C!d{xY#8|)gs=sY93MIf7V=*)qtIK{dFh zdi}7Cx&_P^hK%pF#6PlPUYf*(e<50g@aZt%yG&@xW&-cg%$r;~=oAZ~jLk`%IZSo2 z>71;wiPfTN;^zMzemABp!PVy5xWd$=s%K6Z?;RC zoKol51Fs!~O7eV9AI@)_IvBaHNSa9!NwGiJ*m{ z@e7t;wL*+P@pq`{0Iqa&G%Htq--I=<@S6J1uje@PmQk`OkrQ^I7Ya&my6rmWM`m#P zvshmAF1e9=N6QewSh&xx)rA@5{FBkk1X0~4XlS>>6w3N+sYE*@wbRzXnLS&$lGk{r zOcEHBo5*AvU<#27IKn`TuGlx2z^SODrb0s>fY=w=hq8KmG$Y=0hW0pfSmQ z&BTg7J>z5!wX!^ZAat3saCS``&C4n0Cx;d511#ii#x5;r~KpYMiOO%*H z`Ra0yIm|#)l8UAI#L?4j>cM`{N2+MVqyhBgAKE;ipsv`5AJPE4-D+-deWGF#-md08 zPLZUuWxyIIF`@U=TrX@OnjQEArEC}>oODmZ=B=WvF=f()n|niPujB3Ei03ne*C*%r zJYo+w*Z+=#>ND}KL;?RFbaY7k@Z$QYs>I&H(hg<X`x|GYCImC_Ao5P^UOIe>uB|I@a{QQyYM!1jNV zYNv25ZP&%_I(&w*|KgP??;iS-gaFZ7kX;cA-23foSKGlGh*r~zp_N_5*E`F8zfVo_ zwMr`{&mY-Q5@Co=Pfx!$$<%Ev)ay5;qrFL8ZWxm;Wr+TPdGFYQ8q3gJ+m2`+Pj9E+ z49G`jZYADatE|ScUr!v`*jhzfEgy(Nv?be?p@7w>NkftCAXbLvMXEPQ?%Z=h6ak5e zckV(T@1I`Jw+fe|*ldc~9m~ zXp*DrMpQ_Wx>>V9 zDua<5ih57v&+pE=h*8I=TrU(S)vj{%6?PaxV3dx)%4?))m|Yhg3UwO8>d+Z!KO{h* zgtU#AWlDbJFh%1-M<%IyTP4xfxize4C8ZnsLdH=X3Y0QaL(2dao~i6SzdsE6uLw#! zCi8I5R4tTw`Q&sfzqHrG${7b ztTD~`8M>3ZAOia~I{{exB06K&UOIm85;SR-cJ1nQFFS-2yUZcUBH%q7j>8~GRF`<=|mKlSVAS)v2@h=K=w3{ z6Sd6x_5$I-1PI2AOI4%2E1ZH29T#yHAi>3vyQuw^%~6$E5vO8NK$U<~8S4v67GiFR zXOoV8tp#tN?K|o(?C*?Fak>rcw@a=92ji0Em7=umJ4oLY%MEBS9| zK8y|OtNlNHoUdGYsXgO0?395Af=Ib1nXs-|zCInxl355xr9|>orqZg0ChS;xSRIUS z2S{FKC0_=DqOts9_J|uvsGN-(!Tg%&O>HyOLLlGP{#XvnM)vF+0%u2>af5n6a3Ak z=EI?*5qM?rr^21kZp`11C$l|ivbjzXG90^Hx)6a)VQvbt5ducg$BNs{!b&RW3+nOF!&azQ^UarNkXv7S$4T1 zLIZ(Rlj-RTaa^58|6ZEtn(?Iaic8Adtuq-iRP?=%m%*ATX3nOj3t`7w^R9>57Y3Zo z^;&%PW?O$}UQ$3-8_0i* zlQNeUF_NxpovV(zFRi3?9YXWSaaj=wcpOp?qGN$DHNs(4cG+C?u8``fmSQ>&_ld(! z)-i`U{kKCz_7#_35F_V&qK)kk>L8<0=8kl(t1yh!UUwqpyr^;x!ttt%sR9W}2hlH* zZHN~y3bg`@^3*U`-zr^l%j$M^xvz4!kF?MjDZp7;3)6ykt+A_mdREU+<>35F%E3K{QsDLirlUF*?!s)NpxR2=+`nOe&|q%9 zWeu_L;8>(&;s}AchsFzsm}<+8(oj33pflXb>~=s+vvV;d#m(gOE>Tmpjr>*y?t~y%tBvlQK$&$*VD`C{&lVmQXWH7 zhUJ*!=AGi0q>oe=00a-VPVi=^5Fn?|#{GTxUQJ`eZSlw(;KZfKp?MUvwGa(Dfwj3pT6KF7MIYh}Tf}Vp$3nekDnGZXZg07~vH6o3KP>)DE(S zM$rTc9rm~|hp+IM@G;mD*YRrj6KsPRM}!koL5?~vQUp}$nw3b>2)XWzV^zxW1IMnO zl$MnBykyKmB1MJy_(J?7(whGC5zj-wKNA+c0F$eiprMf&0)FUUW9!r*-Q$s_`#TyX zhIE^K!c-S9rRc<$0hZ4)@Xa~Q`lM@oiO`D{wJzcXC}g1YxOh7!IP}^79-hDi*cS*7 zx6(8SdO5Kbrl%KXpKUKVz*|E%x3fHzsYIQR$*gZ>c<}UmhwdX!@=#pN9wAR9 zmBju2mmBY*HCjC6f=@Swh&b+i{0o~BCuUk#2h~QVXPNix386k**+$?x(NGIUOMJhO zrpmM0>g`Ez6EU4cHCdb3WByaA-Qm237o==)PJo-iL-|d_4egl(dC*~_RMjH`d)oP7 zDQL!uuWJNP_3<|1a+VSVfOh{sjI{Z>G|6 zVae=uvt8H`Iinl=Bd+F9ioGKTsUdId&Zt7WyMz|@91~_pg7~Bt@>Vp~D_N}J+9yFF=NEHPRXQv}7zSBO$N)};4l?ETGp;#k(@VmR;`K zKYDxV8&B@WjOnbp^W~!goKZ|SNpUha|AmM z0e1E?BqM2!We-DHL4mkJO)=X>DvYM?a#rL~s>Dv%&Liw*67C%@@W5@;iG7L~0Nvu- zC-}+SHM1kF8;bXDW5hYY%}9L$=Ak}+5^Iqkh(!ER8S;5X$a<6drb(i{PRjbN0Y= zy<}??$Cc*}# z^w{K~4@o6{@-)`aa1*t+o6T;#zG`ya8m__cSIStlh!{eC_l+_wu`$p<3ili7d`xdt zY>!5gLApFK!97l(W`TRPw@%+GT^vmqo(R4*7HGS`p)}V~k3EgC+@!`DPAB2v^5pYK zn%&~aSY2s+^{C5-nH3I2S{TA$E}grZK!5R1<1HpTUuFAL3>Y5$! zrMRcY5{_PYsBUDqZ#*SEgg4iaEFeOhEH~;yU0x{Vt*AS3Wh*@82pkIO8C^8ozX48{ z(yd=>c!;fRbyq|!$x3@Wj3w={IE1$D9hS8P0wNW+?W0lgALW4G_ymX>Y`$}F=8#=# z0@(I@fWpno%7MaB!wAEbd;zqRP)_K9jlaELjq@>2rn*B zuAsoNslv;pH#R;A1IV--WPWv9nRr`3>VS)SZ|ve?lzmre;^#}NA!t5zpq$2lp~ZCC zGqm$`M>bP`BeJz~S=;6NZI+xQ_Q~cReeH2E8aCYy1-Ps38Y6paHc@er<=hfiH4QWLGu4jhGu%Fd3XCd+oS!wEt&W2B-8|#y+G`^6K;si$d_zcCq)o3FGd}FFJef%a?C!v2O>Pwv&TMzTo|-o z#p{;a?&9&hN1@lr%*oQ}eI9xZ;b6FVzj*9uIW9ToCnUE}!jR?dN_S$IMHnx>;cs@T znl`r^H<@t%jRLe3F%)faah1vHHa1&`w0tiRPj`Ch{+W}M%ReEyIM`kOp7`6e$N2o? zd0U~^H?F5)Tb0A@)l+TouR>H#)k_mpSg?+Lq87?_xz+}A;UgTuOPe>xpFJp|)zupA%Fa3}t9h+P7QXcIkE)f#oJ%M3Zf3R{ z0^ajXZ$YE?o~+rRaVwvHCuNT-2}1?ikAIiziPvyRY)rzdGm3e$Fl1wDe#Kh;6W88l zu$*mnyoFt|M~ui+O~+tFmyUznmZZO{fylV&3-_aB30Rl4Nj!4=Nc+z$c`WMBStG1lo+f&#RvgZ z-yEl)ZhSu9dQ9RhE!Ft@T~+dKg}}96$m=v&nee)cI*G2%zubd$_;~#pH&@)btBzn} z=SUh=?b(;#>-FjJYkvT91)vl5rlC^-#;QLH>=7qqqcLq^rwGdh*rD+b(*HMYGs4GVS z*+U#Rgp`V@qhu%3FzKHE^!!&~z zJlPD32$PZNgOiv;Twjc#xypw|fl8=j^(o ze~%=z4Ponb(mDz0^YLPriuSBx`knIXb0bbY5`w>xfKrPJ%62#)bsaOaVNc!y<{%A?_8Kt6|v|{ zy-n1B*D1@QhlVLl;y_#CYlpmyglYD@2+6^^P*BQfr*zAE;c2pp{*eN5QMq^b43E9g zRyd}muOrotNe3R7c_UtP<^GStsNK~Y&Rla9w7e{YKGQhSK3+xJ3@A~CKWfF#sg zoM&H%a;8>E>__Wo2Oz>*l%99+&06D!s0O>=IfBo?(Jg1KIrXl~Zk0TN_Let)b5F+( zi7kRY=7AUxlGR|?N~3v+#=hk$FEuHsykDRREU48u(I;}g6!5lI=T6kGn(a&QCtc%E za}tZ+<{|At7b4-Xx=SxOw zTz48H=3dPXoEDWqQfYZZ<`ZrF`%6GEa+f_LYHtSHXI@q1r5b9PS%{F|(STn+gPr~R zzh>c~8Cr5`KSL8*Vjv*w|GF?7t#loo?d)tF{%088^ncjcb(ExYNqO9-y>KAI@8lW{a zwT#_=wKk&G8!QG*ib6|+l$_bbncFB=-P>HU!6i1KOX*ltJp^g$U7-Q2+&<1W3Zf?9_Ru6fR9_%e%UUp=t$zYH# z??YqH1k=`M8aLpC*omY@ZnFHTPy5btv~CDrEy9-PWl^yob7oib;C*AoaR#g1?(6F_ z8@J}Gx*A+aHVJRI;oy1Vnbp>k2fA}fcoCfxMM!4KE@bzxNS3+h)1L&FluBw~Mrsz( z{MFHgT=inX+O>)`p*GK9P@J|UQ?ou|*(tL_6K3=aHDBWJ4n@{2db->uapC-eo|W~J4Pg@2{cUXRJO9lx3nzb)8(EOIqn z#z)`yvZpu;2t77h^WWzsNJqeoq^iVE+Qxz;F>xU{HS3sgGlp>-%iq+7gis!$Pr_Cp z5?ForYA65gN|I#;hSB+i5#I~}q{kNzsh$FPu}dki+f%2rf{Gm%xg;H#6c-h_N8XX5 z5dFhCU2JP?{Aq*P*OxMU=wn(VN>U$I5eK?4X;qx9F*}JZ{~@>CDqZUf#WBhe6H+=) z&Ztr;z80F<;UGNoZUZFdEJ$=_w-$nVdmQMZEM?DPToZv^Dt@1JNkYfx1j>>eZg(x* zUZ;V7N9D=v*o2~5ekj~?gzrb^=ZCSK?8Qe1HwUXfi9Wx{FLc5{fQZ4(!b`c-<+md; z6ILODGL|8xIuz3pTUW>vzygIE5X*Lu9H%g7A{B!&QI*a;y9Kk6j))qe8V-j1WQ(NY zY@xJ%tw8iMbN?NS0~aR4GDx<7e?q}vVh>bj)yw5#k!tTvVnBzIduP<^zp)-U1#m|G z*f?1`pq?V{X(twqMznAYz9MlEZTEI3L6k_&V`&%f5n29?)2`YPAv3Lg^(f~q7GAlk zQxsqTDi7K}CnGmCt@30yyq)&!MD$r=0X~h%oDF?*fnIYs4ch2z_xL^nclUIL6-7Z( zl>^XIAc;{^>HERJ10e~j_{9k_oEMFzAPaXy`o#)=1?59f3Bo5qfMV%^j|HcQ02e*& z^s$AW8Xn`?qz|8+ZX87dt%NXsIggP?8x|YT-5@phN9i1?s_ z%9j_2?mHFTPJ1vzoEmmEE$JM0h1+kV2 z4dVB)%==;$*CB-|x;zegN!=Md;n_7zUK2#4EFP`q{KV1$m^5o!Dv}&#V&(FA0e=Gz znw83!0|MZ)g|spO84)SS(`Pii{}*7yIWh~r77oaPm^e0GC-L+Q`EY=;T`dD$?%U6= zl?nr-lt`X$gN;;7|JAhY6xu{lf2;Re2XoyBvnjo_G|&cE;H zy1@a8e{y{i_4ME=#e}IfY>03i{B-^O=ML%p{+-83+&)1#3-yjXn)E`c0OqxA2_7Nl zW%B^@jcT_~X|5;j*_WzQ#IHBI11@pVe7k_-dYT1VuKWP)mvm$4@#xKR2#?Y}3qQ6^ zNz}B}6afUfjv?5G?}WvS8G>_;oSK5%17`D5#nMc97p?`>SGU<_+Za}^m9?*2g^f{r zDt;);>Jxvfmr*NJeiF%LSAES}WRIb8Fw03v&rnv`7K<2lH-)!v;WzO&8fFd@0j>KX zxGs4dJ7UHdRfS&$X`8zc14{_EZwR8f$-nZ{bsaIsEj93V9s_MtU3CH;ujoO#iQ2bX zrvo=Qq(|qJGV@~^*69BdAH6t4ZW#=zL}_HLXBs$Nai7C6_e|9frsQ4z)e17s%)0~= zTRZZUMv<2Eq%F9J_}w&i<3Vp#{CW*wC-(2yggHF*fT3HpP-Q%}o;@SjtdfW19+1u& zlz%pUIw)JOGj5Z=kDj=RH|sgNPd;Iw*^b~#d~2*Zl%r~QY}2|Iw_27$mfM*^Ps69i z>eRgtmO<#MIMi@m>$cu7z&Ryg$Pn0#CC?pP7VNLY8EgNwgVJY_Z=D&K~Nyv&H_BX|J!1D6@F#J$l7}FW zT+86Ls*W>x>{syh-@l3j+p^&Ge7ZRO<$f&Y%j*epIUk04J<>4pfbGq`1NIrEZ8ulG z>MXq+9UOcWbn&c zED}Z1`qB&eYi&dL;my1$n{!}=KsTu+O-P%c70&i$fI3u zVQuCSlaO(uA-pQ_T-F+WXlF>+RR&zfr0QVhgxzQznB*myccP{Qde%Eku~Wca9?a6k zg+56F&2Y9i0cw+1>R6ZTVlfkMP_q~Cv1?PSf}I4!ZRO|i5xIBkjH8fIKl<1?rgc3m zpgrFp(eO^PC3W`rm{`^##mZO8G5<-Hi!E}%dSl3Spyb6^eGkH|XhMbF@}YZRhAP%p zz-MY*tk_I+JWte4GzAn_+qk$f`FwOB`Apyp`2no;Umayyf7ESQ&=x~20h7NhXup~ ziIp-smQ+R;Q|cd|ug_YQ+)RV9EG)SUz`#N^*fqtsX)W}U!HW~hT><$Pv`u;f>sjJq zL@D9i!?DYexTbnN`l7>aLwv*jXZxNmw49##!=!Pjr-A|4VTt$diE9+m-FoxoZ%{(AFaj3KOK7P3$0;;Rl9#lPX^`yj~f z=I1?~jP>kN)cP;yypK@M>+#syc+iwwVuH47!_srY7?cqph7Zz;)^LqBjcBJNt08;b3zSm;XzpfVD7|HKD&wF!dK7<{?m8Q;qfdA)9 zm8g?3F#c(+Vt>|u@l0Hd9URSVZGK*-b)+X}oUu*Qjy#kn3?e$T`dxEM=AV*60;3U))L{}WrJ>H^ z@)Qpkx46{N8)VT7&l4AYT+GQX#D6}QSdk=XEff$C-w*VK`k$?ztC_K})&CS3_NVPe z^W*b74V0;Wsp?XDHRwNDwE;_pG{7)hI?+(G70mVEech5IjO6PT_k-`Yr+hxy*?-*fxk~)lzTAD5(qS#Z^=z z3A(CCCED8PfsO@e1{*x7wF=6%I)PviFZc>f+Zlc-aNL8w{^Ke5AIW&lZ?awg<7=WwrM9u44RZIRokS?xXe5Eo@Yp<1NG3(AThMj~v61?D zDs4zp^x05$D814V6)HBw!1s%rz&_OpzF{%haZ4LhR2jKYV&f=TjMI=o=EQ2?9ERNl zJ4IuefOat_2@elK#xv(frZ0|k&7(6P+blAqdXq8YV{meWN<MKZ*u!$o=7tdSYWf#4f~7aR(PeRdq1UXN1e4 zcYRwwB*-nLn}A*48zq%6MzSOV=bOn5H5;7}%2EGcg`Igkl-nD?M`O7vQ=&_@NNBSq z35hX8Zpcz7(qN1cGt7)FOXi9;YlTFMOt_WGO}D71NTIs6LZyYGt7t(a@_Qyf#{2fB zQ}Y?~$NT*}=h@D4&ikJ8ZjPQIeo$*ep`*+hCXwPd?b1I4N9%o=_D=ed8+2)H(b?d0@LBF)U__WSop+knp3u2Xgo}CQp z5EyuLxcb7|1?i;@mo}{Zdtkwtg&XA*@`ty2Eun}=9#SfldRI(n?zPF)upmBaR*&)N zc{tGIGymCJhPR|7}RRc?sqvOYpBR}fyO)c8wzVwQEvhXfpPMK-4K1I<$7iA>i? zM$#j1(TtE5S-eM9(&I=4g8yOCmNvPIakrwE2>xYeGgDjZt!|RJbfMD%oxk%ICeD>? z#gE9W8F?8SzNvebc+KM@*XQmz`#8NnZNJQMQ_q7ccN&Q)MtK)h`l3>fPZMUH>Jwh8 z@Yz+avVfrUHA`r4Uf;FDvP=J7Ca%g!Q2i8sTheKyW6!yQ6q)C@R;e+IB-1XHn1lyf zKcla$8+1P%aq37YtwGOBrp#}|tK#OWz=uL2M>{))i*I_|PhDcDMzVp&&RKF zWhsa5c*V!DE|6lHEVOQ9y@`v|G3h0W_jea2?6>cbvm7m~J3V)WN07Yv8NV8Bfry?$ zKaZBB*+!z40&?&7Iet3v_mkc-Vaax_7q?IaF>j(CU zCXa53B+A&1M3NezC$MJHF^=DGY?HfUR!N@Vic=>e}7?W|4h!yLnVnjMes6 zEfsxvmEte+@d~>oP7J&ah$p!nm@BJ&u6oy}+5LgrVSmO~YWwpAZMBP8M(U}n!AY*NpG^b;3q=-#ysG%92oi7@FRXhyWa9(SPA(2{e|5{w{Mx%NUhHl=| zeeL@NhW=Uf$aFN}C}qj{L~5g;ZLYukLj0G*L;Hnv;VqO6ZP9Am3C0d}%ZzVd8h#<| z=O!`Rk#QkkQPjBVNK|9i)57isyW5RNqcp9aT{thMU})mABPK#cH$DgEt$GJ`nQRS} z^Iq}_-tH`?vF*HqHdUp)LRF@^>GU-f8Rsq04{CABheVewTHC#1wW!kj%^|ZsI6Yt0 zQ~FA@SnBN7vNdHTQT-$>R@b}B8Wy31#`cbAj)l`uXJv!_z0CJn>@~I}Dps%qH}Yjg zAk4B1B;v0Sj0)v6;)VK2^#67ay}*<23~ao1@OWiwNA6Niuk5U>AzSGVZJ`{Oc6~RG z@FEg^jVD`$bW~lc{A#RH-QMXP_jGDP&X%{Uoxa)dy7BCX!J>k&MGfo4ahgYuWC||x?bp50 zF4Nu{KeA}x&HMhU`bG1|=j~SJGd6E~s&OigelbSzo|gehxnRY!RwC6v#ky3Bx^}>= zXIq5A^P(4cg0j3vMxL+;WmQmG-u=eLMjg9UlHS$!hMO-N6Md_7%%$(V5(!(Mdfr9B zcJJ=0_z2hLXZ;Uq&nqm8Be9ZPo?C5}?i}&j(|qO4eHCW|`2hA`cku>tM8)?nk_A{Z zO4Cx)GB!6XohdbFaCpCJL|4zAR{xjE5*_&ejEE6_#pL4fQ;BD<%TpKayAoUfhIr}g z-Y4_Zc5e-m$2SFi7FVzIVcoGbAlXD4v)NgVCk!nfr5iQ$Jd=9$K|7XagF7}T_1{IK z7dp}XJsBNuUT%DyyscbhX3x3h**@zX8))10nw9RCN;K6azQyb2_r~IdT?jX0=sw+> zD;tNu^p%C)x{Y4j{!-H;#)fLT8a9{6qY4~&AtfV(HEDf2$ljW9OKax!PNz^;A93F= z$*N+aG({7Vsg{7m9sA88W<~4Lui(Fp)ThxEoiz$`296zPcb2KAJqi3zrD5#x38cstv1^>Abq$z$NgB&zeltR{X)A)kq&dZRF)Y}U+gf=!?-1O z&5DTrzcOomMp2b(wd%fDP4? zabc@wUU^b~b9iRr+V)~{kxc>NOw_|yAzioUubki8?OVQ!o3-E= zarFR8Cko+kOD8VH;kcYM_{E~Ig96wLh965^M_)rrLtDd(#$v0}=-v!XGjj)${kjc~ z>uhZ_m@GCLY%?HWM1s9Z`O|T@g$OVarfE}wt<4>YW<*CKnpmgq+%OC$;GBfYdjW!2 zDKa(D-kfA>Z-(Z5ZmlnM2M!%Ra35!)aXHhZrsg?Wnwzgja1|6*qEmwh*MSxR<4-#9YI5n2d z2ypkK1jAGcLk|aqo0fzB;2=Sv+-eora4Knc&;rz1WN!*uP~{m`_|-6>GlM(-@PDFl zIgtpWraOcYjqUD^h$7tg5S+LO{!p0ogUjiLzVoHhbPongGnm+{v2b3!*tv2qbgvey zja1xXIQj{LHTJe(8l4JMvIipwE#erK6P#8p4Ojud^6WC+xSTH#_rJhmbbO53L9=SF z0jew5L~R@i-&~FpyxMqb>csXkv_*zSxN}$l-Sb0EqH6vM%3?EvJlR3a?=OExgDYlO z?i&%s;WQP|(kg5J0_;y_Zii(Dgzd*v@Mmx>CsY`R8<>rbOp4(zpiD|&5RFOkhY-ag zN0`UNCqZOW$IVB`IY`5Xh6RveX^2k6FjI!JHS9&e z;SL0i-LfC&aXH?r1+YAoMdR&cLd$e&H^uHe3^zC6w!h3c1HQSO*DeSQnd#|63m#i} z#NfWFKw5WLAwF2K4$@rA_J_w4Z zA5C3nxdtWlhxF$W@ZgD123)uhjW_{2(I-VP53zCu7Gkm#Fo;YvE~hzh8VZ4RJu&Nd z``O@&_K=#8*)vWSkGP)U?+<&-rplfh29-Y_;PG1>aZg z-rv};@F;45Lph(NA|}X#R~orfs94VTwx0d_8tC0C$Y@AU{-Qetj2YmMVRXg#AW2D3 zS0n(H$NLB0Tn>BH6tECT;!p-+0M%p?WCcL7UE(;LA_7>Yj}83pli&~@7&KeeG^O28 zrUmJs`}&*l6f{aGmS`qxO`l3Y$rAy23h5g6tfznlgkcC~;%Yd`1h=4r1$Yyi@y6xI zx?r;4DMpGPBLD+6`sQ;=BADO?cpB24cRjFCJm27z%@{D>oza=4TX8sZHvv>#d(aCL z_KTAKd|%OyCdf^1wxM;FQjX1|Qhz2}!jntJ8IY#_fVf8LjQb3e_4AoV!I5fXOPCOZ z&m1cX`RWgSJr#-;jXx^HfJt|Qmmmkm zybn|2Sl^#}#Y!V?`xl$)fv2z`SdnFye;+2&j~qnz^r0{nA=A;kDG;!s{(k6DD3Z0U zED0iZ2lQJJ(eJK)Olm-w4u3m8ns$G*Ao(~@2p}gi$S!}yq%kQ}@Mj7W!0y(c@GDVH!kPEFgA<9CbKCRBtg!j6>CAF13!!kFGev*EOIb~5rA1qU7lY@cLAg7 zL0BM11rGs1tPzIAOXe6tWd_vT;U)1_P&~4Gebcc)6qwFnky_`yJXQ^J<8P3{k%hz@ zaZD1M=L&haj|&5=qKoa)JW<7-TOD(x>#^$`Vjg5@3|Z?FQdm&Zztp zBzG@{Czj_M3Njomp(Y+N#^HF272}P|8B{~z=-xD}QB!7t;POo9S|0cla%RR{g&@EL z`uiPTj81J?tnLfzB)Izk;N3Z+UVa_d+i^Czy8@4GDf$cNJ zr&D@bz=>}{qJouxiN@u$&=J?e5J;i_|IQ{lM!VHZEs{VFGS&<5{3`YSNSQWzTFT;!f z#jIM>ImqjSepa%#iuBpLQy6i?}etI&wAoh*5{!q{F9&16!d97d`j|PXv)uv z1@!qJd`d+Dg2F!y1T6@90}&rlc^!#BZzn>N&>MI7q{F2cr0?5!&S5c>nr81$n|e2mir1P1+J6B>kme1;ENR*L}reE9|aqzfNWfkccy o_kxxIeJ6V$C<6hB2><|K0X8ZHvVu0P8wB70fHWikK>6pbv!w?kD-$a#6AP1x zrLzm8rJb2Qv#6M|2uMm%MM^=Q$;sIzRCzsWodwl*S$)zNfdH>%HXKOXWJ5MfVB!yK z8M$R>7)~CRdVeBXWwmj$#F4FvInp^YvJQkkcKjZ$XR@J=g|u~)!_u^huD<^TMl#zW3dxw zA>y>+(vv`iG@w^VN(VB=u(;6Yam@?no63@sL-6oMEq$ghoq&yWXL4HE<-suR1#jx1 z+angz6V>Vr=9h&_Gz5U$#1w}Crn--CJ&%KMUfGBt(wTD)NT1&3VlDSeECuyg!1$N% zih;6PI2-Hn*6!HmbfRe5hw5uAKWEgcPHA?COrX&%vhXEhoH=!9 z2v@|-)L#75x7`dF9hbq83|>Kom?@?j-xoGhRQ6su18*CvndgqTU0wv+G?J^>4$o4CaPM#w{~<22oI1G2 zKjN~41^|fuOvlhYsJ`2^X%Y!_a?yjqRFK615j2*?m>zoT#^$qn zlb5`G{xdPmp$@d9Vv+32?9S8A{GT>YiW=i_$vxHkJwG&Tn}^WJeO29$8sE=j_&fWw zh=$SahMS&{r-eG9bAT7NwHT@}C(xoTO?Z8;l0S$H-0uFVu1_f<<6+5y7{r|A%zNXK#+DTZXcGyUcCU2s1) zYtSAN6pW;Uh?HMhx})v^-1jDargX!TC9iQOXghh^LCMmRFRZytOw!&~W(4EgE-6HA zTWaZot=Ct=azXX-%Y598<4-;Ys;zVu#@nQh@aJ0^$@`gIk-i_^%+dmA5|N2Yc*wRy zo|zY^xS@RW(iS;FYh<6SgO3q67T?U(BvQhf-kP`hsXh$zq`8Q&&Gf8?>8CpaPCmGG zB`gJ1cz*tFQdPp!$6}w}vvPj%>h!K&i0c6tn|;cSPk+X94v+)i&BTwHP>P*JuEDmH z7=jP8=vMGnBAy@zu2FC-wBU-Wf3>F~!uv4M_aZ(@jB_wKNi4iu3$R~gWx3F?gsbum zK3|q1t%XGb@1(nYapn)}6p;chK6|0oTlT?$|L{s7<7sbS9nIYbd8OBl9se54zw(tt z(`Yh$FGu*Ebf7nVS9<66$z&sfa2rxell^v?x5{d4ha!TQMyMK(8~jX?P^EFBH0!|d zUIZ04w_cv-OWR>~oj2mb#gD<+0+>UeJ?c6USrFaM29JN)LNoh2Y-u6FvZZQ<1$R*k zn(l2Cb2w8?8u<7qVtC)XoaUEj#DvwaF17{gI)x7q6o(Hm2WR#kr~1$_i6Ef5pX9AD z45tize){ra{y^RoMVel9BJPpQ)Dmg^T`e1?zhbwBf0yNpeKS3!v<8!WB~5V;*gqRa zP=|cL2n+xq{L?f9|JE=dF%bojsOxNJTp;dS2Aofbm5b`;5nE8@{j^b>?B9vo7FShm>b&K$MhrTUg!;%|6}YfOxQ98;^fI` zQvLS)d^)3$k53;*6jEM}f{#)*7a4o zg$GV99C(;QT#!K}Gt?FWF_zj}<7x--zkiqB8x(VpWes*mzM5cB8aHfgXZRMe@AavE z<2v+;W*>($h+yr&i0<(FsNU6-aphk!n8#Y;^h=JQrjCj?hyMo14tQZQ^6- zrX&V&n)wPQXPYo*9wZ~ln-MVFDeN5=4%Gr?;qg+}rCmdudLHI(gdXWZFM;=3-+-=| z{t8*IX?fo2mShmQgU{zs8@1%bqv2E4mZRKae`B6Egr9)DLzFnT%wLY*AiDa%({1Nb z6O>&VXFjLt>)ZI^om<=bVwFA=(m;W8af!u&Ek_92dR5-$H%f~a&qw<7mRsc?|IL$R ztj5?M3b{ZSzOOLpli^JZOxaMaBPW6RK0=%}3N;y=ZUmZ)H!W7h9*`aBreyWm$HA(9 zWy&r98Ki5o7m@cQsMUZfU4Ma@0unDk8{HXZ)I)~NDf*v zOLeiJ>XEClr9{WJMPHC6UrI6<(~7lWPLIc39Y_}C*9FH$!0LxYFFb-Xw_&t6^Lv8Lp`mJDnt?Tdy)Z!sMF{cFiw2vKW86Op6SaS zm0GU5O+KU7gb(6q!l%QT@v;FKEGGQJ>LrWftH6*@+Dfr;2+=W@F!BwQsVX3yiPd*I zHt;lfGs8q`%rb?D2FMW6gUm(ZE z!dF+%kDkyHUb#ElfgL2w$42BepYAeO$BrAvbaZ@k^mX+V0z;KaeONo6xx>9mj(URcFMP_)M{+&@W$Ebs63G2^dn)eJ@r5s2_$Zv#f$PPA^Kd-R zlG;3R^+hsEewzBbEZk4@69WXa1W!zT0XbHTpIN=%6Ejy2p*W8YZuiWP$IzNw{Sqns z({&XjjM#E@3pE6$nP=+LX*7D4h+Ca3k?5pfr+^5W9hd-?oUrjA~nBgmxLN(~C73 z7-c-H7bs?zDeny(G_x)rR6f`cvN#ZbiJE&DluF}~l{I9C)yq?7cF}B#vYkFKOiTyF z<67}y|H>G{5M)wWnnAnaL*DPqeGPa79OmuDJlVZpZay(0K2ue-9tfzWGs) zOBg%&Miya13%C!@2@vE^>&q5H2X1f>EA_x|zRM4Lf)%y*-t>_luRc$_l>122W|k{% z^&^~n6guN%Viw0h9Vc$rnE&QdovgVi9ek5{EXo}fufcXB=c!C@2Xmr+XK5qgyyhnT z)Sfs(t>FR@KY+iixsz|k=@56Z8oelk`yH~J54ny^@AIEpKY8VVYZbtA9SRKw|F?% z)Z_mhqxveIu1V)KdfNby$Y8VF+tfuA%uL?!d@`9$!fDHDvEo=pjMj3dPKLuFa?&D0C}e9n>ie#Pak7y z3Y8=o%CD8 zAj&$7vI!0ahEXy|hJ6GRA|lO`ZYOErV?D%R?j;P1U88Odz&2Jv{={#sq~aCWS?v`h zfGHfk^ts;eH4f$xSwYD^{>05nt3#XO6MjESHt$q zk!&btU;pG}XxN`u!8{_g+WMd5w`Ao z0HP*nYH?xX;%qgiD|gYxNlWh3)5(>uOXe2zzo19Fe%M8;3_4zi-`EC2&0XowlL)2N z@pgEyR#BQ*3Z`zahL0O%QQj#rLomWY6bFwM*v1MV9wFu_A&#%dmpXW8`7(Rk_c~c0 zW(C}jC1HX2nLju3;@RNIa)fooPh5XA&1zX*zs%2sRuRejBv0T8n76fqnfF0efuML+ zZ-qum>!|Qz=dgt8Z2W3z_3#LNh-wR}zU^F0I(#f$OtX~y4BtegMX>KP*+SDwyS(*- zCqQ@gG|CrM(-pcYo)yg+5MoKITMmWqMUk&pMYZ(<7e-0=C-1elqdxG3$hbsQnROXK zvPV=Mp8BZrba8H7r2ZZpN0PjQWbGPO=3E7370OPhD&NT^G!oxy@5RXJoyeZ_ML@P% zPgq8wnW>-~HjHnaV1d&jA4|GQEqp{dkZxcDX4g0`YA)ve=eD@*i2?qmxV8+%4VMP@ zt0XNeooHj}-Q4{l3sQ$x#hrEE*|wPfM)>c~Obo>J;=yDtOVWszv#*4&T^Uilb^4h< zaldk^GLj%NH*P*yO@OnsRXW9lROXzv3@_=7J}%+dF4m1#zlCpbaJ$rBP=TipI^ z#UbhWp6~LQgwo)vL{Z$7i^3X%XlCr;F23>B^$epKiVP&k8f(W=4X_hv-fFFe(53dF z`puCS&U6nVIFQVJg}}!QBhk`KWz&5AJ_c8*?F`g=erj4hCii*|j*0VIMhW`m&gLYsag%tHp_j^wEdP6S#{HfagwTX22>;Nnd}6A-&b@|@#WLzaBiLN}`~%<`~8 z`X)1rxhj>j{8RG<(PQIFxYhPjnw3<(dASaC$(yZgW15r*fjKj7!9n6#9AnBWgQt_? z*Y;+jZ3<^;3q}1xc9~Hu!ImqXAM)$x=$kj7euSIfU(C6!2KBuJI8t^Vuo*sK;~flG zlmvl`^SjP#t+Du7Lrz4(7p2?eUqC6P+0yS)$!Zah ztoLPakbjgCMv$yYN*P~TlaB4rKVkbe6M8AIgJYpO_S=_Un#p6VzK`Z3v1`8Ej=i!Y zC=17b(a247U?CxCD}!1m^h{P-3Hmb#Z_1Aq&C_P&Pu{+{QEF?7U9(?*{aoR-T{@71F69DQ(;7q-PfGHOQYKee<2s*HsZQ z2XMu;+?z3|wnpWm#I_7Rc0tZK)<2mH1^_e92!h6wR^Y80Hr-nqr*tWt>A_YVh_j+b z$t7r$@w?sBzw3<6P%*gi$pVM=3p@})LqY@Nu?~u$Tradex>D$LCiCv0vl73UX9YK* z)4uNgn0i@N%^|-p>o!jF+z!U)7%5J1mcl5}SSOyqxA&T6m2}yaXWrLQ*DIbhm+OKQ*B>r;HvJBSFCzt6fsXe;iiPHDsEc#{CDO`3$Neg zRJvh-pyBwJL~_)YNppNxBx~?AJ?#AX9A|ldSeZ2wpet8p#pbE6=J$2eR@Lps6&Su@ zWx<4{O82#;BHar|C}G1o!C5iTUWy2{6jHvFQ%AN5PW^NPGSj{TT1n`>vJ~C$|?=_(uD0pg3R|d41ea=j-l>{}0Hmj}lYDY%Cj2seG zXDmI0cboN;sjx4R;D=Ya6!eGFE1IN>*yS>^^YYJ*fDXZ8B!Jx@s80KgxhMm9F4l#e z6+6tyW`QdB`CoJCtAdHCJFjn~5Qq##MsIcs2ZF-PD;SF*{!Dg3ds`S>2znrA>~mfB zp7Z>#w6kl^XB`Hft>z?GlfvIO~=z7IabmEkuU;5o%k;httK4VKbW>jI z8*7{QDGpEb+WqGX>t;PUm92k%Z|_?e_H4Z}nHMr7Z5G!xf;^??)qm)S)mC-VIlEs# zb+LRCY6L%{)0z=7wB38dMo(bm?Fxm=iEU#h3kcs`X%7c%m3?SmgPkevQfr z6h7|Vf>f8w$!r+%_^Q8>K+ggjZ+M=w-3=ehtk(hh^*OcW`&RUk$=9O#i=tV9nRJuW zv*K7EEa3&+T4AZytA&BP)n$vFpNa+8J;ch)L*M=2z%~^9&^{)f1?#hueaK>Gz;us% z%5lf+dL}_&Dhy;)B##+^fbpARB9l3Rm7Q)i^KEmNLL%-=9HriNX9xt3F3t`dfoi*x zgUzSMEXnlY?)N)GF8nD!m(1hlOzP^or`uvIyHc*r;Z5gXryG&B4`uZITSv;)*A?p7 ziK~6J@&zm&LqtY$b!VE+mzOo4Bb2v~EEKI(C8FiQYxct zII*=%ntvJ?-1AF7P}t)kGa?H3f3Z0HiHmA#X-|R%-y=ZDk$+)az+LX$ZD^SFkt`vu zRQI-%MuFaeHuS3^8<|KOvnDu{$h9V~E_V&; zNksKkc@T8=;JkcsoppwItr+Fki<4e5wy!^-dSpYdWKY!b;mfk^hbd4U^}0mDzj5l3 zTdb9;(-f=K4hMTf zDy0OCmh;l+0A`qyfhf*&yH+&ka@_^<-rBrH!1ATN&2mOZNUPd_e6szuI`!;@h8}@8 zq!uUBU_Ze8cox=ugvBtfLrf(r)a?Hdv+(cUf z=^WL#(byr~*Ftv4p8A2IYZWGE&tuA6r|ds_#FyRvN2~~GQqdbV&33r04B|{JfY|fO z5`cYkA?VB8QV2*~hG3FIezjd-vZGTd*ODe}Dzn#6e%Z@3!77!PIMgp&wF^J@qnuOYjtckEpeL(@FAGsH6ROPlZ#&S=L)KJO7anmHaS zM*W=q#S-kgdwn#Z(K9$% zlS;oK7OIFV^g~CAvIr$*RaR3A8RR#mMc{}YP=lZ7QR_2LJk`Pi#BdCh+Hah6r+Wca zIuwPA8-n*TEdaKE z)|{cR6L8?04j)Ou^m^c_+rMHK|D{p{ck?9P+!e-{pu67M+#nEJ%K@Ze(C}C^N8Zd0?Frmt=3vZuaDG|A`DfFAwI;YlPxus2~1#$pC zQ6$__q+VCHz{A4biNEQRJzqtccEM1d;fKtyPrdEzh__5%>(!)~_ELlp9`2h%C^E#m z0v>OW48A$C#Oz(rJ*xep;}_9UBK;pTdB1;ze>lV-Sg9u37m$sU?PQz<>*gU|YP;6* zI2>YZuCng}poQ?j^F9LvGIhMjitn`>VA0}SqoM>zOPG}4+~QebRkCt=Wi#Y|Puh^^ z9#|23&!6>s&^8@)YTxYFdzkBVnr-li;igUSy{Mpau>BEUA-Ig-miJnfR?>~Q58S>tpVg4goFqvXFI)Tyc^Jk{rNYq>v6cu50Rtq`! z0U@kTmDIV7ZhCeLo5~B*ho&V1dGK2)-V`*ggeQl4?;}!QNR|tK2FpgX1aT{Af=Cyo z*d~>A;vhPn2t#WPcA|Zj*qAiFPjn0k*RP?X5P|twJS9pU7O;#mol-F&O4jgQLLD?1 zT)?~cVjP2jR5slyJ>nl!_GiM!YUd_pr-wL&j zCGU;6ylleCZ&EUh8bwp<;c1|qkuE1dUe`4n9&)>BeIqj6X656#tF~8ss(Q15F3E_~ zCn`GUu&>&Z$0k^X!+HfS(4@%kSPX`|O@=ItdM%jvTf!mPm~BN}RisoadWGLGz491T ze#pkNHpTOVJ?>tILvPh_BDC7WRPg$=thn0jAX8)<0;Ys*<{c>FpP~@Rr()?X1)Jk} zYwLXlyY=q$LKU24FMENiX5D&_Kg`xFDc}lb_(Vm{Jwices8zXl)|~Ao;Mc+Mfj;k? zQd~VIF-8zD*~MQtcD>={Jh(q0C>c&GxlyH^aDZbndO-qBgCg(ve902 z%d>&Vt0%?#bjlFHg;X(yl$@gFi)mybbZ=2Ue8X(`);aefD)pzY@o{zNB9RH%0>?)g z%ElJuH@pLxM@?_3qPhSqKfArEFM^5r6*SaeWu=AE9!OApHy%{O6-Q5bWk86S zQB`~4QZ^5^fjwwMEDrRHshH$>OHPm*^@o7hHAd=hd@Y1LoB4-|a9o|1Tdbp=V7MwX zL*4jYt_%RGePH!-H9m)PuwgpGtsQ5>-X1C64Uwl*^V-jT$TTLyOLE0utr5k(_H1j@ zl(y|Hk9!sd zpa^Agon9;Z${MYlXY??JJo#yOFvQmrQ9-;5_OoQvHQir=pAzHnVd)ag$gse25nmmm8Ez{!w*-GxLYgj*DaZOI89SlX@%`rHZmt13 zF8Ad65jQ!-C`Bla&&EkE@{>Lc8jpd{lX*ql3@%-=*eogmvj>Ozir)Il;Abl)Uu-A> z?j^?Yb$)c1@s_1qD>!nVO61e^aL-$JE ztBo<tdjSFnwl9^scfqHR7IqNu^yFv^AnJoXgFZ1{5^ zIu;Bsm_8&$_%Xd4`Qz#&U;ov{$><)vB9JJG9g(!ai*H=$sM1*t%KpZL=-g* z9lN1qU{8FocQ0m?VAOl;hmQOf_lIo0p?edoMdMvvlc`f49k0Pvn^$q^So|-nC-5YS zH)jcE*b(FenzqT&Qfgf#{n+G>*WOnyI8tu66iLR#9pF=P%D4gdWwd>V<*C~V?A+pe z!A$(!7jnJegE(&No^HK1PO+g6p^@R~a)68#t7k&-g#GWgyrOo|C;ljCzJ*`0>B_BDZ@MdvbG!%&1Ibysrx}4PHCILte*UiH0ubvll zwHfj+xMx;gRM)|1WoFOsAD!+YLZcx``q)D|n}km~gucJKpFNpqZIbxNm?5>p^itLo zpoG36z&XWIZpjcXT@)}89P78%p<9kjM{z2@tfyvJ4rM;$g;UZ+zEu)=yYQXFD&hzk zs`OjPb(MzITIUr%fOkMMas^>AM~U?6QyVX0xB;5fEPTKlj(`zeC_OVXT(Z%yPiNY> zY>Iuqi}|pFtrbHebSUO6-(P9JeM%&%p$b@obMd>JpeS4rWI$`K8HFfF#m1p}o`<;; z7}Fr8^h6Svyn0?mPNx)%km@x${TW$W`<+@k$S7NLpGy`gh$SU;_EV1O=_I--WHTVx zpoiFUcEF=}S6kLnWI@%OD%;y8Qi!>>W{Fw6757&uZ4lIh?<*)*2oc^iX1jSP6HE(a zVs&>VoS~+q3B2ux#`jChM2ym3!gTA|Zi7nMZakVv#T+PPi~M2Pvudc{eaoO%Rfe{3 z;_@CwXMYz+B>4GJ{|nYbtDBau9QkSNN4fn!4ady?;u@B2ST zQQ&`W|3A6DzlndxxBiz002Br4{z)7BKZ*Z0%=I_w?_kS+QE^cJg8JW>%io~CV;KJh z(Zc)-=zl^Pe{=rMP5hVB`){0oq$vL8{cYU;mlqHBFYEe;jsG|AZwvpwyv6_J{W0_v WWuX4!?gL={oZx>dGD`iQr~d=?qPE8X diff --git a/env/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl b/env/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl deleted file mode 100644 index c84f23e292f1dec6722b05d09b719badc230539e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124700 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⚩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%0D-Gn_Q)DWlFgd(y@s3ooYj)huIbV!&%aqR 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

      DuLYz2Ld0BV&6g4wrz{mn=AWQd)5>3U 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 F{Ra+U?jHaE diff --git a/env/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl b/env/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl deleted file mode 100644 index 4eaf745eead026592f2da5ebf49f95cb79b0a133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11646 zcma)?bx>Sgm+l*P_YQ&J8XSVVySr-|m&V;8Sa5fD3l=Ou(BST_!5xAP-%QQC^YY#M z-g{2%>QnoVU++3+?X}l>>QR(|g2n~_0Pp~7)jU~Tu%DP1BmjU04FJ%-&bpczo7tM! znSyLBoIWx!urru~oWLJJw&r$>qGBo{%2JA|QVQ}6j!s}3l@<9VChU$|m5f6nObEzY zTUkhsMrm0QON``*LqbfX{%Gsa@z(Y}eLID^F@~Bl`Z8>u>-*=?^P1?)`re;(jYI5< zjY1ji-a(o!+~_`WwvGq~K1|E?Q7o3$D}24tr5z709c>TN23Zr-qM&yN@6Kx@98%O~ zkQ4}D)pw=`IU5QuZLUk7wGhvvtIW31OC2n|g0m-_u0PBKT5~0csK+8T^=be#nT z!G;U%53PyyFDP8vQFHhrc)7VA#NgvqOiip9Qi1(xe3TU7=LS0$y3IXEv&%8-JEqE* zodkizNdpWJTM1t+6ivx8K0~A-lE;4NqC%=diK<%O1j#nsv6)4)(knsoJUqGBiqeS(_Ux+hWDg*kd6>CAWY1@83!9Oy8fr2K&Jip5{$4l>RZ^cjd zQxV@gY$+cC&(+kdd1>{rvw!OT0@&)wH_aJT*(J?wD$AVCWEz`3|3s^>S@WmG5en&2 z$(rJk-iMTaFKAJln`V`U+5jmLJy7fx=IrNfjE?cCH?qk4^ax7$GIr|ZTxei
    3. P6STH7$AhxD7YX{l#VDscq|fw_SU-XVdM!{l$-0 zS68jS?v3=HH~#+g9Ua1K){p5))IMmpT$I8z{|iNh&>ksvB0HO1tD|qt#})Zi6%F~b z^OxwBuJh$ zp<1GkgeW@7mf(^$;Wxk0fJSMxXo?Emihc#@Q1mFaDJaF)91+7@JI6J9Iz6PvgM}%U z?6iu+(@`!=bBQiWcuIJ5hO06g%$^@pk3=X9D?m2;+mBe1QOg2}peh&-B$*-($J8Lj z@)8agDx=)L{q{r5;v-bxf0g&`@oiLRqUX$vq?wUMGa9{S^nO~FCE1STM`WB>PVBsF zVnb4hQ;d^1frJL^#4(gMsl&EFb6e`{LV-Yw(+89`rE%;M98yZ!uvf!zB zNi!Msi!95RTT=%6s#cHp{I~1&e0=yT>zbgv)lUWHT&4?SBBy(o7UfO>hJcf z*HpS%GP{mL@U((tR9^a;PxghbQCOU#-DgBg_2!sT?qKeV)kkw&y{|snRTDi1&Wnj8wV zabFsz`&4T@8PqHmv)%7U;jo=N-8c&4!f{ z+6mb)1CQ9)abHKrBj?&Kk_WBM9YxU+)lP51TNOdoPSBE`cm$_hWC3OFjfE_C?b*9D zgBHdu<#Q3`l@mn!&Stj!GHx8?V?Ur3*3IUfOM@=${U2X@=ig%2UlzAiwKRS-wY_cl z=odz=xQ;#k)(xBTfn-v#7NOhP-Sg}3{Q@T=kwD^N9sU}$n&14^sWSy*4up9Mo>w*c zVrd8l8gib=%O$2H{~2c~)!=~|941wTj%@CVr{IOKDwOI#qP521iYS=V$cg`=V#BsR zmPHmAy9}6d3EmEC!!@`DIpF;-9Ki=8ha(J%C@_{e6L}$Gifl(>byJv5C zf92kD{SIT)QA8E*&3j3o;%=H-<(nHHc;}}l7LAI#M{aLk(~yW?>sH;ldZ)Bv`D|uY zOcza3+!s!X*v%gQ;SX14Q%#+&^!2lAyHn6%Bs{d|A3VA&V7%FFzjT&)5prh3jC)63-?7 zA^uY0AG5D>ug70c{32^r+p_)HTXF}o<9M7IXAim$`VRUJ1`g%MYbCNLPGkj}IUr{L zI`-W-A7DK$HQ)*AX@B;Ja727Ka&P?JgjLN*)!B8~p29%kgXs@u@3KE0KVJAb`+C5Z z=9h%fGfW7FaUDG~n3+P))XrdE$x)+)^k@7bU)YBgU&P1wh^PLHhj_+RH4&GroSdS_ z6vE#@wRJU15HcleEWVGxdmC9?c6sVTN!7}HU&UA@)1_~a`DWHtvJR8;=fm=0nU!a7 zQ%O(x^x80w`RqgrZ%GZO4yM>hsy@Y}o`(0tJdT{`ntT3a=NTPyTqH|Dm!i18uUH2? z%+w_eMtY^m1#--b&a0fQ*pdeQlL*6~gk*I|l67u_TA#5)4c^r%_o&TnQ43V3!x6<{ zwuBupY&EC(03ydPk)_%cz;hLojA6(|sJAR{DsMX8s^@lf9a@>=tZGgFXEC| zWB~leI+TwLB6P7>3r<-ILeZv#)HZvBXk@#mzetf@Oc;xKaRb@Nwt8nVt2qr?szFPJ zSJ9FREYxB)qLMi0OR@~Xm z!%bHf9ExgVkI(+~y*I7PEv-)1t{(jSfg>T&hgW~{Q&$x`uRq*UymrrnUfHgZv9{~d zub5WuTgZ=II)x;73vag-2k-#Hv;~hij_A+2pY_b>Ki4f2L43%Edu%<@fNenfcMZm> zZY`y;9=E3ZSWGmR|0rhN_1p~hmjalrXBcd@HS$^6>UrM%DsA<5xcuKoRx*{5jX+aZ zTNj)RGC_nf$C(nYUMD{2#K@^QC!J@UFF0Rwnw?t$#}3Vn2Fm-V`sv*y~*URFQSBCVH@T-AgYOs-w#tsrbQ;+D$co z-aL}?rnzs;{{5fF zWQuFBHiugxYr<*QGPbis+^C{eJ3Gp2fYcj~s;Leg$M9CyH1mbzeeNd!2`!%t6p5oh-?pNI8cff2zJcwzvZz7q*n| zRWc5B(sL`M6PWJ;$n2j#AUguGFMt$>UkL^fee0mtg3vwl^IHq%vJ5%|OJlU0kq$Du z!Vbz&PdH_t{kPn$`#Z1PlMOVl!R>u*nVY+co7wv=zBoZQ6ny*OioQ=C#7Elmew@7c z@WI}uZpN~{nMsma0?5yEke?Bzr6i~u#7)}!bylaxSQ=xb4sLZfx^$N>F2uyBBcdj> zh#v8^2t~0)EozN=i*FsjR_G8rwN8DlZx{a={)q5d-$VY1*q71c{G-C>_0Rhr_kWXr zQaCA|)Sl9x_MP^hiM^=3DZZ(_<;zV7I7X+ww=__kSz_Q&+Q6$<8#t9Ra6E2chlAo$ zNe?v0vHdXW*vkx?_DAk8-RT&Q2`zks*q{~te`P)sec5OExOhmrTW6cqH5%j8Tp=g& zM?y#y9U*n*(p{yj;L{_TuGb5qOAtiA&zBH*FwvVpIUaf-rwY9UGW&F^HiLsDbwI?5 zm=Gt#lj4s=lXyVzlhUJ<%ymckQ~VEkmOmiqqdu~YGJ*t1udFr*=akr^FC-_bW;K@u=KUp*>Z$uzvE`!OM+LL0$Ben6+AU_3INLa~g!E4Y) zi)728=q&OPXruwkvwoy0b&}&tq#1QO=?I;k>NCTb2FEd3&`vq<@jxo=e(@zQZ;dtJ zOoJ;Pm_41IJ>{tmJM!#($*M@ae%8!LOM`YnwkDIDBed%6e`8Heb&9}~R??3U`!7&V zm$Exbm()%Xk4xkBamU?NcQ?FbeaZXd)Q<~-Tnq1u)`V@ZIBI=8Zwa*2%A1?G+BQ?0 z(&kuN)mB|>sBc+o?NNFht3qq5x~sbyN-fvu*CcyeMlEC3F=fm#<{9&T+A^U`IKHHv zt_s;rvLZX=Y*-09!r8Q#_SUtCO3V9%%}u>6T$QHjFlI|NG&G7~ z3%+rxu{Je>`Ds+Zh11NpP!Y8-S58NNKo_R_$$9^anf}b4a~I~WU+AAJe`NcWLYuyR zGU%naTv2Z=|H0+Lz-!x@SkMji4?MFr${0C-_!qbPFG0gx@Z$@#(aQ|_Y2 zKq|f8gA9evmz?fm6Ynlo*Sm^o00-|Olkh;yQ%si}0PbR*0C4sa?f`1V?ELSl%Lhn! zkq4>La|0tfl|NUbEzbF=d#LHDMYm)$lbY|x$J5cc)zjX!CRT-;mL!(E@4(rOYl^eI zIo(;h>)wuBZuZ55ziRWDudTak8C3m%SIaB0ojV78?qD*>YO%dvnw`0Q37bf`>|SsG zbI-lsp{1Ba!sH6xcIoZi&2)Zpb`^U8T7x{^T{7%AQ&5R(J zR9@$OLdNB*5)x{{SCv_co76`CYIUcuQ{1KB;2ZSs%zlu+UA$et&9~40!R#UNkp3Wg zP-FhS(MtYt5x**)ClfTo;u|6>9%vJKgaLsS z4)A1^GMITuCQFYK@LD@Qki~V`wk(s?3k_c;^Wk*;aqpF9`}dr^cmalH@cOZS?jp;x z8KY*-pMBxWox|L*F0x+q`|d}vC_Gd&V^M-sv&=iU^R%HiS1eAF@kui#?S56thL5>( zx#+7ua9H?Q2G=C3H9?>KMAPxBuIO&Aj~1)N(CS3{>{D`7SG)x%4yj({$*~4 zvrKrg|TkL89Uc&!lru3W>yB^#kL+ZqI{ZJj_inImY1?DuALw^aP~^LUMfk$ z5-a)YylvhdFYC3{S{o6A8QtUkoY91?zp&@Z3unoND)7`U^q++{L2~&4*-J*WxqUh1 zEjrMf-+kaY4KKQxf;4?FvW8xpwtMzVFO&pm<=A@A=v1x*2DwCR2@hGcd*!63$W^6&n&;Nbj=XvgT?|0YA>h!KtwNblHt?oYO)DLdxMR$oV$;bnzgWKQKI) zWgd0VI9{_*Cv};RjlicS?;4P@w*hh8M~?nj2sI~iT*sD%;Q4j@M4Bsa;XTorHKzC* zQdA^4wloffMsUYSdak1o>(g%1*)Y}*)=8#5mpgO)!okZi*aOJ?i!tYS@%JG|%6ZP$ zxH{l(`DWe0uU~aD{mvZsg@%g}t99TC=$C(q86Ddt{D5>AsvT$@_Ms<#_kF77x$ zSE*lcsBZKoEYsHMKn$@FdEQW)e||?Me9-Os6U_G^&m+eKtX(?sUTjxb@J*Vwn=Hpj ze(a2RT=zy-{z3g2@P`uX0rF2+`WpS2+yuk8TLxd>I-|f;?N<)Y3naT=Qa^b(<%OGm z)T5=IgUfInJK*+}RCLH>N@u!?w@dTAS6mO8+zUrZpjl zd{KOVta&keGJ@iTh52&oDZW;J(O`D)o8TpWzoqrq=beM`bg~p0sx?9j%wv!SCVaC; zuG;L7lgZhDHHf8)N3K(pKx>x0rHh>16P7(xUf1oAu)Wy;!bF9fK!ngoSN8hrCh zs$%K!qR%ox-BJUL!Sx}nJi)Bcq1S66S(Z#@4+@+9^4|@IH>vQZJA@F$(jFV!R-nwX zX`WOuk=rkJK$UpH$sVs?sgi7f>5!cGQr~Bc_T4Z5NumFntSA81y2y+s%XHTH7hUcr zRDA$dq<4l*{9e4aB6|I(I!U|%yUDK=L4aYM%@rQ~eybzz2xP)1YyI^l(VFSvWn9uE zu?%c|LZGB6YOvF)+-?1eXs`GL$q0ood}X|xpeSBxV8`e{78yb4pqYhDwE7=+lf7{g zEQPLoi|(}g49Qt{?)~qPg)d2FdBT8LPcAYtDRtV`D*~+qa52^TRgAAfwrCIu9I#)8 zp|f?7#AYY5`~!(pDSqe+?mNO9kaS7v{%&~d9h0SM{V^73QwTHjVh>>&oTn$xQ$L<4 zM`4DWn1{7SYx+x=d&e9!VIp4(xhmgcXHwnKar6hO2vro3c1(*O$%-J_r2#|5SOx^&$hm8oo{<|#jfR-rVymDe@o)lKJJon#?pHl*5|K3GaYa_zBs+b<;PUHz zV961bS+4?c<+}pnEuN7>5H;d&BT>AWGUQ;2`@)&UBylHtMEm|OC@W}UNO*zrEJIeP zcrYePMK(7^E79xDZ_uVPLxH#Cy`tsKf{^L*isD#fbj73_m##12D?x9*9CNyx5W@0> zrB}bojYVgwo#rsb{t&Wmw^byEXSs-$PtS7 zEzvDe$-$errlf-fO%%-fgeTG|N|Cy<*cwU-s;>u>+1f*YOj^_a}s?$-KAty4Xp5@j+ZX zyr|{a(nPaCAk4vFb>Jl8-|af6P$WTzFAC=hR8|y4?LGQJEHL+WrQ+kO^)PCQqUAd7 zOBg>(^JEDduE@^$gjsS7>XQwv!Mk|N;IIs6^Rs;XcO!~kwZbph_6Z#;YGDtI}Cs3$Ebor z!PP3lp}DfO)g8D}Y2?T+AUne>E>S8mXmtuwg$max(j7$%WlyEAB1H`u5#+F9h|Nlh zRf!UVAyW#oWBk`H()-mqCFXA}uCQzcN);w@8TyBm3u1Rr{hAU_wlA-;Bs;{jvKq_v zma_{`M2}SORgh6{-H>um5d9r=QBEdJK_kr&$v`B$xUJa8DTm`}pPZ$-55IAK+iDtS z6uds;B~(|D2Z4k=Y5Is>+S;hNCOz?eVO2XU(;64!>te16{M*}cgNBUP+8h!W(sl7X zmF|zq?KB<1V5>|gNk;i3#7>Se8JJgB+@%SQ0VgaR0ed8y##}hPfe8+pVbpac7kgFVOGxQ4|qdp|1zW2ZgpAtlE*uCxPz&ihzNcY za8KsMh7JM~(iWL0)78%w_EjxN#Md#C`HG&y0ZtDuV&yDA=Q$+>xkb0CLvt z%H7c>;UEkoEndOsi5da}$^&=j7*_H5o{4yJ;`m`7hknh_)C%XIef5N?XlA zp7-rTVVAysLn(tmx<9FA>Sgnkm887_sY*bzEVjXakRMS30>iT z`6PA$bCA-<_}pltuZhf|Kkuks z1!l-Vf~3#lN>J6FBg|JWgFd%vw?dK=Ew+9n;(aH2!hfK~8Vp-WI!iLmp)5I%<+UOV z7=kNc&Fu!c!s+=Af&gEqFKi652Qm!GNftx^SqgSU%y7p1fK_;_6wVl=2gL-=gwT^0 zbEeVr4kl_&Xl@@khHNGv)x-w!0q(^(s1FVY_T}Mro8ZeES1l^9Qj-8&`jddF8?Z_x z;x^Ry6R5)@SQp_LxL=!1cM5*d^+U?FlA8$)n)<59HX&#!ltHfxVfsZ-WqTa2!3^`O zk{ic?%NGZNt4YYvGj1mIn0a#-gVl;Zal)wt{*?kCT<#!F7a&~7Ll-%)zqY<689$1o zzayCm1g{{rDo@9PbR*A!2ULTIf@qFBA_M zDrGWH{cAh|V#DqseP6AEqQPj&$-S`D5xT6%85Yk}{XWhEpeYRBK+c3Cy{Jg=_oznJ zH<++0iK?XEtiLfUi=}R{Z($FYCjLxP?2WbQ-D2FA6qT#pa|qQ6&gCxHRT&mj<#!TUmeNc;dfP!G_F z8c;xhT&M#}a8j=tq(+7>lx8u1C&)LD(DAOr?>ViUWN+Vh!9XrwEAe&C+v_TCJVUiSGN$84%bbeF|Gt*Lmb z@S5zI7nDDHsOWdogEuu~W_dZ-b-=#heNVx zoD=Zsfr+l`Mu83|fqZC1f1K0a#&CPixo=k%?h(NW!Kqo+XmNO%tk2I~&BSfW5*Ph0 zEj#@oJSay)Ug#{r`=D~A%A}5vk~VcHeVl)|EOApqKo;Y8GD2@j+*^#U zGWc}ro>->Moueq;_Kk-Rw3OLVaDQl&*OYiR?MF&?$4GZaNOwm{=fp^R<Vm7ghv54QSI-V_n^C93SqPH;~}DzPW4Slhbq9Kq=aqeve@KADK} zobF)@B-JHk$7=XGR|T%s*@gLm@|w-e1LdxeCvOc;Tj zAHAbVJA^|DVV_<`kov6X{7FA{diPe&;DU1Ca{Og~2G_#zWAp#)WPTIPe&NS~()U z-Qo74=^)T*fyaYg4H~QFn3?>@E-=YP0!u(|O8-i?Mz^F{U9V$Et?85+PHq9M zsnan=+wr6Mnnc&|k4LCPN0bfX)C{V)SqM?RSsb#&B#ej)OV9BB_&G0_tNGlh8?!F1 z`nFUftgEdK^Gfz{W}Qx(r;}x|b>gMZXE7?4Upb;p(!{Vi(`pMe43%Tsyg*rERts}= z`z?V$@9SkpNe!aA+)r##-8GUVdpi)WfeL^^<}NMUeruzgwMrUKWCi!8(35Q7H7unhT6y_{#iucE@4D zlcOxeP@@SZ@F4dCL(*lo$OHqb&=Sj9I~=%3%gSGSqI729F91E6FGAPP0C<-IAzDy6 ze|1J7q-f|o@S+q0VKS^_sGxKmsfo~9*@#hqXat00F6t;5_$Y-`JnE#>R|k?6+0Hn6 zkKrV7rx(S<8>wCXF{r%|rbTfqDu@FnI7GwEd(m}2wR6pD{jbp_&0Y0AwayY9&N3a& zP(7)m3hQkuS-dUuC|q^#=)1@nCKXLKxa(3^zwwi52Hag_?c&@;^wbPh)c2Vd)gYm@^vF zTZHS@(O0FfSkWL@XDkI7DOsz=7V+dc$mT-sUj{&7KyX21j~InMz5H{&yg~Yl5JJ4` z`7?sZqGAGu54jt4@q>*C-=iajfcNa;-pZJR*mw5!-~w=4oI3-)t=-~mmo)`0GxUSt z6_f~l;`$SUy(##Af-u#62Pj0u;S@F5gU6UKk>zBEFH1BeOz?YV(NL^(+LI*-kq&)_ zhEwq0T>aIuPRh#?NkqFH01_y;;2JE7OYR~6PAIJbUip7PcKsjBuD?7jQB!AQCrbwx zd#C^6Ysnkhni4UpTH2aA%bU6@+uIu2DXPe+0uS04nmZE#fV3=UV<6*-h?9$%fti_= z1&CAn+s9uKJqt5{ft87qo$D_Z%G6e!2*Aw1#LCXh4m1-nbdWT)G`Dae0svSTn3=d( zftFH0f|I4Oke#`WDG`vF^>;$T|G>KF*#Vpktn5G~B6?OP00V%H3BXFk!o&iUvM{j% zAzeTrCs2V6h@|>!21GiUvJm~leEQ1@Gqp4M3)y1%i|zW~Xj^}E|I6avD<@+4hdBkq zC~W9#`d8uq>Hrm2BbVo!Gcy7D!P4dXKVp^d z&Oj$f*_qk@g_bFsnp--%IDIFg5&}-mlp2On!O6tb$1qjg5$d1-MNB4z9oWH2?s>z{SM^ zgqi(Y3Sb6mvI13!*x3OL%$Gd+U{^t-_hM|9APnysS$EbmZTK0Zlo9PWg9d ztejjxr!X-C{_QrPGA9ui%RkCoz{ms=tm}4 z#QQ=@;!ZYn_(r>uw6P9#KIk0Nta``O4L1Ai!=Kk&xG12%0<%0VEZEfKn&vQXP>z49 zl7)CF$GP0v`yej1R&~>kujGxVvcw+?3-zKM$SU=qVal%Y%_}jVlUX1}3PR1Gs??bY zYXs+#QW?8fAd-LDY_yMXDje1}8`lN%6(I%7gsfT(cO!`{f(og^vbr=szz8)ob%-I| zleEAo5eE}-lVFjC3p@I=_L(tfuIGEcMH9)k>JLrM9j|E-sJDO|F4um zFZn--)Wi^&&VUK#FAMJ<>>w~wRPEL5EP*DbL@fUx2>&C+{RI&Ichvk3=8lC4zy(aX z|F0loX69rA{AU=QdqaDuinTpxxXNEzwCGL>Q{vaVJcR5Alf`3^%7CB}2`&q% zuPA}*AO*g51?|btut6IHeKRw`a~+z+9(L^r#6emJXAK&QE`0rz{{aGeI5pvO;q&wJ z`IE<$)81BpvFxR*X0v>L1N18h7P5!`>?GGtdrdbNtiMH_%kIExaq4*DAKRffI{)By zGX^Vt7`k+M;wx5-s;dEOKR3oh1u&}L6I$HvN-k#?dLY9vAS+j`=i_OCsHz|re7h=# z3_3i276$}IL3ouwvTQdi#jGKNsrmgA-9c2xzW-V?$6v2EMfq(n`ken=Ggo)o*ylbh zT_LO4VlcCfb1CM#H-T22!|23=gub6A>VqHBslLuamsy!jQ4@5oI9`dl<7@uP&KyOy z%%m-d%hVkCxW>Tb4_|+7$G4wF8dG|n=QnA8z@i&KOT7Xd2KNCy*P{gS2O=2Pzn+xs zpeFJtND5SkMm;hj_jUqj8ceQ%4~4_ke={PL>gtoxL-Ox%IvN%NMc^cX#2!YL{<>_k zW#PG#%z_}TIAB~#N}i9i5RNl503`^kEs8I~cZ38VUefy&asWJ(f{7#(*)LF3Qc(5_ zYCZ%Ca#gq=7%my{YH#F`!4dekx0-l3gaI@Mk~SjjS$OJjf&rCn2uvdy4_GZ6|Sgnpf`g9^d~{Y-Eo6Ja(3 zUx0U6LckDX)`c4~?-QpAa(A*)P)&ZGHY$x~z2k1))&obcJZLIxr&8>+o0JqdnGk|NrzH6o# z4&Bp1ALb zx_YnVmQnpMec@k`{J^G3y9TeCkzzgxHbdXTFPYx(JN%!#JeWUtJTUcy-@y7Gw@vB% z2=#jJpk|_;h~Mz8NuMBghp(*O@SjNg6}E|X{dyRY1w!-(w?akW5c^NVb9!;ZbNaKc zxB4*QUbi{ICAR4Y3gEhfw}!R?jjsT^jvi3gv`@Nk99Qgb{2$g&kegy>VFEfTOYw9p?Z$j&^(j@=Fkb zgHLe2Gwt2=0~^3;4RF3A?cIs|)A&qwd?^8%zju!uKf*h`NPHgN`8mIQHfIyOaFl#z z&3`UAyu5$X%YSYI7y8LmVjRB__*k?(#FOzY6b|la(f<_ba+&;kzMi%RGYj)GyFzrQ z9m<~iX*S1>7)M8Ai9{o0_H=XLz60&K7#91I=LWPMBTl&@!4bl{Eu^7eQaQTyTm0JA z0FDWyCmNOK8%6e(bi<%*Lo*%$(eua-xy91Xb*n+DPdHsW_J#Pg`W3{{65)_QZ)XXC z&xeSzP-bgPy|hWKYs-{9iF%@x^vL4KEBXi&qYxu|`NJ;4V(JBpPQ%m7GvlU z@7IW*nvyi%$v==Tr0l%M(D07sTFTw??LRVGMm;k7<)p_I3u6#0qrK{$ zIjjeIg@F!pgMN2qW?5Blm?Uk9mYq#W_xo4$}_E z7p_0A41EJ^vd(I~EA#o>6wU%XNT;TveK2#kRPzzc3m6$Bay-7?FUP#y!Ni_RJVDII+Z55^E&M?W@-Zd5fMNe`yP5IQW{@_uS%Q2YY$Q^SpIUIR1OIY4A(kZx2AY zZ-KZy)v#mpHaom~Gwl`j=}hrs!BThl?-z8>bH}^GOULtfQL0rfk;L${!X)kvirmF- zBdT-qhY9!l%yUxw6kE!qjkBtrw4G7>;(iL<`>BrZPKZu?>+L$xapP?DOnNc(>e==s zXVW*(H&v0yk=T(X$=%o^cpg66^XY(8G?_T|;p(_fB>RY($eLII96y>5n-1Ddo~O}M zT@O#Ef^$9(l(C_d`Ec{lGR_ZL2lq~#$NDt~;OFf3Dp+h^#G6a&k<4z1YM$UFrTwa! z__6^mAH)(zdB85|_anwZ6POI4!}uZ-{Pt?{$As6>ATnV+;?8}!8-{0pZ%Kr`d$8w( z?0gEVVy=et-*ZYXZ1@u9b1N>?8-kYwh;x+3w|5}#GPApSx0&IBny5p_)VfS@! z2%c*WhS8kF6qRbQ3Otl&tHSrBkNfbSf9B=r7Yy^su^gG;kxS?md5!$or(d0XRN=EE zKjqBrf15*`yBz77VzZMI0XAJV+W*0dZl? z2=l%LyeN>4+4OGA#7jf=u2dljrMR_Fan+M00{g!bW`s0qE zE#)GjTL{!02U~Vm0(l#e^wK;q%Nu@rXL+;ma<0mRk&!Ykah5X_SXAQUnpUy^vERmy zeCJsF1@lAXDLi#fN(bYaHD}n73G&v%C>xg?26_dwL5H8T;U_xtklB%AuL{H_h*NsQ9qdcRV+I zmBh`vCzAac(GrJ8fvx+N$tgRVsv+$?TNae{W~j|5-^~c|MD4qAS~q0PcllZ4qQN5D z!KWXBpk{DC2BwEukHs54Wm>Y_jK;{lgpq>F$9B*UOpC||Lm-}aI@Yt#47Ktmq76KI zat>wgJ=d#~O-lOherYG7OcsL|2-VD6EzlGRGwg9m6ID!cIJHrtq!a9bb-lb88f`Ac zLY#}h6ie`GvfX%Rgqw4t-exmW=k902l0ir*bJ9vh|AZ;UNs&SZ%`rQG@`6?)YSNO5&zp#ToeZPmOgBIyP%lQT6ZR`zD0( z$oR~RE^Oqhm~bp%S#YamW0IT9@IbyHR{d;vo7=Oglk*m8t6=PTkyWiOt#cJ^5*@FK zr|4iL{$_xY?vgoA+TfHNJ3R+Nm8%oJYtu6U^V+Oq0cE|h&G?LVO?Xw+GE`I1N5VXh z_-=tcN{YpJZ$NlIW(kR$Ra1>TT}D?As?xLg)1fO}dhCOPi>Sf6wtaIy@!9YajKq%; zWACVG+%l&Z?KSHpcS_;mmPS6eUSol7GtJ+2#({;C8=n0J!WFog={`-dMd>Z+R(S5} zKSc2oYCt=Qb~BE96B?czNXSVh7y@E5$f-i}QVc3a=-B$-!pqG(!|G(|FxMnZd<&-M zulaIUe1IQ-^ym0BNgi>#p_r+;hqXTYURaMMsnA9z(B6fWfW`fsVS~3ua=^#bzXC5TU&=0A62;zWZk0$8&W=01 zkZsGq5q8lIHNY5=L^9U1;s;qUsKZf1CrtO5>)E8bwR~oc$5S?_vc&A8*c`JrJuY=m zZhi`>g6u2@`=>C7`ea{|-g7tkSD#U_81Bydlfo45cXib~Q4JIF0ag~HY&}N9iq+G1 zOkAXIU1v?UvqPQKsM+|$VY&XB1v z?Go{OoMgSkyi;IR^{#24T>&R_me5Dp>+Em$XwXJ|$OM6hSk{p#N^9DM*8=M% z_bBT)%Xr&zIX9;>v5-m4c~jst12U; zjQ*6pmG+u*$ppJZ~o`FYd0TB%;8PzpiWLCuMVz>+XkRB;4zLH%AmN1gtJ?(62uS9l1<}!iP(iOlvLK1j9sv<$Z|^a9$~-hn(U%{`5DZ_% z9Ter_)&${{7<6Z_q*zjS+8yg(K;RP@6={i$#i&$~SsoH+5N&Q)eL!8{0jJa z8a6$ck`3xpS9_j({EpZN!lT~@mTB`!y8xQv;drj5Vo{iNVV6VbJkyP$1vSFRjG#u6h%9{n7MQ00L`MkOBRX5Fmd*}<=59@Jg+M3zoj$rQk0$+6z7HZ@~ zWzLG2=8>6jvnjGal^r3JnN&rA>Wh}~E4C7YIrkR&dFndc0=wg#c!-tM$!=MA7hq4Z zPQo{-#a+I8h(4u=dxBz%f`lgl;bT31EALzWj{aC%BjX`}xx;&mz~_m=sK^_!92DJ1 zkAAVi=exxKz?i^FgX7d>lFu_#%{rRnA3JWWHHD$LZwBx$qe8;!`W%;SxG`CF8$NO} zdt++?G5F>55KUGuWj{`PnoViZE}^*Gy*Q{El%i#EbcSi$)W+elpm9VJc_JuQY@>$5 z!6cvvpLQyvqJk2#+rx1aDflwb(K9?QC+KLWN9Y*;aF4NSDLo6Se>W3v)eLt#3iqS% zLYuBQcBqI?HLILmz$zK}W2H{yTIFU7*fd5H$X+g3Ilrie(2~m9L}R^x@P4vqZrfzty-F9?x@MlH>9l{mRG1L`9@cQ-kaZdR^!sy2|OC zdF7?o^`GvymlHW%1sfip*OL9~OD7amXaAus$Zds)oH(I)w6AVljWbG{^dIdVh%Y&c zyvHjg%cpANi)5&j6tch4(5Y;(H=QmeR}OkB-r{EEFZnk>FUNgj$QLy;WI50GQ7Gd|0VKaYzw?xZs6tt+HVK!Gr={(M3Zg3@}Mh^mMC5p^?g{Wa(t_ zK;1ap$lR17R9HK`kYa61;KJ|FJ(P5ZI^X~wX}gQPqwLHU8-iQ^p*TVU8wK78tcF@k zD;WeL^n;IB`iYO)(kes%=d)qhva;_9m3UF@MBxwHl{oO(fi^p1XT#WPX%1};xnW!v zJN!j17L|f^ieB>Ja++t0XSQb)u5P6+5rTxrv8{yh{fFooQA;(tel^DoW{RQrcS*(f zJViA>fkYL{vg;T?@zqQ{z#`fs3zu}ogUJhY{n~gtl8~0#Qfx>s^mL3dEnHBCI=Wi3 zIuQe-umF0Bo_dPw60yQ=WmBqS4TBzz%)Esaj?2nfdMA2w)sfbWeS_zI@1E9u-9rHS zB8NAhg_iw@#VeHDD)BA?AD6(xVCtlJWyJW)ssZ+DPr&6ebKZ!-!jr9dR?aY=f|T6k zSRDOr-qSWvx?TFuYOj&;snKgv(m4`^qO?rD2j%zIv5#ZqZG`BLTLOg1&? z6lHSfK;@ME0ECiURgIHu>M1cv# z7VSTe&I4vD%$F$^?w0tEvwMzE@jL0ssDG=%K<9gspEm_GWUE>j;6+NaxdgUJb79dA zXckqW-ELsXj7zQ4OqkzUbqc=2eCM{yp8FD?qpHJN_7QrT_#)7*98NhTsTR`;S2W_5rDAICVSbs^J=0X@kJ zzDT`Sk$c1?Z)PTDZekQ_+RvhdRidAj$D8=O$~p_{*m$JA4BIK3RFP@dDs^KDHpGK9 zpIu3jycu=U!*u=fO+coSr*Xcc<}cUH(mvj9KaykJY#XWHg;DElIJOH6?GVb6p$^al zf8@3)?0S_r35F~ZymoPg~^oUzEwIQgQcOV%9Yqq2)hwdT5&$*L#GbiT~>+Jf@=VBZ>}o?vUu4n$)# zX=DT&kc{6y(JPm&qy-o0(V-vDlVSZ(?(F4XmbM>M{z2Bcq;7>m7qljMG+{Tl<$jaZ z1RDd{RL&|f4wyBuC9aSD9w6==s|_Cbd-a^w)TcpecoJ4tWGX$hY1nOb($l3ud8vW< zASA#Wk=X-G$U62cHHV^+0tW?^g`$lE6B0&wKGlgQjdFP%MnJm{Q-I=IG~A->Y4GWJ zaJqD8g8HHf@Iu=`go^a)*y>n`x-1sQH1AeDk#&_@m8tIU%*d+srb=7%Z`K5d1PcP1 zcMg*(g({C0*R15aMY^WC2h(b2l|Ger_M^c2T<$+;BM;FTOAm&Gtj}8<*MH~JH$E;p z{*qZjucB)&cT;;eF1jJQPAiTZ%cwQ!n8;eivyM(QG4yuOv2#W}8bd40(=K5kozaX> zi&y+nqR7?_87bPn@gpHCJt3ijfz~-qgCaFeLzs_ksT~&w6&D8wEHm`w<>rRPb;v_! zGvy!#erN%Kkzt3xD_?+vhC6&ChxiD##2jxd7h6fY)?Nzxn1<9;X$)HGAh4!Z$AJQq zj+*koctP~M#=GeaG@&M5%nsw;fHbvHW@Umd6}^%R0zw8y zo^1y5^$E_pwXrvoSr4CJ-+u-P<1739{XMW+)0UYI2F!gkeZLd$7in6(j&!g()x{W= z(HN$tkUJycIOx%u7n*3`cb&pZ@PsZcwq$};&GI0ADj`QdopdpuV zliM<-*|!kTi z6{J_Ap8o43DUc(?*{8KR>4aSS*J$-p7yz&J5qA~Pf9kS4w^v)w`M|%yvRPUG)Zn{r zK5(msSdE9@<;O>>N?R70RM9#-Ilbb>*)F${nr3@5+NAypf0$+Co<-QiXQ+&pF@9Ds z0sk>ipvqTn|)gV<@SJx_7S66(cKIjIawv6vt$N2+)OR$F< z$qGj3>)tsHTKD(_1gM)ooSv(+*E3=wWyCPqG5MEf=UH9Rc(^!#bm3bopC+-Dmggyl zBj1{_PgXPkE1aXApUK0shU!#&da;_51aari{ALOWCX_#-C4i z+mX6`ow3?iLg{RO9kE#Unr)Qp82eKui5^YaJIB~$1 z@ghbN9rc#D^JGULgt5jK|2Civ3gWy8k`H4(1!;yxJ1SWTftl51Eu{J(CY)HJNZbM| zv8VNoS-eiQPGq(so*Kd7prt+dfzzj}6m0M(A|^L@TA8%$9uJOLHZ=q#-hkz_yC(kg z36(~ZSAK&p6y{}{aTA{LCkTPuAk))kt*p1@5n-DgB7=;9#P28p?G`0(_tH{LzpKhB zw4jtw1h+yl3!(`>de0F>Oik$0fC z`K9D*G^uo5rKycI8&(o;pMFc4>ws=g?s%ki#3X z9^q?aThl6OYjU|$uWC%Bn3-SY?i4x5H}UXi#YWwT*^#IBM3Kp;_T9WXA_#!gC3UDy z0^@3F#TX^Waxhg8osA7_dk;}-lW#J7!o62t;^Nhgkms)C2XW)H35dChKzPA<*Z68Y zHm|d<2Kby5l5JLSZ#4UD{s?ec{8aopt!yJvUCt>|nCM!YK1=ayCO5zi?O5%l2TacP z!P(qWZarik%$!=bgN(pf%vtKxR<}8J@)1(mw!c#ECrxrDcu+xYE8lzy_2YW?ma*g= zMTj1dBgwr$TqKXb6 z;|Ha*j=dYtw6l93g7m%_JQbQ<6h8ihog>sa2B|HRgI(+pS0DYIU|Qcyo`B$2Du<+n zOgdpDOQD(reAvcX)YNa@k8U~ceMVv0L1Mg0S_4T{VmeA^OsxJTi~O@VK6Bh$w}2Qg z4K=YXkhPs<33(eJgu@ggUQHEg4|ndPu~Lo=V&?|EtJ}-yJ_0sao6(DNCr@`&Jch6T z_t_7Y>O!`Pf!l@7lR%73Y?>#so4fM3a9IPlvb%`2R{lJ;($oSjUl ziPK1@6MCYyEJ6cE<%>8JC^V?ltYXwH4`6wu^<==sR&n!O(m)l+JB1zf0&|(su~62b z*@#PZEzws#0H+AF_{JL+F`8U)?3m-6)*@O`{j`IH*ys@JSK+KB8} zsc)vA%$Ta_Xz>CRNSD$|{uG<4F+{%~#yxH-ZBLaUkewu(70D8FpmE4fGt8z%OVae& zw%a`D)(yObF?8BR52xqOX5DsT??4*f)flVDyEYxR%tNHmNl>el=&=+eR(rLmUto4) z*Y5D?7AS+hn(f&O9uG#6S)nP)p9lM6)K;1FL&Q`|L#7M{p4x z5~aPU`d{mx>9eZtcZBIKcdMW1Q>0KFxnSPK-Kv(U{$csF`jochWT6K@g)DTVOhER> zD&;o`7Dhicr`W+oVp`oFH=CyB0AMg`YMxOwiSTGH# zqL1Wc*x#flvo?U7amil(zYdY=9f=M+QRS)QLeQa4G4t%iq$9{SS5}_;+xvezl0~L} zwyl;6t0*CZn1}v6@ILUiAyQl*DIw6SH2ik=1NGVnR^-p%;gKD88C&*G-(F9l#kKPX z;8u8qMYb?pZ1p9F&M%f2Iy1?zHVZ159YRE*@@*Wu{2Z4gwk-|+v-@Fd)82QCGgrse zmL)_(j|(^pybt%3MUL^MAPu?8BPqjtyzGgh=QXAPKvgtA;w!2sI`n$>elIRA2KHgN zte6lT_3F-CwBs<*x{SvIkSU5WHN|{lE$2u2nhhL;SC#B__oH({_{dF4Y#C3v5aKxG z@Z=IhK$qs3{Sy+x7PNfQ#UKR?GFsrJc^7pY3|SdReZYmHI29 zM^81eA)mr;)i-_=4jeM61DaUc@-lg*lAaA`8r#OxkfqziQ_Ddz0TaD1*O-sEIeos} zbCA1RVw3&vIlG={en|*#jVF4%ml0-)J!G=TdM1xpvxvpe4CR-Q^Jp2r?3pHel{J~u z4`;9LgDkOEdEA-khtak@4*N;c;m3Da1{RqRQp5e+!J`b}*!G0&dwf?7iKQolDUyGN zD{JK6c_)91R)^nvp%da=iZidJoR06}#k?bJ(hVfHcFg{jch85hRsW@jaXnH(Ixx;DJNttFsx}t7S7%>0LggIOr*oZTH zM|9$ZzDs9tiE)j}<45pVzboh9L_P}jY!Vlpcd7QI*bew+a+K5SEbv;0 z0u#@hZX+bD!=S@7SZ`K8SW4E~uP864q%m{>$MhwtbpVg-N;T~YWauSmNiPLwOjX&aI1)I zpLDnL18@X=^MY%E$7G1mF#Y{%bVe$bKE3AcoW#q>UEY!j;Q)KDx0UDJuz`I1!|n-N z6u1R+4J<`N|(B0eb|*F{1xljS!{ab$0OAekn+ad`*Fx0v@t|ER31@ z^gIPSlye*EX)WFS4Ap!K>gg!j={dBs256^#K<$P&bb_7p5(Od0%&khO5xObluefWj zxNDQRYuY&58nL$iBCD6vQV-`AT%DF!{&V}NBUV*m=3u`AJK z(ts>d7jUR8h0Haa@iClMZXg%9r>-x53}olq`^GPv{Bqltzdrbr6Me4Tfb2SU z@5MZjy?NsxdC~N9E*%XBCixQCmVNB@5MFW=cX2GFPdSxM%k*9KqLehxE}ZB_Y)#*4 zo#j$GEgu>Xq}eAOXV`J0MNgUrr+^H{Okc{oJFXJ~WZh(Tw5}z0mEAJ1rd~Rv7T>o< zc%Q4S@vL&s1}FB#8NG9^AG>8=f)CIptn%@3+{1#cN5DoHN4!U{MT!LFlgT5Ihmb3v z>IfAq6fsjgOH?aVDN`It>WU@hNktFCLgL-uWsT9$g_nMk7+Vw6JGlVDr#K7GgvCVjEgh-{l_Oo6q(?dNnlZgVz{p61ZNeyKBKpiug(M**l+ewrVC-gz33VweWwLBE zr}9yJ{-pTisoL|Z?b55wmsd&v$TXW(Q z-{9spW)_$@;{$@ZU?qHmjj-@8#=nwMYg}ExapPzs9D54cJ?h|(?k3ADFn9i>hyxAk z1z1(63S1Rx)qKtfWzVY`Z;(o>)nw0Wd>MFEw0gEboB-dft!Q6&A#EZD4w0S>)!O;- z>OtRtIY(#;l^U&HuVD##y+D2k1Ecq4aq4yezs@jkPb-VES(aYc0p2toCQ-&(xukWm z{E`TWb+flecnfrhswCv4mb5OqsurOg21194z*)R)2{0s`Cc0M z$z8m^v761C$#hU{iGQeuSJu*&h8$Ne{sPX-5-|L)S@|F8@L%cl{|?LlH@*1}iu3=8 zj%fY^2mQ+){eYqW8+^p@16b(U=$ROp{txsK4FlVM{FeXpN6Z{-v@9$?la zfExz39|yxg&&Wi}%*4j>Kl`J9!ubF8NB`iN{{w&Y&skFZ-;jZSos0is2LC@{NI$;i zzj(}#Z{hgIVEsR=hU0&F;|FqS{g)!r!DnIkmk!dwXZyzo{fo`8vEsA+eA0i39rk|= z)W1B^KVR_AL6866Am?9_N#`GrqxD}3N9TW~Hthf1FaJ9w@q^j^Z6toEjpfik)aE@> zqcm#I?YBPzNSHs`Ps{{wPyA3>eo9ak_4{LzNfrua&7Rq*u2wAe{CEldionyY$a+Dj zF2<2PhK&q?)_qx&n1Y<!z_=?*D8*?$PkQ%TsPClnQ%fLzb5HwHt@fexY zrndgAa+2S~(KL@cW}!`!JSXE-=MO4gQ5xIH;L=&8#nx1Q%fQ&KzF1dz>IoWfUq0LadPVpbSNZP?!vBSy`PWqV zKSebEOhU!~8PWXH|Now+9REEY{$E7%gA4z0i~qaf!N~Yy?*2VME_)!ekw@P6v{iVv zdE8#MULL0(vAZ_8xV)x!rfi)q8@HmsfjWU4!}05*Ab>FC6+qx_fnYHg$a51=;L+m3 z+eDERjEG0cBZkWzmWjoq8<}pDc$y$a^}aoJ=T5%5Z%$q&m>+5?d8?{&PbzL6lxG6z z1;s(;37F58q@QT|&JPg=P1m?gCd(m}rxO=2H$?bF88PVG-fe?AYUvilF z}Wdf#$4%v9-|9=xHumAHHI#QSOBdT>gfGlXo7ZSCZkpG zi6L0L|4Gth#?TZ;8~Bk2>H7o$#Z7?PtOdC1$mN3$UI#Y9ry$btB!TvirmjsP^ zYHYy?qNXzj_eO)W?WDOb4=4CO>DD)naGDxlju7?y+o%=nI-R_D+LbwOjX^3rcV8ow zp7XJ1E|?@LEngg$_i|7hymr6n6%xgO98FFiKIkmW1YMe5RQH)_(f6^1H|}vfeog=j z126_NGahn2diqVkcws)W+CMOq5b=I2UPg!u5fEoQ^)Kqi`ma;LU;J#2K%UHxglPG2 z9)Mr|yZHe3fM5xD^u-3~pbvkA5upG@nWGEo^Rmfr0V<-Wvop7aUlV8#j%0ge?a_#eu1?YYB}<;Q-anG<5dvO~s9_{DYt^zkPx zsE_9bjsoUZ?pv4x?VXtu?jbW%@cGZq+f$wcWrvai%Zil&om%)7-v^Kb-Yz`^y)gJGX3oKhcTY7>IIdT` zFWHQ4k8%#E9pm}nCx~X{4yg(CO5_ZTL22?2M!d_m;Jw;;%Iiw$_AV1JVtu1M6ND$|t&dyeqaj?-Jh!YZLf+h4~F) z1J(_!1J{nT9sif76KNa59jz1cw(Qijzl)_C+-9aP%r##N;6|hkXs2xd>vYT?F5l*D zw*Y+M${)_+mFY3*v+LBr8GKI`_G3QhZMRTtUMGGx#24yq8}nMg4VX9572sOr1&9~S z9sa541K_3L0}yZZ7V=U58|RVO6XKTQk*Pn=>Xq3O-Jb6p*c*%|@h_~W>d?tNZU4!F zZ9f{ot|(oh7@(e@7oeVK9AIzZKApVZ_v)$2Bm17!DP+H%r@i)yQrzg}cz&pnt z*6G=2)~QT0-o0Ic8U9}@*j>>%put6eT>&}(To7;IFVr50S6WZVTenk_{+D^GH{jEk zQ#AjZA~it1`CE8T*ju<$wYSv;yoC#YJWF?U9Dq+GPvBdkN7HY$)45ZcpRTV1Ytkz=m&h%>Yroz1nSB1gY}8<1%Fk0#NFGSzj>%D>??X9@B{Gyc&lUP zj{F9Ag?kk1uUiOv)64g>e1+wNd8K(r+GBV`*u#H!`bJ3>!UH~DAoKs*a`vC?!}{Ik zKVM$hc)tA=%=#Yjvw8ogdA$FHvw7$Gi?`wYTE9vVfm7!bG%cfVhagT3bSCx|=VbIS zwiY5jOEZpVhz+stzOVI3%rAFvE31{y*0oR-EO6BhWF7v?YakS9D}2-dfto8SM&HAv zUPVX$VXTnP0D4>vr_0h;W#6h2%)eys(0Ib!3M||6EZ@aWeYwgNDjkex1>LD)R%M(~` z%nv>n8F!dFXZK7?Nhq`=p?@+ee9R^pmu5>97{boY}|2PSTD-{C)a*$ z9)id!;EJLM-i5s{uc1D1Re%k{>9+18?(>1BDRH!qhPx`;TGme_aj5~xdc@|`p&RqY zxcaSY-{yQkuvQ@KR>Ykzq7i(Z?x9NGSbD&v%wMDf%Xy#U5v^SdoHs@z*=kBo7+q8c zbTn{eenTzL^%_LR1C=KZ6nn&IZ+33)WLnJr#7iJFwy@3tk{9l8cyq$k+WCOg zL);*`Iy8%2SQ{U(^_39&&#Dxu_RsDC0=~j4^j;Y+&Lo|5_pom#@Zd&yP%F29?sa+r zz1_fH%K>D2yYYAoUF%d2RRz5m^+#6uyf6N>ejysx{ic`02--mxKgARezh2>pg^d|g zIKtK^bd&Tl`cOsB*qf)d+Z_Sb*Qxpq<#XPkG5dYn8G+SW_i4Rpc7pTB>X^*v%^0+t zD{Z5$1-6?yjjCgOSYJf1;hQ;o5Z}9B=6LBAkXx12UbT{yYIEp&iLw`&ZosE*thRDF7jQ>VjE_`+`LSDsG{0zI?`+kp~Y$`)tV%BXC*=XH*jC>G>IoO$5E@7Kqcg7ph z1AGSz!8ZBTEq%RV-GKNr=11!6h;Otmp>O>%#P0AkAs<;AB3-Rfri zJ>dR?EPK#>0miBGrI6pE4B*r^qi4=Ggw2M)&KO)G+Jt)iQP8RFJxKKDPo-CFxRxy7 zq6@ZD&+fR0y&ilwD}Cw@n9;05JRMVe5R1cZV~$l2o@O|?**;;(2S31?zrejfU$Jjs z#(q$_;Y|GiyurGDSY{2yQ)fW*xVWPR`lx-u3KndqdvwkY^Z9l2yrfa37rzAZ%)s;} zVhqz5(hiG^*`3S8nzoY4S-`Noq1Pxa#cIsS#DUZiWQzU<`bHSdN7^~u0J*IP=ilV!@6wHZ6UyV%??w^i`VOY$0IUHvSLEsny|(@(U-sfp;T>_W*)!?DgbUik zhBfLkZ{jY9b3Pac(6s0-|h5Vqg~a(cRLzbzdPOXV&ea~YPNf4?>C4a^be z0o7%|+#IN!14i^gzXja_|Fepp04*oj(y_2t#SPI~9n~YIvfR32Kr8 z@@ICInP#d>lxfpIPy7|S0IjC1q*^owv`${GbzPOFQ4@n?k9P}J5<{5B=+Q?iu3HN7M!&yCadFjumI51uv0|-R)kz86Xez3LcGA>WCYIrj%hyZP$s%(aTIBx^l^)FI}YK4^sXB6l10_F$isvt z{0?&u;qg5R%2Z(WiS;p0K~>cC>Fa{`%JBU>KDt;sxzO9{&uz0(zDFe6e3zWkUNj`1E zk7dTzZ*iLux?kDLF;8^zgdsY+Mb5hL_4v-qN-&uaqel=A;IY?~^fFC(y^naH7H(RR zjg7{_&YOIrl-%3MNJ;o9eyUV%RHa%glSX$#<~Gh_2!d$Ny98>(Wu>VEmdS@%g5&Md z7daasxVtf-1pNnsldK-P0>eZTFGC{k5|8tMGY40L%lYW_50gp!5l{H6Uf28M#Nl6% zg)8&C-KDVYzsI**gLe*PlZT{od6*Wv>`iN}hq7E1%IrJ#pXv;&C+Hk0knx7GAm~@* z5PvkryhUU4`IC$n7xwEWDSw3}jf4|{JVuN-$g(VJ?XF0maURDST;n*D{_l#|`MW$ccIAsR|& zPAbc?&1m%*@g3-y^Q+wzW*fpD@^^4EVA^&Ye6Bvzkjh~(_K|Vd`HXl)+VuK0aF>55 za1vGP`humK_ELU>_uU7Y3zviF$?>W9S|Tp>ShN=QcmMh7g>C&Wo-NKir!xBlR$k2u z@8>W~!5^v~xw^ZoF5c=Av4x@`SD*W<&;hGqS09>etNGb7JV7REo$`Ks+?X|?TPN(@ zxlA4-1^KlfTh7peu%g4Ls&BW`^$#LM$RMDPV@T8EMwHls{G3 zw~@f)H~CdaYC{PUlZ+-dtZ_tfnr1ER@>rnFT8ewVu*&FhTB3|Q zQng~Lt=l7q2hGxm*{Bu{;cA4BNag!5@KRS6_PcM{63Igi#B9eMPQ^!4DRUS;s*rjm zS|x2JfhUF~>L(^86lY!r@?<6XNcb)in&;~_e1y;O8QAAzd2DJ5uWe|49_X_@R@W?; zzAzg?Z9k7*k3OwHiTFjlau@4np84uFu&@sD(IJA@xA*yPlcBmdl!Vv;VhC)vV`=hD zI?+sMZ87yKE< zmEcj?9MAD&^_msEY2aIM5=9BR_?&q>{VS9|$0+cxZM}P&=$aT>+(l0APn3=D21oMpmB4Bavl1j&|3M#ycl{oE+(QScQLs?HmPhdNI zZF~y{ETnK~p!Dt)5XRSa5LM*YvSfJBXCY&#FB^@xX>pq)&< z=6377FM4}A+U%~@?e`-?;0|NI&F(Zlv<@*kiJ=0_Dn3GS;wo>2UHWStFvN>X8%xVf zoo0M;-Lh}odG9}mjMOc(k2~89ft`Yqw)MM1I!4@!E_jc5iO?KcyOuI*GgDx!jH5*r zi#TU&*v@R3wrafA>W3yW84k#@X6nv`yonL-M-3;BDl7St!;ozmN9!61XfYvEMvbQl znCt{-7euseN6s9XaCZ)OZ0c@RQ<4v$n%1=>yFFvkUM09KfY*j^j`U9W_BaCc29bI@ zP0Q|^1sNr?7$q_as1;Vovy!=xdmKAXuN~}MnQZ$sgRJ896R3xOW5&EzhVfKp5YlIF z(~QhsUbh6uKGDwj+gLWSnSu$gfoVo!uCBrAy_WHd`GpP-7&0mw3%8alOWLt{%hRdkl7K#9A*N<^8STWVqaX zSe$X_TOP&)oq`sps|)zO4O?s(vU^sa+RU)Dfi%^K!zhtBqnOr0Iy3QDLORSL(IVHO z<4&^3Mdj=`Qp_a|Q*Wuq{8RiT;f~yE$-G%qa5fz~GFZDo-OBh@;KZ8l8Mh2cW?Nds&BNwz3O*-`@M>OXpEf*^^*xbA6^R4Q)b!EfyG;`iI&!J9# z`FVkRju`Et7)#E|74XgI1o()N&xCj$RA^yAcG4_D0xjv*O^5-{KKOVb;(1HP=OO)z ztN6`d7!D;0EYIjKST0Ne;R|RHzk>q!$-T%Uy$U~yiWw_K&4gD)Kl1xwwSGYX{I2bH zhbgB3k`Hf1we&r0&wgEHbDLnu%_Ocd89yQGrS}Lp21Q~PJ}6G3K8mXe;_kLU9JPe* zwg9qGyqF!Jy0z>eE7_#Bi@gbF+UjEAzDBL zvI%$+&ilbgu^$t%%U?Q8uZbxXEG;}EFjTOi2+bRdP1EX6C|B z%ZHMdN(?4dqz$Yg>V73nhCX-JhI%bbh0B0k+(I=IwiEuWAmVA`b+S0?oi5I^5je>W z6@U@0lY|{19~uUtTm}l+7qUyDpSL50lonDXN26#dSVEB)I+7w*#!P&@RV^iuBS!=L zp@sy@9?%C^UM5KX6_QgRkG|h2AD>WNz5N&vk^Tv* z+zK;buUaJ!jMD&1>()v@onlOR%7DeA>QEkdS;sCfKz7qEWfP5(?+2$nqSNq8Kl7={oRjxvoxLJ)a}qvnBdKCAl!$)s3!Xi1b{Ao>zlk zPFaWA2&*2ut#wYv&5(`>+#ZgC!Y<+iB*{zJ=uKaWfbX@%?N(~VQPi#WcV@1-A)&oI zfyt}dbX>k#(N4$MPo}p3yjR7!4#z6*u)qRAx?`9o&HY+D)&$zO`7wBI;stc0CK+$U^I{vKM!q$MI{~X z*_Ey&mp)KSq7*bP$g-a#`&GO2JvQh1-&OLWv&JIvsu}q(?b;r@$)4@af^Wb>J z2mItqMPv~wWTAXqs;Fn76_HiZYSGN#@%Zs6ZZnzXf{611qs}C zlD9{RsIvzGEUn0`T*jV^KGR4K^r6}jwEbhdY{y{Na*5A1P1it&p$pR!wA-K_9=qxU zHhVgNd%)mDeI0L*Yo~il=o;eDVdr69RlnNB_9(k2)ngI4tQm#wMq^i><^B7hB9mPj zpz}fq5JA{Da8iFXFQQpQT)1A!)e!t%N^DVAGEil|80iuT3@Qw)6vc;A(w|HTXe)5Y zkTBVq6c&>8?7{0R7>W8Bq*)0+K*w|3gMEB`dIh8v1QOpBeH-#<6_8vK+FDaA)uIRT z6aC3Gi2ZWG=~=Xu&rg_T9V=pW$2^qoY|gKHYQ_9|&JPSyN-9+pI2pHrnXu$FBQ(qr zUz0u7nozDVLHRc+Au4s4O!07M@2oBr5Yzph!s~Gj-HGk=_U*mgE$i0pYqdm`Y~Rz? zbH&N@`sghE3F^tt^q<^0oR4=8>j9M4(L26Anit*cT%4&&mCFyJOD3AqZwplPHJUl=h#ZRu8dC0cOG%W^{W zBW%|}Cr^gRqMJGAI+tC*W>+IH?o@w&5^4L5!0Eya=M1yVh_^)Hd*WW1gUzLgp zDhdxO^7V>eLCA^uF35epbV;HJkQ%`>yyH=XagT|L#sLVJ<;)k1X25u$1j;?a1cj5XGQqk7}$L z)vrzTUI&Fk@+ zVdckoSUXhc;ckq6RngFYGmU?N@Ho$lJaw~s^<-w0496VxY)xD`+G+S<)G0X*|LK*> z2ljOk6FjUw4G#&~uk3sCf(IQ&yrUOLD2)7A4!#&mrDR0kC;?_@{uH5$edp@I=7nJ= zoNOsx1xH*tYP-io4^Ru?GspH(H#5erL zB1o{Q?!?XLpzJuRJvUzZsIL@ok=s=81S6M-lh@@tlUV+>Dc4s7%;~mxMB@%=lQ8*7 z@N8?I05x6i<_W47?H*I1p3$w@yW*MCt@K@zon}ECk1sk*h>(GsPxNCXxIe1t(y*!D z+J`46X{*qqgp(XqoIRucSl?5mUDaPSC1P^RY6YZ!YhN^qi$IJVuukF`*Np}3=N^MP z07w5#U_s0!_(MXdqo`4#>Z!<4-E#@ zoX_9UFF9OD0ydB?Oie^<2q{v(= zJ|D?SltOKP1>{g<@C!YS#b{71k?fDeOz%71jCQw;AY(EwXdjL>wp~**jz^W<@t>2A zWs1vJ;bx2Vz0aO0vRU6(d4+OJgP*E0?G)K5a~`^bt}gJBBRj&xA9M{kvt(4vJbg4+dBRd+=65yo^dfHEVv@LL_k?g^uu+aS;cP<$$cez2GdVIb zYE>_ywGUtIW=&)I6&dPs|45p|j)X2yGG|36H}(yME4gFUHLhEp)`@SncQj+ZFX})p zPx1gt#zPVFXt^`+AKcT@9M57ee_v=|pey6*hTA94{0&u1&EgE(%!gcLnM+k!X=a{6 z1Gq|Q+EWSKzf|C5)>0Sd^*X=A2s+iLo@1ib^76b^dAe;s@%cJMz(yu{n2ZkW8yS|e z&)(0+Grrd{=BGmK*O55XYX5d;5|9AfSooQv%Mu&LzCLxZdS9eg`fraZj^^NvyPRTo zsKEz)R${a;tj!VT*;;d<+zuUxkuw2aQXsjA;B+3f-5l$7U_ahef9__yWSq#OSQ5-s zMj?%e>Ihp`t7?gw)YbMR?5a*RD=M*CX=`l|k9Md~bl^_b+1&MO93W@LSo`PBRhbj2QL-tXR3-eKRl9=RUrF8r$4(jNhR z;&L4}o}yP1labqv&bp_foo*%kthVFw;f@ot}s?{mu5qMBHDWjz}odmj?J}s79{~5tDs+`pWjOuGBn`UsT_H*1~n^H@D`zK zRoBww7rj%QiB@4_1~n-fKLydRSO}(APj3#jF))rrA7m$GV|X$k2BR^sjs|2t%^XSw z00gE?XPIf#@ubk**o@hW@4L?Kbg?iZgINRP#HF6ZT~0R(2mX@Ul;-w~S8VKg~} zGFw(oVt~_KZpp`6^;}BaH~H3gly=%YlhV`j9$}4JK5c#l-aij1>MX@lV=XJ}b$%MH zIg!zP-E%RcE2o29@1d2TsIbJ-TlDY{y9sZs>Bw3xPrr@D;kY*4V)t~^@d?2O;842{ za{;Um#7!PdQW@AO5W`&%s$VsWlFIe{?7)mqx5_y?PMlP1X|8H6bM~^(JNs7bU9uDjl)FdJ%b2N+Y*$nsp>^nU=QkG7 zn;6#Rvu+Prryi1vZR37r*A2K7WbGgD^)=D+n+#gS(sUF=mH{^rBGM&Y5MQ(Z=wnfhm|e4aS#>&Lc|L zAsF{eJ<%tShX8Ll--sV^w?f>MM8*S*Mee?~MTbF$gN1w5A;Fl?tnYohlijPsTgdGN zB-S7;xM8(GCt`X&@GCqi=OsuV;kmts&kmi<+B2Hn?_n`67t(>Bq6DQl3RhM`n&}Jr zQ&8x3V?OpFer5;I^^k({P>K31dfaiPUQ)@IfVdBukK@)e_r2~zE|_Qj2$0CyPK*L6 zDUe}lmd)<@YSs&;&7EFYUM(JUoI`~z%;h?QN_hGmPt7yXl%=4{EG14>O~lcZG42Kv zNMXk{yzXB?SFkfkFxg{7Dx-~MF%@`fEKhYiQEG;NqvZ7Z9zxGzib!WI9^NcTw;HbN zW+XwMwn+nOn}ceD1DL86|7cOaXgq7+I$c~od-6a<85|`12J3mDrT7fgM)wx*d*16} zhh#M4Emd2|nDInnM`u#bGc#d6JK9%;I1{;r_OFSgcTcl`H4i~Wyd{=?_rHB-0;MUM zu$5=btdupctDO#jIh(Mai;o7e{&}KQ*m+tar0L4P6wwaQfLVTT za8KU97baW}7JEp~1x@+5{de;4Bz3I2pe+1sF118TDTG;w0&9k#395fEP39nlfCS36 zz)*K+0N19S?E?s zQJV8*uHVL|*hyUWt~I?{tU8~o!C=<7@nUXb1=9N6Zg1;2M$Bm;l5OVi&acL@R^J9n zF6IBowFmPQLl-p zBa}_7BiQ5oKlv9o)2pb5m}qNKVN_fp8DrEDHTo;Vv}U!*kx%|Hen!eb(H?0}lEp9UN-L@;~QeE=G%E1<9!CK0$j2lf8SON8` zM82h~X;_J#MWoT9l2L(xmJJminwhQXiYIfZfFXdxY*N+Tqc$Ksxkk*F|Lkyu8n5PX%*ggAoSWg2#ii^h2Ak8nt3Uzg)i%ny0 zWYAxPV;=T>*d#Q0ZrBO_Ga9d&G-oZsV{Y_3^!Jkoz-zq@ojCRrn-)wzmk&?!IPYOz zTBX|b-XF`>o+fnMbcxrkN^Oz?_GQLh==*|pDujpT-M!m5IS4X?TknTGhg8n6r0|xn zm@X-|weCzls}w|yVhU2NjxvdmGth&d3!MuJ6mp>*%eh-25*RRI+&HURq*-oE15|l*;YQ&{(;n` zyki%lAswnH`9q}K4#96e72Q7wVF7}%fPr!*tFTF7D3IJAacQQ$oH4CBSR;-KtwABx zXvtiWym%r}-=<<+wz@OiuX7M3IG{DI!u+Blo$PV>g zFX+*Yz#F!l&|)D)Ch`lU`(Wg7Sn|vqisbu&bhM?9R#r=8i&2O6pih*og2y0)Hu4Oa&f03hB|r%<)+|A>UWcaE{T$W&ULNs7^CquFSGFIL^a14X58qN=4VvCMVcDYteo z>k3dVQOWjkYO1)1nv9_5bvA!BPF7x>*tnNG4Sr{(QTH0X+)mp4wM??KlEvZrZ3f+S zcDfl5Un`KM^QDh>aIbgG$YQyOm*LQ&(Hay_%lR?TM169cm@QkMk4~9JZ75BBa>-RA zrzHVEB&OZ?oU~ifs!mBea+FR$t6|K6o>usEq~p@6jhHrRf&sp#c$8CiXtYqiY{_s= z0?eAsfn(|Ho+V_1m*Y}CWQlVw{>sWKP|yg4uL6``3~1;85U&|VxzSk1RlnDdFm~~a zkh4DMxAVt06t&8uO1!iPoK3`v<~w26zN#ja+oEE7LF!;mb91+#lnNDu4=5$fn+XYp z4Vv=h6!L8GbJ?$A^iC@`A0<^O0kURf%90#Q2$3cVJx@b}wZePg#Ig~p5yAy9T)5&s zw~G7ivJ!fu3Yz$U0T}bZ)+~e?XZ%Ic6!K+hr7Tt?OZ&{tYG!#lfWari&wCYsONb#@-!!=CdSOKCQ}B_FZsfaoJ72Ue}``E#BO-VqZ>oIa8TMPgfj^*m}}< zaZU&?f~Gft)w#3u$$%&c>kkQ#pbIz3ZtgWRi==DuIG`k1=4e6LWVGuPci|cbi7}?e zcG^(90es+^;|uHU);g|aVH_w1PVr5f(O?^30&7~gi^`=-*0j~J?dlquDPXIFJ2Vt3nhwxF zg#_-`qZk2^W7LpNoc{78cC*lq3_?VjmrFZM)>hO`H0hwGRT*a-;uX?2-hoqd39gZC zmq!k65)vTWlBy3D5>Ti|tgcIz2W7-$zwPyhx`fKX0JF^ZJakyUV)T`N6Cu%1ilE}b z?XyZo=!4dEox4^fVtqc$>8h3*8DnVIW3TQE(h(GgN|=wdSEr2~j(y6FddM`1ZPo5bLheigSEC^E%8X7nh6c&elhWjbb&Dh{`T^{Gz)$*pX3vxG( zaIA@e%wY>^oR1>V(M|~q{j_3zF3D3F5> z;lNULPSVHQ!w&j*#Ok@lh~R@y=66oMH9iZJxfXV@sBk`^Yo!&_Rr_2lD5`^avU&oN z$SiUiyUd}zwjoOl(-=tt=bSA@?U6bWWqmzkQ^a{vMZO&Kdd{q=j7U#m1!a)oQ^qYR zk|^nduyhs4hpSg!&cxd0W!B}#RoG>9POe_c%x`DAPC~22rO3>Yq(@70K(PVGC(A`9 zvbMGBn`E=kwyC%(n1_1~Ws|+DF`{7|2~Xi};olAwAdHnvtlYFM;|v6}9L5?l`|8?~Pf0;>6P8T1aZ)q!YEwrD4i!SF zZ|a@2lSVr2C7!vo+;iqjcjZA=7PJx^IHR&C=#io^vT$RK`mhmN40GgGKm|*qrdCOVC8=18pgVbwAHf+lkqoJXIrL-G z&Yu+Qam3IUFqG9OUnvUPg`W;ls4@yGks~fYs6$T{35FB$Ha*Cb?N2*6tyH^yj}FTk zlAV!Zl4d-+HNqMrvQ2!#mK81jR9%IpRU->e<|<}+v|U&peLCsefgLJJ9n81*SuFP8 zZqb1HAXuIZtdK{I92+@siT{01RC;r)&7$W2ZeJTX_w0u&swLroCimha=dYJx|2BM9 zRj9+}I@5`t1H@wovz8+%o{`z=5qc6>(Y!YeB3YQB$&R{W4d8Thz9^c@YT~)t46Egs zmYWx{kRk(Wx{pPRfnsAdg>mwZqzrvjsdNi#wbU+!nZ`70d&t~m&x^p)B(LxJl#d3r zpiug9S5ztr9JZ*5ZLMvihS}7AkBI%Cb&qvy!*_UK8Ss~(ZvYP@T&F(JL4~*q9VI1a za4`@UJaD$17+GBpF+CTX2?%;gT`#ziHw{KxKH-l!F(HI%ksa>T=_@~9Zo>ya4*V2f zrR?3xLCT)LlV}Whr?#vlNDlr-Ad*;i9altBq97T(AQ?%pY)k7e0Qc;q^Ux$kAu^K? z*-5CJWRytR%VK5u_}@Mji4rgV8vt<9Xdd~ggEGHGc++X``2qb?C;Ny3G2xKq@B^V@zJ1BGGC3nfNZp0c zKnd3z2d$SStmzf?gAxc>$>mwmF${x%O#ZVCzO3W3(@9m3ZT2LGdW03ffrGs1nLKyQ zx*X1Rk5dGSms;`^>fFg;WL3_TL>_cF9-MX@V%|({JNJr$A@#1ie}K{~EORV+z? zLd0;e`lWlo9L)z7zA`U=B;u7#ula`VWH##$dnI-Y*g;iv7NjT2%1~+ugt_>3z$^Vu zTnH(ak#c4GHT7FLCXIak>mD!zUn9kAl6k7~9)~djI*NY@nADnb6uBAMR_3Qztkud< zk=4}7wZt;(qvDjtX}92G#rQ_t@Ae%4N@w{gf74%L`{n8QkQCUENV8}591vq9zyf~r zXvU|S3CP_hRax>>mSI2+*zulx?ej$%3fS2c=c;dWq86hl{aBAbBi|axgO1 zKeEH(`_^WX_wDJ%M|JDMj-R>U?wErAnj=X}j5w?@q@Yy+_VrRJ@T-bs5X!7f$q&&{ z0k0G{Nzq(ZSyn2kYDBY$7^%&4DA8bX%XrCxOV?Quj$s8Oi3*Cn!ZuzlLW>}6@C=^gU$y9{{M zJxOx-AV*s%jB%DwH#A?EbbyWNJU^F%*epw=c$vS!xNe{IiwMZ|)@mP4|Lx3um`F8KZ znY3zzk{VeUg9egCTo4bj)jMsfwU-51H}Gh zqBfxcr3Aq`VMv3Dy!v<<%pG#9`k{gLWZK``WGM}}O`~&(M{=K(4=N6M!^2Etx%Kl% zSd_Lst@TaHYa=(+$0j+oZbbu;v7zx4P=#vhNW(u721miDTJN;(+ImdF?9Cw%tp)nU zGFjnOL?5BcuF*GHY#vWsXf8U5y*#AvWU#olHue)3c81>T;iJk{pVLmtexJ`$xV^l6 zy|umzZC7R><6B}8Tl8=C-qyA21vpw+Am}+pxU8=uNOq*931GTmC<9! zs}E^p>v)xXWbVTfg{dvc9>t`__bs6ebaO1mABItQ8Z{<%ysWOyncHD;xF*Lsjcu6f zyvhm{q2Ds_gJP*6v`*nXHbGv!NQ6z)6~t9ecs@}pl}K4HMx-j1p;In9$hJL<3`b4u zM&?ESMSfFcP*}lVNvUDmrryQw+kI5(*liYLZ7^Laq;ts-%Not#ST4?t=+PA13=d{7 z!Ac*syqRBNZmIg!Jd+!Mvp&6xQg^h88vp6bnLS96^%J3pL#u4G%lf!+<;qfa_hPqT zL#b)AbThfjcpjY8w@K|MHij-ihc&7|$zMuD(fSfZHET?2WNMUZv})vP(q7S3Pc9t< z4bh&~(`00B01!182TOjnJQbI<0Z8{B0^WwgLBm}Z^T)CX9Rx-@RWWOp**!=E+=3(* zT#j;%i2V>tQ#@2?r^loS-uYGWKbm_Bpg5PNZ8$(e0we@?S=@DzMS{D#OK^AB;2tEn z6I_D?_ux)&2@>3b1P}TxoO7bjbN=_O`m4Tg3#RUSw7aKAc6#<|=vw|`^V+1z6xt6X zaW?y%L7|CWoSL6n^Srz@bJv;{I{X ze9~EDs6(03QrT}!GrAu;qRTlezKjlLIuIjo%E1Cei$G0C9Bnjx4^ zI>C=Ijl&i42vcEEa_cmu@137NECc|%<1a?ohL`2I*}M5Hk#yT>@wH}G!#?Yub?oGZ zeSt~N+{?!hUtEx7D>k?(*+OL1=J2#{HFR=IG_oDmU~S>TJBS6JXvYMr*Y`QB*bB@t4aE8bt^GJNE=k)aL z%_W~4&H_qWqtmQuvdu&U9_Cx@ffw{{2V1>~AI;BhX4-Yt54hJ%hD)=n>uFx8D0j|< z>YhW_%bB;-L%BDedxIDfpw=0WFy6l#xmx*r{oy8K5AMe9MexW;nk+12C=L=8yFLB^ zXjl&m@68&Y1hGW>C1ZcN(4vNKuQ6Xa2GfJU+6qE4IJYxl0Zep z&?ukU*{&iyQtK_7TO%svbQs;PP@rn=ki`lL6vN7|VaCW~Xc4dP8mRw5>ki>i1WlJZ zhT?cmwnQYTy%@(mu;;TtM`rY;oCupXFSKgEisO9{FMIT-Rm7;CAa<^mfm&c1i&1jJ zAh4IM_eC!-Hq|s8NvmTBIK(hmLuXHSJODEs9T!^kCBByKR0BZ^vyQx~U>R)=a zb7AsrYLjY3IX7$4sy{j<3TUI0+B0jfQQ5r(5$0jM#%B`35nlVs#?NT8tt} z&cC)viVl-A{K@#hQXFTm2%lKt^|!SKi>DARr;sO{FtNfhhllVK%Q4wOP?!j0i1yVe z0lF&P7#IU7n&^*~BD-{#*DGBRYC6 zlv^hl&otQhBMW>gVh`J5WIgzGOv#aGB%Zl=+?e}|krgea_6)&lEPXwfM;FTWOj#%z zsyvwv+J#9GLe$4l8+@sv*MprP=4-miNDr-DpP4Q(gX^(=yzj|5UUcpOko4ToSY+Lt z@UfYH#5)RU>z|>)fHE~b5670AXLIe>Hk_l1m9 zc+;BHv<5`F!*HscC@V0IHhhR?>WzX%yohxb`tytY)cyx#*AIxBg6DF=#r-W~gSg3A z5HFi_=Jf0GZMBj0YS?qKD}Bt%Z)&$uuXsc8QWTm*UZ9o=5051TcQ}33hLm4r)2?Po zL|6ggO&N!ML@SMEql7fWZLY?jdZ8suISN9C6_1nXp;S$J7}F&QX*D9=NVgjA{?(o@ zWQuu0+#$j)p}n}n#oNi%fP%EQDzR8W9kH4aH}CD22BIUGfRxxe(j)zVUcYMC=gco= zI#MR=CC9iQu0PdjvKB^0-bP4D@%b1-D?|hEP;El$84EOVH+8kRczdjFqKWm1h9rZJ z+HvWjR>+i&qwgBq7Cw?)l6{?hmVJ8mWx?8uepxs>=4MoG@5DvOR~(-R*=W!TM63EO zAknD#gp5Z;RVqX<3q+@4M8yd{_?*mrO(}iHLTkrGH;h?R^TmpQMkc5Gp?dYB81L#4 zt(Sx^huGNNd~KYS4ed55aD+@MAepn!M$0)aSTT@diNJ0NbQH!PYHe}R?j&WqVY#`* zo+u&M)}x>+2q23*^?B0dSHR;s>OZb3C*ofgx5tRSqA|8v`7Eq%b`jZ2-B>W&zjDcK z6dx6YXmfUJFW@E3dYy>(I!OD?)@gNRqjXbuC~!Umy@JQa74h{@!HrsuCIQ?>mt4Dc zILf`w=c3OAPen`BxXLjYo(EW|zDbHyLXEnw~yB1$^{qIrP=XR{2*x@KK#k zsY<9lPjB>8$QkQiv~S^#9L_zNnG+=* z9^E|h{)UPTdF>q!HHjn~{2qe&oI@sX zO=C~vM&pPk@$#d`jgvcCZ4rqcgHdrxVmv5*n5ItPB7WB%iC!simD(;xY&nEEdh6ga z#j|DDyxiG)NNp&W8>LdlCB*QGtEe-~S((yznJH9t68~0V1_y09JwQ|Hb1e0SaBiYv zU}1ByZslfFr|O#$$ge0GnCLbqdO{~JrK`$Oi3@NKV>Sj7BPF#l( z1{+_Xbf|hZM_1tb$%5>8@lkWz+7P6(nrxby`6#G?HE4r$l<%;f7P!~1c~*etqwa=&i(WcQ*_e)2i| z*2d1@h$@;XwaEyt=|;eprb!Hcb$XB{<^Oq_>rhVtHe0J8XTz*qWA{q_vpb$UPc z>Cq9>-{EiICu*LrjYRRrY)v{RO!{H;!`lk(jZpMYE7rLkBp$faxw9sRL1$lgrtfo+ z#f9AJg{L9GN>LpOHAMybjhS6;Jx-u`f(j_*Zyf5elhJqJ932zCS!=%*U+>sRl)N?Z zaBh~tkM^DvF1>w~$AuRCl{-ITso`StE!Rc#PCLKHXDFl1NN|?$%U3G+y!805wtF2u za+wn_d=TP5v(!P6Fzng-@XXuCQ6a+l#q*P~9fzI_Aiv@X&hU1W?C@rw9Z}~kuH=}NwxmZRH_qW@hO>~Dzkd_!D4Wc2JM5um}=7!E@Z4Gz| z4UY*bg5YvZ0|NS6N+XsY!`s3)ST~|dSw!2SuSnQjX#(${9bk|>o<$S+tPuTuL+g2^+?PlaJ0 zF<*-EcT#z&!i0H@rVmVh1uj_hmH+VxMEZ_1RmvRcY~FM&{KX=~bfwe#%M{uk7)P=% zPT(J@KB-4wA0ga~%5Z{Hl2ME1<$(`fdyMA-h9bcS89#aS;`SX^XP3k1Z9?liR9xQp z$F`Zc3s7~HSs&vwA06`{n0Pd1qQ*?>qeP8e@JDcJb>p)ehlw=rn=J(A=&rcFv}3Ev z6hAx%7&*Dz@uyWaZ(0M16*-7d7V6kAVO~KLL4MUr6rs$2WHG>PwSO78*)-Uv+MI{dj;*)W>oi%@#WhK;^nvd>ORQgokQ>+Z;9Ko zCc4p|`vEo%AAy@%Id2JRK+C9pckI6Rf)CO!(itwY772;3p3g^PMu=2MgtL)Y07EZ{ zXL)uy7`4UJx^)jE`AmxJz2q3N#Msum8J1JhPhC6qQ_IH5Jp>B|xnmxc(G2g$!czw) zKX!3^l0^O_nf%4PqWm(I$h)9ue#Vkx%T<*+Fwdo3%os`do=2vHMA(2XvA%%>^ zV|6+(r>IyBP+@qZPJoflnzkdqUPM zdFtSjl7$wr)ncD@<;)Ie3N5NbDv+>k)QjwDi#2p?VZ>Sd#yON1W;Gncux;v6bv+vR zUsKkyJ7tk?z`XCbtWx(L?65rjWcJ0;Ot2u;+0@jow(=c4Gn-$I#Zqe$1>GpPWSOET zQ?RtTBriI$7Ka`=tvof={ui{DeFIAZM_mbEjI{9Lyu)6g?p&f3Gu|B4GQDg>$B`1Wv{apo>K-v$r61~eWn zK3gc|7T;T0i(G`8eX=Q>%GFVax_b;*j5<+=Of}TpGrBBIRa(9@fZ^Kz)^Z%|sEG>P zVml;=JK_3r_zhbj8OHK?05|zJD)*2z`Cczo-r(#Nx0vKw#zw#71>3mz^7Q(YH43&M zDzG!+czdI7oSXtl6^&XF=LF7IG!=mvdET#*pT1#Ob&BHG_cAAfpgv;&pSyOvb>U{h zTgfAS`vt*L6w6Q!i$>h}*oepTodlzH*9sU3-8qXq!a-I{51b&Ac$4;M3^L$&Agw7t5>R zFE*1WZVBqvR*hJ0&+Km|eZq5HT`P^T#_>^NTs)Ex%CM3hd4<=aYcDCuBUKDaA`vEM z5)D}VfD&TQjK$0OsMB^Hs0!O7K}(H`x%ke$wj!V#N$#K)ZH&3$G@uA%y-@Ab$Q9H> zy8tpih!lM@6!pkUqH9xF9~QuWjRQB=i92Ff(55>GdA-vCkpL}Yi=~3}jofQTTRK+J z_K4eX9ZA+IxT?6Ho+4BcJ1BMxpD=BIWFHw_c9Yw8(%bX#IQ)ghg{C=|ONzE=BF!w* zRnyax_$`J3PX8M=51f^ZkHBM4wX?>qg;L7bBbK8=wc^NTzH|gi#h0Uox`Irv4Rc3m zV0B}9D7>?dFP{c{-Y>GpQm6IT$|frtl-X3hATE+YTi=rQpY5K5y=v+>M>TW8Ah%dM$+A1&@$GoG~@*Y zF+NXTq87o*F)kw%=#kdr=xz+xgT|M0TDzRrnimgU+ZZF7qh(w<6=ep9+Pu zO~po}j>m1}SZhSRsW?-sIY$Oq#%#QH~ z=MTr*HPdmB!rlY73T+?JmbKr-Y=7e84r)QaC6*FbH#!DFf72}%p(GIZ+Ib*GD~7g8 z-J_bBo`+5(9<_t$%Fv9`f|rM0O08Mv>96&a`q8_`#!OnDa;x4ohDzj#49W#o3Xbk( z>)D5JNjtz=&mwIP-{FOzKwnydSP(=%wxgJ zQ-S+k`sDDY^v+4h+nJ9#LE8?jx|)X^o8x1xqFxfY-bN3N5Z^rdEEtuJ_)Ye+O;iNr z^Cv@(=Gxf2;Ho_zG?{$Hd@!}*f^H2r45d-)-}1V`<};=jbqj9QL``j$<;=2Ut-*4f zWo?e&S%tb(J^I`sU$JB}b!KB2IbA3@UDmq6(k0^;AE;V{U6Qv>Fs|`_3nZI1w8}H& z2eqFwTcLdHAZo0onmaT~)>W#mNL1!v++oWeW@Ka5LeZ1j8oqo4=+}k}?|Wa+MQXuL zGtBthG5~ObDHl(`!YenyJUf)2n&v;FnvjYbV5nn^mK)Vj1xVMQ*El0K8;-30C}&QD z7tfgzy^6y_s_rEX^A59?-+IF@+=V&)p%&U4=wNHYmE%$O2}-M&M=EFN4l(Hc6-W#} z0?RbmVKcXA)?iG)Vm1NXeG7@o_qAy(e20JQ(Y(A zTsjU3B6#^^sO`}}XXm7BZq#!)$kJCHsiLYz6{Wx?f-I}-z=TAUf&PkP1cnj5T%i~y z8Uz8y3TLRG*PVKRDr&ALa_!3z-ZACpaAL(gEaG<4iR8BBO!31ei1N}r<^z%LxqApEdBS0?l7fx>?b%ZWhcF8Jj&yftZj?2gU8tF1OSoCqv&(9kv>JXt>S9Q0GWaL!Z@(#4uNnLqN zT_hhW#+|5%5fbJj<=WD~$>a91k`ReL3H9$F8f?yWhi*t08Xdis_(q&G6rXS?PuFAC zclmX`ucd2jdVz9Z2eaiOsp8=T6=Ioe)*=5%;h|Kf);D!jtP!;}H&dB!X2T35yQ#`@ zU)c@dy-AQ8V(nmbmUi$I^!hNZ)Z%0=?U%XMLJPIO`H&6jofDD2O1t!Wn>Vi47oCRO zhbZCSdp_3ZXR6%Q#1V6?wU;k8lLt@fHWDc;Yb3oaYY>0o!&t8+(8%v0K2xn#`Ie4A z&0bpIi7T>ipP|45-pA+wp9TgxW`$?((lJ%V1*`m zqaf+>M98u++D)~!EuCoG2v?nzx>3c%Vm!+nmPEj{hiH2%f4kkA;Yr*2Zv{re zLLzG;@Mgj$+4?K%dpO2Sp>Fk7w_jKK#7mUzPFK^9EwH81sv?M)hvq6Gj!8VO+>4G5 zd0k#fpSgT{Kt|NQk<)beA&pmyc6S%gdv>1hwZJNr43Ujg2B{Sp;=6#uU9<6QHWa5} zK|;(Nno%6(w#*sA7`y>;hZ4oiVG&Kff>17^7_9-20^(yFAvSNd1>Q{9K+^@@w}xw` zc6iUJNjNnOq>gxWhO%J3PJYt061u7iJ2%rviOc?Uc#*)ib=wY0BGfAm^N6w-XLj0wb*1fd%C9Q5&$qF^#9TlJY#fS`-CBfaP|T zI;<={99>;SBtHJyA&^^Ig83o4MY!iJJ&dIsv9ZqvJ%QN!Ls8pR$HPlty?)ywGbeh) znaY{N(G+Ix`OPP8M&7HNF#eYGRx&jjmaACZcB^safE$9FtaD+TdVu3asFy+cn071e zE5x#}R8L&ZAZnpFB71^n4DEou*iNc`p(&)D--Q zaSOadCjJBV`G1Cb&1Yq<{}bl*{|@pR1f*pH-Jw$d4-l{Ef5E#3V_nlS&@(f!{)~6c zNDl}U1u!y$A*O#rwPpbWP=leX8EF|$gYLY4sE06QO`X3cbnCehfH`RHN)-)c>$+W+*~Afh4jx;C7y9qcYh&yBX|{ zZyEVaqIgV*4I?l)x|P;?f;31sw=zYkt>%k5w%@|sz{*1pi+X|{yRJ6rMO-r0_k+C8 z(4Ar1obp;t>Sf4Rkomph)m;v>eaQ)>J=6%d}9ZTAUhdJW1p3bg6FD zT@4!T;r(E&4)cy#`HAhG@`uB|Qo;vWHz!0=)#79=>VbzH{b1a=av2oF)Sz&YUI+>_ z5kkUQL=pj#5j+Y4v0woS1p)({ErBNU2n7-hN6FZEAlDEIw>-66Xv}FbIW8_wOeJ%t zSWl!JdpT*|ayUEy-U%NKNSW4CL#bVs@P?7ZAg)A}V*W59zTp5PqmgaHC=eYwusTc} z+j)+HW4g17v*o(=oz|a|;(zo6@V^26{%213AHsg$&qcq&e&4Ib&(js~hnoBY`_0Ng ze>XFlnA;oJ0_cRyb?glU4D_t@4Pfd1$^u|wV`lzYYvxtlG!(j<(%D*oM)=eX8`KSD zjd6k+_`EMwiD5H~^Uqm?N|t?53JeA4_T zzkHIMVWfIeEa{C*QgUW){nIlicw-CK{f*|E+VtTU@9hjdkIr8-16vjcRQX^C(BwqD zV%FA&lGHr2cg)OTbi-X<8it%L`5G;f`msl*X{uC|g&99r6fZw0k9~K#%Z@xs1%t>b zXdo`O4)>QcGFNt`k*OC5%PepCe)-u^VsItm3wsggy2(Mt>EVU+tuq88JTwEK&55f;lV4hNEB zHHf#$uJ7h>kpOvBjpVX%xaX0|Q?9eX=v%Q?f zE&Ng$Tqy}|1|OAdq1blOg1!t4)(VM*d?Oj}rIcU0n-yqMNdG#e`&&^jwaSBtR)cyi2?YE=M>!${azKBN z>Llfi$ZJ~faS_2|(Q+Q~BE?I;?oP=1^h%;(!2_DnulX~UgSve1Pk_@*EYB=x+p6bh z8*DR~z6v=$T4l<+&BWafrqTV6i*@75P-lP;^GwW;;gWo15_2KD7h@S)0l3ifC zKVProO2JNNTII+VpRB{`IS%+prsDhx7pt|z3Sk~b`8I2)NR*#cdf4uf zaYt>rhj}+@SZ7zFi;5zJdDp3pUKN+3DU{ucl`gMuQQ35r>Ox9novKz!qTeZ;fV5v4 zUKqJw?JdFXb>1;N+vTDdZ&F5%iJDpfh1Zt0Tl7oR^(zh&w%j6m3^96KZ@|OOx4PwV zX-2XMhVSFY{St~sc$~=(lyrnv&S+GpL{qfvrjF7jFZ)vuPuDH`l1?y1w)ZdI^MtsR zs0^HD4zeRTB?O_MM~aM3ikz6^b_K<(ptH*byT4uG3nY^WR-XGR=3Xx1vxb0sl`^$G zu;_V|&xFwqXR^N0>5?BRz$Xg(^^)<}_X2tTW#DFYP7k8axaP#|Of4_7l)B>d`^qky z{TRW57SAU{1akHm*sF|LutQJaHaQRdgNnnSSkV{p!&f`xzKJ<&>gKSr?@QfZ+*ByW z6bsOO-I}uWwvRlC%f6MTQ)0LJpzNVYF4R~m6Q5|;`ek5Fo*+P{Tc|S_ia6E!W#{ug zPvyqKRiAXURE}+xsOpCF;D>S4+ijFS#n3NE*YZZv!ClT^dgIEQEf7P8 zGZlIC(bo07Y%QWy0F(YTl$O;+l|TN5!zi|5cLl-!|3u8`7U zCY#~}`ek$)v$U|EdP%PxztRvH1SsHwM3Y3}9i4rpAWLL@a(EI=$j1y&i`vX?1#uyd@fE+f5a z!F0mBsLiD=$%3RA0~a+Pu$7II`e4;7O;mx5T(?k)0B@q_W#F4A@5T!DModh+r`YVO zoCWK3*9+kpG3%Gm0#D%QU+Q>S)>?*tMvvQ4f|1?|gEx7AOT9K4Jc?8AhbDgE{stdS z8g)F75=JrRqgBKS!aMFRHLJW}BTJGHBg?$EEd^BdunuF<^lvupKJGHkSWfH5zIL@| zS$~H64k3?VF!#gaTY>yShl1w7l%}&4Eotj+H^Bx;2?2`A_5N*iC#xm-O>cFD&o63P zI6LL)hq+ojud6+#Xm3xS&zBY&XJ>T0AeR-^bvG41k;v^ffN?ZNx`-p@4VFgi zcNsNF3!<_qiX|z;sXoy_7A6c-ne*SwPzpl|*bQe-w6s-A5i9&mjF$&ZVtK}*p{;`v44_RZiVyD+&!P?TYoKGqHr z$z}fK>bvljC(SiZ>Nr+Au!ZmdC*AShGE>=Z^qt_NTF$R&o+sI9lW-?p7m+WPP7qJR z!PnEs?YL&ibwF~@r15i!v(1F`II(!gq9?dCFUSQ1JB5t#z8y-ZsWq=ix^8|9(pG4` z8QE=F$i}XIG0xbMPf@zv(E~wCup3p;X|S<~$(iG}%XNDe@x_E4t6{14G7uUXK82yZ zL9*)jiCR*i4Xa-VLIho(4kJ%hr;J7EdnV!i5Mrer=RnannYMZ(jHSxz`{67Tq?I4} zZG`7X;tEYwQB`H8deSnod3SS9uvx4Y$~@)Ist6iFq^=9DD_dyU5D?_J>g?-I+N@|{ zqz8Id$i8WxD_?b_B&v_Mr@zt5kHC(KAf{+0msd0nl_(@sZ!6+`$HK&~sgN)skUd9U zw^OV9i9R28e>v@8fR<+quiW9C?y+akuZCk`~CP z8Q6&!qTusbB-;0}ZT0Qf_g{IOZU@Oy(iSOd$UNs*W*lPm@`GYl!mJiqdaY0hpCe3I z)Skq@qsto<^=t_#5koJQEFa?$NB9b*(Q)BqE^X7?L_r$+Hr~!yx2LfDLy4(|d|j=B zSvRZosu=1QEa{8u@%cMD(w5L28!RQS_|fo^$Z)T$ox6AySbPIykx#xZrcNKJwOgXn z9S?gy(Zs;q4%KC3-ohqPlXOhX$r2)v5Pm8FTje*s3a8rbtJ>W(TW#L%5W~@=tF%R`>mSFXOg@zVtT9;Gnw%|dT1n~lQhop>a%~PdO6bquzk-)eY71fjoA|6#& zCsTf1d!l?Rr$*147n)=%9QJ9*8w=k-dxi$<$)-VAJ??E5@gQQrW!)nbCV4CCM?s*V zE8nA^H56u8?eMv`6c^Q^FxJ_9fsN8Q=>-JQj-VQn2Cw+JA{P3Sphq8KlCXLZyDEzu zm(HS$W0qz59%v_cdzFvaLtO%Ymvx(2_)xq%|obZyBdXyE+Ax-D}c*Io)>qng`3<2EW*Kzia@>Ot2SrI~g?3pUZ z@;N4b3jLKB-Q)Q-Ft$^x&|}5D&-#kLxde(RNcSJqeW2d$DK{0CQc_39<1l^ME5n~_ z)hK*SAF(>(a*XHOy$RC`KOElUs4r|NY#?mZt>10PLG@OySU*-S=bfCkNj{TOz_{O( zz&Oa1&@9t5(@fV?*DM8wN!xDiK*V)e_u6CPi&|b;&Elviwz#(Ba4OgGM3^WtP|Jm+ zncl5WcQb{452t1Hy0+|ec&&(gUyG>tx?X~&)5oXyi-rSDI`42&M(5;{H(oV?rc?zi z1?A%}tHK@?dBpJBWpQnEJ!)L(-qtLkYkLx6jv7)_V_C9L;jj~Tn#|g4-eLpwPU9l` z`|A_mb=!#RaZJ2{hQfZClXl9u@hAK-q@0%`0xu9aQ#l(f79qtQgVLeo{ zp7SRfMoVcbWHnXu&m8v}CeH-xUIlqZ;IqeQY;c3`J4vBVjFhsT3N^o0ua_3^t?q$ke?scGvXrmW|`=h@WDZL+s}N4FqXpX);rj7yAX_0jL8%$ z1uGS2)Nv+4RCXnc9uOVvnCgFN*fXs` zK1#PK-K;#D^E|eUQQ&Q(dWTg%R>jZiVH}d7>1$K6Gyru1q*9^-fwmH9aPf!DHL6z+ zit|`BrXt+7gyW?KKam;Yh)8)_udj;2tmn_8UM3+SC5?^2Z7Ai!uGd)_qELGcT??yA5_Qvbr1a5T)*!UX?e5P@@&zg!)`pH?wT9>jN3yd5INz~ z{#)q<`Ic#ArFqQD)H;fUnrrm6If^MgE}w5I_)QmS7YqYdi@-cQJ5lZHM7OVPu0;W- zI3EO%dfU%ENHQLe7iimU2?$8s0c?kwy9v!XOt5DYw%-Lw4uWPc}eTN$oR(upHP>Ep34A zr7Sg&=9*z1TM8I>3X*H}03z^=EoB#$>RZ4sE z+|)Dfl>_L&sgknvcC*r?88a>CiKnGsa z%Fd0N`kA9|2aVEmT}#3^Y5W&;q|@60SP!!dnK(lyxy*cN2xMMAoAAu%`&c+vrs{13 zGG8u>Y7aPp{nV<{1bN%0gByrX$@V1>s6!LjNA_}X4AuNuU>;RQ8w~g7ve~E7HqI&S zdN@iYOy!DbDySJ9PNEtnKCv{qb*OzF%UL*hOEO(=?K>ru)ZnPZpvzH#Z}kzVHxA0s z<7`y6{g>6tvSC6%)a#!&WNLeQVcDn&8P!+){BdAG?&f~issQvo%;aTJ;b3KKvTTJWKUCxYfB4Sf0# z)c(9(K5P1*mp-ihT9n0+JMg%dejK?oKq`QVdKBbrlM&BP>6jKcPo`tfD`@dOse{!sWPT9F2olj_e$b}DN1MpVst)g&2OmMTk04o|B=X2YBs~;> z#>%)kQ8!+`O%J@%raEYG*X?bAXwVjL`11@AeDMAKT=$3fz#o={zbp-Zxf2yIFx63V zkk_%aleDt50;ibk7}pEh8f%3)sisT?Gb~_5d12AlS-rcVZ7dm$Wyq zPy#Rm@AKR_0_4}R7BMg}GPVZ*!M2jSOyFF9`6%VJG%_~;{BBTTrDeHy6-onSWuj#U zyA5RourjdHva$l1?hPue;HJP9mR}4iz`GO4pHC?Ni@QW2D@*$yYymCMaiI&t>p&YB<_#gLZeJ&k5Hy_q*f_M@uZE8f;51?lWe0MQ zEJ?0H-U6u)dUrY5FtFw$ipfFGxf-2p9oHL#*|a`;KeAHtQM~AL(pKE5Yr;H&f->&r zSBlf%+ox)>U$4UUdYn*gm3>CVy6-Wh-LYZr)!lq2?k0LBiaCzz`N}He-dQ|Na56Ff#+0 z0fvC@aSY&!?mhs^zvIA0A;#b1=;;~njBvl?V`89Z0$VSCiDPC0oAG{&1DoQ&W~X2C z(bEILrl()yKtNWOKidU@je@`Cqo-$P{xgo10WA5u&v!oP=|Nzxx4*@KY5s#2uutOO zd820l{y_@^BNNzE`CENVV0r!#2l|5+21XXp?`0VnS;0;@N`H-GqG$P|-yjsyS!IF>&N(%w+{M`O> z>wsU!UdP6$&N=gaRd;WacSDX&(au2H!QR}&(!dUu?w_YSllEP{A4Bmz z;;)*)Bi6+lT=JjHccwC1JMfzLcij>?;1?#aQr*$aZ{+}9Rat+o=`PzpHOc7M-mSWS zH+Q!R+XK`Accxo80G*1e8o<)Q+#CR2E@|0Vz;_z{dcB)7OzgqSEx87G#DV`=HNZmT zzYDDH0*kxA`YtfJ3(W5Vox4Eqdz=Q41$g&jN%0T$ciMPI@PDA5RG_neJ1df#PDy_%iK|8dl%fZ;Bxn5a2MRuZ2vt0aQF0s)%(o%4E~nzpJZ@f-+deR znHle@qQ497pBV0*XuiMxNVrdB{~@S*4g8OSV*XiBciDau)IT!*Z-N3}mSCc12C@B{ zphWK|w7d)Mg>ui6(cSAkWB1+sTdLh%>K*-32F_r`yjQM&6qEjEitkeXcNBxSbhKb6 z(cqQkUQhqCVk+LXe^11HZ{5pY|1R#H_8*;h-_!rD!1u-Ov)pt0gQ@#HBY2S88aM*( z=9wQu?-ve#7`yK#g!`fQ|IsImY|ONb%xp|7|HdKjclq1gJvrP3_e1YT7yVG<`_vzu z_5ZUt{+f!wyX&6@^WQIjb^qV<(qEGLMHd);)`hz=zw5%^LjEt>%gDq)3%-^Ep3443 z7bNdQ^UvgS-<$X1xL1Pve*Lbje@&df^xhrmzti;hto1idcT3wZGbbY}h!(s^gIA=# zKmSJDZ*!3D9j*72-7D(-jB-D|?rFU5xBLFp05adt9rs;)KlbkX{)ak$=jkt@|1HM< zz~CMA|1ijJYoKFqW&7(KuW(1w{oH7M_w-{V=zxc}jIEWvgC6+G#xKjlzZSV~#Kg){ z0DQ#*K+Z@H_U6vW2x4Re-*saF*9cxA|8vTZb@6@$1~0n|^ndL~!PmI{+!r!|{@7oD zm_VT4_gx_H*P}n -... - - -# Pending, should string literals be added here? - - - -... - <- ; - a2: <- ; - ... - am: <- ; - -- Uninitialized attributes - aq: ; - ... - ak: ; - - -- Functions - f1() { } - f2() { } - ... - fn() { } - -} -``` - -**CCIL Output** - -```assembly -type C { - # Initialized and uninitialized attributes together - attribute a1; - ... - attribute am; - attribute aq; - ... - attribute ak; - - method f1 : ; - ... - method fn : ; -} -``` - -#### Class Inheritance - -Se annade sobre la que ya tiene A, como se maneja la memoria, se annaden los atributos de B, despues de las funciones de A, o despues de los atributos de A - -**Cool Input** - -```haskell -class A { - -} - -class B inherits A { - -} -``` - -**CCIL Output** - -``` -``` - - - -#### While Loop - -**Cool Input** - -```assembly -while () loop pool -``` - -**CCIL Output** - -```assembly -label while_init -x = -ifFalse x goto while_end - - - -goto while_init -label while_end -``` - -#### If Then Else - -**Cool Input** - -``` -if then else fi -``` - -**CCIL Output** - -```assembly -LOCAL f # Init var which will store if result - # Init all local vars from the condition expression - # Execute the condition -x = # And store it in a local var! -ifFalse x goto else_expr # 0 means True, otherwise False - -label then_expr # Not really needed! - -f = -goto endif - -label else_expr - -f = - -label endif -``` - -#### Let In - -**Cool Input** - -``` -let :, ... : in -``` - -**CCIL Output** - -```assembly - - -... - - -# Execute expressions of let vars - - - - - -... - - - - - -``` - -#### Case Of - -**Cool Input** - -``` -case of - : => - : => - ... - : => -esac -``` - -**CCIL Output** - -```assembly - - -... - - - -x = - -# Pattern Match Logic! -t = typeof x -label init_case # This is not really needed -t1 = typeof -b1 = t1 == t # Comparing types, they must be all equal -if b1 goto branch1: - -t2 = typeof -b2 = t2 == t -if b2 goto branch2 - -... - -tn = typeof -bn = tn == t -if bn goto brannch -# It is not possible to avoid pattern matching - -# Branch Logic -label branch1 - -goto end_case - -label branch2 - -goto end_case - -... - -label branchn - -goto end_case - -label end_case -``` - -El typeof tambien se conforma con un ancestro. Que evaluaria la operacion de igualdad para escoger la rama adecuada? Lanzar un runtime error si no se escoge ninguna rama(eso puede pasar despues del cheque semantico?) - -#### Function Static Call - -**Cool Input** - -``` -(, , ..., ); -``` - -**CCIL Output** - -```assembly - - -... - -r = call n -``` - -#### Function Dynamic Call - -**Cool Input** - -``` -@.(, , ..., ); -``` - -**CCIL Output** - -```assembly - - -... - -t = allocate # It needs to give the same attributes that type one has -r = vcall t n -``` - -#### Method Declaration - -**Cool Input** - -``` -(:, ..., :) : -{ - -} -``` - -**CCIL Output** - -```assembly -function { - param - param - ... - param - local - local - ... - local - - r = - return r -} -``` - -#### Expression Block - -**Cool Input** - -``` -{ - ; - ; - ... - ; -} -``` - -**CCIL Output** - -``` - - -... - - - - -... - -``` - -#### Arithmetic Expression - -###### Simple - -**Cool Input** - -```c# -3 + 5 -``` - -**CCIL Output** - -``` -t = 3 + 5 -``` - ----- - -###### More than one - -**Cool Input** - -``` -3 + 5 + 7 -``` - -**CCIL Output** - -```assembly -# Naive -t1 = 5 + 7 -t2 = 3 + t1 -# A little better -t1 = 5 + 7 -t1 = 3 + t1 -``` - - - ----- - -###### Using non commutative operations - -```python -3 - 5 - 7 -# -2 -7 -# -9 -``` - -```assembly -t = 3 - 5 -t = t - 7 -``` - ----- - -**Cool Input** - -``` -100 / 20 / 5 / 2 -``` - -**CCIL Output** - -``` -t = 100 / 20 -t = t / 5 -t = t / 2 -``` - - - -## Convenciones de variables en Cool - -Si es una variable definida por el usuario se le agrega el prefijo _user_. Se aplica tanto a variables definidas en un _let in_ como en _atributos_. - -Si es una variable creada cuando se analiza una expresion en particular se convierte en: _\__\___ - diff --git a/src/docs/inference.md b/src/docs/inference.md deleted file mode 100644 index 191039c0a..000000000 --- a/src/docs/inference.md +++ /dev/null @@ -1,48 +0,0 @@ -# Inferencia - -Se infieren los tipos lo mas posbile aplicando las reglas de la semantica de cool. Cuando el inferenciador debe elegir entre varios tipos a asignar a una variable, escoge el mas general. El inferenciador da errores si entre los tipos que tiene a esocoger existe alguno que no tiene un ancestro comun mas general con los demas. - -## Funcionamiento - -El inferenciador se ejecuta varias veces, en cada una realizando un chequeo distinto. - -### Soft Inferencer - -Infiere el tipo de la expresion a base del tipo de la variable a la que esta asignada. Ya sea como asignacion o el valor de retorno esperado de una funcion. - -Aplica las reglas de cool para realizar la infererencia. Este permite que haya ambiguedad y que un tipo por determinar puede tener varios ancestros sin nada en comun. - -En el lenguage cool esto se evidencia cuando se hace un llamado a una funcion del estilo - -``` -a.func(); -``` - -donde el tipo de _a_ no es definido. El inferenciador buscara todas las clases con un metodo de nombre func y cantidad de parametro determinad y los tendra como posibles tipos para _a_. En estos casos _a_ puede ser de varios tipos no relacionados por ejemplo cuando: - -``` -class A { - method func():Int{ - 3 + 3 - } -}; -class B { - method func():String{ - "3 + 3" - } -}; -``` - -$a \in \{A, B\}$ donde A hereda de B y viceversa $a \notin \text{Object}$. pues Object no tiene un metodo func que recibe 0 argumentos. - -Debido a que las variables pueden tener varios tipos no relacionados tampoco se revisa las comparaciones de igual. - -### Hard Inferenecer - -Infiere el tipo de la expresion a base del tipo de la variable a la que esta asignada. Ya sea como asignacion o el valor de retorno esperado de una funcion. - -En esta parte el inferenicador realiza las misma acciones que en el Soft Inferencer, excepto que ya una variable $a$ no puede tener tipos de datos no relacionados. Se revisa que las comparaciones de igualdad que ambos miembros sean del mismo tipo. - -### Back Inferencer - -Este se encarga de inferir el tipo de una variable a base del valor de la expresion. diff --git a/src/docs/lexing.md b/src/docs/lexing.md deleted file mode 100644 index 9c8ac14ce..000000000 --- a/src/docs/lexing.md +++ /dev/null @@ -1,2 +0,0 @@ -# Lexer - diff --git a/src/docs/parsing.md b/src/docs/parsing.md deleted file mode 100644 index 918acad19..000000000 --- a/src/docs/parsing.md +++ /dev/null @@ -1,2 +0,0 @@ -# Parser - diff --git a/src/docs/semantics.md b/src/docs/semantics.md deleted file mode 100644 index 2b9137abb..000000000 --- a/src/docs/semantics.md +++ /dev/null @@ -1,2 +0,0 @@ -# Semantica - diff --git a/src/test.cl b/src/test.cl deleted file mode 100644 index febe48b82..000000000 --- a/src/test.cl +++ /dev/null @@ -1,13 +0,0 @@ -class Main { - -- main () : AUTO_TYPE { method(1,2,3,4,5,6) }; - main(): Int {0}; - - method(a : AUTO_TYPE, b: AUTO_TYPE, c: AUTO_TYPE, d : AUTO_TYPE, e: AUTO_TYPE, f: AUTO_TYPE): AUTO_TYPE{{ - a <- e; - b <- a; - c <- b; - d <- c; - e <- f; - f + 12; - }}; -}; \ No newline at end of file From d9eb2c190b6b46fed82c41028e9acdd868b84cb4 Mon Sep 17 00:00:00 2001 From: regnod Date: Mon, 28 Feb 2022 17:16:22 -0500 Subject: [PATCH 83/93] report.md and report.pdf added --- src/cil_ast/cil_ast.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 1fe4ccaf9..1ca7116ad 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -1,3 +1,4 @@ +import visitors.visitor as visitor class Node: def __init__(self): pass From b7c693348978e6b5914a1c46aadf1686d6b1c293 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 28 Feb 2022 17:37:19 -0500 Subject: [PATCH 84/93] wording 1 --- src/visitors/CooltoCil.py | 129 +-- tests/codegen/arith.mips | 48 +- tests/codegen/atoi.mips | 48 +- tests/codegen/basic.cl | 24 - tests/codegen/basic.mips | 1448 -------------------------------- tests/codegen/book_list.mips | 48 +- tests/codegen/cells.mips | 48 +- tests/codegen/complex.mips | 48 +- tests/codegen/fib.mips | 48 +- tests/codegen/graph.mips | 48 +- tests/codegen/hairyscary.mips | 48 +- tests/codegen/hello_world.mips | 48 +- tests/codegen/io.mips | 48 +- tests/codegen/life.mips | 48 +- tests/codegen/list.mips | 48 +- tests/codegen/new_complex.mips | 48 +- tests/codegen/palindrome.mips | 48 +- tests/codegen/primes.mips | 48 +- tests/codegen/print-cool.mips | 48 +- tests/codegen/sort-list.mips | 48 +- tests/lexer_test.py | 30 +- tests/parser_test.py | 26 +- tests/semantic_test.py | 24 +- 23 files changed, 526 insertions(+), 1971 deletions(-) delete mode 100644 tests/codegen/basic.cl delete mode 100644 tests/codegen/basic.mips diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index bf5b5db4f..cf477a184 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -18,7 +18,7 @@ def __init__(self, context): self.var_names = {} self.ctrs = {} - self.types_map = {} + self.dtypes = {} self.breakline_data = self.register_data('\n') self.emptystring_data = self.register_data('') @@ -31,23 +31,25 @@ def transform_to_keys(self, xtype, keys): xtype.attrs[key] = i return xtype.attrs - def build_type(self, node): - self.types_map[node.id.lex] = type = self.register_type(node.id) - iter_type = self.context.get_type(node.id.lex) - - generation = [] - while iter_type is not None: - generation.append(iter_type) - iter_type = iter_type.parent - - generation.reverse() - for i in generation: - methods = sorted(i.methods) - attributes = sorted(i.attributes) - for meth in methods: - type.methods[meth] = self.to_function_name(meth, i.name) - for attr in attributes: - type.attributes[attr.name] = cil.AttributeNode(attr.name, i.name) + # def build_type(self, node): + # type = self.register_type(node.id) + # self.dtypes[node.id.lex] = type + # ctype = self.context.get_type(node.id.lex) + + # queue = [] + # while ctype is not None: + # queue.append(ctype) + # ctype = ctype.parent + + # rqueue = [ queue[i] for i in range(len(queue)-1, -1, -1)] #.reverse() + # for i in rqueue: + # _ = 0 + # mm = sorted(i.methods) + # attribs = sorted(i.attributes) + # for attr in attribs: + # type.attributes[attr.name] = cil.AttributeNode(attr.name, i.name) + # for meth in mm: + # type.methods[meth] = self.to_function_name(meth, i.name) @property @@ -100,7 +102,7 @@ def register_function(self, function_name): def register_type(self, name): type_node = cil.TypeNode(name) - self.types_map[name] = type_node + self.dtypes[name] = type_node self.dottypes.append(type_node) return type_node @@ -360,28 +362,51 @@ def features_from_context(self, type): return feats - def collect_types(self, node): - self.types_map[node.id] = type = self.register_type(node.id) - # Guardar métodos de las clases padres - iter_type = self.context.get_type(node.id) + def build_types(self, node): + type = self.register_type(node.id) + self.dtypes[node.id] = type + ctype = self.context.get_type(node.id) - generation = [] - while iter_type is not None: - generation.append(iter_type) - iter_type = iter_type.parent + queue = [] + while ctype is not None: + queue.append(ctype) + ctype = ctype.parent - generation.reverse() - for i in generation: - a = 0 + # queue.reverse() + rqueue = [ queue[i] for i in range(len(queue)-1, -1, -1)] #.reverse() + for i in rqueue: + _ = 0 methods = [m.name for m in i.methods] _attributes = i.attributes attributes = [x.name for x in _attributes] methods.sort() attributes.sort() - for meth in methods: - type.methods[meth] = self.to_function_name(meth, i.name) for attr in attributes: type.attributes[attr] = cil.AttributeNode(attr, i.name) + for meth in methods: + type.methods[meth] = self.to_function_name(meth, i.name) + + + # def build_type(self, node): + # type = self.register_type(node.id) + # self.dtypes[node.id.lex] = type + # ctype = self.context.get_type(node.id.lex) + + # queue = [] + # while ctype is not None: + # queue.append(ctype) + # ctype = ctype.parent + + # rqueue = [ queue[i] for i in range(len(queue)-1, -1, -1)] #.reverse() + # for i in rqueue: + # _ = 0 + # mm = sorted(i.methods) + # attribs = sorted(i.attributes) + # for attr in attribs: + # type.attributes[attr.name] = cil.AttributeNode(attr.name, i.name) + # for meth in mm: + # type.methods[meth] = self.to_function_name(meth, i.name) + @visitor.when(ProgramNode) @@ -389,20 +414,23 @@ def visit(self, node, scope): ###################################################### # node.declarations -> [ ClassDeclarationNode ... ] ###################################################### - self.current_function = self.register_function('entry') - main_instance = self.define_internal_local() - self.register_instruction(cil.StaticCallNode(self.init_name('Main'), main_instance)) - self.register_instruction(cil.ArgNode(main_instance)) - self.register_instruction(cil.StaticCallNode(self.to_function_name('main', 'Main'),main_instance)) - self.register_instruction(cil.ReturnNode(value=0)) - self.register_builtin() self.current_function = None - for x in node.declarations: - self.collect_types(x) + + self.current_function = self.register_function('entry') + inst = self.define_internal_local() + + + self.register_instruction(cil.StaticCallNode(self.init_name('Main'), inst)) + self.register_instruction(cil.ArgNode(inst)) + self.register_instruction(cil.StaticCallNode(self.to_function_name('main', 'Main'),inst)) + self.register_instruction(cil.ReturnNode(0)) - for x, y in zip(node.declarations, scope.children): - self.visit(x, y) + for typ in node.declarations: + self.build_types(typ) + + for i, typ in enumerate(node.declarations): + self.visit(typ, scope.children[i]) return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) @@ -414,9 +442,8 @@ def visit(self, node, scope): # node.parent -> str # node.features -> [ FuncDeclarationNode/AttrDeclarationNode ... ] #################################################################### - self.current_type = self.context.get_type(node.id) - type = self.types_map[node.id] + type = self.dtypes[node.id] self.current_function = self.register_function(self.init_attr_name(node.id)) type.methods['__init_attr'] = self.current_function.name @@ -444,7 +471,7 @@ def visit(self, node, scope): self.register_instruction(cil.ReturnNode(self_param)) # TypeNode de la clase - # type = self.types_map[node.id.lex] + # type = self.dtypes[node.id.lex] # type.attributes = [i.name for i in self.current_type.attributes] # Visitar funciones dentro de la clase @@ -520,7 +547,7 @@ def visit(self, node, scope): # node.body -> [ ExpressionNode ... ] ############################### self.current_method = self.current_type.get_method(node.id, self.current_type, False) - type = self.types_map[self.current_type.name] + type = self.dtypes[self.current_type.name] self.current_function = self.register_function(self.to_function_name(self.current_method.name, self.current_type.name)) self.localvars.extend(type.attributes.values()) @@ -620,14 +647,14 @@ def visit(self, node, scope): if node.parent is not None: # stype = node.type.lex - nodefunc = self.types_map[node.parent].methods[node.method] + nodefunc = self.dtypes[node.parent].methods[node.method] if nodefunc == '__init_at_type Object {\n\t[method] abort(): Object;\n\t[method] type_name(): String;\n\t[method] copy(): SELF_TYPE;\n}\n': _ = 0 - self.register_instruction(cil.StaticCallNode(self.types_map[node.parent].methods[node.method], ret)) + self.register_instruction(cil.StaticCallNode(self.dtypes[node.parent].methods[node.method], ret)) else: # stype = node.obj.static_type.name self.register_instruction(cil.ArgNode(node.obj.ret_expr)) - self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.method], ret)) + self.register_instruction(cil.DynamicCallNode(stype, self.dtypes[stype].methods[node.method], ret)) node.ret_expr = ret @@ -646,7 +673,7 @@ def visit(self, node, scope): self.register_instruction(cil.ArgNode(self.vself.name)) stype = self.current_type.name - self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.method], ret)) + self.register_instruction(cil.DynamicCallNode(stype, self.dtypes[stype].methods[node.method], ret)) node.ret_expr = ret diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 675bd7a60..913723c91 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -722,30 +722,6 @@ type_12_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -1209,6 +1185,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_A: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index d045d76ec..3d5a84478 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -274,30 +274,6 @@ type_7_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -761,6 +737,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_A2I: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/basic.cl b/tests/codegen/basic.cl deleted file mode 100644 index 92c1b32e4..000000000 --- a/tests/codegen/basic.cl +++ /dev/null @@ -1,24 +0,0 @@ -class Main inherits IO { - attM : B <- new B; - main(): IO { - case attM of - attA : A => out_int(1); - attB : B => out_int(2); - attO : Object => out_int(0); - esac - }; -}; - -class A { - atta : Int <- 1; - fa() : Int { - atta - }; -}; - -class B inherits A { - attb : Int <- 2; - fb() : Int { - attb - }; -}; \ No newline at end of file diff --git a/tests/codegen/basic.mips b/tests/codegen/basic.mips deleted file mode 100644 index 4ef754a4b..000000000 --- a/tests/codegen/basic.mips +++ /dev/null @@ -1,1448 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "Main" -.word 0 -data_7: .asciiz "A" -.word 0 -data_8: .asciiz "B" -.word 0 -data_9: .asciiz " -" -.word 0 -data_10: .asciiz "" -.word 0 -data_11: .asciiz "Abort called from class " -.word 0 -data_12: .asciiz "Substring out of range" -.word 0 -data_13: .asciiz "RuntimeError: void in switch case" -.word 0 -data_14: .asciiz "RuntimeError: Case statement without a match branch" -.word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: -.word data_1 -.word data_2 -.word data_3 -.word data_4 -.word data_5 -.word data_6 -.word data_7 -.word data_8 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - -type_1_dispatch: -.word function_abort_at_Object -.word function_type_name_at_Object -.word function_copy_at_Object -.word __init_at_Object - -type_1_prototype: -.word 0 -.word 4 -.word type_1_dispatch -.word -1 - - -type_2_dispatch: -.word function_abort_at_Object -.word function_type_name_at_Object -.word function_copy_at_Object -.word function_out_string_at_IO -.word function_out_int_at_IO -.word function_in_string_at_IO -.word function_in_int_at_IO -.word __init_at_IO - -type_2_prototype: -.word 1 -.word 4 -.word type_2_dispatch -.word -1 - - -type_3_dispatch: -.word function_abort_at_Object -.word function_type_name_at_Object -.word function_copy_at_Object -.word function_length_at_String -.word function_concat_at_String -.word function_substr_at_String -.word __init_at_String - -type_3_prototype: -.word 2 -.word 6 -.word type_3_dispatch -.word 0 -.word 0 -.word -1 - - -type_4_dispatch: -.word function_abort_at_Object -.word function_type_name_at_Object -.word function_copy_at_Object -.word __init_at_Int - -type_4_prototype: -.word 3 -.word 5 -.word type_4_dispatch -.word 0 -.word -1 - - -type_5_dispatch: -.word function_abort_at_Object -.word function_type_name_at_Object -.word function_copy_at_Object -.word __init_at_Bool - -type_5_prototype: -.word 4 -.word 5 -.word type_5_dispatch -.word 0 -.word -1 - - -type_6_dispatch: -.word function_abort_at_Object -.word function_copy_at_Object -.word function_type_name_at_Object -.word function_in_int_at_IO -.word function_in_string_at_IO -.word function_out_int_at_IO -.word function_out_string_at_IO -.word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main - -type_6_prototype: -.word 5 -.word 5 -.word type_6_dispatch -.word 0 -.word -1 - - -type_7_dispatch: -.word function_abort_at_Object -.word function_copy_at_Object -.word function_type_name_at_Object -.word function_fa_at_A -.word __init_attr_at_A -.word __init_at_A - -type_7_prototype: -.word 6 -.word 5 -.word type_7_dispatch -.word 0 -.word -1 - - -type_8_dispatch: -.word function_abort_at_Object -.word function_copy_at_Object -.word function_type_name_at_Object -.word function_fa_at_A -.word function_fb_at_B -.word __init_attr_at_B -.word __init_at_B - -type_8_prototype: -.word 7 -.word 6 -.word type_8_dispatch -.word 0 -.word 0 -.word -1 - - -.text -.globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - -__init_at_Object: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -li $t0 0 -sll $t0 $t0 2 -la $t1 prototype_table -add $t1 $t1 $t0 -lw $t1 0($t1) -lw $a0 4($t1) -sll $a0 $a0 2 -jal allocate -move $a2 $a0 -move $a0 $t1 -move $a1 $v0 -jal copy -sw $v0 -12($fp) -lw $v0 -12($fp) -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_abort_at_Object: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -la $t0 data_11 -sw $t0 -12($fp) -li $v0 4 -lw $a0 -12($fp) -syscall -lw $t0 0($fp) -lw $t1 0($t0) -sll $t1 $t1 2 -la $t0 types_table -add $t0 $t0 $t1 -lw $t1 0($t0) -sw $t1 -12($fp) -li $v0 4 -lw $a0 -12($fp) -syscall -la $t0 data_9 -sw $t0 -12($fp) -li $v0 4 -lw $a0 -12($fp) -syscall -li $v0 10 -syscall -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_type_name_at_Object: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -8 -lw $t0 0($fp) -lw $t1 0($t0) -sll $t1 $t1 2 -la $t0 types_table -add $t0 $t0 $t1 -lw $t1 0($t0) -sw $t1 -16($fp) -lw $t0 -16($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_at_String -addi $sp $sp 4 -sw $v0 -12($fp) -lw $v0 -12($fp) -addi $sp $sp 8 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_copy_at_Object: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -lw $t0 0($fp) -lw $a0 4($t0) -sll $a0 $a0 2 -jal allocate -move $a2 $a0 -move $a0 $t0 -move $a1 $v0 -jal copy -sw $v0 -12($fp) -lw $v0 -12($fp) -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -__init_at_IO: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -li $t0 1 -sll $t0 $t0 2 -la $t1 prototype_table -add $t1 $t1 $t0 -lw $t1 0($t1) -lw $a0 4($t1) -sll $a0 $a0 2 -jal allocate -move $a2 $a0 -move $a0 $t1 -move $a1 $v0 -jal copy -sw $v0 -12($fp) -lw $v0 -12($fp) -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_out_string_at_IO: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -lw $t0 0($fp) -lw $t1 12($t0) -sw $t1 -12($fp) -li $v0 4 -lw $a0 -12($fp) -syscall -lw $v0 4($fp) -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_out_int_at_IO: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -lw $t0 0($fp) -lw $t1 12($t0) -sw $t1 -12($fp) -li $v0 1 -lw $a0 -12($fp) -syscall -lw $v0 4($fp) -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_in_string_at_IO: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -8 -jal read_string -sw $v0 -16($fp) -lw $t0 -16($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_at_String -addi $sp $sp 4 -sw $v0 -12($fp) -lw $v0 -12($fp) -addi $sp $sp 8 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_in_int_at_IO: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -8 -li $v0 5 -syscall -sw $v0 -16($fp) -lw $t0 -16($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_at_Int -addi $sp $sp 4 -sw $v0 -12($fp) -lw $v0 -12($fp) -addi $sp $sp 8 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -__init_at_String: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -12 -li $t0 2 -sll $t0 $t0 2 -la $t1 prototype_table -add $t1 $t1 $t0 -lw $t1 0($t1) -lw $a0 4($t1) -sll $a0 $a0 2 -jal allocate -move $a2 $a0 -move $a0 $t1 -move $a1 $v0 -jal copy -sw $v0 -20($fp) -lw $t0 -20($fp) -lw $t1 0($fp) -sw $t1 12($t0) -lw $a0 0($fp) -jal length -sw $v0 -16($fp) -lw $t0 -16($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_at_Int -addi $sp $sp 4 -sw $v0 -12($fp) -lw $t0 -20($fp) -lw $t1 -12($fp) -sw $t1 16($t0) -lw $v0 -20($fp) -addi $sp $sp 12 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_length_at_String: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -lw $t0 0($fp) -lw $t1 16($t0) -sw $t1 -12($fp) -lw $v0 -12($fp) -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_concat_at_String: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -24 -lw $t0 4($fp) -lw $t1 12($t0) -sw $t1 -32($fp) -lw $t0 0($fp) -lw $t1 12($t0) -sw $t1 -28($fp) -lw $t0 4($fp) -lw $t1 16($t0) -sw $t1 -24($fp) -lw $t0 0($fp) -lw $t1 16($t0) -sw $t1 -20($fp) -lw $t0 -24($fp) -lw $t1 12($t0) -sw $t1 -24($fp) -lw $t0 -20($fp) -lw $t1 12($t0) -sw $t1 -20($fp) -lw $t0 -24($fp) -lw $t1 -20($fp) -add $t0 $t0 $t1 -sw $t0 -24($fp) -lw $a0 -32($fp) -lw $a1 -28($fp) -lw $a2 -24($fp) -jal concat -sw $v0 -16($fp) -lw $t0 -16($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_at_String -addi $sp $sp 4 -sw $v0 -12($fp) -lw $v0 -12($fp) -addi $sp $sp 24 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_substr_at_String: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -36 -lw $t0 8($fp) -lw $t1 12($t0) -sw $t1 -16($fp) -lw $t0 4($fp) -lw $t1 12($t0) -sw $t1 -40($fp) -lw $t0 0($fp) -lw $t1 12($t0) -sw $t1 -36($fp) -lw $t0 8($fp) -lw $t1 16($t0) -sw $t1 -32($fp) -lw $t0 -32($fp) -lw $t1 12($t0) -sw $t1 -28($fp) -lw $t0 -36($fp) -lw $t1 -40($fp) -add $t0 $t0 $t1 -sw $t0 -24($fp) -lw $t0 -28($fp) -lw $t1 -24($fp) -slt $t1 $t0 $t1 -sw $t1 -20($fp) -lw $t0 -20($fp) -bne $t0 $zero label_1 -j label_2 -label_1: -li $v0 4 -la $a0 data_12 -syscall -li $v0 10 -syscall -label_2: -lw $a0 -16($fp) -lw $a1 -40($fp) -lw $a2 -36($fp) -jal substr -sw $v0 -44($fp) -lw $t0 -44($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_at_String -addi $sp $sp 4 -sw $v0 -12($fp) -lw $v0 -12($fp) -addi $sp $sp 36 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -__init_at_Int: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -li $t0 3 -sll $t0 $t0 2 -la $t1 prototype_table -add $t1 $t1 $t0 -lw $t1 0($t1) -lw $a0 4($t1) -sll $a0 $a0 2 -jal allocate -move $a2 $a0 -move $a0 $t1 -move $a1 $v0 -jal copy -sw $v0 -12($fp) -lw $t0 -12($fp) -lw $t1 0($fp) -sw $t1 12($t0) -lw $v0 -12($fp) -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -__init_at_Bool: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -li $t0 4 -sll $t0 $t0 2 -la $t1 prototype_table -add $t1 $t1 $t0 -lw $t1 0($t1) -lw $a0 4($t1) -sll $a0 $a0 2 -jal allocate -move $a2 $a0 -move $a0 $t1 -move $a1 $v0 -jal copy -sw $v0 -12($fp) -lw $t0 -12($fp) -lw $t1 0($fp) -sw $t1 12($t0) -lw $v0 -12($fp) -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -__init_attr_at_Main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -12 -jal __init_at_B -sw $v0 -12($fp) -lw $t0 -12($fp) -sw $t0 -16($fp) -lw $t0 0($fp) -lw $t1 -16($fp) -sw $t1 12($t0) -lw $v0 0($fp) -addi $sp $sp 12 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_main_at_Main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -72 -lw $t4 0($fp) -lw $t4 12($t4) -addi $sp $sp -4 -sw $t4 0($sp) -lw $t0 0($sp) -addi $sp $sp 4 -lw $t1 0($t0) -sll $t1 $t1 2 -la $t0 types_table -add $t0 $t0 $t1 -lw $t1 0($t0) -sw $t1 -72($fp) -lw $t4 0($fp) -lw $t4 12($t4) -addi $sp $sp -4 -sw $t4 0($sp) -lw $t0 0($sp) -addi $sp $sp 4 -li $t1 0 -seq $t0 $t0 $t1 -sw $t0 -64($fp) -lw $t0 -64($fp) -bne $t0 $zero label_3 -j label_4 -label_3: -li $v0 4 -la $a0 data_13 -syscall -li $v0 10 -syscall -label_4: -la $t0 types_table -addi $t0 $t0 28 -lw $t0 0($t0) -sw $t0 -60($fp) -lw $t0 -60($fp) -lw $t1 -72($fp) -seq $t0 $t0 $t1 -sw $t0 -68($fp) -lw $t0 -68($fp) -bne $t0 $zero label_5 -la $t0 types_table -addi $t0 $t0 24 -lw $t0 0($t0) -sw $t0 -60($fp) -lw $t0 -60($fp) -lw $t1 -72($fp) -seq $t0 $t0 $t1 -sw $t0 -68($fp) -lw $t0 -68($fp) -bne $t0 $zero label_8 -la $t0 types_table -addi $t0 $t0 0 -lw $t0 0($t0) -sw $t0 -60($fp) -lw $t0 -60($fp) -lw $t1 -72($fp) -seq $t0 $t0 $t1 -sw $t0 -68($fp) -lw $t0 -68($fp) -bne $t0 $zero label_11 -la $t0 types_table -addi $t0 $t0 12 -lw $t0 0($t0) -sw $t0 -60($fp) -lw $t0 -60($fp) -lw $t1 -72($fp) -seq $t0 $t0 $t1 -sw $t0 -68($fp) -lw $t0 -68($fp) -bne $t0 $zero label_11 -la $t0 types_table -addi $t0 $t0 16 -lw $t0 0($t0) -sw $t0 -60($fp) -lw $t0 -60($fp) -lw $t1 -72($fp) -seq $t0 $t0 $t1 -sw $t0 -68($fp) -lw $t0 -68($fp) -bne $t0 $zero label_11 -la $t0 types_table -addi $t0 $t0 8 -lw $t0 0($t0) -sw $t0 -60($fp) -lw $t0 -60($fp) -lw $t1 -72($fp) -seq $t0 $t0 $t1 -sw $t0 -68($fp) -lw $t0 -68($fp) -bne $t0 $zero label_11 -la $t0 types_table -addi $t0 $t0 4 -lw $t0 0($t0) -sw $t0 -60($fp) -lw $t0 -60($fp) -lw $t1 -72($fp) -seq $t0 $t0 $t1 -sw $t0 -68($fp) -lw $t0 -68($fp) -bne $t0 $zero label_11 -la $t0 types_table -addi $t0 $t0 20 -lw $t0 0($t0) -sw $t0 -60($fp) -lw $t0 -60($fp) -lw $t1 -72($fp) -seq $t0 $t0 $t1 -sw $t0 -68($fp) -lw $t0 -68($fp) -bne $t0 $zero label_11 -li $v0 4 -la $a0 data_14 -syscall -li $v0 10 -syscall -label_5: -lw $t4 0($fp) -lw $t4 12($t4) -addi $sp $sp -4 -sw $t4 0($sp) -lw $t0 0($sp) -addi $sp $sp 4 -sw $t0 -56($fp) -li $t0 2 -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_at_Int -addi $sp $sp 4 -sw $v0 -52($fp) -lw $t0 0($fp) -li $t1 0 -seq $t0 $t0 $t1 -sw $t0 -48($fp) -lw $t0 -48($fp) -bne $t0 $zero label_6 -j label_7 -label_6: -li $v0 4 -la $a0 data_15 -syscall -li $v0 10 -syscall -label_7: -lw $t0 0($fp) -addi $sp $sp -4 -sw $t0 0($sp) -lw $t0 -52($fp) -addi $sp $sp -4 -sw $t0 0($sp) -lw $t0 0($fp) -addi $sp $sp -4 -sw $t0 0($sp) -lw $t0 0($sp) -addi $sp $sp 4 -lw $t0 8($t0) -lw $t0 20($t0) -jalr $ra $t0 -addi $sp $sp 8 -sw $v0 -44($fp) -lw $t0 -44($fp) -sw $t0 -76($fp) -j label_14 -label_8: -lw $t4 0($fp) -lw $t4 12($t4) -addi $sp $sp -4 -sw $t4 0($sp) -lw $t0 0($sp) -addi $sp $sp 4 -sw $t0 -40($fp) -li $t0 1 -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_at_Int -addi $sp $sp 4 -sw $v0 -36($fp) -lw $t0 0($fp) -li $t1 0 -seq $t0 $t0 $t1 -sw $t0 -32($fp) -lw $t0 -32($fp) -bne $t0 $zero label_9 -j label_10 -label_9: -li $v0 4 -la $a0 data_16 -syscall -li $v0 10 -syscall -label_10: -lw $t0 0($fp) -addi $sp $sp -4 -sw $t0 0($sp) -lw $t0 -36($fp) -addi $sp $sp -4 -sw $t0 0($sp) -lw $t0 0($fp) -addi $sp $sp -4 -sw $t0 0($sp) -lw $t0 0($sp) -addi $sp $sp 4 -lw $t0 8($t0) -lw $t0 20($t0) -jalr $ra $t0 -addi $sp $sp 8 -sw $v0 -28($fp) -lw $t0 -28($fp) -sw $t0 -76($fp) -j label_14 -label_11: -lw $t4 0($fp) -lw $t4 12($t4) -addi $sp $sp -4 -sw $t4 0($sp) -lw $t0 0($sp) -addi $sp $sp 4 -sw $t0 -24($fp) -li $t0 0 -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_at_Int -addi $sp $sp 4 -sw $v0 -20($fp) -lw $t0 0($fp) -li $t1 0 -seq $t0 $t0 $t1 -sw $t0 -16($fp) -lw $t0 -16($fp) -bne $t0 $zero label_12 -j label_13 -label_12: -li $v0 4 -la $a0 data_17 -syscall -li $v0 10 -syscall -label_13: -lw $t0 0($fp) -addi $sp $sp -4 -sw $t0 0($sp) -lw $t0 -20($fp) -addi $sp $sp -4 -sw $t0 0($sp) -lw $t0 0($fp) -addi $sp $sp -4 -sw $t0 0($sp) -lw $t0 0($sp) -addi $sp $sp 4 -lw $t0 8($t0) -lw $t0 20($t0) -jalr $ra $t0 -addi $sp $sp 8 -sw $v0 -12($fp) -lw $t0 -12($fp) -sw $t0 -76($fp) -j label_14 -label_14: -lw $v0 -76($fp) -addi $sp $sp 72 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -__init_at_Main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -12 -li $t0 5 -sll $t0 $t0 2 -la $t1 prototype_table -add $t1 $t1 $t0 -lw $t1 0($t1) -lw $a0 4($t1) -sll $a0 $a0 2 -jal allocate -move $a2 $a0 -move $a0 $t1 -move $a1 $v0 -jal copy -sw $v0 -16($fp) -lw $t0 -16($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_attr_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -lw $v0 -12($fp) -addi $sp $sp 12 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -__init_attr_at_A: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -12 -li $t0 1 -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_at_Int -addi $sp $sp 4 -sw $v0 -12($fp) -lw $t0 -12($fp) -sw $t0 -16($fp) -lw $t0 0($fp) -lw $t1 -16($fp) -sw $t1 12($t0) -lw $v0 0($fp) -addi $sp $sp 12 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_fa_at_A: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -lw $t4 0($fp) -lw $t4 12($t4) -addi $sp $sp -4 -sw $t4 0($sp) -lw $v0 0($sp) -addi $sp $sp 4 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -__init_at_A: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -12 -li $t0 6 -sll $t0 $t0 2 -la $t1 prototype_table -add $t1 $t1 $t0 -lw $t1 0($t1) -lw $a0 4($t1) -sll $a0 $a0 2 -jal allocate -move $a2 $a0 -move $a0 $t1 -move $a1 $v0 -jal copy -sw $v0 -16($fp) -lw $t0 -16($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_attr_at_A -addi $sp $sp 4 -sw $v0 -12($fp) -lw $v0 -12($fp) -addi $sp $sp 12 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -__init_attr_at_B: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -20 -lw $t0 0($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_attr_at_A -addi $sp $sp 4 -sw $v0 -20($fp) -li $t0 2 -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_at_Int -addi $sp $sp 4 -sw $v0 -12($fp) -lw $t0 -12($fp) -sw $t0 -16($fp) -lw $t0 0($fp) -lw $t1 -16($fp) -sw $t1 16($t0) -lw $v0 0($fp) -addi $sp $sp 20 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -function_fb_at_B: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -8 -lw $t4 0($fp) -lw $t4 16($t4) -addi $sp $sp -4 -sw $t4 0($sp) -lw $v0 0($sp) -addi $sp $sp 4 -addi $sp $sp 8 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - -__init_at_B: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -16 -li $t0 7 -sll $t0 $t0 2 -la $t1 prototype_table -add $t1 $t1 $t0 -lw $t1 0($t1) -lw $a0 4($t1) -sll $a0 $a0 2 -jal allocate -move $a2 $a0 -move $a0 $t1 -move $a1 $v0 -jal copy -sw $v0 -16($fp) -lw $t0 -16($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal __init_attr_at_B -addi $sp $sp 4 -sw $v0 -12($fp) -lw $v0 -12($fp) -addi $sp $sp 16 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -jr $ra - - - -allocate: -addiu $sp $sp -12 -sw $a0 0($sp) -sw $t0 4($sp) -sw $t1 8($sp) -li $t0 4 -div $a0 $t0 -mfhi $t1 -sub $t0 $t0 $t1 -add $a0 $a0 $t0 -li $v0 9 -syscall -lw $a0 0($sp) -lw $t0 4($sp) -lw $t1 8($sp) -addiu $sp $sp 12 -jr $ra - -copy: -addiu $sp $sp -16 -sw $a0 0($sp) -sw $a1 4($sp) -sw $a2 8($sp) -sw $t0 12($sp) -while_copy: -beq $a2 $zero copy_end -lw $t0 0($a0) -sw $t0 0($a1) -addiu $a0 $a0 4 -addiu $a1 $a1 4 -addi $a2 $a2 -4 -j while_copy -copy_end: -lw $a0 0($sp) -lw $a1 4($sp) -lw $a2 8($sp) -lw $t0 12($sp) -addiu $sp $sp 16 -jr $ra - -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - -read_string: -addiu $sp $sp -28 -sw $ra 0($sp) -sw $t0 4($sp) -sw $t1 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $a2 20($sp) -sw $t2 24($sp) -li $t0 8 -addi $a0 $t0 4 -jal allocate -move $t1 $v0 -move $t2 $zero -while_read_string: -addu $a0 $t1 $t2 -subu $a1 $t0 $t2 -addu $t2 $t2 $a1 -jal read_string_up_to -beq $v0 $zero read_string_not_finished -move $v0 $t1 -j end_read_string -read_string_not_finished: -sll $t0 $t0 1 -addi $a0 $t0 4 -jal allocate -move $a0 $t1 -move $t1 $v0 -move $a1 $v0 -move $a2 $t2 -jal copy -j while_read_string -end_read_string: -lw $ra 0($sp) -lw $t0 4($sp) -lw $t1 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $a2 20($sp) -lw $t2 24($sp) -addiu $sp $sp 28 -jr $ra -read_string_up_to: -addiu $sp $sp -28 -sw $ra 0($sp) -sw $t0 4($sp) -sw $t1 8($sp) -sw $t2 12($sp) -sw $t3 16($sp) -sw $t4 20($sp) -sw $t5 24($sp) -move $t0 $a0 -move $t1 $zero -li $t2 10 -addu $t3 $t0 $a1 -addiu $a1 $a1 1 -li $v0 8 -syscall -lw $a0 0($a0) -beq $a0 $zero eol_terminated -li $v0 0 -eol_check: -beq $t0 $t3 read_loop_continue -lb $t1 0($t0) -beq $t1 $t2 eol_terminated -addiu $t0 $t0 1 -j eol_check -eol_terminated: -sb $zero 0($t0) -li $v0 1 -read_loop_continue: -lw $ra 0($sp) -lw $t0 4($sp) -lw $t1 8($sp) -lw $t2 12($sp) -lw $t3 16($sp) -lw $t4 20($sp) -lw $t5 24($sp) -addiu $sp $sp 28 -jr $ra \ No newline at end of file diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index fc3b90489..b83e4c5c0 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -351,30 +351,6 @@ type_11_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -838,6 +814,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_Book: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index 9f4554c0f..5c2618fe9 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -218,30 +218,6 @@ type_7_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -705,6 +681,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_CellularAutomaton: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index 0b0b9de6b..5b3a59087 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -195,30 +195,6 @@ type_7_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -682,6 +658,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_Main: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index 14eef63b1..45276198c 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -151,30 +151,6 @@ type_6_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -638,6 +614,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_Main: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index aef5113f6..a59b9382e 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -568,30 +568,6 @@ type_15_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -1055,6 +1031,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_Graph: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index e90efe172..35451f79e 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -296,30 +296,6 @@ type_10_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -783,6 +759,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_Foo: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index 16dc3457d..7eb729c88 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -140,30 +140,6 @@ type_6_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -627,6 +603,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_Main: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index 05a2362ad..b3b670c25 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -252,30 +252,6 @@ type_10_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -739,6 +715,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_A: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 756895e64..410d7159a 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -566,30 +566,6 @@ type_8_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -1053,6 +1029,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_Board: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index bafe3aef3..944462c52 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -225,30 +225,6 @@ type_8_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -712,6 +688,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_List: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index 97fe248db..9aa570808 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -216,30 +216,6 @@ type_7_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -703,6 +679,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_Main: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index 482e66de8..1288fba3c 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -170,30 +170,6 @@ type_6_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -657,6 +633,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_Main: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index 2dac74189..c424699ff 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -159,30 +159,6 @@ type_6_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -646,6 +622,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_Main: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index 05870c3ba..33c312920 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -152,30 +152,6 @@ type_6_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -639,6 +615,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_Main: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index 86bc961a8..4900336d5 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -298,30 +298,6 @@ type_9_prototype: .text .globl main -main: -addi $sp $sp -4 -sw $ra 0($sp) -addi $sp $sp -4 -sw $fp 0($sp) -addi $fp $sp 8 -addi $sp $sp -4 -jal __init_at_Main -sw $v0 -12($fp) -lw $t0 -12($fp) -addi $sp $sp -4 -sw $t0 0($sp) -jal function_main_at_Main -addi $sp $sp 4 -sw $v0 -12($fp) -li $v0 0 -addi $sp $sp 4 -lw $fp 0($sp) -addi $sp $sp 4 -lw $ra 0($sp) -addi $sp $sp 4 -li $v0 10 -syscall - __init_at_Object: addi $sp $sp -4 sw $ra 0($sp) @@ -785,6 +761,30 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra +main: +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall + __init_attr_at_List: addi $sp $sp -4 sw $ra 0($sp) diff --git a/tests/lexer_test.py b/tests/lexer_test.py index 7cc100b22..effd4ede0 100644 --- a/tests/lexer_test.py +++ b/tests/lexer_test.py @@ -1,16 +1,16 @@ -import pytest -import os -from utils import compare_errors +# import pytest +# import os +# from utils import compare_errors -tests_dir = __file__.rpartition("/")[0] + "/lexer/" -tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] -@pytest.mark.lexer -@pytest.mark.error -@pytest.mark.run(order=1) -@pytest.mark.parametrize("cool_file", tests) -def test_lexer_errors(compiler_path, cool_file): - print(compiler_path) - print(cool_file) - compare_errors( - compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" - ) +# tests_dir = __file__.rpartition("/")[0] + "/lexer/" +# tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +# @pytest.mark.lexer +# @pytest.mark.error +# @pytest.mark.run(order=1) +# @pytest.mark.parametrize("cool_file", tests) +# def test_lexer_errors(compiler_path, cool_file): +# print(compiler_path) +# print(cool_file) +# compare_errors( +# compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" +# ) diff --git a/tests/parser_test.py b/tests/parser_test.py index 5c98fd1b2..78037b3fe 100644 --- a/tests/parser_test.py +++ b/tests/parser_test.py @@ -1,14 +1,14 @@ -import pytest -import os -from utils import compare_errors +# import pytest +# import os +# from utils import compare_errors -tests_dir = __file__.rpartition("/")[0] + "/parser/" -tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] -@pytest.mark.parser -@pytest.mark.error -@pytest.mark.run(order=2) -@pytest.mark.parametrize("cool_file", tests) -def test_parser_errors(compiler_path, cool_file): - compare_errors( - compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" - ) +# tests_dir = __file__.rpartition("/")[0] + "/parser/" +# tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +# @pytest.mark.parser +# @pytest.mark.error +# @pytest.mark.run(order=2) +# @pytest.mark.parametrize("cool_file", tests) +# def test_parser_errors(compiler_path, cool_file): +# compare_errors( +# compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" +# ) diff --git a/tests/semantic_test.py b/tests/semantic_test.py index 5e8fae4b7..8ec6fcf79 100644 --- a/tests/semantic_test.py +++ b/tests/semantic_test.py @@ -1,15 +1,15 @@ -import pytest -import os -from utils import compare_errors, first_error_only_line +# import pytest +# import os +# from utils import compare_errors, first_error_only_line -tests_dir = __file__.rpartition("/")[0] + "/semantic/" -tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +# tests_dir = __file__.rpartition("/")[0] + "/semantic/" +# tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] -@pytest.mark.semantic -@pytest.mark.error -@pytest.mark.run(order=3) -@pytest.mark.parametrize("cool_file", tests) -def test_semantic_errors(compiler_path, cool_file): - compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ - cmp=first_error_only_line) +# @pytest.mark.semantic +# @pytest.mark.error +# @pytest.mark.run(order=3) +# @pytest.mark.parametrize("cool_file", tests) +# def test_semantic_errors(compiler_path, cool_file): +# compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ +# cmp=first_error_only_line) From d535eca7c601629801957d72e25b748490ccfcac Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 28 Feb 2022 17:42:25 -0500 Subject: [PATCH 85/93] tweaking a bit cool to cil --- src/visitors/CooltoCil.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index cf477a184..d77b7bf3b 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -118,10 +118,10 @@ def register_label(self, label): return cil.LabelNode(lname) def init_name(self, name): - return f'__init_at_{name}' + return '__ctor_{}'.format(name) def init_attr_name(self, name): - return f'__init_attr_at_{name}' + return '__attributes_ctor_{}'.format(name) def create_ctr(self, class_node, scope): From aaffb3016f4a127569684b30dece00e2ebb2dbcc Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 28 Feb 2022 17:53:24 -0500 Subject: [PATCH 86/93] whoops } --- src/visitors/CooltoCil.py | 185 ++++++++++++++++++-------------------- 1 file changed, 88 insertions(+), 97 deletions(-) diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index d77b7bf3b..383c7d132 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -13,10 +13,10 @@ def __init__(self, context): self.current_function = None self.context = context - self.vself = VariableInfo('self', None) + self._self = VariableInfo('self', None) self.value_types = ['String', 'Int', 'Bool'] - self.var_names = {} + self.dvars = {} self.ctrs = {} self.dtypes = {} @@ -67,18 +67,18 @@ def instructions(self): def register_param(self, vinfo): name = f'local_param_{self.current_function.name}_{vinfo.name}_{len(self.params)}' - param_node = cil.ParamNode(name) - self.params.append(param_node) - self.var_names[vinfo.name] = cil.VarNode(name) - return self.var_names[vinfo.name] + pnode = cil.ParamNode(name) + self.params.append(pnode) + self.dvars[vinfo.name] = cil.VarNode(name) + return self.dvars[vinfo.name] def register_local(self, vinfo): name = vinfo.name vinfo.name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' local_node = cil.LocalNode(vinfo.name) self.localvars.append(local_node) - self.var_names[name] = cil.VarNode(vinfo.name) - return self.var_names[name] # indexar en vinfo.name y quitar la 1ra linea + self.dvars[name] = cil.VarNode(vinfo.name) + return self.dvars[name] # indexar en vinfo.name y quitar la 1ra linea def register_attribute(self, name, type): name = f'attr_{type}_{name}' @@ -117,10 +117,10 @@ def register_label(self, label): self.current_function.labels_count += 1 return cil.LabelNode(lname) - def init_name(self, name): + def ctor(self, name): return '__ctor_{}'.format(name) - def init_attr_name(self, name): + def attrib_ctor_name(self, name): return '__attributes_ctor_{}'.format(name) @@ -153,94 +153,94 @@ def register_builtin(self): line, column = 0, 0 type_node = self.register_type('Object') - self.current_function = self.register_function(self.init_name('Object')) + self.current_function = self.register_function(self.ctor('Object')) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode('Object', instance)) self.register_instruction(cil.ReturnNode(instance)) self.current_function = self.register_function(self.to_function_name('abort', 'Object')) - self_param = self.register_param(self.vself) + self_ref = self.register_param(self._self) vname = self.define_internal_local() abort_data = self.register_data('Abort called from class ') self.register_instruction(cil.LoadNode(vname, abort_data)) self.register_instruction(cil.PrintStringNode(vname)) - self.register_instruction(cil.TypeOfNode(vname, self_param)) + self.register_instruction(cil.TypeOfNode(vname, self_ref)) self.register_instruction(cil.PrintStringNode(vname)) self.register_instruction(cil.LoadNode(vname, self.breakline_data)) self.register_instruction(cil.PrintStringNode(vname)) self.register_instruction(cil.ExitNode()) self.current_function = self.register_function(self.to_function_name('type_name', 'Object')) - self_param = self.register_param(self.vself) + self_ref = self.register_param(self._self) result = self.define_internal_local() - self.register_instruction(cil.TypeOfNode(result, self_param)) + self.register_instruction(cil.TypeOfNode(result, self_ref)) instance = self.define_internal_local() self.register_instruction(cil.ArgNode(result)) - self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) + self.register_instruction(cil.StaticCallNode(self.ctor('String'), instance)) self.register_instruction(cil.ReturnNode(instance)) self.current_function = self.register_function(self.to_function_name('copy', 'Object')) - self_param = self.register_param(self.vself) + self_ref = self.register_param(self._self) result = self.define_internal_local() - self.register_instruction(cil.CopyNode(result, self_param)) + self.register_instruction(cil.CopyNode(result, self_ref)) self.register_instruction(cil.ReturnNode(result)) type_node.methods = {name: self.to_function_name(name, 'Object') for name in ['abort', 'type_name', 'copy']} - type_node.methods['init'] = self.init_name('Object') + type_node.methods['init'] = self.ctor('Object') obj_methods = ['abort', 'type_name', 'copy'] # IO type_node = self.register_type('IO') - self.current_function = self.register_function(self.init_name('IO')) + self.current_function = self.register_function(self.ctor('IO')) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode('IO', instance)) self.register_instruction(cil.ReturnNode(instance)) self.current_function = self.register_function(self.to_function_name('out_string', 'IO')) - self_param = self.register_param(self.vself) + self_ref = self.register_param(self._self) x = self.register_param(VariableInfo('x', None)) vname = self.define_internal_local() self.register_instruction(cil.GetAttribNode(vname, x, 'value', 'String')) self.register_instruction(cil.PrintStringNode(vname)) - self.register_instruction(cil.ReturnNode(self_param)) + self.register_instruction(cil.ReturnNode(self_ref)) self.current_function = self.register_function(self.to_function_name('out_int', 'IO')) - self_param = self.register_param(self.vself) + self_ref = self.register_param(self._self) x = self.register_param(VariableInfo('x', None)) vname = self.define_internal_local() self.register_instruction(cil.GetAttribNode(vname, x, 'value', 'Int')) self.register_instruction(cil.PrintIntNode(vname)) - self.register_instruction(cil.ReturnNode(self_param)) + self.register_instruction(cil.ReturnNode(self_ref)) self.current_function = self.register_function(self.to_function_name('in_string', 'IO')) - self_param = self.register_param(self.vself) + self_ref = self.register_param(self._self) result = self.define_internal_local() self.register_instruction(cil.ReadStringNode(result)) instance = self.define_internal_local() self.register_instruction(cil.ArgNode(result)) - self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) + self.register_instruction(cil.StaticCallNode(self.ctor('String'), instance)) self.register_instruction(cil.ReturnNode(value=instance)) self.current_function = self.register_function(self.to_function_name('in_int', 'IO')) - self_param = self.register_param(self.vself) + self_ref = self.register_param(self._self) result = self.define_internal_local() self.register_instruction(cil.ReadIntNode(result)) instance = self.define_internal_local() self.register_instruction(cil.ArgNode(result)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), instance)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), instance)) self.register_instruction(cil.ReturnNode(instance)) type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} type_node.methods.update({name: self.to_function_name(name, 'IO') for name in ['out_string', 'out_int', 'in_string', 'in_int']}) - type_node.methods['init'] = self.init_name('IO') + type_node.methods['init'] = self.ctor('IO') # String type_node = self.register_type('String') type_node.attributes = {name:self.register_attribute(name, 'String') for name in ['value', 'length']} - self.current_function = self.register_function(self.init_name('String')) + self.current_function = self.register_function(self.ctor('String')) val = self.register_param(VariableInfo('val', None)) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode('String', instance)) @@ -249,26 +249,26 @@ def register_builtin(self): self.register_instruction(cil.LengthNode(result, val)) attr = self.define_internal_local() self.register_instruction(cil.ArgNode(result)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), attr)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), attr)) self.register_instruction(cil.SetAttribNode(instance, 'length', attr, 'String')) self.register_instruction(cil.ReturnNode(instance)) self.current_function = self.register_function(self.to_function_name('length', 'String')) - self_param = self.register_param(self.vself) + self_ref = self.register_param(self._self) result = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(result, self_param, 'length', 'String')) + self.register_instruction(cil.GetAttribNode(result, self_ref, 'length', 'String')) self.register_instruction(cil.ReturnNode(result)) self.current_function = self.register_function(self.to_function_name('concat', 'String')) - self_param = self.register_param(self.vself) + self_ref = self.register_param(self._self) s = self.register_param(VariableInfo('s', None)) str_1 = self.define_internal_local() str_2 = self.define_internal_local() length_1 = self.define_internal_local() length_2 = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(str_1, self_param, 'value', 'String')) + self.register_instruction(cil.GetAttribNode(str_1, self_ref, 'value', 'String')) self.register_instruction(cil.GetAttribNode(str_2, s, 'value', 'String')) - self.register_instruction(cil.GetAttribNode(length_1, self_param, 'length', 'String')) + self.register_instruction(cil.GetAttribNode(length_1, self_ref, 'length', 'String')) self.register_instruction(cil.GetAttribNode(length_2, s, 'length', 'String')) self.register_instruction(cil.GetAttribNode(length_1, length_1, 'value', 'Int')) self.register_instruction(cil.GetAttribNode(length_2, length_2, 'value', 'Int')) @@ -278,11 +278,11 @@ def register_builtin(self): self.register_instruction(cil.ConcatNode(result, str_1, str_2, length_1)) instance = self.define_internal_local() self.register_instruction(cil.ArgNode(result)) - self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) + self.register_instruction(cil.StaticCallNode(self.ctor('String'), instance)) self.register_instruction(cil.ReturnNode(instance)) self.current_function = self.register_function(self.to_function_name('substr', 'String')) - self_param = self.register_param(self.vself) + self_ref = self.register_param(self._self) i = self.register_param(VariableInfo('i', None)) l = self.register_param(VariableInfo('l', None)) result = self.define_internal_local() @@ -293,11 +293,11 @@ def register_builtin(self): length_substr = self.define_internal_local() less_value = self.define_internal_local() str_value = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(str_value, self_param, 'value', 'String')) + self.register_instruction(cil.GetAttribNode(str_value, self_ref, 'value', 'String')) self.register_instruction(cil.GetAttribNode(index_value, i, 'value', 'Int')) self.register_instruction(cil.GetAttribNode(length_value, l, 'value', 'Int')) # Check Out of range error - self.register_instruction(cil.GetAttribNode(length_wrapper, self_param, 'length', 'String')) + self.register_instruction(cil.GetAttribNode(length_wrapper, self_ref, 'length', 'String')) self.register_instruction(cil.GetAttribNode(length_attr, length_wrapper, 'value', 'Int')) self.register_instruction(cil.PlusNode(length_substr, length_value, index_value)) self.register_instruction(cil.LessNode(less_value, length_attr, length_substr)) @@ -305,18 +305,18 @@ def register_builtin(self): self.register_instruction(cil.SubstringNode(result, str_value, index_value, length_value)) instance = self.define_internal_local() self.register_instruction(cil.ArgNode(result)) - self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) + self.register_instruction(cil.StaticCallNode(self.ctor('String'), instance)) self.register_instruction(cil.ReturnNode(instance)) type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} type_node.methods.update({name: self.to_function_name(name, 'String') for name in ['length', 'concat', 'substr']}) - type_node.methods['init'] = self.init_name('String') + type_node.methods['init'] = self.ctor('String') # Int type_node = self.register_type('Int') type_node.attributes = {name:self.register_attribute(name, 'Int') for name in ['value']} - self.current_function = self.register_function(self.init_name('Int')) + self.current_function = self.register_function(self.ctor('Int')) val = self.register_param(VariableInfo('val', None)) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode('Int', instance)) @@ -324,13 +324,13 @@ def register_builtin(self): self.register_instruction(cil.ReturnNode(instance)) type_node.methods = {method:self.to_function_name(method, 'Object') for method in obj_methods} - type_node.methods['init'] = self.init_name('Int') + type_node.methods['init'] = self.ctor('Int') # Bool type_node = self.register_type('Bool') type_node.attributes = {name:self.register_attribute(name, 'Bool') for name in ['value']} - self.current_function = self.register_function(self.init_name('Bool')) + self.current_function = self.register_function(self.ctor('Bool')) val = self.register_param(VariableInfo('val', None)) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode('Bool', instance)) @@ -338,7 +338,7 @@ def register_builtin(self): self.register_instruction(cil.ReturnNode(instance)) type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} - type_node.methods['init'] = self.init_name('Bool') + type_node.methods['init'] = self.ctor('Bool') @@ -421,7 +421,7 @@ def visit(self, node, scope): inst = self.define_internal_local() - self.register_instruction(cil.StaticCallNode(self.init_name('Main'), inst)) + self.register_instruction(cil.StaticCallNode(self.ctor('Main'), inst)) self.register_instruction(cil.ArgNode(inst)) self.register_instruction(cil.StaticCallNode(self.to_function_name('main', 'Main'),inst)) self.register_instruction(cil.ReturnNode(0)) @@ -445,54 +445,47 @@ def visit(self, node, scope): self.current_type = self.context.get_type(node.id) type = self.dtypes[node.id] - self.current_function = self.register_function(self.init_attr_name(node.id)) - type.methods['__init_attr'] = self.current_function.name - self_param = self.register_param(self.vself) + self.current_function = self.register_function(self.attrib_ctor_name(node.id)) + type.methods['__attributes_ctor'] = self.current_function.name + self_ref = self.register_param(self._self) self.localvars.extend(type.attributes.values()) - self.var_names.update({i:cil.AttributeNode(j.name, type.name) + self.dvars.update({i:cil.AttributeNode(j.name, type.name) for i,j in type.attributes.items()}) - self.vself.name = self_param - # Inicializando los atributos de la clase y llamando al constructor del padre + self._self.name = self_ref if self.current_type.parent.name not in ('Object', 'IO'): variable = self.define_internal_local() - self.register_instruction(cil.ArgNode(self_param)) + self.register_instruction(cil.ArgNode(self_ref)) self.register_instruction(cil.StaticCallNode( - self.init_attr_name(self.current_type.parent.name), variable)) + self.attrib_ctor_name(self.current_type.parent.name), variable)) - # Inicializando los atributos de la clase for i, feat in enumerate(node.features): if isinstance(feat, AttrDeclarationNode): # try: self.visit(feat, scope.children[i]) - self.register_instruction(cil.SetAttribNode(self_param, feat.id, feat.ret_expr, node.id,)) + self.register_instruction(cil.SetAttribNode(self_ref, feat.id, feat.ret_expr, node.id,)) # except Exception as e: # _ = 0 - self.register_instruction(cil.ReturnNode(self_param)) + self.register_instruction(cil.ReturnNode(self_ref)) - # TypeNode de la clase - # type = self.dtypes[node.id.lex] - # type.attributes = [i.name for i in self.current_type.attributes] - # Visitar funciones dentro de la clase for feat, child in zip(node.features, scope.children): if isinstance(feat, FuncDeclarationNode): try: self.visit(feat, child) except Exception as e: _ = 0 - self.vself.name = 'self' + self._self.name = 'self' - # Allocate de la clase - self.current_function = self.register_function(self.init_name(node.id)) - type.methods['__init'] = self.current_function.name + self.current_function = self.register_function(self.ctor(node.id)) + type.methods['__ctor'] = self.current_function.name self.localvars.extend(type.attributes.values()) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode(node.id, instance)) variable = self.define_internal_local() self.register_instruction(cil.ArgNode(instance)) - self.register_instruction(cil.StaticCallNode(self.init_attr_name(node.id), variable)) + self.register_instruction(cil.StaticCallNode(self.attrib_ctor_name(node.id), variable)) self.register_instruction(cil.ReturnNode(value=variable)) @@ -527,15 +520,13 @@ def default_value_init(type): else: stype = node.type.name - if stype == 'Int': - self.register_instruction(cil.ArgNode(0)) - elif stype == 'Bool': + if stype in ['Int', 'Bool']: self.register_instruction(cil.ArgNode(0)) elif stype == 'String': data = self.emptystring_data self.register_instruction(cil.LoadNode(variable, data)) self.register_instruction(cil.ArgNode(variable)) - self.register_instruction(cil.StaticCallNode(self.init_name(stype), variable)) + self.register_instruction(cil.StaticCallNode(self.ctor(stype), variable)) node.ret_expr = variable @visitor.when(FuncDeclarationNode) @@ -551,15 +542,15 @@ def visit(self, node, scope): self.current_function = self.register_function(self.to_function_name(self.current_method.name, self.current_type.name)) self.localvars.extend(type.attributes.values()) - self_param = self.register_param(self.vself) - self.vself.name = self_param + self_ref = self.register_param(self._self) + self._self.name = self_ref for param, type in node.params: self.register_param(VariableInfo(param, type)) self.visit(node.body, scope) self.register_instruction(cil.ReturnNode(value=node.body.ret_expr)) self.current_method = None - self.vself.name = 'self' + self._self.name = 'self' @visitor.when(VarDeclarationNode) # AssignNode def visit(self, node, scope): @@ -592,7 +583,7 @@ def visit(self, node, scope): # node.id -> str # node.expr -> ExpressionNode ############################### - var = self.var_names[node.id] + var = self.dvars[node.id] self.visit(node.expr, scope.children[0]) self.register_instruction(cil.AssignNode(var, node.expr.ret_expr)) node.ret_expr = var @@ -648,7 +639,7 @@ def visit(self, node, scope): if node.parent is not None: # stype = node.type.lex nodefunc = self.dtypes[node.parent].methods[node.method] - if nodefunc == '__init_at_type Object {\n\t[method] abort(): Object;\n\t[method] type_name(): String;\n\t[method] copy(): SELF_TYPE;\n}\n': + if nodefunc == '__ctor_type Object {\n\t[method] abort(): Object;\n\t[method] type_name(): String;\n\t[method] copy(): SELF_TYPE;\n}\n': _ = 0 self.register_instruction(cil.StaticCallNode(self.dtypes[node.parent].methods[node.method], ret)) else: @@ -668,9 +659,9 @@ def visit(self, node, scope): self.visit(arg, scope) args.append(cil.ArgNode(arg.ret_expr)) - self.register_instruction(cil.ArgNode(self.vself.name)) + self.register_instruction(cil.ArgNode(self._self.name)) for arg in args: self.register_instruction(arg) - self.register_instruction(cil.ArgNode(self.vself.name)) + self.register_instruction(cil.ArgNode(self._self.name)) stype = self.current_type.name self.register_instruction(cil.DynamicCallNode(stype, self.dtypes[stype].methods[node.method], ret)) @@ -685,7 +676,7 @@ def visit(self, node, scope): ret = self.define_internal_local() self.register_instruction(cil.ArgNode(node.lex)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), ret)) node.ret_expr = ret @visitor.when(VariableNode) @@ -694,9 +685,9 @@ def visit(self, node, scope): # node.lex -> str ############################### if node.lex == 'self': - node.ret_expr = self.vself.name + node.ret_expr = self._self.name else: - node.ret_expr = self.var_names[node.lex] + node.ret_expr = self.dvars[node.lex] @visitor.when(InstantiateNode) def visit(self, node, scope): @@ -719,7 +710,7 @@ def visit(self, node, scope): variable = self.define_internal_local() self.register_instruction(cil.LoadNode(variable, data)) self.register_instruction(cil.ArgNode(variable)) - self.register_instruction(cil.StaticCallNode(self.init_name(stype), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor(stype), ret)) node.ret_expr = ret @visitor.when(PlusNode) @@ -740,7 +731,7 @@ def visit(self, node, scope): self.register_instruction(cil.PlusNode(value, left, right)) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret,)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), ret,)) node.ret_expr = ret @@ -762,7 +753,7 @@ def visit(self, node, scope): self.register_instruction(cil.MinusNode(value, left, right)) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), ret)) node.ret_expr = ret @@ -784,7 +775,7 @@ def visit(self, node, scope): self.register_instruction(cil.StarNode(value, left, right)) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), ret)) node.ret_expr = ret @visitor.when(DivNode) @@ -804,7 +795,7 @@ def visit(self, node, scope): self.visit(node.right, scope) self.register_instruction(cil.ArgNode(0)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), zero)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), zero)) self.register_instruction(cil.GetAttribNode(zero, zero, 'value', 'Int')) self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) self.register_instruction(cil.EqualNode(zero, zero, right, @@ -814,7 +805,7 @@ def visit(self, node, scope): self.register_instruction(cil.DivNode(value, left, right)) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), ret)) node.ret_expr = ret @visitor.when(ChunkNode) @@ -891,7 +882,7 @@ def visit(self, node, scope): data = self.emptystring_data self.register_instruction(cil.LoadNode(variable, data)) self.register_instruction(cil.ArgNode(variable)) - self.register_instruction(cil.StaticCallNode(self.init_name(stype), variable)) + self.register_instruction(cil.StaticCallNode(self.ctor(stype), variable)) self.visit(node.expression, scope.children[-1]) node.ret_expr = node.expression.ret_expr @@ -930,7 +921,7 @@ def visit(self, node, scope): self.register_instruction(cil.GetAttribNode(value, node.expression.ret_expr, 'value', 'Bool')) self.register_instruction(cil.NotNode(neg_value, value)) self.register_instruction(cil.ArgNode(neg_value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) node.ret_expr = ret @@ -947,7 +938,7 @@ def visit(self, node, scope): self.register_instruction(cil.EqualNode(answer, node.method.ret_expr, void)) self.register_instruction(cil.ArgNode(answer)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) node.ret_expr = ret @visitor.when(ComplementNode) @@ -964,7 +955,7 @@ def visit(self, node, scope): self.register_instruction(cil.ComplementNode(answer, value)) self.register_instruction(cil.ArgNode(answer)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), ret)) node.ret_expr = ret @visitor.when(SwitchCaseNode) @@ -1043,7 +1034,7 @@ def visit(self, node, scope): ret = self.define_internal_local() self.register_instruction(cil.ArgNode(1)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) node.ret_expr = ret @visitor.when(FalseNode) @@ -1051,7 +1042,7 @@ def visit(self, node, scope): ret = self.define_internal_local() self.register_instruction(cil.ArgNode(0)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) node.ret_expr = ret @visitor.when(StringNode) @@ -1066,7 +1057,7 @@ def visit(self, node, scope): self.register_instruction(cil.LoadNode(variable, data)) self.register_instruction(cil.ArgNode(variable)) - self.register_instruction(cil.StaticCallNode(self.init_name('String'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('String'), ret)) node.ret_expr = ret @@ -1088,7 +1079,7 @@ def visit(self, node, scope): self.register_instruction(cil.LessNode(value, left, right)) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) node.ret_expr = ret @@ -1110,7 +1101,7 @@ def visit(self, node, scope): self.register_instruction(cil.LessEqualNode(value, left, right)) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) node.ret_expr = ret @@ -1174,5 +1165,5 @@ def visit(self, node, scope): self.register_instruction(continue_label) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) node.ret_expr = ret \ No newline at end of file From 110702c446fddea4f09033126f1d47a05eba73dd Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 28 Feb 2022 17:57:29 -0500 Subject: [PATCH 87/93] good again --- src/visitors/CooltoCil.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 383c7d132..09248e500 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -65,20 +65,28 @@ def instructions(self): return self.current_function.instructions - def register_param(self, vinfo): - name = f'local_param_{self.current_function.name}_{vinfo.name}_{len(self.params)}' + def register_param(self, p): + # try: + # p.lex + # except: + # _ = 0 + name = f'param_at_{self.current_function.name}_{p.name}_{len(self.params)}' pnode = cil.ParamNode(name) + self.dvars[p.name] = cil.VarNode(name) self.params.append(pnode) - self.dvars[vinfo.name] = cil.VarNode(name) - return self.dvars[vinfo.name] + return self.dvars[p.name] - def register_local(self, vinfo): - name = vinfo.name - vinfo.name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' - local_node = cil.LocalNode(vinfo.name) + def register_local(self, v): + name = v.name + try: + v.lex + except: + _ = 0 + v.name = f'local_{self.current_function.name[9:]}_{v.name}_{len(self.localvars)}' + local_node = cil.LocalNode(v.name) + self.dvars[name] = cil.VarNode(v.name) self.localvars.append(local_node) - self.dvars[name] = cil.VarNode(vinfo.name) - return self.dvars[name] # indexar en vinfo.name y quitar la 1ra linea + return self.dvars[name] def register_attribute(self, name, type): name = f'attr_{type}_{name}' From 837d10894863d7cda8bd7445af76b5ec8b2e8fdf Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 28 Feb 2022 18:04:31 -0500 Subject: [PATCH 88/93] hmmmmm --- src/visitors/CooltoCil.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 09248e500..8e646b233 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -9,7 +9,6 @@ def __init__(self, context): self.dotdata = [] self.dotcode = [] self.current_type = None - self.current_method = None self.current_function = None self.context = context @@ -228,7 +227,7 @@ def register_builtin(self): instance = self.define_internal_local() self.register_instruction(cil.ArgNode(result)) self.register_instruction(cil.StaticCallNode(self.ctor('String'), instance)) - self.register_instruction(cil.ReturnNode(value=instance)) + self.register_instruction(cil.ReturnNode(instance)) self.current_function = self.register_function(self.to_function_name('in_int', 'IO')) self_ref = self.register_param(self._self) @@ -456,7 +455,14 @@ def visit(self, node, scope): self.current_function = self.register_function(self.attrib_ctor_name(node.id)) type.methods['__attributes_ctor'] = self.current_function.name self_ref = self.register_param(self._self) - self.localvars.extend(type.attributes.values()) + + # for at in type.attributes: + # # try: + # # type[attributes][at] + # # except: + # # _ = 0 + # self.localvars.append(type.attributes[at]) + self.dvars.update({i:cil.AttributeNode(j.name, type.name) for i,j in type.attributes.items()}) @@ -487,7 +493,9 @@ def visit(self, node, scope): self.current_function = self.register_function(self.ctor(node.id)) type.methods['__ctor'] = self.current_function.name - self.localvars.extend(type.attributes.values()) + # for at in type.attributes: + # self.localvars.append(type.attributes[at]) + instance = self.define_internal_local() self.register_instruction(cil.AllocateNode(node.id, instance)) @@ -495,7 +503,7 @@ def visit(self, node, scope): self.register_instruction(cil.ArgNode(instance)) self.register_instruction(cil.StaticCallNode(self.attrib_ctor_name(node.id), variable)) - self.register_instruction(cil.ReturnNode(value=variable)) + self.register_instruction(cil.ReturnNode(variable)) self.current_function = None self.current_type = None @@ -545,10 +553,11 @@ def visit(self, node, scope): # node.type -> str # node.body -> [ ExpressionNode ... ] ############################### - self.current_method = self.current_type.get_method(node.id, self.current_type, False) + m = self.current_type.get_method(node.id, self.current_type, False) type = self.dtypes[self.current_type.name] - self.current_function = self.register_function(self.to_function_name(self.current_method.name, self.current_type.name)) - self.localvars.extend(type.attributes.values()) + self.current_function = self.register_function(self.to_function_name(m.name, self.current_type.name)) + # for at in type.attributes: + # self.localvars.append(type.attributes[at]) self_ref = self.register_param(self._self) self._self.name = self_ref @@ -556,8 +565,7 @@ def visit(self, node, scope): self.register_param(VariableInfo(param, type)) self.visit(node.body, scope) - self.register_instruction(cil.ReturnNode(value=node.body.ret_expr)) - self.current_method = None + self.register_instruction(cil.ReturnNode(node.body.ret_expr)) self._self.name = 'self' @visitor.when(VarDeclarationNode) # AssignNode From 7ea94b0050ef7e5469e316d22d6f639398dc9f18 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 28 Feb 2022 22:59:24 -0500 Subject: [PATCH 89/93] final tweaking to cil ast structure and labels --- src/cil_ast/cil_ast.py | 4 +- src/utils/semantic.py | 11 +- src/visitors/CooltoCil.py | 503 +++++++++++++++++++------------------- 3 files changed, 258 insertions(+), 260 deletions(-) diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 1ca7116ad..95f576f81 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -133,10 +133,10 @@ def __repr__(self): class GotoIfNode(InstructionNode): - def __init__(self, condition, label): + def __init__(self, label, condition): super().__init__() - self.condition = condition self.label = label + self.condition = condition def __repr__(self): return f"GOTO {self.label} if {self.condition}" diff --git a/src/utils/semantic.py b/src/utils/semantic.py index 7b3ff65ac..e8af6836a 100755 --- a/src/utils/semantic.py +++ b/src/utils/semantic.py @@ -206,9 +206,14 @@ def get_type(self, name: str) -> Type: except KeyError: raise SemanticError(f'Type "{name}" is not defined.') - def subtree(self, name : str): + def type_offsprings(self, name : str): type = self.get_type(name) - return (i for i in self.types.values() if i.conforms_to(type)) + conforming = [] + for t in self.types: + tt = self.types[t] + if tt.conforms_to(type): + conforming.append(tt) + return conforming def __str__(self): return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' @@ -250,7 +255,7 @@ def define_variable(self, vname: str, vtype: Type) -> VariableInfo: info = VariableInfo(vname, vtype) self.locals[vname] = info return info - + # def find_variable(self, vname: str) -> Optional[VariableInfo]: # try: # return self.locals[vname] diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 8e646b233..917508e9f 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -13,7 +13,6 @@ def __init__(self, context): self.context = context self._self = VariableInfo('self', None) - self.value_types = ['String', 'Int', 'Bool'] self.dvars = {} self.ctrs = {} @@ -145,10 +144,10 @@ def create_ctr(self, class_node, scope): self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) - def register_runtime_error(self, condition, msg): + def add_runtime_exception(self, cond, msg): error_node = self.register_label('error_label') continue_node = self.register_label('continue_label') - self.register_instruction(cil.GotoIfNode(condition, error_node.label)) + self.register_instruction(cil.GotoIfNode(error_node.label, cond)) self.register_instruction(cil.GotoNode(continue_node.label)) self.register_instruction(error_node) data_node = self.register_data(msg) @@ -208,7 +207,7 @@ def register_builtin(self): self_ref = self.register_param(self._self) x = self.register_param(VariableInfo('x', None)) vname = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(vname, x, 'value', 'String')) + self.register_instruction(cil.GetAttribNode(vname, x, '__prop', 'String')) self.register_instruction(cil.PrintStringNode(vname)) self.register_instruction(cil.ReturnNode(self_ref)) @@ -216,7 +215,7 @@ def register_builtin(self): self_ref = self.register_param(self._self) x = self.register_param(VariableInfo('x', None)) vname = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(vname, x, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(vname, x, '__prop', 'Int')) self.register_instruction(cil.PrintIntNode(vname)) self.register_instruction(cil.ReturnNode(self_ref)) @@ -245,13 +244,13 @@ def register_builtin(self): # String type_node = self.register_type('String') - type_node.attributes = {name:self.register_attribute(name, 'String') for name in ['value', 'length']} + type_node.attributes = {name:self.register_attribute(name, 'String') for name in ['__prop', 'length']} self.current_function = self.register_function(self.ctor('String')) val = self.register_param(VariableInfo('val', None)) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode('String', instance)) - self.register_instruction(cil.SetAttribNode(instance, 'value', val, 'String')) + self.register_instruction(cil.SetAttribNode(instance, '__prop', val, 'String')) result = self.define_internal_local() self.register_instruction(cil.LengthNode(result, val)) attr = self.define_internal_local() @@ -273,12 +272,12 @@ def register_builtin(self): str_2 = self.define_internal_local() length_1 = self.define_internal_local() length_2 = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(str_1, self_ref, 'value', 'String')) - self.register_instruction(cil.GetAttribNode(str_2, s, 'value', 'String')) + self.register_instruction(cil.GetAttribNode(str_1, self_ref, '__prop', 'String')) + self.register_instruction(cil.GetAttribNode(str_2, s, '__prop', 'String')) self.register_instruction(cil.GetAttribNode(length_1, self_ref, 'length', 'String')) self.register_instruction(cil.GetAttribNode(length_2, s, 'length', 'String')) - self.register_instruction(cil.GetAttribNode(length_1, length_1, 'value', 'Int')) - self.register_instruction(cil.GetAttribNode(length_2, length_2, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(length_1, length_1, '__prop', 'Int')) + self.register_instruction(cil.GetAttribNode(length_2, length_2, '__prop', 'Int')) self.register_instruction(cil.PlusNode(length_1, length_1, length_2)) result = self.define_internal_local() @@ -300,15 +299,15 @@ def register_builtin(self): length_substr = self.define_internal_local() less_value = self.define_internal_local() str_value = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(str_value, self_ref, 'value', 'String')) - self.register_instruction(cil.GetAttribNode(index_value, i, 'value', 'Int')) - self.register_instruction(cil.GetAttribNode(length_value, l, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(str_value, self_ref, '__prop', 'String')) + self.register_instruction(cil.GetAttribNode(index_value, i, '__prop', 'Int')) + self.register_instruction(cil.GetAttribNode(length_value, l, '__prop', 'Int')) # Check Out of range error self.register_instruction(cil.GetAttribNode(length_wrapper, self_ref, 'length', 'String')) - self.register_instruction(cil.GetAttribNode(length_attr, length_wrapper, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(length_attr, length_wrapper, '__prop', 'Int')) self.register_instruction(cil.PlusNode(length_substr, length_value, index_value)) self.register_instruction(cil.LessNode(less_value, length_attr, length_substr)) - self.register_runtime_error(less_value, 'Substring out of range') + self.add_runtime_exception(less_value, 'Index out of range exception') self.register_instruction(cil.SubstringNode(result, str_value, index_value, length_value)) instance = self.define_internal_local() self.register_instruction(cil.ArgNode(result)) @@ -321,13 +320,13 @@ def register_builtin(self): # Int type_node = self.register_type('Int') - type_node.attributes = {name:self.register_attribute(name, 'Int') for name in ['value']} + type_node.attributes = {name:self.register_attribute(name, 'Int') for name in ['__prop']} self.current_function = self.register_function(self.ctor('Int')) val = self.register_param(VariableInfo('val', None)) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode('Int', instance)) - self.register_instruction(cil.SetAttribNode(instance, 'value', val, 'Int')) + self.register_instruction(cil.SetAttribNode(instance, '__prop', val, 'Int')) self.register_instruction(cil.ReturnNode(instance)) type_node.methods = {method:self.to_function_name(method, 'Object') for method in obj_methods} @@ -335,13 +334,13 @@ def register_builtin(self): # Bool type_node = self.register_type('Bool') - type_node.attributes = {name:self.register_attribute(name, 'Bool') for name in ['value']} + type_node.attributes = {name:self.register_attribute(name, 'Bool') for name in ['__prop']} self.current_function = self.register_function(self.ctor('Bool')) val = self.register_param(VariableInfo('val', None)) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode('Bool', instance)) - self.register_instruction(cil.SetAttribNode(instance, 'value', val, 'Bool')) + self.register_instruction(cil.SetAttribNode(instance, '__prop', val, 'Bool')) self.register_instruction(cil.ReturnNode(instance)) type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} @@ -468,27 +467,27 @@ def visit(self, node, scope): self._self.name = self_ref if self.current_type.parent.name not in ('Object', 'IO'): - variable = self.define_internal_local() + dst = self.define_internal_local() self.register_instruction(cil.ArgNode(self_ref)) self.register_instruction(cil.StaticCallNode( - self.attrib_ctor_name(self.current_type.parent.name), variable)) + self.attrib_ctor_name(self.current_type.parent.name), dst)) for i, feat in enumerate(node.features): if isinstance(feat, AttrDeclarationNode): # try: self.visit(feat, scope.children[i]) - self.register_instruction(cil.SetAttribNode(self_ref, feat.id, feat.ret_expr, node.id,)) + self.register_instruction(cil.SetAttribNode(self_ref, feat.id, feat.noted_value, node.id,)) # except Exception as e: # _ = 0 self.register_instruction(cil.ReturnNode(self_ref)) - - for feat, child in zip(node.features, scope.children): + # for feat, child in zip(node.features, scope.children): + for i, feat in enumerate(node.features): if isinstance(feat, FuncDeclarationNode): - try: - self.visit(feat, child) - except Exception as e: - _ = 0 + # try: + self.visit(feat, scope.children[i]) + # except Exception as e: + # _ = 0 self._self.name = 'self' self.current_function = self.register_function(self.ctor(node.id)) @@ -499,11 +498,11 @@ def visit(self, node, scope): instance = self.define_internal_local() self.register_instruction(cil.AllocateNode(node.id, instance)) - variable = self.define_internal_local() + dst = self.define_internal_local() self.register_instruction(cil.ArgNode(instance)) - self.register_instruction(cil.StaticCallNode(self.attrib_ctor_name(node.id), variable)) + self.register_instruction(cil.StaticCallNode(self.attrib_ctor_name(node.id), dst)) - self.register_instruction(cil.ReturnNode(variable)) + self.register_instruction(cil.ReturnNode(dst)) self.current_function = None self.current_type = None @@ -526,24 +525,29 @@ def default_value_init(type): else: return VoidNode('void') - variable = self.define_internal_local() + dst = self.define_internal_local() if node.value: + a = 0 self.visit(node.value, scope.children[0]) - self.register_instruction(cil.AssignNode(variable, node.value.ret_expr)) - elif node.type.name in self.value_types: + self.register_instruction(cil.AssignNode(dst, node.value.noted_value)) + + + elif node.type.name in ['SELF_TYPE', 'Int', 'Bool', 'String']: if node.type.name == 'SELF_TYPE': - stype = self.current_type.name + checked_t = self.current_type.name else: - stype = node.type.name + checked_t = node.type.name - if stype in ['Int', 'Bool']: - self.register_instruction(cil.ArgNode(0)) - elif stype == 'String': + if checked_t == 'String': data = self.emptystring_data - self.register_instruction(cil.LoadNode(variable, data)) - self.register_instruction(cil.ArgNode(variable)) - self.register_instruction(cil.StaticCallNode(self.ctor(stype), variable)) - node.ret_expr = variable + self.register_instruction(cil.LoadNode(dst, data)) + self.register_instruction(cil.ArgNode(dst)) + elif checked_t in ['Int', 'Bool']: + self.register_instruction(cil.ArgNode(0)) + else: + raise Exception('...builtin type not found? or bad registered type') + self.register_instruction(cil.StaticCallNode(self.ctor(checked_t), dst)) + node.noted_value = dst @visitor.when(FuncDeclarationNode) def visit(self, node, scope): @@ -565,7 +569,7 @@ def visit(self, node, scope): self.register_param(VariableInfo(param, type)) self.visit(node.body, scope) - self.register_instruction(cil.ReturnNode(node.body.ret_expr)) + self.register_instruction(cil.ReturnNode(node.body.noted_value)) self._self.name = 'self' @visitor.when(VarDeclarationNode) # AssignNode @@ -581,7 +585,6 @@ def visit(self, node, scope): if node.expr is not None: source = self.visit(node.expr, scope) else: - # asignar valor por default if node.type.name.lower() == 'int': source = 0 elif node.type.name.lower() == 'string': @@ -599,10 +602,10 @@ def visit(self, node, scope): # node.id -> str # node.expr -> ExpressionNode ############################### - var = self.dvars[node.id] + dst = self.dvars[node.id] self.visit(node.expr, scope.children[0]) - self.register_instruction(cil.AssignNode(var, node.expr.ret_expr)) - node.ret_expr = var + self.register_instruction(cil.AssignNode(dst, node.expr.noted_value)) + node.noted_value = dst @visitor.when(CallNode) def visit(self, node, scope): @@ -620,68 +623,66 @@ def visit(self, node, scope): pass if node.obj: args = [] - # for arg, child in zip(node.args, scope.children[1:]): for arg in node.args: self.visit(arg, scope) - args.append(cil.ArgNode(arg.ret_expr)) + args.append(cil.ArgNode(arg.noted_value)) self.visit(node.obj, scope) void = cil.VoidNode() isvoid = self.define_internal_local() - self.register_instruction(cil.EqualNode(isvoid, node.obj.ret_expr, void)) - self.register_runtime_error(isvoid, 'RuntimeError: Function call in a void instance') + self.register_instruction(cil.EqualNode(isvoid, node.obj.noted_value, void)) + self.add_runtime_exception(isvoid, 'Function call in a void instance') - self.register_instruction(cil.ArgNode(node.obj.ret_expr)) + self.register_instruction(cil.ArgNode(node.obj.noted_value)) for arg in args: self.register_instruction(arg) - ret = self.define_internal_local() + nval1 = self.define_internal_local() - stype = node.obj.type.name + checked_t = node.obj.type.name # if isinstance(node.obj, InstantiateNode): - # stype = node.obj.lex + # checked_t = node.obj.lex # elif isinstance(node.obj, CallNode): - # stype = node.type.name + # checked_t = node.type.name # else: - # stype = scope.find_variable(node.obj.lex) - # if stype is None: + # checked_t = scope.find_variable(node.obj.lex) + # if checked_t is None: # if isinstance(node.obj, StringNode): - # stype = 'String' + # checked_t = 'String' # else: - # raise Exception("calling a function in a variable not found that is not a string wtf :D") + # raise Exception("calling a function in a dst not found that is not a string wtf :D") # else: - # stype = stype.type.name + # checked_t = checked_t.type.name if node.parent is not None: - # stype = node.type.lex + # checked_t = node.type.lex nodefunc = self.dtypes[node.parent].methods[node.method] if nodefunc == '__ctor_type Object {\n\t[method] abort(): Object;\n\t[method] type_name(): String;\n\t[method] copy(): SELF_TYPE;\n}\n': _ = 0 - self.register_instruction(cil.StaticCallNode(self.dtypes[node.parent].methods[node.method], ret)) + self.register_instruction(cil.StaticCallNode(self.dtypes[node.parent].methods[node.method], nval1)) else: - # stype = node.obj.static_type.name - self.register_instruction(cil.ArgNode(node.obj.ret_expr)) - self.register_instruction(cil.DynamicCallNode(stype, self.dtypes[stype].methods[node.method], ret)) + # checked_t = node.obj.static_type.name + self.register_instruction(cil.ArgNode(node.obj.noted_value)) + self.register_instruction(cil.DynamicCallNode(checked_t, self.dtypes[checked_t].methods[node.method], nval1)) - node.ret_expr = ret + node.noted_value = nval1 else: - ret = self.define_internal_local() + nval2 = self.define_internal_local() args = [] - # for arg, child in zip(node.args, scope.children): for arg in node.args: self.visit(arg, scope) - args.append(cil.ArgNode(arg.ret_expr)) + args.append(cil.ArgNode(arg.noted_value)) self.register_instruction(cil.ArgNode(self._self.name)) for arg in args: self.register_instruction(arg) self.register_instruction(cil.ArgNode(self._self.name)) - stype = self.current_type.name - self.register_instruction(cil.DynamicCallNode(stype, self.dtypes[stype].methods[node.method], ret)) - node.ret_expr = ret + checked_t = self.current_type.name + self.register_instruction(cil.DynamicCallNode(checked_t, self.dtypes[checked_t].methods[node.method], nval)) + node.noted_value = nval2 @visitor.when(ConstantNumNode) @@ -689,11 +690,11 @@ def visit(self, node, scope): ############################### # node.lex -> str ############################### - ret = self.define_internal_local() + nval = self.define_internal_local() self.register_instruction(cil.ArgNode(node.lex)) - self.register_instruction(cil.StaticCallNode(self.ctor('Int'), ret)) - node.ret_expr = ret + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), nval)) + node.noted_value = nval @visitor.when(VariableNode) def visit(self, node, scope): @@ -701,33 +702,31 @@ def visit(self, node, scope): # node.lex -> str ############################### if node.lex == 'self': - node.ret_expr = self._self.name + node.noted_value = self._self.name else: - node.ret_expr = self.dvars[node.lex] + node.noted_value = self.dvars[node.lex] @visitor.when(InstantiateNode) def visit(self, node, scope): ############################### # node.lex -> str ############################### - ret = self.define_internal_local() + instval = self.define_internal_local() if node.type.name == 'SELF_TYPE': - stype = self.current_type.name + checked_t = self.current_type.name else: - stype = node.type.name + checked_t = node.type.name - if stype == 'Int': - self.register_instruction(cil.ArgNode(0)) - elif stype == 'Bool': + if checked_t in ['Int', 'Bool']: self.register_instruction(cil.ArgNode(0)) - elif stype == 'String': + elif checked_t == 'String': data = self.emptystring_data - variable = self.define_internal_local() - self.register_instruction(cil.LoadNode(variable, data)) - self.register_instruction(cil.ArgNode(variable)) - self.register_instruction(cil.StaticCallNode(self.ctor(stype), ret)) - node.ret_expr = ret + dst = self.define_internal_local() + self.register_instruction(cil.LoadNode(dst, data)) + self.register_instruction(cil.ArgNode(dst)) + self.register_instruction(cil.StaticCallNode(self.ctor(checked_t), instval)) + node.noted_value = instval @visitor.when(PlusNode) def visit(self, node, scope): @@ -735,21 +734,21 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local() + nval = self.define_internal_local() left = self.define_internal_local() right = self.define_internal_local() value = self.define_internal_local() self.visit(node.left, scope) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) self.visit(node.right, scope) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) self.register_instruction(cil.PlusNode(value, left, right)) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.ctor('Int'), ret,)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), nval,)) - node.ret_expr = ret + node.noted_value = nval @visitor.when(MinusNode) def visit(self, node, scope): @@ -757,21 +756,21 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local() + nval = self.define_internal_local() left = self.define_internal_local() right = self.define_internal_local() value = self.define_internal_local() self.visit(node.left, scope) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) self.visit(node.right, scope) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) self.register_instruction(cil.MinusNode(value, left, right)) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.ctor('Int'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), nval)) - node.ret_expr = ret + node.noted_value = nval @visitor.when(StarNode) def visit(self, node, scope): @@ -779,20 +778,20 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local() + nval = self.define_internal_local() left = self.define_internal_local() right = self.define_internal_local() value = self.define_internal_local() self.visit(node.left, scope) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) self.visit(node.right, scope) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) self.register_instruction(cil.StarNode(value, left, right)) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.ctor('Int'), ret)) - node.ret_expr = ret + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), nval)) + node.noted_value = nval @visitor.when(DivNode) def visit(self, node, scope): @@ -800,29 +799,29 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local() + nval = self.define_internal_local() left = self.define_internal_local() right = self.define_internal_local() value = self.define_internal_local() zero = self.define_internal_local() self.visit(node.left, scope) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) self.visit(node.right, scope) self.register_instruction(cil.ArgNode(0)) self.register_instruction(cil.StaticCallNode(self.ctor('Int'), zero)) - self.register_instruction(cil.GetAttribNode(zero, zero, 'value', 'Int')) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(zero, zero, '__prop', 'Int')) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) self.register_instruction(cil.EqualNode(zero, zero, right, )) - self.register_runtime_error(zero, 'RuntimeError: Division by zero') + self.add_runtime_exception(zero, 'Division by zero exception') self.register_instruction(cil.DivNode(value, left, right)) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.ctor('Int'), ret)) - node.ret_expr = ret + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), nval)) + node.noted_value = nval @visitor.when(ChunkNode) def visit(self, node, scope): @@ -832,7 +831,7 @@ def visit(self, node, scope): for i, expr in enumerate(node.chunk): self.visit(expr, scope.children[i]) - node.ret_expr = node.chunk[-1].ret_expr + node.noted_value = node.chunk[-1].noted_value @visitor.when(ConditionalNode) @@ -843,29 +842,26 @@ def visit(self, node, scope): # node.elseChunk -> ExpressionNode ############################### - ret = self.define_internal_local() - condition = self.define_internal_local() + nval = self.define_internal_local() + cval = self.define_internal_local() then_label = self.register_label('then_label') continue_label = self.register_label('continue_label') - # IF self.visit(node.ifChunk, scope.children[0]) - self.register_instruction(cil.GetAttribNode(condition, node.ifChunk.ret_expr, 'value', 'Bool')) - self.register_instruction(cil.GotoIfNode(condition, then_label.label)) + self.register_instruction(cil.GetAttribNode(cval, node.ifChunk.noted_value, '__prop', 'Bool')) + self.register_instruction(cil.GotoIfNode(then_label.label, cval)) - # ELSE self.visit(node.elseChunk, scope.children[2]) - self.register_instruction(cil.AssignNode(ret, node.elseChunk.ret_expr)) + self.register_instruction(cil.AssignNode(nval, node.elseChunk.noted_value)) self.register_instruction(cil.GotoNode(continue_label.label)) - # THEN self.register_instruction(then_label) self.visit(node.thenChunk, scope.children[1]) - self.register_instruction(cil.AssignNode(ret, node.thenChunk.ret_expr)) + self.register_instruction(cil.AssignNode(nval, node.thenChunk.noted_value)) self.register_instruction(continue_label) - node.ret_expr = ret + node.noted_value = nval @visitor.when(LetInNode) def visit(self, node, scope): @@ -874,46 +870,44 @@ def visit(self, node, scope): # node.expression -> ExpressionNode ############################### - # for (id, type, expr), child in zip(node.let_body, scope.children[:-1]): - # for decl, child in zip(node.decl_list, scope.children[:-1]): i = 0 for decl in node.decl_list: id = decl.id type = decl.type - variable = self.register_local(VariableInfo(id, type)) + dst = self.register_local(VariableInfo(id, type)) if decl.expr: self.visit(decl.expr, scope.children[i]) - self.register_instruction(cil.AssignNode(variable, decl.expr.ret_expr)) + self.register_instruction(cil.AssignNode(dst, decl.expr.noted_value)) i += 1 - elif type in self.value_types: + elif type in ['SELF_TYPE', 'Int', 'Bool', 'String']: if type == 'SELF_TYPE': - stype = self.current_type.name + checked_t = self.current_type.name else: - stype = type - if stype == 'Int': + checked_t = type + if checked_t == 'Int': self.register_instruction(cil.ArgNode(0)) - elif stype == 'Bool': + elif checked_t == 'Bool': self.register_instruction(cil.ArgNode(0)) - elif stype == 'String': + elif checked_t == 'String': data = self.emptystring_data - self.register_instruction(cil.LoadNode(variable, data)) - self.register_instruction(cil.ArgNode(variable)) - self.register_instruction(cil.StaticCallNode(self.ctor(stype), variable)) + self.register_instruction(cil.LoadNode(dst, data)) + self.register_instruction(cil.ArgNode(dst)) + self.register_instruction(cil.StaticCallNode(self.ctor(checked_t), dst)) self.visit(node.expression, scope.children[-1]) - node.ret_expr = node.expression.ret_expr + node.noted_value = node.expression.noted_value @visitor.when(WhileNode) def visit(self, node, scope): while_label = self.register_label('while_label') loop_label = self.register_label('loop_label') pool_label = self.register_label('pool_label') - condition = self.define_internal_local() + cval = self.define_internal_local() self.register_instruction(while_label) self.visit(node.condition, scope.children[0]) - self.register_instruction(cil.GetAttribNode(condition, node.condition.ret_expr, 'value', 'Bool')) - self.register_instruction(cil.GotoIfNode(condition, loop_label.label)) + self.register_instruction(cil.GetAttribNode(cval, node.condition.noted_value, '__prop', 'Bool')) + self.register_instruction(cil.GotoIfNode(loop_label.label, cval)) self.register_instruction(cil.GotoNode(pool_label.label)) self.register_instruction(loop_label) @@ -922,57 +916,56 @@ def visit(self, node, scope): cil.GotoNode(while_label.label)) self.register_instruction(pool_label) - node.ret_expr = cil.VoidNode() + node.noted_value = cil.VoidNode() @visitor.when(NotNode) def visit(self, node, scope): ############################### # node.expression -> ExpressionNode ############################### - ret = self.define_internal_local() + nval = self.define_internal_local() value = self.define_internal_local() neg_value = self.define_internal_local() self.visit(node.expression, scope.children[0]) - self.register_instruction(cil.GetAttribNode(value, node.expression.ret_expr, 'value', 'Bool')) + self.register_instruction(cil.GetAttribNode(value, node.expression.noted_value, '__prop', 'Bool')) self.register_instruction(cil.NotNode(neg_value, value)) self.register_instruction(cil.ArgNode(neg_value)) - self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) - node.ret_expr = ret + node.noted_value = nval @visitor.when(IsVoidNode) def visit(self, node, scope): ############################### # node.method -> ExpressionNode ############################### + nval = self.define_internal_local() ret = self.define_internal_local() - answer = self.define_internal_local() void = cil.VoidNode() self.visit(node.method, scope.children[0]) - self.register_instruction(cil.EqualNode(answer, node.method.ret_expr, void)) + self.register_instruction(cil.EqualNode(ret, node.method.noted_value, void)) - self.register_instruction(cil.ArgNode(answer)) - self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) - node.ret_expr = ret + self.register_instruction(cil.ArgNode(ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) + node.noted_value = nval @visitor.when(ComplementNode) def visit(self, node, scope): ############################### # node.expr -> ExpressionNode ############################### - ret = self.define_internal_local() + nval = self.define_internal_local() value = self.define_internal_local() - answer = self.define_internal_local() + ret = self.define_internal_local() self.visit(node.expr, scope) - self.register_instruction(cil.GetAttribNode(value, node.expr.ret_expr, 'value', 'Int')) - self.register_instruction(cil.ComplementNode(answer, value)) - - self.register_instruction(cil.ArgNode(answer)) - self.register_instruction(cil.StaticCallNode(self.ctor('Int'), ret)) - node.ret_expr = ret + self.register_instruction(cil.GetAttribNode(value, node.expr.noted_value, '__prop', 'Int')) + self.register_instruction(cil.ComplementNode(ret, value)) + self.register_instruction(cil.ArgNode(ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Int'), nval)) + node.noted_value = nval @visitor.when(SwitchCaseNode) def visit(self, node, scope): @@ -980,21 +973,21 @@ def visit(self, node, scope): # node.expr -> ExpressionNode # node.case_list = [ (id, type, expr)... ] ############################### - ret = self.define_internal_local() + nval = self.define_internal_local() vtype = self.define_internal_local() cond = self.define_internal_local() self.visit(node.expr, scope) - self.register_instruction(cil.TypeOfNode(vtype, node.expr.ret_expr)) + self.register_instruction(cil.TypeOfNode(vtype, node.expr.noted_value)) isvoid = self.define_internal_local() - self.register_instruction(cil.EqualNode(isvoid, node.expr.ret_expr, cil.VoidNode())) - self.register_runtime_error(isvoid, 'RuntimeError: void in switch case') + self.register_instruction(cil.EqualNode(isvoid, node.expr.noted_value, cil.VoidNode())) + self.add_runtime_exception(isvoid, 'Void isntance found in switch case') end_label = self.register_label('case_end_label') branch_type = self.define_internal_local() - seen = [] + visited = [] labels = [] branches = sorted(node.case_list, key=lambda x: self.context.get_type(x[1]).depth, reverse=True) # for p, (id, type, expr) in enumerate(branches): @@ -1004,15 +997,16 @@ def visit(self, node, scope): expr = case[2] labels.append(self.register_label(f'case_label_{p}')) - st = self.context.subtree(type) + st = self.context.type_offsprings(type) for t in st: - if t not in seen: - seen.append(t) + if t not in visited: self.register_instruction(cil.NameNode(branch_type, t.name)) self.register_instruction(cil.EqualNode(cond, branch_type, vtype)) - self.register_instruction(cil.GotoIfNode(cond, labels[-1].label)) + self.register_instruction(cil.GotoIfNode(labels[-1].label, cond)) + visited.append(t) - data = self.register_data('RuntimeError: Case statement without a match branch') + # not a runtime exception, but the data section to throw it + data = self.register_data('Switch Case without valid branches') self.register_instruction(cil.ErrorNode(data)) for p, label in enumerate(labels): @@ -1024,16 +1018,15 @@ def visit(self, node, scope): self.register_instruction(label) var = self.register_local(VariableInfo(id, vtype)) - self.register_instruction(cil.AssignNode(var, node.expr.ret_expr)) + self.register_instruction(cil.AssignNode(var, node.expr.noted_value)) self.visit(expr, sc) - self.register_instruction(cil.AssignNode(ret, expr.ret_expr)) + self.register_instruction(cil.AssignNode(nval, expr.noted_value)) self.register_instruction(cil.GotoNode(end_label.label)) self.register_instruction(end_label) - node.ret_expr = ret + node.noted_value = nval # var = self.define_internal_local() - # self.register_instruction(cil.ParentTypeNode(var, obj_type)) # self.register_instruction(cil.AssignNode(obj_type, var)) # self.register_instruction(cil.GotoNode(start_case_label)) @@ -1047,19 +1040,17 @@ def visit(self, node, scope): @visitor.when(TrueNode) def visit(self, node, scope): - ret = self.define_internal_local() - + nval = self.define_internal_local() self.register_instruction(cil.ArgNode(1)) - self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) - node.ret_expr = ret + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) + node.noted_value = nval @visitor.when(FalseNode) def visit(self, node, scope): - ret = self.define_internal_local() - + nval = self.define_internal_local() self.register_instruction(cil.ArgNode(0)) - self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) - node.ret_expr = ret + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) + node.noted_value = nval @visitor.when(StringNode) def visit(self, node, scope): @@ -1068,118 +1059,120 @@ def visit(self, node, scope): except IndexError: data = self.register_data(node.lex[1:-1]) - variable = self.define_internal_local() - ret = self.define_internal_local() - - self.register_instruction(cil.LoadNode(variable, data)) - self.register_instruction(cil.ArgNode(variable)) - self.register_instruction(cil.StaticCallNode(self.ctor('String'), ret)) - node.ret_expr = ret + dst = self.define_internal_local() + nval = self.define_internal_local() + self.register_instruction(cil.LoadNode(dst, data)) + self.register_instruction(cil.ArgNode(dst)) + self.register_instruction(cil.StaticCallNode(self.ctor('String'), nval)) + node.noted_value = nval - @visitor.when(LessNode) + @visitor.when(EqualNode) def visit(self, node, scope): ############################### # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local() + nval = self.define_internal_local() left = self.define_internal_local() + type_left = self.define_internal_local() + right = self.define_internal_local() + int_t = self.define_internal_local() + bool_t = self.define_internal_local() + string_t = self.define_internal_local() + equal = self.define_internal_local() value = self.define_internal_local() + int_comparisson = self.register_label('comparing_ints') + bool_comparisson = self.register_label('comparing_bools') + string_comparisson = self.register_label('comparing_strings') + continue_label = self.register_label('comparing_notbuiltin') self.visit(node.left, scope) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) self.visit(node.right, scope) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) - self.register_instruction(cil.LessNode(value, left, right)) + self.register_instruction(cil.TypeOfNode(type_left, node.left.noted_value)) + self.register_instruction(cil.NameNode(int_t, 'Int')) + self.register_instruction(cil.NameNode(string_t, 'String')) + self.register_instruction(cil.NameNode(bool_t, 'Bool')) + self.register_instruction(cil.EqualNode(equal, type_left, int_t)) + self.register_instruction(cil.GotoIfNode(int_comparisson.label, equal)) + self.register_instruction(cil.EqualNode(equal, type_left, string_t)) + self.register_instruction(cil.GotoIfNode(string_comparisson.label, equal)) + self.register_instruction(cil.EqualNode(equal, type_left, bool_t)) + self.register_instruction(cil.GotoIfNode(bool_comparisson.label, equal)) + + # for i in self.dtypes: + # try: + # self.visit() + # except: + # __ = 0 + + self.register_instruction(cil.EqualNode(value, node.left.noted_value, node.right.noted_value)) + self.register_instruction(cil.GotoNode(continue_label.label)) + + self.register_instruction(int_comparisson) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) + self.register_instruction(cil.EqualNode(value, left, right)) + self.register_instruction(cil.GotoNode(continue_label.label)) + + self.register_instruction(string_comparisson) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'String')) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'String')) + self.register_instruction(cil.EqualStringNode(value, left, right)) + self.register_instruction(cil.GotoNode(continue_label.label)) + + self.register_instruction(bool_comparisson) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Bool')) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Bool')) + self.register_instruction(cil.EqualNode(value, left, right)) + self.register_instruction(cil.GotoNode(continue_label.label)) + + self.register_instruction(continue_label) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) + node.noted_value = nval - node.ret_expr = ret - - @visitor.when(LeqNode) + @visitor.when(LessNode) def visit(self, node, scope): ############################### # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local() + nval = self.define_internal_local() left = self.define_internal_local() right = self.define_internal_local() value = self.define_internal_local() - self.visit(node.left, scope) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) self.visit(node.right, scope) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) - self.register_instruction(cil.LessEqualNode(value, left, right)) - + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) + self.register_instruction(cil.LessNode(value, left, right)) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) - node.ret_expr = ret + node.noted_value = nval + - @visitor.when(EqualNode) + @visitor.when(LeqNode) def visit(self, node, scope): ############################### # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local() + nval = self.define_internal_local() left = self.define_internal_local() right = self.define_internal_local() - type_left = self.define_internal_local() - type_int = self.define_internal_local() - type_string = self.define_internal_local() - type_bool = self.define_internal_local() - equal = self.define_internal_local() value = self.define_internal_local() - int_comparisson = self.register_label('int_comparisson') - string_comparisson = self.register_label('string_comparisson') - bool_comparisson = self.register_label('bool_comparisson') - continue_label = self.register_label('continue_label') - self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) self.visit(node.right, scope) - - self.register_instruction(cil.TypeOfNode(type_left, node.left.ret_expr)) - self.register_instruction(cil.NameNode(type_int, 'Int')) - self.register_instruction(cil.NameNode(type_string, 'String')) - self.register_instruction(cil.NameNode(type_bool, 'Bool')) - - self.register_instruction(cil.EqualNode(equal, type_left, type_int)) - self.register_instruction(cil.GotoIfNode(equal, int_comparisson.label)) - self.register_instruction(cil.EqualNode(equal, type_left, type_string)) - self.register_instruction(cil.GotoIfNode(equal, string_comparisson.label)) - self.register_instruction(cil.EqualNode(equal, type_left, type_bool)) - self.register_instruction(cil.GotoIfNode(equal, bool_comparisson.label)) - - self.register_instruction(cil.EqualNode(value, node.left.ret_expr, node.right.ret_expr)) - self.register_instruction(cil.GotoNode(continue_label.label)) - - self.register_instruction(int_comparisson) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) - self.register_instruction(cil.EqualNode(value, left, right)) - self.register_instruction(cil.GotoNode(continue_label.label)) - - self.register_instruction(string_comparisson) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'String')) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'String')) - self.register_instruction(cil.EqualStringNode(value, left, right)) - self.register_instruction(cil.GotoNode(continue_label.label)) - - self.register_instruction(bool_comparisson) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Bool')) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Bool')) - self.register_instruction(cil.EqualNode(value, left, right)) - self.register_instruction(cil.GotoNode(continue_label.label)) - - self.register_instruction(continue_label) + self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) + self.register_instruction(cil.LessEqualNode(value, left, right)) self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), ret)) - node.ret_expr = ret \ No newline at end of file + self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval)) + + node.noted_value = nval From 00fa50871d5f0ddb769d71cf8d8083a919fd696c Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 28 Feb 2022 23:04:34 -0500 Subject: [PATCH 90/93] fixing the commented scripts in the tests --- tests/codegen/arith.mips | 2124 +++++++++++++++--------------- tests/codegen/atoi.mips | 1038 +++++++-------- tests/codegen/book_list.mips | 280 ++-- tests/codegen/cells.mips | 406 +++--- tests/codegen/complex.mips | 374 +++--- tests/codegen/fib.mips | 106 +- tests/codegen/graph.mips | 1246 +++++++++--------- tests/codegen/hairyscary.mips | 234 ++-- tests/codegen/hello_world.mips | 50 +- tests/codegen/io.mips | 152 +-- tests/codegen/life.mips | 2230 ++++++++++++++++---------------- tests/codegen/list.mips | 172 +-- tests/codegen/new_complex.mips | 470 +++---- tests/codegen/palindrome.mips | 216 ++-- tests/codegen/primes.mips | 154 +-- tests/codegen/print-cool.mips | 74 +- tests/codegen/sort-list.mips | 242 ++-- tests/lexer_test.py | 30 +- tests/parser_test.py | 26 +- tests/semantic_test.py | 24 +- 20 files changed, 4824 insertions(+), 4824 deletions(-) diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 913723c91..be0106f08 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -32,31 +32,31 @@ data_14: .asciiz "" .word 0 data_15: .asciiz "Abort called from class " .word 0 -data_16: .asciiz "Substring out of range" +data_16: .asciiz "Index out of range exception" .word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" +data_17: .asciiz "Function call in a void instance" .word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" +data_18: .asciiz "Function call in a void instance" .word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" +data_19: .asciiz "Function call in a void instance" .word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" +data_20: .asciiz "Function call in a void instance" .word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" +data_21: .asciiz "Function call in a void instance" .word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" +data_22: .asciiz "Function call in a void instance" .word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" +data_23: .asciiz "Function call in a void instance" .word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" +data_24: .asciiz "Function call in a void instance" .word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" +data_25: .asciiz "Function call in a void instance" .word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" +data_26: .asciiz "Function call in a void instance" .word 0 -data_27: .asciiz "RuntimeError: Division by zero" +data_27: .asciiz "Division by zero exception" .word 0 -data_28: .asciiz "RuntimeError: Function call in a void instance" +data_28: .asciiz "Function call in a void instance" .word 0 data_29: .asciiz "0" .word 0 @@ -78,9 +78,9 @@ data_37: .asciiz "8" .word 0 data_38: .asciiz "9" .word 0 -data_39: .asciiz "RuntimeError: Function call in a void instance" +data_39: .asciiz "Function call in a void instance" .word 0 -data_40: .asciiz "RuntimeError: Function call in a void instance" +data_40: .asciiz "Function call in a void instance" .word 0 data_41: .asciiz "" .word 0 @@ -104,223 +104,223 @@ data_50: .asciiz "1" .word 0 data_51: .asciiz "0" .word 0 -data_52: .asciiz "RuntimeError: Function call in a void instance" +data_52: .asciiz "Function call in a void instance" .word 0 -data_53: .asciiz "RuntimeError: Function call in a void instance" +data_53: .asciiz "Function call in a void instance" .word 0 data_54: .asciiz "-" .word 0 -data_55: .asciiz "RuntimeError: Function call in a void instance" +data_55: .asciiz "Function call in a void instance" .word 0 data_56: .asciiz "+" .word 0 -data_57: .asciiz "RuntimeError: Function call in a void instance" +data_57: .asciiz "Function call in a void instance" .word 0 -data_58: .asciiz "RuntimeError: Function call in a void instance" +data_58: .asciiz "Function call in a void instance" .word 0 -data_59: .asciiz "RuntimeError: Function call in a void instance" +data_59: .asciiz "Function call in a void instance" .word 0 -data_60: .asciiz "RuntimeError: Function call in a void instance" +data_60: .asciiz "Function call in a void instance" .word 0 -data_61: .asciiz "RuntimeError: Function call in a void instance" +data_61: .asciiz "Function call in a void instance" .word 0 -data_62: .asciiz "RuntimeError: Function call in a void instance" +data_62: .asciiz "Function call in a void instance" .word 0 -data_63: .asciiz "RuntimeError: Function call in a void instance" +data_63: .asciiz "Function call in a void instance" .word 0 -data_64: .asciiz "RuntimeError: Function call in a void instance" +data_64: .asciiz "Function call in a void instance" .word 0 -data_65: .asciiz "RuntimeError: Function call in a void instance" +data_65: .asciiz "Function call in a void instance" .word 0 -data_66: .asciiz "RuntimeError: Function call in a void instance" +data_66: .asciiz "Function call in a void instance" .word 0 -data_67: .asciiz "RuntimeError: Function call in a void instance" +data_67: .asciiz "Function call in a void instance" .word 0 data_68: .asciiz "-" .word 0 -data_69: .asciiz "RuntimeError: Function call in a void instance" +data_69: .asciiz "Function call in a void instance" .word 0 -data_70: .asciiz "RuntimeError: Function call in a void instance" +data_70: .asciiz "Function call in a void instance" .word 0 data_71: .asciiz "0" .word 0 -data_72: .asciiz "RuntimeError: Division by zero" +data_72: .asciiz "Division by zero exception" .word 0 -data_73: .asciiz "RuntimeError: Function call in a void instance" +data_73: .asciiz "Function call in a void instance" .word 0 -data_74: .asciiz "RuntimeError: Function call in a void instance" +data_74: .asciiz "Function call in a void instance" .word 0 -data_75: .asciiz "RuntimeError: Function call in a void instance" +data_75: .asciiz "Function call in a void instance" .word 0 data_76: .asciiz "" .word 0 data_77: .asciiz "\n\tTo add a number to " .word 0 -data_78: .asciiz "RuntimeError: Function call in a void instance" +data_78: .asciiz "Function call in a void instance" .word 0 -data_79: .asciiz "RuntimeError: Function call in a void instance" +data_79: .asciiz "Function call in a void instance" .word 0 data_80: .asciiz "...enter a:\n" .word 0 -data_81: .asciiz "RuntimeError: Function call in a void instance" +data_81: .asciiz "Function call in a void instance" .word 0 data_82: .asciiz "\tTo negate " .word 0 -data_83: .asciiz "RuntimeError: Function call in a void instance" +data_83: .asciiz "Function call in a void instance" .word 0 -data_84: .asciiz "RuntimeError: Function call in a void instance" +data_84: .asciiz "Function call in a void instance" .word 0 data_85: .asciiz "...enter b:\n" .word 0 -data_86: .asciiz "RuntimeError: Function call in a void instance" +data_86: .asciiz "Function call in a void instance" .word 0 data_87: .asciiz "\tTo find the difference between " .word 0 -data_88: .asciiz "RuntimeError: Function call in a void instance" +data_88: .asciiz "Function call in a void instance" .word 0 -data_89: .asciiz "RuntimeError: Function call in a void instance" +data_89: .asciiz "Function call in a void instance" .word 0 data_90: .asciiz "and another number...enter c:\n" .word 0 -data_91: .asciiz "RuntimeError: Function call in a void instance" +data_91: .asciiz "Function call in a void instance" .word 0 data_92: .asciiz "\tTo find the factorial of " .word 0 -data_93: .asciiz "RuntimeError: Function call in a void instance" +data_93: .asciiz "Function call in a void instance" .word 0 -data_94: .asciiz "RuntimeError: Function call in a void instance" +data_94: .asciiz "Function call in a void instance" .word 0 data_95: .asciiz "...enter d:\n" .word 0 -data_96: .asciiz "RuntimeError: Function call in a void instance" +data_96: .asciiz "Function call in a void instance" .word 0 data_97: .asciiz "\tTo square " .word 0 -data_98: .asciiz "RuntimeError: Function call in a void instance" +data_98: .asciiz "Function call in a void instance" .word 0 -data_99: .asciiz "RuntimeError: Function call in a void instance" +data_99: .asciiz "Function call in a void instance" .word 0 data_100: .asciiz "...enter e:\n" .word 0 -data_101: .asciiz "RuntimeError: Function call in a void instance" +data_101: .asciiz "Function call in a void instance" .word 0 data_102: .asciiz "\tTo cube " .word 0 -data_103: .asciiz "RuntimeError: Function call in a void instance" +data_103: .asciiz "Function call in a void instance" .word 0 -data_104: .asciiz "RuntimeError: Function call in a void instance" +data_104: .asciiz "Function call in a void instance" .word 0 data_105: .asciiz "...enter f:\n" .word 0 -data_106: .asciiz "RuntimeError: Function call in a void instance" +data_106: .asciiz "Function call in a void instance" .word 0 data_107: .asciiz "\tTo find out if " .word 0 -data_108: .asciiz "RuntimeError: Function call in a void instance" +data_108: .asciiz "Function call in a void instance" .word 0 -data_109: .asciiz "RuntimeError: Function call in a void instance" +data_109: .asciiz "Function call in a void instance" .word 0 data_110: .asciiz "is a multiple of 3...enter g:\n" .word 0 -data_111: .asciiz "RuntimeError: Function call in a void instance" +data_111: .asciiz "Function call in a void instance" .word 0 data_112: .asciiz "\tTo divide " .word 0 -data_113: .asciiz "RuntimeError: Function call in a void instance" +data_113: .asciiz "Function call in a void instance" .word 0 -data_114: .asciiz "RuntimeError: Function call in a void instance" +data_114: .asciiz "Function call in a void instance" .word 0 data_115: .asciiz "by 8...enter h:\n" .word 0 -data_116: .asciiz "RuntimeError: Function call in a void instance" +data_116: .asciiz "Function call in a void instance" .word 0 data_117: .asciiz "\tTo get a new number...enter j:\n" .word 0 -data_118: .asciiz "RuntimeError: Function call in a void instance" +data_118: .asciiz "Function call in a void instance" .word 0 data_119: .asciiz "\tTo quit...enter q:\n\n" .word 0 -data_120: .asciiz "RuntimeError: Function call in a void instance" +data_120: .asciiz "Function call in a void instance" .word 0 -data_121: .asciiz "RuntimeError: Function call in a void instance" +data_121: .asciiz "Function call in a void instance" .word 0 data_122: .asciiz "\n" .word 0 -data_123: .asciiz "RuntimeError: Function call in a void instance" +data_123: .asciiz "Function call in a void instance" .word 0 data_124: .asciiz "Please enter a number... " .word 0 -data_125: .asciiz "RuntimeError: Function call in a void instance" +data_125: .asciiz "Function call in a void instance" .word 0 -data_126: .asciiz "RuntimeError: Function call in a void instance" +data_126: .asciiz "Function call in a void instance" .word 0 -data_127: .asciiz "RuntimeError: Function call in a void instance" +data_127: .asciiz "Function call in a void instance" .word 0 -data_128: .asciiz "RuntimeError: Function call in a void instance" +data_128: .asciiz "Function call in a void instance" .word 0 -data_129: .asciiz "RuntimeError: Function call in a void instance" +data_129: .asciiz "Function call in a void instance" .word 0 -data_130: .asciiz "RuntimeError: Function call in a void instance" +data_130: .asciiz "Function call in a void instance" .word 0 -data_131: .asciiz "RuntimeError: void in switch case" +data_131: .asciiz "Void isntance found in switch case" .word 0 -data_132: .asciiz "RuntimeError: Case statement without a match branch" +data_132: .asciiz "Switch Case without valid branches" .word 0 data_133: .asciiz "Class type is now E\n" .word 0 -data_134: .asciiz "RuntimeError: Function call in a void instance" +data_134: .asciiz "Function call in a void instance" .word 0 data_135: .asciiz "Class type is now C\n" .word 0 -data_136: .asciiz "RuntimeError: Function call in a void instance" +data_136: .asciiz "Function call in a void instance" .word 0 data_137: .asciiz "Class type is now D\n" .word 0 -data_138: .asciiz "RuntimeError: Function call in a void instance" +data_138: .asciiz "Function call in a void instance" .word 0 data_139: .asciiz "Class type is now B\n" .word 0 -data_140: .asciiz "RuntimeError: Function call in a void instance" +data_140: .asciiz "Function call in a void instance" .word 0 data_141: .asciiz "Class type is now A\n" .word 0 -data_142: .asciiz "RuntimeError: Function call in a void instance" +data_142: .asciiz "Function call in a void instance" .word 0 data_143: .asciiz "Oooops\n" .word 0 -data_144: .asciiz "RuntimeError: Function call in a void instance" +data_144: .asciiz "Function call in a void instance" .word 0 -data_145: .asciiz "RuntimeError: Function call in a void instance" +data_145: .asciiz "Function call in a void instance" .word 0 -data_146: .asciiz "RuntimeError: Function call in a void instance" +data_146: .asciiz "Function call in a void instance" .word 0 -data_147: .asciiz "RuntimeError: Function call in a void instance" +data_147: .asciiz "Function call in a void instance" .word 0 data_148: .asciiz " " .word 0 -data_149: .asciiz "RuntimeError: Function call in a void instance" +data_149: .asciiz "Function call in a void instance" .word 0 data_150: .asciiz "number " .word 0 -data_151: .asciiz "RuntimeError: Function call in a void instance" +data_151: .asciiz "Function call in a void instance" .word 0 -data_152: .asciiz "RuntimeError: Function call in a void instance" +data_152: .asciiz "Function call in a void instance" .word 0 -data_153: .asciiz "RuntimeError: Function call in a void instance" +data_153: .asciiz "Function call in a void instance" .word 0 -data_154: .asciiz "RuntimeError: Function call in a void instance" +data_154: .asciiz "Function call in a void instance" .word 0 data_155: .asciiz "is odd!\n" .word 0 -data_156: .asciiz "RuntimeError: Function call in a void instance" +data_156: .asciiz "Function call in a void instance" .word 0 data_157: .asciiz "is even!\n" .word 0 -data_158: .asciiz "RuntimeError: Function call in a void instance" +data_158: .asciiz "Function call in a void instance" .word 0 -data_159: .asciiz "RuntimeError: Function call in a void instance" +data_159: .asciiz "Function call in a void instance" .word 0 -data_160: .asciiz "RuntimeError: Function call in a void instance" +data_160: .asciiz "Function call in a void instance" .word 0 data_161: .asciiz "a" .word 0 @@ -342,115 +342,115 @@ data_169: .asciiz "j" .word 0 data_170: .asciiz "q" .word 0 -data_171: .asciiz "RuntimeError: Function call in a void instance" +data_171: .asciiz "Function call in a void instance" .word 0 -data_172: .asciiz "RuntimeError: Function call in a void instance" +data_172: .asciiz "Function call in a void instance" .word 0 -data_173: .asciiz "RuntimeError: Function call in a void instance" +data_173: .asciiz "Function call in a void instance" .word 0 -data_174: .asciiz "RuntimeError: Function call in a void instance" +data_174: .asciiz "Function call in a void instance" .word 0 -data_175: .asciiz "RuntimeError: Function call in a void instance" +data_175: .asciiz "Function call in a void instance" .word 0 -data_176: .asciiz "RuntimeError: Function call in a void instance" +data_176: .asciiz "Function call in a void instance" .word 0 data_177: .asciiz "number " .word 0 -data_178: .asciiz "RuntimeError: Function call in a void instance" +data_178: .asciiz "Function call in a void instance" .word 0 -data_179: .asciiz "RuntimeError: Function call in a void instance" +data_179: .asciiz "Function call in a void instance" .word 0 data_180: .asciiz "is equal to " .word 0 -data_181: .asciiz "RuntimeError: Function call in a void instance" +data_181: .asciiz "Function call in a void instance" .word 0 -data_182: .asciiz "RuntimeError: Function call in a void instance" +data_182: .asciiz "Function call in a void instance" .word 0 data_183: .asciiz "times 8 with a remainder of " .word 0 -data_184: .asciiz "RuntimeError: Function call in a void instance" +data_184: .asciiz "Function call in a void instance" .word 0 -data_185: .asciiz "RuntimeError: Function call in a void instance" +data_185: .asciiz "Function call in a void instance" .word 0 -data_186: .asciiz "RuntimeError: Function call in a void instance" +data_186: .asciiz "Function call in a void instance" .word 0 data_187: .asciiz "\n" .word 0 -data_188: .asciiz "RuntimeError: Function call in a void instance" +data_188: .asciiz "Function call in a void instance" .word 0 -data_189: .asciiz "RuntimeError: Function call in a void instance" +data_189: .asciiz "Function call in a void instance" .word 0 -data_190: .asciiz "RuntimeError: Function call in a void instance" +data_190: .asciiz "Function call in a void instance" .word 0 data_191: .asciiz "number " .word 0 -data_192: .asciiz "RuntimeError: Function call in a void instance" +data_192: .asciiz "Function call in a void instance" .word 0 -data_193: .asciiz "RuntimeError: Function call in a void instance" +data_193: .asciiz "Function call in a void instance" .word 0 data_194: .asciiz "is not divisible by 3.\n" .word 0 -data_195: .asciiz "RuntimeError: Function call in a void instance" +data_195: .asciiz "Function call in a void instance" .word 0 data_196: .asciiz "number " .word 0 -data_197: .asciiz "RuntimeError: Function call in a void instance" +data_197: .asciiz "Function call in a void instance" .word 0 -data_198: .asciiz "RuntimeError: Function call in a void instance" +data_198: .asciiz "Function call in a void instance" .word 0 data_199: .asciiz "is divisible by 3.\n" .word 0 -data_200: .asciiz "RuntimeError: Function call in a void instance" +data_200: .asciiz "Function call in a void instance" .word 0 -data_201: .asciiz "RuntimeError: Function call in a void instance" +data_201: .asciiz "Function call in a void instance" .word 0 -data_202: .asciiz "RuntimeError: Function call in a void instance" +data_202: .asciiz "Function call in a void instance" .word 0 -data_203: .asciiz "RuntimeError: Function call in a void instance" +data_203: .asciiz "Function call in a void instance" .word 0 -data_204: .asciiz "RuntimeError: Function call in a void instance" +data_204: .asciiz "Function call in a void instance" .word 0 -data_205: .asciiz "RuntimeError: Function call in a void instance" +data_205: .asciiz "Function call in a void instance" .word 0 -data_206: .asciiz "RuntimeError: Function call in a void instance" +data_206: .asciiz "Function call in a void instance" .word 0 -data_207: .asciiz "RuntimeError: Function call in a void instance" +data_207: .asciiz "Function call in a void instance" .word 0 -data_208: .asciiz "RuntimeError: Function call in a void instance" +data_208: .asciiz "Function call in a void instance" .word 0 -data_209: .asciiz "RuntimeError: Function call in a void instance" +data_209: .asciiz "Function call in a void instance" .word 0 -data_210: .asciiz "RuntimeError: Function call in a void instance" +data_210: .asciiz "Function call in a void instance" .word 0 -data_211: .asciiz "RuntimeError: Function call in a void instance" +data_211: .asciiz "Function call in a void instance" .word 0 -data_212: .asciiz "RuntimeError: void in switch case" +data_212: .asciiz "Void isntance found in switch case" .word 0 -data_213: .asciiz "RuntimeError: Case statement without a match branch" +data_213: .asciiz "Switch Case without valid branches" .word 0 -data_214: .asciiz "RuntimeError: Function call in a void instance" +data_214: .asciiz "Function call in a void instance" .word 0 -data_215: .asciiz "RuntimeError: Function call in a void instance" +data_215: .asciiz "Function call in a void instance" .word 0 -data_216: .asciiz "RuntimeError: Function call in a void instance" +data_216: .asciiz "Function call in a void instance" .word 0 -data_217: .asciiz "RuntimeError: Function call in a void instance" +data_217: .asciiz "Function call in a void instance" .word 0 data_218: .asciiz "Oooops\n" .word 0 -data_219: .asciiz "RuntimeError: Function call in a void instance" +data_219: .asciiz "Function call in a void instance" .word 0 -data_220: .asciiz "RuntimeError: Function call in a void instance" +data_220: .asciiz "Function call in a void instance" .word 0 -data_221: .asciiz "RuntimeError: Function call in a void instance" +data_221: .asciiz "Function call in a void instance" .word 0 -data_222: .asciiz "RuntimeError: Function call in a void instance" +data_222: .asciiz "Function call in a void instance" .word 0 -data_223: .asciiz "RuntimeError: Function call in a void instance" +data_223: .asciiz "Function call in a void instance" .word 0 -data_224: .asciiz "RuntimeError: Function call in a void instance" +data_224: .asciiz "Function call in a void instance" .word 0 -data_225: .asciiz "RuntimeError: Function call in a void instance" +data_225: .asciiz "Function call in a void instance" types_table: @@ -485,7 +485,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -502,7 +502,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -518,7 +518,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -533,7 +533,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -547,7 +547,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -568,8 +568,8 @@ type_6_dispatch: .word function_method5_at_A .word function_set_var_at_A .word function_value_at_A -.word __init_attr_at_A -.word __init_at_A +.word __attributes_ctor_A +.word __ctor_A type_6_prototype: .word 5 @@ -590,8 +590,8 @@ type_7_dispatch: .word function_method5_at_B .word function_set_var_at_A .word function_value_at_A -.word __init_attr_at_B -.word __init_at_B +.word __attributes_ctor_B +.word __ctor_B type_7_prototype: .word 6 @@ -613,8 +613,8 @@ type_8_dispatch: .word function_set_var_at_A .word function_value_at_A .word function_method6_at_C -.word __init_attr_at_C -.word __init_at_C +.word __attributes_ctor_C +.word __ctor_C type_8_prototype: .word 7 @@ -636,8 +636,8 @@ type_9_dispatch: .word function_set_var_at_A .word function_value_at_A .word function_method7_at_D -.word __init_attr_at_D -.word __init_at_D +.word __attributes_ctor_D +.word __ctor_D type_9_prototype: .word 8 @@ -660,8 +660,8 @@ type_10_dispatch: .word function_value_at_A .word function_method7_at_D .word function_method6_at_E -.word __init_attr_at_E -.word __init_at_E +.word __attributes_ctor_E +.word __ctor_E type_10_prototype: .word 9 @@ -681,8 +681,8 @@ type_11_dispatch: .word function_i2a_at_A2I .word function_i2a_aux_at_A2I .word function_i2c_at_A2I -.word __init_attr_at_A2I -.word __init_at_A2I +.word __attributes_ctor_A2I +.word __ctor_A2I type_11_prototype: .word 10 @@ -706,8 +706,8 @@ type_12_dispatch: .word function_menu_at_Main .word function_print_at_Main .word function_prompt_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_12_prototype: .word 11 @@ -722,7 +722,7 @@ type_12_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -803,7 +803,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -838,7 +838,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -920,7 +920,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -944,7 +944,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -955,7 +955,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -984,7 +984,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -1053,7 +1053,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -1112,7 +1112,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -1123,7 +1123,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1154,7 +1154,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1192,7 +1192,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -1209,17 +1209,17 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_A: +__attributes_ctor_A: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -1228,7 +1228,7 @@ lw $t0 0($fp) lw $t1 -16($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1241,14 +1241,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -4 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 4 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1261,13 +1261,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -4 +addi $sp $sp 0 lw $t0 0($fp) lw $t1 4($fp) addi $t1 $t1 12 sw $t0 0($t1) lw $v0 4($fp) -addi $sp $sp 4 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1280,9 +1280,9 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -4 +addi $sp $sp 0 lw $v0 4($fp) -addi $sp $sp 4 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1295,11 +1295,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -36 +addi $sp $sp -32 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -40($fp) lw $t0 4($fp) @@ -1315,12 +1315,12 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) sw $t0 -40($fp) -jal __init_at_B +jal __ctor_B sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -1353,7 +1353,7 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 36 +addi $sp $sp 32 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1366,11 +1366,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -32 +addi $sp $sp -28 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 0($fp) @@ -1383,12 +1383,12 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) sw $t0 -36($fp) -jal __init_at_C +jal __ctor_C sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -1421,7 +1421,7 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 32 +addi $sp $sp 28 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1434,7 +1434,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -92 +addi $sp $sp -88 lw $t0 0($fp) lw $t1 12($t0) sw $t1 -84($fp) @@ -1448,7 +1448,7 @@ sw $t1 -76($fp) lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -88($fp) lw $t0 -88($fp) @@ -1459,7 +1459,7 @@ bne $t0 $zero label_9 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 0($fp) @@ -1475,12 +1475,12 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -68($fp) sw $t0 -72($fp) -jal __init_at_D +jal __ctor_D sw $v0 -52($fp) lw $t0 -52($fp) li $t1 0 @@ -1519,7 +1519,7 @@ label_9: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -40($fp) lw $t0 4($fp) @@ -1535,12 +1535,12 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) sw $t0 -40($fp) -jal __init_at_D +jal __ctor_D sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -1576,7 +1576,7 @@ lw $t0 -12($fp) sw $t0 -96($fp) label_12: lw $v0 -96($fp) -addi $sp $sp 92 +addi $sp $sp 88 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1589,11 +1589,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -88 +addi $sp $sp -84 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -88($fp) lw $t0 -88($fp) @@ -1601,7 +1601,7 @@ sw $t0 -92($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -80($fp) lw $t0 -80($fp) @@ -1620,7 +1620,7 @@ sw $t0 -60($fp) lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) @@ -1643,7 +1643,7 @@ sw $t0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 -56($fp) @@ -1654,7 +1654,7 @@ sw $t1 -36($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -24($fp) lw $t0 -24($fp) @@ -1667,14 +1667,14 @@ sw $t0 -28($fp) lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -40($fp) lw $t0 -40($fp) sw $t0 -84($fp) j label_13 label_15: -jal __init_at_E +jal __ctor_E sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -1707,20 +1707,20 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 88 +addi $sp $sp 84 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_A: +__ctor_A: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 5 sll $t0 $t0 2 la $t1 prototype_table @@ -1737,32 +1737,32 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_A +jal __attributes_ctor_A addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_B: +__attributes_ctor_B: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_A +jal __attributes_ctor_A addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1775,11 +1775,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -36 +addi $sp $sp -32 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -40($fp) lw $t0 0($fp) @@ -1795,12 +1795,12 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) sw $t0 -40($fp) -jal __init_at_E +jal __ctor_E sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -1833,20 +1833,20 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 36 +addi $sp $sp 32 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_B: +__ctor_B: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 6 sll $t0 $t0 2 la $t1 prototype_table @@ -1863,32 +1863,32 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_B +jal __attributes_ctor_B addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_C: +__attributes_ctor_C: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_B +jal __attributes_ctor_B addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1901,11 +1901,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -32 +addi $sp $sp -28 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 0($fp) @@ -1918,12 +1918,12 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) sw $t0 -36($fp) -jal __init_at_A +jal __ctor_A sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -1956,7 +1956,7 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 32 +addi $sp $sp 28 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1969,11 +1969,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -52 +addi $sp $sp -48 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 0($fp) @@ -1989,7 +1989,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -2005,12 +2005,12 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) sw $t0 -56($fp) -jal __init_at_E +jal __ctor_E sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -2043,20 +2043,20 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 52 +addi $sp $sp 48 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_C: +__ctor_C: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 7 sll $t0 $t0 2 la $t1 prototype_table @@ -2073,32 +2073,32 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_C +jal __attributes_ctor_C addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_D: +__attributes_ctor_D: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_B +jal __attributes_ctor_B addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2111,7 +2111,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -240 +addi $sp $sp -236 lw $t0 0($fp) sw $t0 -244($fp) lw $t0 -244($fp) @@ -2120,7 +2120,7 @@ sw $t1 -228($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -216($fp) lw $t0 -216($fp) @@ -2133,7 +2133,7 @@ sw $t1 -220($fp) lw $t0 -220($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -232($fp) lw $t0 -232($fp) @@ -2144,7 +2144,7 @@ bne $t0 $zero label_44 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -168($fp) lw $t0 -168($fp) @@ -2153,7 +2153,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -192($fp) +sw $t1 -196($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2161,25 +2161,25 @@ sw $t0 -188($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -184($fp) +sw $t0 -180($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -180($fp) -lw $t0 -192($fp) +sw $t0 -184($fp) +lw $t0 -196($fp) lw $t1 -188($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) bne $t0 $zero label_24 -lw $t0 -192($fp) -lw $t1 -184($fp) +lw $t0 -196($fp) +lw $t1 -180($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) bne $t0 $zero label_25 -lw $t0 -192($fp) -lw $t1 -180($fp) +lw $t0 -196($fp) +lw $t1 -184($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) @@ -2195,9 +2195,9 @@ lw $t1 12($t0) sw $t1 -200($fp) lw $t0 -244($fp) lw $t1 12($t0) -sw $t1 -196($fp) +sw $t1 -192($fp) lw $t0 -200($fp) -lw $t1 -196($fp) +lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) j label_27 @@ -2207,10 +2207,10 @@ lw $t1 12($t0) sw $t1 -200($fp) lw $t0 -244($fp) lw $t1 12($t0) -sw $t1 -196($fp) +sw $t1 -192($fp) lw $t0 -200($fp) move $a0 $t0 -lw $t0 -196($fp) +lw $t0 -192($fp) move $a1 $t0 jal equal_str sw $v0 -172($fp) @@ -2221,9 +2221,9 @@ lw $t1 12($t0) sw $t1 -200($fp) lw $t0 -244($fp) lw $t1 12($t0) -sw $t1 -196($fp) +sw $t1 -192($fp) lw $t0 -200($fp) -lw $t1 -196($fp) +lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) j label_27 @@ -2231,7 +2231,7 @@ label_27: lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -204($fp) lw $t0 -204($fp) @@ -2242,7 +2242,7 @@ bne $t0 $zero label_42 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -120($fp) lw $t0 -120($fp) @@ -2251,7 +2251,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -144($fp) +sw $t1 -148($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2259,25 +2259,25 @@ sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -136($fp) +sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -132($fp) -lw $t0 -144($fp) +sw $t0 -136($fp) +lw $t0 -148($fp) lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) bne $t0 $zero label_28 -lw $t0 -144($fp) -lw $t1 -136($fp) +lw $t0 -148($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) bne $t0 $zero label_29 -lw $t0 -144($fp) -lw $t1 -132($fp) +lw $t0 -148($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) @@ -2293,9 +2293,9 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -244($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) -lw $t1 -148($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) j label_31 @@ -2305,10 +2305,10 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -244($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) move $a0 $t0 -lw $t0 -148($fp) +lw $t0 -144($fp) move $a1 $t0 jal equal_str sw $v0 -124($fp) @@ -2319,9 +2319,9 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -244($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) -lw $t1 -148($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) j label_31 @@ -2329,7 +2329,7 @@ label_31: lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -156($fp) lw $t0 -156($fp) @@ -2340,7 +2340,7 @@ bne $t0 $zero label_40 li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) @@ -2349,7 +2349,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -96($fp) +sw $t1 -100($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2357,25 +2357,25 @@ sw $t0 -92($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -88($fp) +sw $t0 -84($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -84($fp) -lw $t0 -96($fp) +sw $t0 -88($fp) +lw $t0 -100($fp) lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -80($fp) lw $t0 -80($fp) bne $t0 $zero label_32 -lw $t0 -96($fp) -lw $t1 -88($fp) +lw $t0 -100($fp) +lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -80($fp) lw $t0 -80($fp) bne $t0 $zero label_33 -lw $t0 -96($fp) -lw $t1 -84($fp) +lw $t0 -100($fp) +lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -80($fp) lw $t0 -80($fp) @@ -2391,9 +2391,9 @@ lw $t1 12($t0) sw $t1 -104($fp) lw $t0 -244($fp) lw $t1 12($t0) -sw $t1 -100($fp) +sw $t1 -96($fp) lw $t0 -104($fp) -lw $t1 -100($fp) +lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) j label_35 @@ -2403,10 +2403,10 @@ lw $t1 12($t0) sw $t1 -104($fp) lw $t0 -244($fp) lw $t1 12($t0) -sw $t1 -100($fp) +sw $t1 -96($fp) lw $t0 -104($fp) move $a0 $t0 -lw $t0 -100($fp) +lw $t0 -96($fp) move $a1 $t0 jal equal_str sw $v0 -76($fp) @@ -2417,9 +2417,9 @@ lw $t1 12($t0) sw $t1 -104($fp) lw $t0 -244($fp) lw $t1 12($t0) -sw $t1 -100($fp) +sw $t1 -96($fp) lw $t0 -104($fp) -lw $t1 -100($fp) +lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) j label_35 @@ -2427,7 +2427,7 @@ label_35: lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -108($fp) lw $t0 -108($fp) @@ -2441,7 +2441,7 @@ sw $t1 -64($fp) li $t0 3 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -2454,7 +2454,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -68($fp) lw $t0 4($fp) @@ -2494,7 +2494,7 @@ label_38: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -40($fp) lw $t0 -40($fp) @@ -2507,7 +2507,7 @@ label_40: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -2520,7 +2520,7 @@ label_42: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) @@ -2540,7 +2540,7 @@ sw $t0 -20($fp) lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 4($fp) @@ -2577,20 +2577,20 @@ lw $t0 -12($fp) sw $t0 -240($fp) label_47: lw $v0 -240($fp) -addi $sp $sp 240 +addi $sp $sp 236 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_D: +__ctor_D: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 8 sll $t0 $t0 2 la $t1 prototype_table @@ -2607,32 +2607,32 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_D +jal __attributes_ctor_D addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_E: +__attributes_ctor_E: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_D +jal __attributes_ctor_D addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2645,11 +2645,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -44 +addi $sp $sp -40 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 0($fp) @@ -2658,13 +2658,13 @@ sw $t1 -40($fp) li $t0 8 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -24($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -2695,12 +2695,12 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) sw $t0 -48($fp) -jal __init_at_A +jal __ctor_A sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -2733,20 +2733,20 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 44 +addi $sp $sp 40 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_E: +__ctor_E: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 9 sll $t0 $t0 2 la $t1 prototype_table @@ -2763,18 +2763,18 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_E +jal __attributes_ctor_E addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_A2I: +__attributes_ctor_A2I: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -2801,7 +2801,7 @@ sw $t0 -536($fp) lw $t0 -536($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -532($fp) lw $t0 0($fp) @@ -2810,7 +2810,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -560($fp) +sw $t1 -564($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2818,25 +2818,25 @@ sw $t0 -556($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -552($fp) +sw $t0 -548($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -548($fp) -lw $t0 -560($fp) +sw $t0 -552($fp) +lw $t0 -564($fp) lw $t1 -556($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) lw $t0 -544($fp) bne $t0 $zero label_52 -lw $t0 -560($fp) -lw $t1 -552($fp) +lw $t0 -564($fp) +lw $t1 -548($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) lw $t0 -544($fp) bne $t0 $zero label_53 -lw $t0 -560($fp) -lw $t1 -548($fp) +lw $t0 -564($fp) +lw $t1 -552($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) lw $t0 -544($fp) @@ -2852,9 +2852,9 @@ lw $t1 12($t0) sw $t1 -568($fp) lw $t0 -532($fp) lw $t1 12($t0) -sw $t1 -564($fp) +sw $t1 -560($fp) lw $t0 -568($fp) -lw $t1 -564($fp) +lw $t1 -560($fp) seq $t0 $t0 $t1 sw $t0 -540($fp) j label_55 @@ -2864,10 +2864,10 @@ lw $t1 12($t0) sw $t1 -568($fp) lw $t0 -532($fp) lw $t1 12($t0) -sw $t1 -564($fp) +sw $t1 -560($fp) lw $t0 -568($fp) move $a0 $t0 -lw $t0 -564($fp) +lw $t0 -560($fp) move $a1 $t0 jal equal_str sw $v0 -540($fp) @@ -2878,9 +2878,9 @@ lw $t1 12($t0) sw $t1 -568($fp) lw $t0 -532($fp) lw $t1 12($t0) -sw $t1 -564($fp) +sw $t1 -560($fp) lw $t0 -568($fp) -lw $t1 -564($fp) +lw $t1 -560($fp) seq $t0 $t0 $t1 sw $t0 -540($fp) j label_55 @@ -2888,7 +2888,7 @@ label_55: lw $t0 -540($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -572($fp) lw $t0 -572($fp) @@ -2901,7 +2901,7 @@ sw $t0 -484($fp) lw $t0 -484($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -480($fp) lw $t0 0($fp) @@ -2910,7 +2910,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -508($fp) +sw $t1 -512($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2918,25 +2918,25 @@ sw $t0 -504($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -500($fp) +sw $t0 -496($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -496($fp) -lw $t0 -508($fp) +sw $t0 -500($fp) +lw $t0 -512($fp) lw $t1 -504($fp) seq $t0 $t0 $t1 sw $t0 -492($fp) lw $t0 -492($fp) bne $t0 $zero label_56 -lw $t0 -508($fp) -lw $t1 -500($fp) +lw $t0 -512($fp) +lw $t1 -496($fp) seq $t0 $t0 $t1 sw $t0 -492($fp) lw $t0 -492($fp) bne $t0 $zero label_57 -lw $t0 -508($fp) -lw $t1 -496($fp) +lw $t0 -512($fp) +lw $t1 -500($fp) seq $t0 $t0 $t1 sw $t0 -492($fp) lw $t0 -492($fp) @@ -2952,9 +2952,9 @@ lw $t1 12($t0) sw $t1 -516($fp) lw $t0 -480($fp) lw $t1 12($t0) -sw $t1 -512($fp) +sw $t1 -508($fp) lw $t0 -516($fp) -lw $t1 -512($fp) +lw $t1 -508($fp) seq $t0 $t0 $t1 sw $t0 -488($fp) j label_59 @@ -2964,10 +2964,10 @@ lw $t1 12($t0) sw $t1 -516($fp) lw $t0 -480($fp) lw $t1 12($t0) -sw $t1 -512($fp) +sw $t1 -508($fp) lw $t0 -516($fp) move $a0 $t0 -lw $t0 -512($fp) +lw $t0 -508($fp) move $a1 $t0 jal equal_str sw $v0 -488($fp) @@ -2978,9 +2978,9 @@ lw $t1 12($t0) sw $t1 -516($fp) lw $t0 -480($fp) lw $t1 12($t0) -sw $t1 -512($fp) +sw $t1 -508($fp) lw $t0 -516($fp) -lw $t1 -512($fp) +lw $t1 -508($fp) seq $t0 $t0 $t1 sw $t0 -488($fp) j label_59 @@ -2988,7 +2988,7 @@ label_59: lw $t0 -488($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -520($fp) lw $t0 -520($fp) @@ -3001,7 +3001,7 @@ sw $t0 -432($fp) lw $t0 -432($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -428($fp) lw $t0 0($fp) @@ -3010,7 +3010,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -456($fp) +sw $t1 -460($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3018,25 +3018,25 @@ sw $t0 -452($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -448($fp) +sw $t0 -444($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -444($fp) -lw $t0 -456($fp) +sw $t0 -448($fp) +lw $t0 -460($fp) lw $t1 -452($fp) seq $t0 $t0 $t1 sw $t0 -440($fp) lw $t0 -440($fp) bne $t0 $zero label_60 -lw $t0 -456($fp) -lw $t1 -448($fp) +lw $t0 -460($fp) +lw $t1 -444($fp) seq $t0 $t0 $t1 sw $t0 -440($fp) lw $t0 -440($fp) bne $t0 $zero label_61 -lw $t0 -456($fp) -lw $t1 -444($fp) +lw $t0 -460($fp) +lw $t1 -448($fp) seq $t0 $t0 $t1 sw $t0 -440($fp) lw $t0 -440($fp) @@ -3052,9 +3052,9 @@ lw $t1 12($t0) sw $t1 -464($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -460($fp) +sw $t1 -456($fp) lw $t0 -464($fp) -lw $t1 -460($fp) +lw $t1 -456($fp) seq $t0 $t0 $t1 sw $t0 -436($fp) j label_63 @@ -3064,10 +3064,10 @@ lw $t1 12($t0) sw $t1 -464($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -460($fp) +sw $t1 -456($fp) lw $t0 -464($fp) move $a0 $t0 -lw $t0 -460($fp) +lw $t0 -456($fp) move $a1 $t0 jal equal_str sw $v0 -436($fp) @@ -3078,9 +3078,9 @@ lw $t1 12($t0) sw $t1 -464($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -460($fp) +sw $t1 -456($fp) lw $t0 -464($fp) -lw $t1 -460($fp) +lw $t1 -456($fp) seq $t0 $t0 $t1 sw $t0 -436($fp) j label_63 @@ -3088,7 +3088,7 @@ label_63: lw $t0 -436($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -468($fp) lw $t0 -468($fp) @@ -3101,7 +3101,7 @@ sw $t0 -380($fp) lw $t0 -380($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -376($fp) lw $t0 0($fp) @@ -3110,7 +3110,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -404($fp) +sw $t1 -408($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3118,25 +3118,25 @@ sw $t0 -400($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -396($fp) +sw $t0 -392($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -392($fp) -lw $t0 -404($fp) +sw $t0 -396($fp) +lw $t0 -408($fp) lw $t1 -400($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) bne $t0 $zero label_64 -lw $t0 -404($fp) -lw $t1 -396($fp) +lw $t0 -408($fp) +lw $t1 -392($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) bne $t0 $zero label_65 -lw $t0 -404($fp) -lw $t1 -392($fp) +lw $t0 -408($fp) +lw $t1 -396($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) @@ -3152,9 +3152,9 @@ lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -376($fp) lw $t1 12($t0) -sw $t1 -408($fp) +sw $t1 -404($fp) lw $t0 -412($fp) -lw $t1 -408($fp) +lw $t1 -404($fp) seq $t0 $t0 $t1 sw $t0 -384($fp) j label_67 @@ -3164,10 +3164,10 @@ lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -376($fp) lw $t1 12($t0) -sw $t1 -408($fp) +sw $t1 -404($fp) lw $t0 -412($fp) move $a0 $t0 -lw $t0 -408($fp) +lw $t0 -404($fp) move $a1 $t0 jal equal_str sw $v0 -384($fp) @@ -3178,9 +3178,9 @@ lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -376($fp) lw $t1 12($t0) -sw $t1 -408($fp) +sw $t1 -404($fp) lw $t0 -412($fp) -lw $t1 -408($fp) +lw $t1 -404($fp) seq $t0 $t0 $t1 sw $t0 -384($fp) j label_67 @@ -3188,7 +3188,7 @@ label_67: lw $t0 -384($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -416($fp) lw $t0 -416($fp) @@ -3201,7 +3201,7 @@ sw $t0 -328($fp) lw $t0 -328($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -324($fp) lw $t0 0($fp) @@ -3210,7 +3210,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -352($fp) +sw $t1 -356($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3218,25 +3218,25 @@ sw $t0 -348($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -344($fp) +sw $t0 -340($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -340($fp) -lw $t0 -352($fp) +sw $t0 -344($fp) +lw $t0 -356($fp) lw $t1 -348($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) lw $t0 -336($fp) bne $t0 $zero label_68 -lw $t0 -352($fp) -lw $t1 -344($fp) +lw $t0 -356($fp) +lw $t1 -340($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) lw $t0 -336($fp) bne $t0 $zero label_69 -lw $t0 -352($fp) -lw $t1 -340($fp) +lw $t0 -356($fp) +lw $t1 -344($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) lw $t0 -336($fp) @@ -3252,9 +3252,9 @@ lw $t1 12($t0) sw $t1 -360($fp) lw $t0 -324($fp) lw $t1 12($t0) -sw $t1 -356($fp) +sw $t1 -352($fp) lw $t0 -360($fp) -lw $t1 -356($fp) +lw $t1 -352($fp) seq $t0 $t0 $t1 sw $t0 -332($fp) j label_71 @@ -3264,10 +3264,10 @@ lw $t1 12($t0) sw $t1 -360($fp) lw $t0 -324($fp) lw $t1 12($t0) -sw $t1 -356($fp) +sw $t1 -352($fp) lw $t0 -360($fp) move $a0 $t0 -lw $t0 -356($fp) +lw $t0 -352($fp) move $a1 $t0 jal equal_str sw $v0 -332($fp) @@ -3278,9 +3278,9 @@ lw $t1 12($t0) sw $t1 -360($fp) lw $t0 -324($fp) lw $t1 12($t0) -sw $t1 -356($fp) +sw $t1 -352($fp) lw $t0 -360($fp) -lw $t1 -356($fp) +lw $t1 -352($fp) seq $t0 $t0 $t1 sw $t0 -332($fp) j label_71 @@ -3288,7 +3288,7 @@ label_71: lw $t0 -332($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -364($fp) lw $t0 -364($fp) @@ -3301,7 +3301,7 @@ sw $t0 -276($fp) lw $t0 -276($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -272($fp) lw $t0 0($fp) @@ -3310,7 +3310,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -300($fp) +sw $t1 -304($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3318,25 +3318,25 @@ sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -292($fp) +sw $t0 -288($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -288($fp) -lw $t0 -300($fp) +sw $t0 -292($fp) +lw $t0 -304($fp) lw $t1 -296($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) bne $t0 $zero label_72 -lw $t0 -300($fp) -lw $t1 -292($fp) +lw $t0 -304($fp) +lw $t1 -288($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) bne $t0 $zero label_73 -lw $t0 -300($fp) -lw $t1 -288($fp) +lw $t0 -304($fp) +lw $t1 -292($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) @@ -3352,9 +3352,9 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -272($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) -lw $t1 -304($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -280($fp) j label_75 @@ -3364,10 +3364,10 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -272($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) move $a0 $t0 -lw $t0 -304($fp) +lw $t0 -300($fp) move $a1 $t0 jal equal_str sw $v0 -280($fp) @@ -3378,9 +3378,9 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -272($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) -lw $t1 -304($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -280($fp) j label_75 @@ -3388,7 +3388,7 @@ label_75: lw $t0 -280($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -312($fp) lw $t0 -312($fp) @@ -3401,7 +3401,7 @@ sw $t0 -224($fp) lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -220($fp) lw $t0 0($fp) @@ -3410,7 +3410,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -248($fp) +sw $t1 -252($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3418,25 +3418,25 @@ sw $t0 -244($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -240($fp) +sw $t0 -236($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -236($fp) -lw $t0 -248($fp) +sw $t0 -240($fp) +lw $t0 -252($fp) lw $t1 -244($fp) seq $t0 $t0 $t1 sw $t0 -232($fp) lw $t0 -232($fp) bne $t0 $zero label_76 -lw $t0 -248($fp) -lw $t1 -240($fp) +lw $t0 -252($fp) +lw $t1 -236($fp) seq $t0 $t0 $t1 sw $t0 -232($fp) lw $t0 -232($fp) bne $t0 $zero label_77 -lw $t0 -248($fp) -lw $t1 -236($fp) +lw $t0 -252($fp) +lw $t1 -240($fp) seq $t0 $t0 $t1 sw $t0 -232($fp) lw $t0 -232($fp) @@ -3452,9 +3452,9 @@ lw $t1 12($t0) sw $t1 -256($fp) lw $t0 -220($fp) lw $t1 12($t0) -sw $t1 -252($fp) +sw $t1 -248($fp) lw $t0 -256($fp) -lw $t1 -252($fp) +lw $t1 -248($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) j label_79 @@ -3464,10 +3464,10 @@ lw $t1 12($t0) sw $t1 -256($fp) lw $t0 -220($fp) lw $t1 12($t0) -sw $t1 -252($fp) +sw $t1 -248($fp) lw $t0 -256($fp) move $a0 $t0 -lw $t0 -252($fp) +lw $t0 -248($fp) move $a1 $t0 jal equal_str sw $v0 -228($fp) @@ -3478,9 +3478,9 @@ lw $t1 12($t0) sw $t1 -256($fp) lw $t0 -220($fp) lw $t1 12($t0) -sw $t1 -252($fp) +sw $t1 -248($fp) lw $t0 -256($fp) -lw $t1 -252($fp) +lw $t1 -248($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) j label_79 @@ -3488,7 +3488,7 @@ label_79: lw $t0 -228($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -260($fp) lw $t0 -260($fp) @@ -3501,7 +3501,7 @@ sw $t0 -172($fp) lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -168($fp) lw $t0 0($fp) @@ -3510,7 +3510,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -196($fp) +sw $t1 -200($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3518,25 +3518,25 @@ sw $t0 -192($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -188($fp) +sw $t0 -184($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -184($fp) -lw $t0 -196($fp) +sw $t0 -188($fp) +lw $t0 -200($fp) lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -180($fp) lw $t0 -180($fp) bne $t0 $zero label_80 -lw $t0 -196($fp) -lw $t1 -188($fp) +lw $t0 -200($fp) +lw $t1 -184($fp) seq $t0 $t0 $t1 sw $t0 -180($fp) lw $t0 -180($fp) bne $t0 $zero label_81 -lw $t0 -196($fp) -lw $t1 -184($fp) +lw $t0 -200($fp) +lw $t1 -188($fp) seq $t0 $t0 $t1 sw $t0 -180($fp) lw $t0 -180($fp) @@ -3552,9 +3552,9 @@ lw $t1 12($t0) sw $t1 -204($fp) lw $t0 -168($fp) lw $t1 12($t0) -sw $t1 -200($fp) +sw $t1 -196($fp) lw $t0 -204($fp) -lw $t1 -200($fp) +lw $t1 -196($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) j label_83 @@ -3564,10 +3564,10 @@ lw $t1 12($t0) sw $t1 -204($fp) lw $t0 -168($fp) lw $t1 12($t0) -sw $t1 -200($fp) +sw $t1 -196($fp) lw $t0 -204($fp) move $a0 $t0 -lw $t0 -200($fp) +lw $t0 -196($fp) move $a1 $t0 jal equal_str sw $v0 -176($fp) @@ -3578,9 +3578,9 @@ lw $t1 12($t0) sw $t1 -204($fp) lw $t0 -168($fp) lw $t1 12($t0) -sw $t1 -200($fp) +sw $t1 -196($fp) lw $t0 -204($fp) -lw $t1 -200($fp) +lw $t1 -196($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) j label_83 @@ -3588,7 +3588,7 @@ label_83: lw $t0 -176($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -208($fp) lw $t0 -208($fp) @@ -3601,7 +3601,7 @@ sw $t0 -120($fp) lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -116($fp) lw $t0 0($fp) @@ -3610,7 +3610,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -144($fp) +sw $t1 -148($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3618,25 +3618,25 @@ sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -136($fp) +sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -132($fp) -lw $t0 -144($fp) +sw $t0 -136($fp) +lw $t0 -148($fp) lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) bne $t0 $zero label_84 -lw $t0 -144($fp) -lw $t1 -136($fp) +lw $t0 -148($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) bne $t0 $zero label_85 -lw $t0 -144($fp) -lw $t1 -132($fp) +lw $t0 -148($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) @@ -3652,9 +3652,9 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) -lw $t1 -148($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) j label_87 @@ -3664,10 +3664,10 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) move $a0 $t0 -lw $t0 -148($fp) +lw $t0 -144($fp) move $a1 $t0 jal equal_str sw $v0 -124($fp) @@ -3678,9 +3678,9 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) -lw $t1 -148($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) j label_87 @@ -3688,7 +3688,7 @@ label_87: lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -156($fp) lw $t0 -156($fp) @@ -3701,7 +3701,7 @@ sw $t0 -68($fp) lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -64($fp) lw $t0 0($fp) @@ -3710,7 +3710,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -92($fp) +sw $t1 -96($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3718,25 +3718,25 @@ sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -84($fp) +sw $t0 -80($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -80($fp) -lw $t0 -92($fp) +sw $t0 -84($fp) +lw $t0 -96($fp) lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_88 -lw $t0 -92($fp) -lw $t1 -84($fp) +lw $t0 -96($fp) +lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_89 -lw $t0 -92($fp) -lw $t1 -80($fp) +lw $t0 -96($fp) +lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) @@ -3752,9 +3752,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_91 @@ -3764,10 +3764,10 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) move $a0 $t0 -lw $t0 -96($fp) +lw $t0 -92($fp) move $a1 $t0 jal equal_str sw $v0 -72($fp) @@ -3778,9 +3778,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_91 @@ -3788,7 +3788,7 @@ label_91: lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -104($fp) lw $t0 -104($fp) @@ -3826,7 +3826,7 @@ sw $v0 -56($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -3836,7 +3836,7 @@ label_94: li $t0 9 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 -48($fp) @@ -3849,7 +3849,7 @@ label_96: li $t0 8 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -3862,7 +3862,7 @@ label_98: li $t0 7 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -40($fp) lw $t0 -40($fp) @@ -3875,7 +3875,7 @@ label_100: li $t0 6 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -3888,7 +3888,7 @@ label_102: li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) @@ -3901,7 +3901,7 @@ label_104: li $t0 4 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -3914,7 +3914,7 @@ label_106: li $t0 3 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -24($fp) lw $t0 -24($fp) @@ -3927,7 +3927,7 @@ label_108: li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -3940,7 +3940,7 @@ label_110: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) @@ -3953,7 +3953,7 @@ label_112: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -3977,7 +3977,7 @@ addi $sp $sp -576 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -540($fp) lw $t0 0($fp) @@ -3986,7 +3986,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -564($fp) +sw $t1 -568($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3994,25 +3994,25 @@ sw $t0 -560($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -556($fp) +sw $t0 -552($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -552($fp) -lw $t0 -564($fp) +sw $t0 -556($fp) +lw $t0 -568($fp) lw $t1 -560($fp) seq $t0 $t0 $t1 sw $t0 -548($fp) lw $t0 -548($fp) bne $t0 $zero label_114 -lw $t0 -564($fp) -lw $t1 -556($fp) +lw $t0 -568($fp) +lw $t1 -552($fp) seq $t0 $t0 $t1 sw $t0 -548($fp) lw $t0 -548($fp) bne $t0 $zero label_115 -lw $t0 -564($fp) -lw $t1 -552($fp) +lw $t0 -568($fp) +lw $t1 -556($fp) seq $t0 $t0 $t1 sw $t0 -548($fp) lw $t0 -548($fp) @@ -4028,9 +4028,9 @@ lw $t1 12($t0) sw $t1 -572($fp) lw $t0 -540($fp) lw $t1 12($t0) -sw $t1 -568($fp) +sw $t1 -564($fp) lw $t0 -572($fp) -lw $t1 -568($fp) +lw $t1 -564($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) j label_117 @@ -4040,10 +4040,10 @@ lw $t1 12($t0) sw $t1 -572($fp) lw $t0 -540($fp) lw $t1 12($t0) -sw $t1 -568($fp) +sw $t1 -564($fp) lw $t0 -572($fp) move $a0 $t0 -lw $t0 -568($fp) +lw $t0 -564($fp) move $a1 $t0 jal equal_str sw $v0 -544($fp) @@ -4054,9 +4054,9 @@ lw $t1 12($t0) sw $t1 -572($fp) lw $t0 -540($fp) lw $t1 12($t0) -sw $t1 -568($fp) +sw $t1 -564($fp) lw $t0 -572($fp) -lw $t1 -568($fp) +lw $t1 -564($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) j label_117 @@ -4064,7 +4064,7 @@ label_117: lw $t0 -544($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -576($fp) lw $t0 -576($fp) @@ -4075,7 +4075,7 @@ bne $t0 $zero label_174 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -492($fp) lw $t0 0($fp) @@ -4084,7 +4084,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -516($fp) +sw $t1 -520($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4092,25 +4092,25 @@ sw $t0 -512($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -508($fp) +sw $t0 -504($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -504($fp) -lw $t0 -516($fp) +sw $t0 -508($fp) +lw $t0 -520($fp) lw $t1 -512($fp) seq $t0 $t0 $t1 sw $t0 -500($fp) lw $t0 -500($fp) bne $t0 $zero label_118 -lw $t0 -516($fp) -lw $t1 -508($fp) +lw $t0 -520($fp) +lw $t1 -504($fp) seq $t0 $t0 $t1 sw $t0 -500($fp) lw $t0 -500($fp) bne $t0 $zero label_119 -lw $t0 -516($fp) -lw $t1 -504($fp) +lw $t0 -520($fp) +lw $t1 -508($fp) seq $t0 $t0 $t1 sw $t0 -500($fp) lw $t0 -500($fp) @@ -4126,9 +4126,9 @@ lw $t1 12($t0) sw $t1 -524($fp) lw $t0 -492($fp) lw $t1 12($t0) -sw $t1 -520($fp) +sw $t1 -516($fp) lw $t0 -524($fp) -lw $t1 -520($fp) +lw $t1 -516($fp) seq $t0 $t0 $t1 sw $t0 -496($fp) j label_121 @@ -4138,10 +4138,10 @@ lw $t1 12($t0) sw $t1 -524($fp) lw $t0 -492($fp) lw $t1 12($t0) -sw $t1 -520($fp) +sw $t1 -516($fp) lw $t0 -524($fp) move $a0 $t0 -lw $t0 -520($fp) +lw $t0 -516($fp) move $a1 $t0 jal equal_str sw $v0 -496($fp) @@ -4152,9 +4152,9 @@ lw $t1 12($t0) sw $t1 -524($fp) lw $t0 -492($fp) lw $t1 12($t0) -sw $t1 -520($fp) +sw $t1 -516($fp) lw $t0 -524($fp) -lw $t1 -520($fp) +lw $t1 -516($fp) seq $t0 $t0 $t1 sw $t0 -496($fp) j label_121 @@ -4162,7 +4162,7 @@ label_121: lw $t0 -496($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -528($fp) lw $t0 -528($fp) @@ -4173,7 +4173,7 @@ bne $t0 $zero label_172 li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -444($fp) lw $t0 0($fp) @@ -4182,7 +4182,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -468($fp) +sw $t1 -472($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4190,25 +4190,25 @@ sw $t0 -464($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -460($fp) +sw $t0 -456($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -456($fp) -lw $t0 -468($fp) +sw $t0 -460($fp) +lw $t0 -472($fp) lw $t1 -464($fp) seq $t0 $t0 $t1 sw $t0 -452($fp) lw $t0 -452($fp) bne $t0 $zero label_122 -lw $t0 -468($fp) -lw $t1 -460($fp) +lw $t0 -472($fp) +lw $t1 -456($fp) seq $t0 $t0 $t1 sw $t0 -452($fp) lw $t0 -452($fp) bne $t0 $zero label_123 -lw $t0 -468($fp) -lw $t1 -456($fp) +lw $t0 -472($fp) +lw $t1 -460($fp) seq $t0 $t0 $t1 sw $t0 -452($fp) lw $t0 -452($fp) @@ -4224,9 +4224,9 @@ lw $t1 12($t0) sw $t1 -476($fp) lw $t0 -444($fp) lw $t1 12($t0) -sw $t1 -472($fp) +sw $t1 -468($fp) lw $t0 -476($fp) -lw $t1 -472($fp) +lw $t1 -468($fp) seq $t0 $t0 $t1 sw $t0 -448($fp) j label_125 @@ -4236,10 +4236,10 @@ lw $t1 12($t0) sw $t1 -476($fp) lw $t0 -444($fp) lw $t1 12($t0) -sw $t1 -472($fp) +sw $t1 -468($fp) lw $t0 -476($fp) move $a0 $t0 -lw $t0 -472($fp) +lw $t0 -468($fp) move $a1 $t0 jal equal_str sw $v0 -448($fp) @@ -4250,9 +4250,9 @@ lw $t1 12($t0) sw $t1 -476($fp) lw $t0 -444($fp) lw $t1 12($t0) -sw $t1 -472($fp) +sw $t1 -468($fp) lw $t0 -476($fp) -lw $t1 -472($fp) +lw $t1 -468($fp) seq $t0 $t0 $t1 sw $t0 -448($fp) j label_125 @@ -4260,7 +4260,7 @@ label_125: lw $t0 -448($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -480($fp) lw $t0 -480($fp) @@ -4271,7 +4271,7 @@ bne $t0 $zero label_170 li $t0 3 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -396($fp) lw $t0 0($fp) @@ -4280,7 +4280,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -420($fp) +sw $t1 -424($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4288,25 +4288,25 @@ sw $t0 -416($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -412($fp) +sw $t0 -408($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -408($fp) -lw $t0 -420($fp) +sw $t0 -412($fp) +lw $t0 -424($fp) lw $t1 -416($fp) seq $t0 $t0 $t1 sw $t0 -404($fp) lw $t0 -404($fp) bne $t0 $zero label_126 -lw $t0 -420($fp) -lw $t1 -412($fp) +lw $t0 -424($fp) +lw $t1 -408($fp) seq $t0 $t0 $t1 sw $t0 -404($fp) lw $t0 -404($fp) bne $t0 $zero label_127 -lw $t0 -420($fp) -lw $t1 -408($fp) +lw $t0 -424($fp) +lw $t1 -412($fp) seq $t0 $t0 $t1 sw $t0 -404($fp) lw $t0 -404($fp) @@ -4322,9 +4322,9 @@ lw $t1 12($t0) sw $t1 -428($fp) lw $t0 -396($fp) lw $t1 12($t0) -sw $t1 -424($fp) +sw $t1 -420($fp) lw $t0 -428($fp) -lw $t1 -424($fp) +lw $t1 -420($fp) seq $t0 $t0 $t1 sw $t0 -400($fp) j label_129 @@ -4334,10 +4334,10 @@ lw $t1 12($t0) sw $t1 -428($fp) lw $t0 -396($fp) lw $t1 12($t0) -sw $t1 -424($fp) +sw $t1 -420($fp) lw $t0 -428($fp) move $a0 $t0 -lw $t0 -424($fp) +lw $t0 -420($fp) move $a1 $t0 jal equal_str sw $v0 -400($fp) @@ -4348,9 +4348,9 @@ lw $t1 12($t0) sw $t1 -428($fp) lw $t0 -396($fp) lw $t1 12($t0) -sw $t1 -424($fp) +sw $t1 -420($fp) lw $t0 -428($fp) -lw $t1 -424($fp) +lw $t1 -420($fp) seq $t0 $t0 $t1 sw $t0 -400($fp) j label_129 @@ -4358,7 +4358,7 @@ label_129: lw $t0 -400($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -432($fp) lw $t0 -432($fp) @@ -4369,7 +4369,7 @@ bne $t0 $zero label_168 li $t0 4 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -348($fp) lw $t0 0($fp) @@ -4378,7 +4378,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -372($fp) +sw $t1 -376($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4386,25 +4386,25 @@ sw $t0 -368($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -364($fp) +sw $t0 -360($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -360($fp) -lw $t0 -372($fp) +sw $t0 -364($fp) +lw $t0 -376($fp) lw $t1 -368($fp) seq $t0 $t0 $t1 sw $t0 -356($fp) lw $t0 -356($fp) bne $t0 $zero label_130 -lw $t0 -372($fp) -lw $t1 -364($fp) +lw $t0 -376($fp) +lw $t1 -360($fp) seq $t0 $t0 $t1 sw $t0 -356($fp) lw $t0 -356($fp) bne $t0 $zero label_131 -lw $t0 -372($fp) -lw $t1 -360($fp) +lw $t0 -376($fp) +lw $t1 -364($fp) seq $t0 $t0 $t1 sw $t0 -356($fp) lw $t0 -356($fp) @@ -4420,9 +4420,9 @@ lw $t1 12($t0) sw $t1 -380($fp) lw $t0 -348($fp) lw $t1 12($t0) -sw $t1 -376($fp) +sw $t1 -372($fp) lw $t0 -380($fp) -lw $t1 -376($fp) +lw $t1 -372($fp) seq $t0 $t0 $t1 sw $t0 -352($fp) j label_133 @@ -4432,10 +4432,10 @@ lw $t1 12($t0) sw $t1 -380($fp) lw $t0 -348($fp) lw $t1 12($t0) -sw $t1 -376($fp) +sw $t1 -372($fp) lw $t0 -380($fp) move $a0 $t0 -lw $t0 -376($fp) +lw $t0 -372($fp) move $a1 $t0 jal equal_str sw $v0 -352($fp) @@ -4446,9 +4446,9 @@ lw $t1 12($t0) sw $t1 -380($fp) lw $t0 -348($fp) lw $t1 12($t0) -sw $t1 -376($fp) +sw $t1 -372($fp) lw $t0 -380($fp) -lw $t1 -376($fp) +lw $t1 -372($fp) seq $t0 $t0 $t1 sw $t0 -352($fp) j label_133 @@ -4456,7 +4456,7 @@ label_133: lw $t0 -352($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -384($fp) lw $t0 -384($fp) @@ -4467,7 +4467,7 @@ bne $t0 $zero label_166 li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -300($fp) lw $t0 0($fp) @@ -4476,7 +4476,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -324($fp) +sw $t1 -328($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4484,25 +4484,25 @@ sw $t0 -320($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -316($fp) +sw $t0 -312($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -312($fp) -lw $t0 -324($fp) +sw $t0 -316($fp) +lw $t0 -328($fp) lw $t1 -320($fp) seq $t0 $t0 $t1 sw $t0 -308($fp) lw $t0 -308($fp) bne $t0 $zero label_134 -lw $t0 -324($fp) -lw $t1 -316($fp) +lw $t0 -328($fp) +lw $t1 -312($fp) seq $t0 $t0 $t1 sw $t0 -308($fp) lw $t0 -308($fp) bne $t0 $zero label_135 -lw $t0 -324($fp) -lw $t1 -312($fp) +lw $t0 -328($fp) +lw $t1 -316($fp) seq $t0 $t0 $t1 sw $t0 -308($fp) lw $t0 -308($fp) @@ -4518,9 +4518,9 @@ lw $t1 12($t0) sw $t1 -332($fp) lw $t0 -300($fp) lw $t1 12($t0) -sw $t1 -328($fp) +sw $t1 -324($fp) lw $t0 -332($fp) -lw $t1 -328($fp) +lw $t1 -324($fp) seq $t0 $t0 $t1 sw $t0 -304($fp) j label_137 @@ -4530,10 +4530,10 @@ lw $t1 12($t0) sw $t1 -332($fp) lw $t0 -300($fp) lw $t1 12($t0) -sw $t1 -328($fp) +sw $t1 -324($fp) lw $t0 -332($fp) move $a0 $t0 -lw $t0 -328($fp) +lw $t0 -324($fp) move $a1 $t0 jal equal_str sw $v0 -304($fp) @@ -4544,9 +4544,9 @@ lw $t1 12($t0) sw $t1 -332($fp) lw $t0 -300($fp) lw $t1 12($t0) -sw $t1 -328($fp) +sw $t1 -324($fp) lw $t0 -332($fp) -lw $t1 -328($fp) +lw $t1 -324($fp) seq $t0 $t0 $t1 sw $t0 -304($fp) j label_137 @@ -4554,7 +4554,7 @@ label_137: lw $t0 -304($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -336($fp) lw $t0 -336($fp) @@ -4565,7 +4565,7 @@ bne $t0 $zero label_164 li $t0 6 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -252($fp) lw $t0 0($fp) @@ -4574,7 +4574,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -276($fp) +sw $t1 -280($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4582,25 +4582,25 @@ sw $t0 -272($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -268($fp) +sw $t0 -264($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -264($fp) -lw $t0 -276($fp) +sw $t0 -268($fp) +lw $t0 -280($fp) lw $t1 -272($fp) seq $t0 $t0 $t1 sw $t0 -260($fp) lw $t0 -260($fp) bne $t0 $zero label_138 -lw $t0 -276($fp) -lw $t1 -268($fp) +lw $t0 -280($fp) +lw $t1 -264($fp) seq $t0 $t0 $t1 sw $t0 -260($fp) lw $t0 -260($fp) bne $t0 $zero label_139 -lw $t0 -276($fp) -lw $t1 -264($fp) +lw $t0 -280($fp) +lw $t1 -268($fp) seq $t0 $t0 $t1 sw $t0 -260($fp) lw $t0 -260($fp) @@ -4616,9 +4616,9 @@ lw $t1 12($t0) sw $t1 -284($fp) lw $t0 -252($fp) lw $t1 12($t0) -sw $t1 -280($fp) +sw $t1 -276($fp) lw $t0 -284($fp) -lw $t1 -280($fp) +lw $t1 -276($fp) seq $t0 $t0 $t1 sw $t0 -256($fp) j label_141 @@ -4628,10 +4628,10 @@ lw $t1 12($t0) sw $t1 -284($fp) lw $t0 -252($fp) lw $t1 12($t0) -sw $t1 -280($fp) +sw $t1 -276($fp) lw $t0 -284($fp) move $a0 $t0 -lw $t0 -280($fp) +lw $t0 -276($fp) move $a1 $t0 jal equal_str sw $v0 -256($fp) @@ -4642,9 +4642,9 @@ lw $t1 12($t0) sw $t1 -284($fp) lw $t0 -252($fp) lw $t1 12($t0) -sw $t1 -280($fp) +sw $t1 -276($fp) lw $t0 -284($fp) -lw $t1 -280($fp) +lw $t1 -276($fp) seq $t0 $t0 $t1 sw $t0 -256($fp) j label_141 @@ -4652,7 +4652,7 @@ label_141: lw $t0 -256($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -288($fp) lw $t0 -288($fp) @@ -4663,7 +4663,7 @@ bne $t0 $zero label_162 li $t0 7 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -204($fp) lw $t0 0($fp) @@ -4672,7 +4672,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -228($fp) +sw $t1 -232($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4680,25 +4680,25 @@ sw $t0 -224($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -220($fp) +sw $t0 -216($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -216($fp) -lw $t0 -228($fp) +sw $t0 -220($fp) +lw $t0 -232($fp) lw $t1 -224($fp) seq $t0 $t0 $t1 sw $t0 -212($fp) lw $t0 -212($fp) bne $t0 $zero label_142 -lw $t0 -228($fp) -lw $t1 -220($fp) +lw $t0 -232($fp) +lw $t1 -216($fp) seq $t0 $t0 $t1 sw $t0 -212($fp) lw $t0 -212($fp) bne $t0 $zero label_143 -lw $t0 -228($fp) -lw $t1 -216($fp) +lw $t0 -232($fp) +lw $t1 -220($fp) seq $t0 $t0 $t1 sw $t0 -212($fp) lw $t0 -212($fp) @@ -4714,9 +4714,9 @@ lw $t1 12($t0) sw $t1 -236($fp) lw $t0 -204($fp) lw $t1 12($t0) -sw $t1 -232($fp) +sw $t1 -228($fp) lw $t0 -236($fp) -lw $t1 -232($fp) +lw $t1 -228($fp) seq $t0 $t0 $t1 sw $t0 -208($fp) j label_145 @@ -4726,10 +4726,10 @@ lw $t1 12($t0) sw $t1 -236($fp) lw $t0 -204($fp) lw $t1 12($t0) -sw $t1 -232($fp) +sw $t1 -228($fp) lw $t0 -236($fp) move $a0 $t0 -lw $t0 -232($fp) +lw $t0 -228($fp) move $a1 $t0 jal equal_str sw $v0 -208($fp) @@ -4740,9 +4740,9 @@ lw $t1 12($t0) sw $t1 -236($fp) lw $t0 -204($fp) lw $t1 12($t0) -sw $t1 -232($fp) +sw $t1 -228($fp) lw $t0 -236($fp) -lw $t1 -232($fp) +lw $t1 -228($fp) seq $t0 $t0 $t1 sw $t0 -208($fp) j label_145 @@ -4750,7 +4750,7 @@ label_145: lw $t0 -208($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -240($fp) lw $t0 -240($fp) @@ -4761,7 +4761,7 @@ bne $t0 $zero label_160 li $t0 8 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -156($fp) lw $t0 0($fp) @@ -4770,7 +4770,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -180($fp) +sw $t1 -184($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4778,25 +4778,25 @@ sw $t0 -176($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -172($fp) +sw $t0 -168($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -168($fp) -lw $t0 -180($fp) +sw $t0 -172($fp) +lw $t0 -184($fp) lw $t1 -176($fp) seq $t0 $t0 $t1 sw $t0 -164($fp) lw $t0 -164($fp) bne $t0 $zero label_146 -lw $t0 -180($fp) -lw $t1 -172($fp) +lw $t0 -184($fp) +lw $t1 -168($fp) seq $t0 $t0 $t1 sw $t0 -164($fp) lw $t0 -164($fp) bne $t0 $zero label_147 -lw $t0 -180($fp) -lw $t1 -168($fp) +lw $t0 -184($fp) +lw $t1 -172($fp) seq $t0 $t0 $t1 sw $t0 -164($fp) lw $t0 -164($fp) @@ -4812,9 +4812,9 @@ lw $t1 12($t0) sw $t1 -188($fp) lw $t0 -156($fp) lw $t1 12($t0) -sw $t1 -184($fp) +sw $t1 -180($fp) lw $t0 -188($fp) -lw $t1 -184($fp) +lw $t1 -180($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) j label_149 @@ -4824,10 +4824,10 @@ lw $t1 12($t0) sw $t1 -188($fp) lw $t0 -156($fp) lw $t1 12($t0) -sw $t1 -184($fp) +sw $t1 -180($fp) lw $t0 -188($fp) move $a0 $t0 -lw $t0 -184($fp) +lw $t0 -180($fp) move $a1 $t0 jal equal_str sw $v0 -160($fp) @@ -4838,9 +4838,9 @@ lw $t1 12($t0) sw $t1 -188($fp) lw $t0 -156($fp) lw $t1 12($t0) -sw $t1 -184($fp) +sw $t1 -180($fp) lw $t0 -188($fp) -lw $t1 -184($fp) +lw $t1 -180($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) j label_149 @@ -4848,7 +4848,7 @@ label_149: lw $t0 -160($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -192($fp) lw $t0 -192($fp) @@ -4859,7 +4859,7 @@ bne $t0 $zero label_158 li $t0 9 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -108($fp) lw $t0 0($fp) @@ -4868,7 +4868,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -132($fp) +sw $t1 -136($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4876,25 +4876,25 @@ sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -124($fp) +sw $t0 -120($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -120($fp) -lw $t0 -132($fp) +sw $t0 -124($fp) +lw $t0 -136($fp) lw $t1 -128($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) bne $t0 $zero label_150 -lw $t0 -132($fp) -lw $t1 -124($fp) +lw $t0 -136($fp) +lw $t1 -120($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) bne $t0 $zero label_151 -lw $t0 -132($fp) -lw $t1 -120($fp) +lw $t0 -136($fp) +lw $t1 -124($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) @@ -4910,9 +4910,9 @@ lw $t1 12($t0) sw $t1 -140($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -136($fp) +sw $t1 -132($fp) lw $t0 -140($fp) -lw $t1 -136($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -112($fp) j label_153 @@ -4922,10 +4922,10 @@ lw $t1 12($t0) sw $t1 -140($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -136($fp) +sw $t1 -132($fp) lw $t0 -140($fp) move $a0 $t0 -lw $t0 -136($fp) +lw $t0 -132($fp) move $a1 $t0 jal equal_str sw $v0 -112($fp) @@ -4936,9 +4936,9 @@ lw $t1 12($t0) sw $t1 -140($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -136($fp) +sw $t1 -132($fp) lw $t0 -140($fp) -lw $t1 -136($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -112($fp) j label_153 @@ -4946,7 +4946,7 @@ label_153: lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -144($fp) lw $t0 -144($fp) @@ -4986,7 +4986,7 @@ sw $t0 -96($fp) lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -92($fp) lw $t0 -92($fp) @@ -4998,7 +4998,7 @@ sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -5013,7 +5013,7 @@ sw $t0 -80($fp) lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -76($fp) lw $t0 -76($fp) @@ -5028,7 +5028,7 @@ sw $t0 -72($fp) lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -68($fp) @@ -5043,7 +5043,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -5058,7 +5058,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -5073,7 +5073,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -5088,7 +5088,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -5103,7 +5103,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -5118,7 +5118,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -5133,7 +5133,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -5184,7 +5184,7 @@ sw $v0 -272($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -268($fp) lw $t0 -272($fp) @@ -5193,7 +5193,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -300($fp) +sw $t1 -304($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5201,25 +5201,25 @@ sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -292($fp) +sw $t0 -288($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -288($fp) -lw $t0 -300($fp) +sw $t0 -292($fp) +lw $t0 -304($fp) lw $t1 -296($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) bne $t0 $zero label_178 -lw $t0 -300($fp) -lw $t1 -292($fp) +lw $t0 -304($fp) +lw $t1 -288($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) bne $t0 $zero label_179 -lw $t0 -300($fp) -lw $t1 -288($fp) +lw $t0 -304($fp) +lw $t1 -292($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) @@ -5235,9 +5235,9 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -268($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) -lw $t1 -304($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -280($fp) j label_181 @@ -5247,10 +5247,10 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -268($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) move $a0 $t0 -lw $t0 -304($fp) +lw $t0 -300($fp) move $a1 $t0 jal equal_str sw $v0 -280($fp) @@ -5261,9 +5261,9 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -268($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) -lw $t1 -304($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -280($fp) j label_181 @@ -5271,7 +5271,7 @@ label_181: lw $t0 -280($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -312($fp) lw $t0 -312($fp) @@ -5282,13 +5282,13 @@ bne $t0 $zero label_212 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -220($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -216($fp) lw $t0 0($fp) @@ -5329,7 +5329,7 @@ sw $t0 -204($fp) lw $t0 -204($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -200($fp) lw $t0 -208($fp) @@ -5338,7 +5338,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -244($fp) +sw $t1 -248($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5346,25 +5346,25 @@ sw $t0 -240($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -236($fp) +sw $t0 -232($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -232($fp) -lw $t0 -244($fp) +sw $t0 -236($fp) +lw $t0 -248($fp) lw $t1 -240($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) lw $t0 -228($fp) bne $t0 $zero label_184 -lw $t0 -244($fp) -lw $t1 -236($fp) +lw $t0 -248($fp) +lw $t1 -232($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) lw $t0 -228($fp) bne $t0 $zero label_185 -lw $t0 -244($fp) -lw $t1 -232($fp) +lw $t0 -248($fp) +lw $t1 -236($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) lw $t0 -228($fp) @@ -5380,9 +5380,9 @@ lw $t1 12($t0) sw $t1 -252($fp) lw $t0 -200($fp) lw $t1 12($t0) -sw $t1 -248($fp) +sw $t1 -244($fp) lw $t0 -252($fp) -lw $t1 -248($fp) +lw $t1 -244($fp) seq $t0 $t0 $t1 sw $t0 -224($fp) j label_187 @@ -5392,10 +5392,10 @@ lw $t1 12($t0) sw $t1 -252($fp) lw $t0 -200($fp) lw $t1 12($t0) -sw $t1 -248($fp) +sw $t1 -244($fp) lw $t0 -252($fp) move $a0 $t0 -lw $t0 -248($fp) +lw $t0 -244($fp) move $a1 $t0 jal equal_str sw $v0 -224($fp) @@ -5406,9 +5406,9 @@ lw $t1 12($t0) sw $t1 -252($fp) lw $t0 -200($fp) lw $t1 12($t0) -sw $t1 -248($fp) +sw $t1 -244($fp) lw $t0 -252($fp) -lw $t1 -248($fp) +lw $t1 -244($fp) seq $t0 $t0 $t1 sw $t0 -224($fp) j label_187 @@ -5416,7 +5416,7 @@ label_187: lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -256($fp) lw $t0 -256($fp) @@ -5427,13 +5427,13 @@ bne $t0 $zero label_204 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -152($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -148($fp) lw $t0 0($fp) @@ -5474,7 +5474,7 @@ sw $t0 -136($fp) lw $t0 -136($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -132($fp) lw $t0 -140($fp) @@ -5483,7 +5483,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -176($fp) +sw $t1 -180($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5491,25 +5491,25 @@ sw $t0 -172($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -168($fp) +sw $t0 -164($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -164($fp) -lw $t0 -176($fp) +sw $t0 -168($fp) +lw $t0 -180($fp) lw $t1 -172($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) lw $t0 -160($fp) bne $t0 $zero label_190 -lw $t0 -176($fp) -lw $t1 -168($fp) +lw $t0 -180($fp) +lw $t1 -164($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) lw $t0 -160($fp) bne $t0 $zero label_191 -lw $t0 -176($fp) -lw $t1 -164($fp) +lw $t0 -180($fp) +lw $t1 -168($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) lw $t0 -160($fp) @@ -5525,9 +5525,9 @@ lw $t1 12($t0) sw $t1 -184($fp) lw $t0 -132($fp) lw $t1 12($t0) -sw $t1 -180($fp) +sw $t1 -176($fp) lw $t0 -184($fp) -lw $t1 -180($fp) +lw $t1 -176($fp) seq $t0 $t0 $t1 sw $t0 -156($fp) j label_193 @@ -5537,10 +5537,10 @@ lw $t1 12($t0) sw $t1 -184($fp) lw $t0 -132($fp) lw $t1 12($t0) -sw $t1 -180($fp) +sw $t1 -176($fp) lw $t0 -184($fp) move $a0 $t0 -lw $t0 -180($fp) +lw $t0 -176($fp) move $a1 $t0 jal equal_str sw $v0 -156($fp) @@ -5551,9 +5551,9 @@ lw $t1 12($t0) sw $t1 -184($fp) lw $t0 -132($fp) lw $t1 12($t0) -sw $t1 -180($fp) +sw $t1 -176($fp) lw $t0 -184($fp) -lw $t1 -180($fp) +lw $t1 -176($fp) seq $t0 $t0 $t1 sw $t0 -156($fp) j label_193 @@ -5561,7 +5561,7 @@ label_193: lw $t0 -156($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -188($fp) lw $t0 -188($fp) @@ -5606,7 +5606,7 @@ label_196: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -120($fp) lw $t0 0($fp) @@ -5642,7 +5642,7 @@ sw $t1 -112($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -92($fp) lw $t0 -92($fp) @@ -5655,7 +5655,7 @@ sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -116($fp) lw $t0 0($fp) @@ -5731,7 +5731,7 @@ label_204: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -60($fp) lw $t0 0($fp) @@ -5767,7 +5767,7 @@ sw $t1 -52($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) @@ -5780,7 +5780,7 @@ sw $t0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 0($fp) @@ -5856,7 +5856,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) @@ -5869,7 +5869,7 @@ label_212: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -5893,7 +5893,7 @@ addi $sp $sp -124 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -128($fp) lw $t0 -128($fp) @@ -5930,7 +5930,7 @@ sw $t0 -124($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -108($fp) lw $t0 -108($fp) @@ -5949,7 +5949,7 @@ sw $t1 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -100($fp) lw $t0 -100($fp) @@ -5965,7 +5965,7 @@ sw $t1 -64($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -5978,7 +5978,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -68($fp) @@ -5987,7 +5987,7 @@ sw $t1 -80($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 0($fp) @@ -6063,7 +6063,7 @@ sw $t0 -72($fp) lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -6074,7 +6074,7 @@ sw $t1 -24($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -6087,7 +6087,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -6112,7 +6112,7 @@ addi $sp $sp -148 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -112($fp) lw $t0 0($fp) @@ -6121,7 +6121,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -136($fp) +sw $t1 -140($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -6129,25 +6129,25 @@ sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -128($fp) +sw $t0 -124($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -124($fp) -lw $t0 -136($fp) +sw $t0 -128($fp) +lw $t0 -140($fp) lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) lw $t0 -120($fp) bne $t0 $zero label_223 -lw $t0 -136($fp) -lw $t1 -128($fp) +lw $t0 -140($fp) +lw $t1 -124($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) lw $t0 -120($fp) bne $t0 $zero label_224 -lw $t0 -136($fp) -lw $t1 -124($fp) +lw $t0 -140($fp) +lw $t1 -128($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) lw $t0 -120($fp) @@ -6163,9 +6163,9 @@ lw $t1 12($t0) sw $t1 -144($fp) lw $t0 -112($fp) lw $t1 12($t0) -sw $t1 -140($fp) +sw $t1 -136($fp) lw $t0 -144($fp) -lw $t1 -140($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) j label_226 @@ -6175,10 +6175,10 @@ lw $t1 12($t0) sw $t1 -144($fp) lw $t0 -112($fp) lw $t1 12($t0) -sw $t1 -140($fp) +sw $t1 -136($fp) lw $t0 -144($fp) move $a0 $t0 -lw $t0 -140($fp) +lw $t0 -136($fp) move $a1 $t0 jal equal_str sw $v0 -116($fp) @@ -6189,9 +6189,9 @@ lw $t1 12($t0) sw $t1 -144($fp) lw $t0 -112($fp) lw $t1 12($t0) -sw $t1 -140($fp) +sw $t1 -136($fp) lw $t0 -144($fp) -lw $t1 -140($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) j label_226 @@ -6199,7 +6199,7 @@ label_226: lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -148($fp) lw $t0 -148($fp) @@ -6210,7 +6210,7 @@ bne $t0 $zero label_235 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -6226,7 +6226,7 @@ sw $t1 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -100($fp) lw $t0 -100($fp) @@ -6240,7 +6240,7 @@ sw $t1 -76($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -6253,7 +6253,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -64($fp) lw $t0 -64($fp) @@ -6266,7 +6266,7 @@ sw $t0 -68($fp) lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -80($fp) lw $t0 4($fp) @@ -6304,7 +6304,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -6383,7 +6383,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -6407,7 +6407,7 @@ addi $sp $sp -144 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -108($fp) lw $t0 0($fp) @@ -6416,7 +6416,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -132($fp) +sw $t1 -136($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -6424,25 +6424,25 @@ sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -124($fp) +sw $t0 -120($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -120($fp) -lw $t0 -132($fp) +sw $t0 -124($fp) +lw $t0 -136($fp) lw $t1 -128($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) bne $t0 $zero label_237 -lw $t0 -132($fp) -lw $t1 -124($fp) +lw $t0 -136($fp) +lw $t1 -120($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) bne $t0 $zero label_238 -lw $t0 -132($fp) -lw $t1 -120($fp) +lw $t0 -136($fp) +lw $t1 -124($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) @@ -6458,9 +6458,9 @@ lw $t1 12($t0) sw $t1 -140($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -136($fp) +sw $t1 -132($fp) lw $t0 -140($fp) -lw $t1 -136($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -112($fp) j label_240 @@ -6470,10 +6470,10 @@ lw $t1 12($t0) sw $t1 -140($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -136($fp) +sw $t1 -132($fp) lw $t0 -140($fp) move $a0 $t0 -lw $t0 -136($fp) +lw $t0 -132($fp) move $a1 $t0 jal equal_str sw $v0 -112($fp) @@ -6484,9 +6484,9 @@ lw $t1 12($t0) sw $t1 -140($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -136($fp) +sw $t1 -132($fp) lw $t0 -140($fp) -lw $t1 -136($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -112($fp) j label_240 @@ -6494,7 +6494,7 @@ label_240: lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -144($fp) lw $t0 -144($fp) @@ -6508,13 +6508,13 @@ sw $t1 -96($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -80($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -6545,7 +6545,7 @@ sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -100($fp) lw $t0 -100($fp) @@ -6559,7 +6559,7 @@ sw $t1 -56($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -6572,7 +6572,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -6585,7 +6585,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -76($fp) lw $t0 4($fp) @@ -6687,7 +6687,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -6701,7 +6701,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_A2I: +__ctor_A2I: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -6724,7 +6724,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_A2I +jal __attributes_ctor_A2I addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -6735,19 +6735,19 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -36 +addi $sp $sp -20 la $t0 data_14 sw $t0 -28($fp) lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -28($fp) lw $t0 0($fp) @@ -6762,7 +6762,7 @@ sw $t1 12($t0) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -6771,7 +6771,7 @@ lw $t0 0($fp) lw $t1 -16($fp) sw $t1 24($t0) lw $v0 0($fp) -addi $sp $sp 36 +addi $sp $sp 20 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -6784,13 +6784,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -376 +addi $sp $sp -360 la $t0 data_77 sw $t0 -368($fp) lw $t0 -368($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -364($fp) lw $t0 0($fp) @@ -6863,7 +6863,7 @@ sw $t0 -344($fp) lw $t0 -344($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -340($fp) lw $t0 0($fp) @@ -6901,7 +6901,7 @@ sw $t0 -328($fp) lw $t0 -328($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -324($fp) lw $t0 0($fp) @@ -6974,7 +6974,7 @@ sw $t0 -304($fp) lw $t0 -304($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -300($fp) lw $t0 0($fp) @@ -7012,7 +7012,7 @@ sw $t0 -288($fp) lw $t0 -288($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -284($fp) lw $t0 0($fp) @@ -7085,7 +7085,7 @@ sw $t0 -264($fp) lw $t0 -264($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -260($fp) lw $t0 0($fp) @@ -7123,7 +7123,7 @@ sw $t0 -248($fp) lw $t0 -248($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -244($fp) lw $t0 0($fp) @@ -7196,7 +7196,7 @@ sw $t0 -224($fp) lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -220($fp) lw $t0 0($fp) @@ -7234,7 +7234,7 @@ sw $t0 -208($fp) lw $t0 -208($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -204($fp) lw $t0 0($fp) @@ -7307,7 +7307,7 @@ sw $t0 -184($fp) lw $t0 -184($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -180($fp) lw $t0 0($fp) @@ -7345,7 +7345,7 @@ sw $t0 -168($fp) lw $t0 -168($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -164($fp) lw $t0 0($fp) @@ -7418,7 +7418,7 @@ sw $t0 -144($fp) lw $t0 -144($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -140($fp) lw $t0 0($fp) @@ -7456,7 +7456,7 @@ sw $t0 -128($fp) lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -124($fp) lw $t0 0($fp) @@ -7529,7 +7529,7 @@ sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -100($fp) lw $t0 0($fp) @@ -7567,7 +7567,7 @@ sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -84($fp) lw $t0 0($fp) @@ -7640,7 +7640,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -60($fp) lw $t0 0($fp) @@ -7678,7 +7678,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -44($fp) lw $t0 0($fp) @@ -7716,7 +7716,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -28($fp) lw $t0 0($fp) @@ -7777,7 +7777,7 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 376 +addi $sp $sp 360 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -7790,13 +7790,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -56 +addi $sp $sp -40 la $t0 data_122 sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -44($fp) lw $t0 0($fp) @@ -7834,7 +7834,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -28($fp) lw $t0 0($fp) @@ -7895,7 +7895,7 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 56 +addi $sp $sp 40 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -7908,8 +7908,8 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -44 -jal __init_at_A2I +addi $sp $sp -28 +jal __ctor_A2I sw $v0 -32($fp) lw $t0 -32($fp) sw $t0 -36($fp) @@ -7973,7 +7973,7 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 44 +addi $sp $sp 28 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -7986,7 +7986,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -200 +addi $sp $sp -184 lw $t0 0($fp) sw $t0 -192($fp) lw $t0 -192($fp) @@ -7995,7 +7995,7 @@ sw $t1 -176($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -164($fp) lw $t0 -164($fp) @@ -8008,7 +8008,7 @@ sw $t1 -168($fp) lw $t0 -168($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -180($fp) lw $t0 -180($fp) @@ -8019,7 +8019,7 @@ bne $t0 $zero label_329 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -116($fp) lw $t0 -116($fp) @@ -8028,7 +8028,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -140($fp) +sw $t1 -144($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8036,25 +8036,25 @@ sw $t0 -136($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -132($fp) +sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -128($fp) -lw $t0 -140($fp) +sw $t0 -132($fp) +lw $t0 -144($fp) lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) lw $t0 -124($fp) bne $t0 $zero label_315 -lw $t0 -140($fp) -lw $t1 -132($fp) +lw $t0 -144($fp) +lw $t1 -128($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) lw $t0 -124($fp) bne $t0 $zero label_316 -lw $t0 -140($fp) -lw $t1 -128($fp) +lw $t0 -144($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) lw $t0 -124($fp) @@ -8070,9 +8070,9 @@ lw $t1 12($t0) sw $t1 -148($fp) lw $t0 -192($fp) lw $t1 12($t0) -sw $t1 -144($fp) +sw $t1 -140($fp) lw $t0 -148($fp) -lw $t1 -144($fp) +lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) j label_318 @@ -8082,10 +8082,10 @@ lw $t1 12($t0) sw $t1 -148($fp) lw $t0 -192($fp) lw $t1 12($t0) -sw $t1 -144($fp) +sw $t1 -140($fp) lw $t0 -148($fp) move $a0 $t0 -lw $t0 -144($fp) +lw $t0 -140($fp) move $a1 $t0 jal equal_str sw $v0 -120($fp) @@ -8096,9 +8096,9 @@ lw $t1 12($t0) sw $t1 -148($fp) lw $t0 -192($fp) lw $t1 12($t0) -sw $t1 -144($fp) +sw $t1 -140($fp) lw $t0 -148($fp) -lw $t1 -144($fp) +lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) j label_318 @@ -8106,7 +8106,7 @@ label_318: lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -152($fp) lw $t0 -152($fp) @@ -8117,7 +8117,7 @@ bne $t0 $zero label_327 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -68($fp) @@ -8126,7 +8126,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -92($fp) +sw $t1 -96($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8134,25 +8134,25 @@ sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -84($fp) +sw $t0 -80($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -80($fp) -lw $t0 -92($fp) +sw $t0 -84($fp) +lw $t0 -96($fp) lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_319 -lw $t0 -92($fp) -lw $t1 -84($fp) +lw $t0 -96($fp) +lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_320 -lw $t0 -92($fp) -lw $t1 -80($fp) +lw $t0 -96($fp) +lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) @@ -8168,9 +8168,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -192($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_322 @@ -8180,10 +8180,10 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -192($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) move $a0 $t0 -lw $t0 -96($fp) +lw $t0 -92($fp) move $a1 $t0 jal equal_str sw $v0 -72($fp) @@ -8194,9 +8194,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -192($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_322 @@ -8204,7 +8204,7 @@ label_322: lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -104($fp) lw $t0 -104($fp) @@ -8218,7 +8218,7 @@ sw $t1 -60($fp) li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 -48($fp) @@ -8231,7 +8231,7 @@ sw $t0 -52($fp) lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -64($fp) lw $t0 4($fp) @@ -8271,7 +8271,7 @@ label_325: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -8284,7 +8284,7 @@ label_327: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) @@ -8304,7 +8304,7 @@ sw $t0 -20($fp) lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 4($fp) @@ -8341,7 +8341,7 @@ lw $t0 -12($fp) sw $t0 -188($fp) label_332: lw $v0 -188($fp) -addi $sp $sp 200 +addi $sp $sp 184 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -8354,7 +8354,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -156 +addi $sp $sp -140 lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 @@ -8509,7 +8509,7 @@ sw $t0 -124($fp) lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -120($fp) lw $t0 4($fp) @@ -8553,7 +8553,7 @@ sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -100($fp) lw $t0 4($fp) @@ -8597,7 +8597,7 @@ sw $t0 -84($fp) lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -80($fp) lw $t0 4($fp) @@ -8641,7 +8641,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -60($fp) lw $t0 4($fp) @@ -8685,7 +8685,7 @@ sw $t0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -40($fp) lw $t0 4($fp) @@ -8729,7 +8729,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 4($fp) @@ -8767,7 +8767,7 @@ sw $t0 -148($fp) j label_353 label_353: lw $v0 -148($fp) -addi $sp $sp 156 +addi $sp $sp 140 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -8780,8 +8780,8 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -64 -jal __init_at_A2I +addi $sp $sp -48 +jal __ctor_A2I sw $v0 -52($fp) lw $t0 -52($fp) sw $t0 -56($fp) @@ -8877,7 +8877,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 4($fp) @@ -8911,7 +8911,7 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 64 +addi $sp $sp 48 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -8924,8 +8924,8 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -1208 -jal __init_at_A +addi $sp $sp -1192 +jal __ctor_A sw $v0 -1200($fp) lw $t0 -1200($fp) lw $t1 0($fp) @@ -8949,7 +8949,7 @@ sw $t0 -1192($fp) lw $t0 -1192($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1188($fp) lw $t0 0($fp) @@ -9099,7 +9099,7 @@ sw $t0 -1144($fp) lw $t0 -1144($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1140($fp) lw $t0 0($fp) @@ -9141,7 +9141,7 @@ sw $t0 -1128($fp) lw $t0 -1128($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1124($fp) lw $t0 0($fp) @@ -9248,7 +9248,7 @@ sw $t0 -1052($fp) lw $t0 -1052($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1048($fp) lw $t4 0($fp) @@ -9262,7 +9262,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -1076($fp) +sw $t1 -1080($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9270,25 +9270,25 @@ sw $t0 -1072($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -1068($fp) +sw $t0 -1064($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -1064($fp) -lw $t0 -1076($fp) +sw $t0 -1068($fp) +lw $t0 -1080($fp) lw $t1 -1072($fp) seq $t0 $t0 $t1 sw $t0 -1060($fp) lw $t0 -1060($fp) bne $t0 $zero label_382 -lw $t0 -1076($fp) -lw $t1 -1068($fp) +lw $t0 -1080($fp) +lw $t1 -1064($fp) seq $t0 $t0 $t1 sw $t0 -1060($fp) lw $t0 -1060($fp) bne $t0 $zero label_383 -lw $t0 -1076($fp) -lw $t1 -1064($fp) +lw $t0 -1080($fp) +lw $t1 -1068($fp) seq $t0 $t0 $t1 sw $t0 -1060($fp) lw $t0 -1060($fp) @@ -9314,9 +9314,9 @@ lw $t1 12($t0) sw $t1 -1084($fp) lw $t0 -1048($fp) lw $t1 12($t0) -sw $t1 -1080($fp) +sw $t1 -1076($fp) lw $t0 -1084($fp) -lw $t1 -1080($fp) +lw $t1 -1076($fp) seq $t0 $t0 $t1 sw $t0 -1056($fp) j label_385 @@ -9331,10 +9331,10 @@ lw $t1 12($t0) sw $t1 -1084($fp) lw $t0 -1048($fp) lw $t1 12($t0) -sw $t1 -1080($fp) +sw $t1 -1076($fp) lw $t0 -1084($fp) move $a0 $t0 -lw $t0 -1080($fp) +lw $t0 -1076($fp) move $a1 $t0 jal equal_str sw $v0 -1056($fp) @@ -9350,9 +9350,9 @@ lw $t1 12($t0) sw $t1 -1084($fp) lw $t0 -1048($fp) lw $t1 12($t0) -sw $t1 -1080($fp) +sw $t1 -1076($fp) lw $t0 -1084($fp) -lw $t1 -1080($fp) +lw $t1 -1076($fp) seq $t0 $t0 $t1 sw $t0 -1056($fp) j label_385 @@ -9360,7 +9360,7 @@ label_385: lw $t0 -1056($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -1088($fp) lw $t0 -1088($fp) @@ -9373,7 +9373,7 @@ sw $t0 -1000($fp) lw $t0 -1000($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -996($fp) lw $t4 0($fp) @@ -9387,7 +9387,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -1024($fp) +sw $t1 -1028($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9395,25 +9395,25 @@ sw $t0 -1020($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -1016($fp) +sw $t0 -1012($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -1012($fp) -lw $t0 -1024($fp) +sw $t0 -1016($fp) +lw $t0 -1028($fp) lw $t1 -1020($fp) seq $t0 $t0 $t1 sw $t0 -1008($fp) lw $t0 -1008($fp) bne $t0 $zero label_386 -lw $t0 -1024($fp) -lw $t1 -1016($fp) +lw $t0 -1028($fp) +lw $t1 -1012($fp) seq $t0 $t0 $t1 sw $t0 -1008($fp) lw $t0 -1008($fp) bne $t0 $zero label_387 -lw $t0 -1024($fp) -lw $t1 -1012($fp) +lw $t0 -1028($fp) +lw $t1 -1016($fp) seq $t0 $t0 $t1 sw $t0 -1008($fp) lw $t0 -1008($fp) @@ -9439,9 +9439,9 @@ lw $t1 12($t0) sw $t1 -1032($fp) lw $t0 -996($fp) lw $t1 12($t0) -sw $t1 -1028($fp) +sw $t1 -1024($fp) lw $t0 -1032($fp) -lw $t1 -1028($fp) +lw $t1 -1024($fp) seq $t0 $t0 $t1 sw $t0 -1004($fp) j label_389 @@ -9456,10 +9456,10 @@ lw $t1 12($t0) sw $t1 -1032($fp) lw $t0 -996($fp) lw $t1 12($t0) -sw $t1 -1028($fp) +sw $t1 -1024($fp) lw $t0 -1032($fp) move $a0 $t0 -lw $t0 -1028($fp) +lw $t0 -1024($fp) move $a1 $t0 jal equal_str sw $v0 -1004($fp) @@ -9475,9 +9475,9 @@ lw $t1 12($t0) sw $t1 -1032($fp) lw $t0 -996($fp) lw $t1 12($t0) -sw $t1 -1028($fp) +sw $t1 -1024($fp) lw $t0 -1032($fp) -lw $t1 -1028($fp) +lw $t1 -1024($fp) seq $t0 $t0 $t1 sw $t0 -1004($fp) j label_389 @@ -9485,7 +9485,7 @@ label_389: lw $t0 -1004($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -1036($fp) lw $t0 -1036($fp) @@ -9498,7 +9498,7 @@ sw $t0 -948($fp) lw $t0 -948($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -944($fp) lw $t4 0($fp) @@ -9512,7 +9512,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -972($fp) +sw $t1 -976($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9520,25 +9520,25 @@ sw $t0 -968($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -964($fp) +sw $t0 -960($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -960($fp) -lw $t0 -972($fp) +sw $t0 -964($fp) +lw $t0 -976($fp) lw $t1 -968($fp) seq $t0 $t0 $t1 sw $t0 -956($fp) lw $t0 -956($fp) bne $t0 $zero label_390 -lw $t0 -972($fp) -lw $t1 -964($fp) +lw $t0 -976($fp) +lw $t1 -960($fp) seq $t0 $t0 $t1 sw $t0 -956($fp) lw $t0 -956($fp) bne $t0 $zero label_391 -lw $t0 -972($fp) -lw $t1 -960($fp) +lw $t0 -976($fp) +lw $t1 -964($fp) seq $t0 $t0 $t1 sw $t0 -956($fp) lw $t0 -956($fp) @@ -9564,9 +9564,9 @@ lw $t1 12($t0) sw $t1 -980($fp) lw $t0 -944($fp) lw $t1 12($t0) -sw $t1 -976($fp) +sw $t1 -972($fp) lw $t0 -980($fp) -lw $t1 -976($fp) +lw $t1 -972($fp) seq $t0 $t0 $t1 sw $t0 -952($fp) j label_393 @@ -9581,10 +9581,10 @@ lw $t1 12($t0) sw $t1 -980($fp) lw $t0 -944($fp) lw $t1 12($t0) -sw $t1 -976($fp) +sw $t1 -972($fp) lw $t0 -980($fp) move $a0 $t0 -lw $t0 -976($fp) +lw $t0 -972($fp) move $a1 $t0 jal equal_str sw $v0 -952($fp) @@ -9600,9 +9600,9 @@ lw $t1 12($t0) sw $t1 -980($fp) lw $t0 -944($fp) lw $t1 12($t0) -sw $t1 -976($fp) +sw $t1 -972($fp) lw $t0 -980($fp) -lw $t1 -976($fp) +lw $t1 -972($fp) seq $t0 $t0 $t1 sw $t0 -952($fp) j label_393 @@ -9610,7 +9610,7 @@ label_393: lw $t0 -952($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -984($fp) lw $t0 -984($fp) @@ -9623,7 +9623,7 @@ sw $t0 -896($fp) lw $t0 -896($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -892($fp) lw $t4 0($fp) @@ -9637,7 +9637,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -920($fp) +sw $t1 -924($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9645,25 +9645,25 @@ sw $t0 -916($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -912($fp) +sw $t0 -908($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -908($fp) -lw $t0 -920($fp) +sw $t0 -912($fp) +lw $t0 -924($fp) lw $t1 -916($fp) seq $t0 $t0 $t1 sw $t0 -904($fp) lw $t0 -904($fp) bne $t0 $zero label_394 -lw $t0 -920($fp) -lw $t1 -912($fp) +lw $t0 -924($fp) +lw $t1 -908($fp) seq $t0 $t0 $t1 sw $t0 -904($fp) lw $t0 -904($fp) bne $t0 $zero label_395 -lw $t0 -920($fp) -lw $t1 -908($fp) +lw $t0 -924($fp) +lw $t1 -912($fp) seq $t0 $t0 $t1 sw $t0 -904($fp) lw $t0 -904($fp) @@ -9689,9 +9689,9 @@ lw $t1 12($t0) sw $t1 -928($fp) lw $t0 -892($fp) lw $t1 12($t0) -sw $t1 -924($fp) +sw $t1 -920($fp) lw $t0 -928($fp) -lw $t1 -924($fp) +lw $t1 -920($fp) seq $t0 $t0 $t1 sw $t0 -900($fp) j label_397 @@ -9706,10 +9706,10 @@ lw $t1 12($t0) sw $t1 -928($fp) lw $t0 -892($fp) lw $t1 12($t0) -sw $t1 -924($fp) +sw $t1 -920($fp) lw $t0 -928($fp) move $a0 $t0 -lw $t0 -924($fp) +lw $t0 -920($fp) move $a1 $t0 jal equal_str sw $v0 -900($fp) @@ -9725,9 +9725,9 @@ lw $t1 12($t0) sw $t1 -928($fp) lw $t0 -892($fp) lw $t1 12($t0) -sw $t1 -924($fp) +sw $t1 -920($fp) lw $t0 -928($fp) -lw $t1 -924($fp) +lw $t1 -920($fp) seq $t0 $t0 $t1 sw $t0 -900($fp) j label_397 @@ -9735,7 +9735,7 @@ label_397: lw $t0 -900($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -932($fp) lw $t0 -932($fp) @@ -9748,7 +9748,7 @@ sw $t0 -844($fp) lw $t0 -844($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -840($fp) lw $t4 0($fp) @@ -9762,7 +9762,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -868($fp) +sw $t1 -872($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9770,25 +9770,25 @@ sw $t0 -864($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -860($fp) +sw $t0 -856($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -856($fp) -lw $t0 -868($fp) +sw $t0 -860($fp) +lw $t0 -872($fp) lw $t1 -864($fp) seq $t0 $t0 $t1 sw $t0 -852($fp) lw $t0 -852($fp) bne $t0 $zero label_398 -lw $t0 -868($fp) -lw $t1 -860($fp) +lw $t0 -872($fp) +lw $t1 -856($fp) seq $t0 $t0 $t1 sw $t0 -852($fp) lw $t0 -852($fp) bne $t0 $zero label_399 -lw $t0 -868($fp) -lw $t1 -856($fp) +lw $t0 -872($fp) +lw $t1 -860($fp) seq $t0 $t0 $t1 sw $t0 -852($fp) lw $t0 -852($fp) @@ -9814,9 +9814,9 @@ lw $t1 12($t0) sw $t1 -876($fp) lw $t0 -840($fp) lw $t1 12($t0) -sw $t1 -872($fp) +sw $t1 -868($fp) lw $t0 -876($fp) -lw $t1 -872($fp) +lw $t1 -868($fp) seq $t0 $t0 $t1 sw $t0 -848($fp) j label_401 @@ -9831,10 +9831,10 @@ lw $t1 12($t0) sw $t1 -876($fp) lw $t0 -840($fp) lw $t1 12($t0) -sw $t1 -872($fp) +sw $t1 -868($fp) lw $t0 -876($fp) move $a0 $t0 -lw $t0 -872($fp) +lw $t0 -868($fp) move $a1 $t0 jal equal_str sw $v0 -848($fp) @@ -9850,9 +9850,9 @@ lw $t1 12($t0) sw $t1 -876($fp) lw $t0 -840($fp) lw $t1 12($t0) -sw $t1 -872($fp) +sw $t1 -868($fp) lw $t0 -876($fp) -lw $t1 -872($fp) +lw $t1 -868($fp) seq $t0 $t0 $t1 sw $t0 -848($fp) j label_401 @@ -9860,7 +9860,7 @@ label_401: lw $t0 -848($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -880($fp) lw $t0 -880($fp) @@ -9873,7 +9873,7 @@ sw $t0 -792($fp) lw $t0 -792($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -788($fp) lw $t4 0($fp) @@ -9887,7 +9887,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -816($fp) +sw $t1 -820($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9895,25 +9895,25 @@ sw $t0 -812($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -808($fp) +sw $t0 -804($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -804($fp) -lw $t0 -816($fp) +sw $t0 -808($fp) +lw $t0 -820($fp) lw $t1 -812($fp) seq $t0 $t0 $t1 sw $t0 -800($fp) lw $t0 -800($fp) bne $t0 $zero label_402 -lw $t0 -816($fp) -lw $t1 -808($fp) +lw $t0 -820($fp) +lw $t1 -804($fp) seq $t0 $t0 $t1 sw $t0 -800($fp) lw $t0 -800($fp) bne $t0 $zero label_403 -lw $t0 -816($fp) -lw $t1 -804($fp) +lw $t0 -820($fp) +lw $t1 -808($fp) seq $t0 $t0 $t1 sw $t0 -800($fp) lw $t0 -800($fp) @@ -9939,9 +9939,9 @@ lw $t1 12($t0) sw $t1 -824($fp) lw $t0 -788($fp) lw $t1 12($t0) -sw $t1 -820($fp) +sw $t1 -816($fp) lw $t0 -824($fp) -lw $t1 -820($fp) +lw $t1 -816($fp) seq $t0 $t0 $t1 sw $t0 -796($fp) j label_405 @@ -9956,10 +9956,10 @@ lw $t1 12($t0) sw $t1 -824($fp) lw $t0 -788($fp) lw $t1 12($t0) -sw $t1 -820($fp) +sw $t1 -816($fp) lw $t0 -824($fp) move $a0 $t0 -lw $t0 -820($fp) +lw $t0 -816($fp) move $a1 $t0 jal equal_str sw $v0 -796($fp) @@ -9975,9 +9975,9 @@ lw $t1 12($t0) sw $t1 -824($fp) lw $t0 -788($fp) lw $t1 12($t0) -sw $t1 -820($fp) +sw $t1 -816($fp) lw $t0 -824($fp) -lw $t1 -820($fp) +lw $t1 -816($fp) seq $t0 $t0 $t1 sw $t0 -796($fp) j label_405 @@ -9985,7 +9985,7 @@ label_405: lw $t0 -796($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -828($fp) lw $t0 -828($fp) @@ -9998,7 +9998,7 @@ sw $t0 -740($fp) lw $t0 -740($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -736($fp) lw $t4 0($fp) @@ -10012,7 +10012,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -764($fp) +sw $t1 -768($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -10020,25 +10020,25 @@ sw $t0 -760($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -756($fp) +sw $t0 -752($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -752($fp) -lw $t0 -764($fp) +sw $t0 -756($fp) +lw $t0 -768($fp) lw $t1 -760($fp) seq $t0 $t0 $t1 sw $t0 -748($fp) lw $t0 -748($fp) bne $t0 $zero label_406 -lw $t0 -764($fp) -lw $t1 -756($fp) +lw $t0 -768($fp) +lw $t1 -752($fp) seq $t0 $t0 $t1 sw $t0 -748($fp) lw $t0 -748($fp) bne $t0 $zero label_407 -lw $t0 -764($fp) -lw $t1 -752($fp) +lw $t0 -768($fp) +lw $t1 -756($fp) seq $t0 $t0 $t1 sw $t0 -748($fp) lw $t0 -748($fp) @@ -10064,9 +10064,9 @@ lw $t1 12($t0) sw $t1 -772($fp) lw $t0 -736($fp) lw $t1 12($t0) -sw $t1 -768($fp) +sw $t1 -764($fp) lw $t0 -772($fp) -lw $t1 -768($fp) +lw $t1 -764($fp) seq $t0 $t0 $t1 sw $t0 -744($fp) j label_409 @@ -10081,10 +10081,10 @@ lw $t1 12($t0) sw $t1 -772($fp) lw $t0 -736($fp) lw $t1 12($t0) -sw $t1 -768($fp) +sw $t1 -764($fp) lw $t0 -772($fp) move $a0 $t0 -lw $t0 -768($fp) +lw $t0 -764($fp) move $a1 $t0 jal equal_str sw $v0 -744($fp) @@ -10100,9 +10100,9 @@ lw $t1 12($t0) sw $t1 -772($fp) lw $t0 -736($fp) lw $t1 12($t0) -sw $t1 -768($fp) +sw $t1 -764($fp) lw $t0 -772($fp) -lw $t1 -768($fp) +lw $t1 -764($fp) seq $t0 $t0 $t1 sw $t0 -744($fp) j label_409 @@ -10110,7 +10110,7 @@ label_409: lw $t0 -744($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -776($fp) lw $t0 -776($fp) @@ -10123,7 +10123,7 @@ sw $t0 -688($fp) lw $t0 -688($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -684($fp) lw $t4 0($fp) @@ -10137,7 +10137,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -712($fp) +sw $t1 -716($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -10145,25 +10145,25 @@ sw $t0 -708($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -704($fp) +sw $t0 -700($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -700($fp) -lw $t0 -712($fp) +sw $t0 -704($fp) +lw $t0 -716($fp) lw $t1 -708($fp) seq $t0 $t0 $t1 sw $t0 -696($fp) lw $t0 -696($fp) bne $t0 $zero label_410 -lw $t0 -712($fp) -lw $t1 -704($fp) +lw $t0 -716($fp) +lw $t1 -700($fp) seq $t0 $t0 $t1 sw $t0 -696($fp) lw $t0 -696($fp) bne $t0 $zero label_411 -lw $t0 -712($fp) -lw $t1 -700($fp) +lw $t0 -716($fp) +lw $t1 -704($fp) seq $t0 $t0 $t1 sw $t0 -696($fp) lw $t0 -696($fp) @@ -10189,9 +10189,9 @@ lw $t1 12($t0) sw $t1 -720($fp) lw $t0 -684($fp) lw $t1 12($t0) -sw $t1 -716($fp) +sw $t1 -712($fp) lw $t0 -720($fp) -lw $t1 -716($fp) +lw $t1 -712($fp) seq $t0 $t0 $t1 sw $t0 -692($fp) j label_413 @@ -10206,10 +10206,10 @@ lw $t1 12($t0) sw $t1 -720($fp) lw $t0 -684($fp) lw $t1 12($t0) -sw $t1 -716($fp) +sw $t1 -712($fp) lw $t0 -720($fp) move $a0 $t0 -lw $t0 -716($fp) +lw $t0 -712($fp) move $a1 $t0 jal equal_str sw $v0 -692($fp) @@ -10225,9 +10225,9 @@ lw $t1 12($t0) sw $t1 -720($fp) lw $t0 -684($fp) lw $t1 12($t0) -sw $t1 -716($fp) +sw $t1 -712($fp) lw $t0 -720($fp) -lw $t1 -716($fp) +lw $t1 -712($fp) seq $t0 $t0 $t1 sw $t0 -692($fp) j label_413 @@ -10235,7 +10235,7 @@ label_413: lw $t0 -692($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -724($fp) lw $t0 -724($fp) @@ -10248,7 +10248,7 @@ sw $t0 -636($fp) lw $t0 -636($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -632($fp) lw $t4 0($fp) @@ -10262,7 +10262,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -660($fp) +sw $t1 -664($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -10270,25 +10270,25 @@ sw $t0 -656($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -652($fp) +sw $t0 -648($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -648($fp) -lw $t0 -660($fp) +sw $t0 -652($fp) +lw $t0 -664($fp) lw $t1 -656($fp) seq $t0 $t0 $t1 sw $t0 -644($fp) lw $t0 -644($fp) bne $t0 $zero label_414 -lw $t0 -660($fp) -lw $t1 -652($fp) +lw $t0 -664($fp) +lw $t1 -648($fp) seq $t0 $t0 $t1 sw $t0 -644($fp) lw $t0 -644($fp) bne $t0 $zero label_415 -lw $t0 -660($fp) -lw $t1 -648($fp) +lw $t0 -664($fp) +lw $t1 -652($fp) seq $t0 $t0 $t1 sw $t0 -644($fp) lw $t0 -644($fp) @@ -10314,9 +10314,9 @@ lw $t1 12($t0) sw $t1 -668($fp) lw $t0 -632($fp) lw $t1 12($t0) -sw $t1 -664($fp) +sw $t1 -660($fp) lw $t0 -668($fp) -lw $t1 -664($fp) +lw $t1 -660($fp) seq $t0 $t0 $t1 sw $t0 -640($fp) j label_417 @@ -10331,10 +10331,10 @@ lw $t1 12($t0) sw $t1 -668($fp) lw $t0 -632($fp) lw $t1 12($t0) -sw $t1 -664($fp) +sw $t1 -660($fp) lw $t0 -668($fp) move $a0 $t0 -lw $t0 -664($fp) +lw $t0 -660($fp) move $a1 $t0 jal equal_str sw $v0 -640($fp) @@ -10350,9 +10350,9 @@ lw $t1 12($t0) sw $t1 -668($fp) lw $t0 -632($fp) lw $t1 12($t0) -sw $t1 -664($fp) +sw $t1 -660($fp) lw $t0 -668($fp) -lw $t1 -664($fp) +lw $t1 -660($fp) seq $t0 $t0 $t1 sw $t0 -640($fp) j label_417 @@ -10360,7 +10360,7 @@ label_417: lw $t0 -640($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -672($fp) lw $t0 -672($fp) @@ -10373,7 +10373,7 @@ sw $t0 -584($fp) lw $t0 -584($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -580($fp) lw $t4 0($fp) @@ -10387,7 +10387,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -608($fp) +sw $t1 -612($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -10395,25 +10395,25 @@ sw $t0 -604($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -600($fp) +sw $t0 -596($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -596($fp) -lw $t0 -608($fp) +sw $t0 -600($fp) +lw $t0 -612($fp) lw $t1 -604($fp) seq $t0 $t0 $t1 sw $t0 -592($fp) lw $t0 -592($fp) bne $t0 $zero label_418 -lw $t0 -608($fp) -lw $t1 -600($fp) +lw $t0 -612($fp) +lw $t1 -596($fp) seq $t0 $t0 $t1 sw $t0 -592($fp) lw $t0 -592($fp) bne $t0 $zero label_419 -lw $t0 -608($fp) -lw $t1 -596($fp) +lw $t0 -612($fp) +lw $t1 -600($fp) seq $t0 $t0 $t1 sw $t0 -592($fp) lw $t0 -592($fp) @@ -10439,9 +10439,9 @@ lw $t1 12($t0) sw $t1 -616($fp) lw $t0 -580($fp) lw $t1 12($t0) -sw $t1 -612($fp) +sw $t1 -608($fp) lw $t0 -616($fp) -lw $t1 -612($fp) +lw $t1 -608($fp) seq $t0 $t0 $t1 sw $t0 -588($fp) j label_421 @@ -10456,10 +10456,10 @@ lw $t1 12($t0) sw $t1 -616($fp) lw $t0 -580($fp) lw $t1 12($t0) -sw $t1 -612($fp) +sw $t1 -608($fp) lw $t0 -616($fp) move $a0 $t0 -lw $t0 -612($fp) +lw $t0 -608($fp) move $a1 $t0 jal equal_str sw $v0 -588($fp) @@ -10475,9 +10475,9 @@ lw $t1 12($t0) sw $t1 -616($fp) lw $t0 -580($fp) lw $t1 12($t0) -sw $t1 -612($fp) +sw $t1 -608($fp) lw $t0 -616($fp) -lw $t1 -612($fp) +lw $t1 -608($fp) seq $t0 $t0 $t1 sw $t0 -588($fp) j label_421 @@ -10485,7 +10485,7 @@ label_421: lw $t0 -588($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -620($fp) lw $t0 -620($fp) @@ -10535,7 +10535,7 @@ lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -572($fp) -jal __init_at_A +jal __ctor_A sw $v0 -568($fp) lw $t0 -568($fp) li $t1 0 @@ -10583,7 +10583,7 @@ label_426: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -556($fp) lw $t0 -556($fp) @@ -10602,7 +10602,7 @@ lw $t0 -628($fp) sw $t0 -680($fp) j label_429 label_428: -jal __init_at_A +jal __ctor_A sw $v0 -552($fp) lw $t0 -552($fp) lw $t1 0($fp) @@ -10662,7 +10662,7 @@ lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -540($fp) -jal __init_at_E +jal __ctor_E sw $v0 -536($fp) lw $t0 -536($fp) li $t1 0 @@ -10774,7 +10774,7 @@ sw $t1 -492($fp) li $t0 8 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -472($fp) lw $t0 -472($fp) @@ -10787,7 +10787,7 @@ sw $t0 -484($fp) lw $t0 -484($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -496($fp) lw $t0 -496($fp) @@ -10800,7 +10800,7 @@ sw $t0 -508($fp) lw $t0 -508($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -520($fp) lw $t0 -520($fp) @@ -10810,7 +10810,7 @@ sw $t0 -468($fp) lw $t0 -468($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -464($fp) lw $t0 0($fp) @@ -10883,7 +10883,7 @@ sw $t0 -444($fp) lw $t0 -444($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -440($fp) lw $t0 0($fp) @@ -10951,7 +10951,7 @@ sw $t0 -420($fp) lw $t0 -420($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -416($fp) lw $t0 0($fp) @@ -10984,7 +10984,7 @@ lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 sw $v0 -408($fp) -jal __init_at_A2I +jal __ctor_A2I sw $v0 -400($fp) lw $t0 -400($fp) sw $t0 -404($fp) @@ -11053,7 +11053,7 @@ sw $t0 -380($fp) lw $t0 -380($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -376($fp) lw $t0 0($fp) @@ -11144,7 +11144,7 @@ lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -352($fp) -jal __init_at_D +jal __ctor_D sw $v0 -348($fp) lw $t0 -348($fp) li $t1 0 @@ -11186,7 +11186,7 @@ sw $t0 -336($fp) lw $t0 -336($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -332($fp) lw $t0 0($fp) @@ -11259,7 +11259,7 @@ sw $t0 -312($fp) lw $t0 -312($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -308($fp) lw $t0 0($fp) @@ -11301,7 +11301,7 @@ sw $t0 -296($fp) lw $t0 -296($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -292($fp) lw $t0 0($fp) @@ -11374,7 +11374,7 @@ sw $t0 -272($fp) lw $t0 -272($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -268($fp) lw $t0 0($fp) @@ -11459,7 +11459,7 @@ lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -252($fp) -jal __init_at_C +jal __ctor_C sw $v0 -248($fp) lw $t0 -248($fp) li $t1 0 @@ -11542,7 +11542,7 @@ lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -232($fp) -jal __init_at_C +jal __ctor_C sw $v0 -228($fp) lw $t0 -228($fp) li $t1 0 @@ -11625,7 +11625,7 @@ lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -212($fp) -jal __init_at_C +jal __ctor_C sw $v0 -208($fp) lw $t0 -208($fp) li $t1 0 @@ -11693,7 +11693,7 @@ lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -192($fp) -jal __init_at_A +jal __ctor_A sw $v0 -188($fp) lw $t0 -188($fp) li $t1 0 @@ -11813,7 +11813,7 @@ lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -164($fp) -jal __init_at_D +jal __ctor_D sw $v0 -160($fp) lw $t0 -160($fp) li $t1 0 @@ -12187,7 +12187,7 @@ sw $t0 -84($fp) lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -80($fp) lw $t0 0($fp) @@ -12250,7 +12250,7 @@ sw $v0 -64($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -12291,7 +12291,7 @@ lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -52($fp) -jal __init_at_A +jal __ctor_A sw $v0 -48($fp) lw $t0 -48($fp) li $t1 0 @@ -12411,7 +12411,7 @@ lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -24($fp) -jal __init_at_B +jal __ctor_B sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -12461,20 +12461,20 @@ label_537: j label_362 label_538: li $v0 0 -addi $sp $sp 1208 +addi $sp $sp 1192 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -8 li $t0 11 sll $t0 $t0 2 la $t1 prototype_table @@ -12491,11 +12491,11 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 24 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index 3d5a84478..e639ede90 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -22,7 +22,7 @@ data_9: .asciiz "" .word 0 data_10: .asciiz "Abort called from class " .word 0 -data_11: .asciiz "Substring out of range" +data_11: .asciiz "Index out of range exception" .word 0 data_12: .asciiz "0" .word 0 @@ -44,9 +44,9 @@ data_20: .asciiz "8" .word 0 data_21: .asciiz "9" .word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" +data_22: .asciiz "Function call in a void instance" .word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" +data_23: .asciiz "Function call in a void instance" .word 0 data_24: .asciiz "" .word 0 @@ -70,73 +70,73 @@ data_33: .asciiz "1" .word 0 data_34: .asciiz "0" .word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" +data_35: .asciiz "Function call in a void instance" .word 0 -data_36: .asciiz "RuntimeError: Function call in a void instance" +data_36: .asciiz "Function call in a void instance" .word 0 data_37: .asciiz "-" .word 0 -data_38: .asciiz "RuntimeError: Function call in a void instance" +data_38: .asciiz "Function call in a void instance" .word 0 data_39: .asciiz "+" .word 0 -data_40: .asciiz "RuntimeError: Function call in a void instance" +data_40: .asciiz "Function call in a void instance" .word 0 -data_41: .asciiz "RuntimeError: Function call in a void instance" +data_41: .asciiz "Function call in a void instance" .word 0 -data_42: .asciiz "RuntimeError: Function call in a void instance" +data_42: .asciiz "Function call in a void instance" .word 0 -data_43: .asciiz "RuntimeError: Function call in a void instance" +data_43: .asciiz "Function call in a void instance" .word 0 -data_44: .asciiz "RuntimeError: Function call in a void instance" +data_44: .asciiz "Function call in a void instance" .word 0 -data_45: .asciiz "RuntimeError: Function call in a void instance" +data_45: .asciiz "Function call in a void instance" .word 0 -data_46: .asciiz "RuntimeError: Function call in a void instance" +data_46: .asciiz "Function call in a void instance" .word 0 -data_47: .asciiz "RuntimeError: Function call in a void instance" +data_47: .asciiz "Function call in a void instance" .word 0 -data_48: .asciiz "RuntimeError: Function call in a void instance" +data_48: .asciiz "Function call in a void instance" .word 0 -data_49: .asciiz "RuntimeError: Function call in a void instance" +data_49: .asciiz "Function call in a void instance" .word 0 -data_50: .asciiz "RuntimeError: Function call in a void instance" +data_50: .asciiz "Function call in a void instance" .word 0 data_51: .asciiz "-" .word 0 -data_52: .asciiz "RuntimeError: Function call in a void instance" +data_52: .asciiz "Function call in a void instance" .word 0 -data_53: .asciiz "RuntimeError: Function call in a void instance" +data_53: .asciiz "Function call in a void instance" .word 0 data_54: .asciiz "0" .word 0 -data_55: .asciiz "RuntimeError: Division by zero" +data_55: .asciiz "Division by zero exception" .word 0 -data_56: .asciiz "RuntimeError: Function call in a void instance" +data_56: .asciiz "Function call in a void instance" .word 0 -data_57: .asciiz "RuntimeError: Function call in a void instance" +data_57: .asciiz "Function call in a void instance" .word 0 -data_58: .asciiz "RuntimeError: Function call in a void instance" +data_58: .asciiz "Function call in a void instance" .word 0 data_59: .asciiz "" .word 0 data_60: .asciiz "678987" .word 0 -data_61: .asciiz "RuntimeError: Function call in a void instance" +data_61: .asciiz "Function call in a void instance" .word 0 -data_62: .asciiz "RuntimeError: Function call in a void instance" +data_62: .asciiz "Function call in a void instance" .word 0 -data_63: .asciiz "RuntimeError: Function call in a void instance" +data_63: .asciiz "Function call in a void instance" .word 0 data_64: .asciiz " == " .word 0 -data_65: .asciiz "RuntimeError: Function call in a void instance" +data_65: .asciiz "Function call in a void instance" .word 0 -data_66: .asciiz "RuntimeError: Function call in a void instance" +data_66: .asciiz "Function call in a void instance" .word 0 data_67: .asciiz "\n" .word 0 -data_68: .asciiz "RuntimeError: Function call in a void instance" +data_68: .asciiz "Function call in a void instance" types_table: @@ -161,7 +161,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -178,7 +178,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -194,7 +194,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -209,7 +209,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -223,7 +223,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -243,8 +243,8 @@ type_6_dispatch: .word function_i2a_at_A2I .word function_i2a_aux_at_A2I .word function_i2c_at_A2I -.word __init_attr_at_A2I -.word __init_at_A2I +.word __attributes_ctor_A2I +.word __ctor_A2I type_6_prototype: .word 5 @@ -262,8 +262,8 @@ type_7_dispatch: .word function_out_int_at_IO .word function_out_string_at_IO .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_7_prototype: .word 6 @@ -274,7 +274,7 @@ type_7_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -355,7 +355,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -390,7 +390,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -472,7 +472,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -496,7 +496,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -507,7 +507,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -536,7 +536,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -605,7 +605,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -664,7 +664,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -675,7 +675,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -706,7 +706,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -744,7 +744,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -761,7 +761,7 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_A2I: +__attributes_ctor_A2I: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -788,7 +788,7 @@ sw $t0 -536($fp) lw $t0 -536($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -532($fp) lw $t0 0($fp) @@ -797,7 +797,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -560($fp) +sw $t1 -564($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -805,25 +805,25 @@ sw $t0 -556($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -552($fp) +sw $t0 -548($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -548($fp) -lw $t0 -560($fp) +sw $t0 -552($fp) +lw $t0 -564($fp) lw $t1 -556($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) lw $t0 -544($fp) bne $t0 $zero label_3 -lw $t0 -560($fp) -lw $t1 -552($fp) +lw $t0 -564($fp) +lw $t1 -548($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) lw $t0 -544($fp) bne $t0 $zero label_4 -lw $t0 -560($fp) -lw $t1 -548($fp) +lw $t0 -564($fp) +lw $t1 -552($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) lw $t0 -544($fp) @@ -839,9 +839,9 @@ lw $t1 12($t0) sw $t1 -568($fp) lw $t0 -532($fp) lw $t1 12($t0) -sw $t1 -564($fp) +sw $t1 -560($fp) lw $t0 -568($fp) -lw $t1 -564($fp) +lw $t1 -560($fp) seq $t0 $t0 $t1 sw $t0 -540($fp) j label_6 @@ -851,10 +851,10 @@ lw $t1 12($t0) sw $t1 -568($fp) lw $t0 -532($fp) lw $t1 12($t0) -sw $t1 -564($fp) +sw $t1 -560($fp) lw $t0 -568($fp) move $a0 $t0 -lw $t0 -564($fp) +lw $t0 -560($fp) move $a1 $t0 jal equal_str sw $v0 -540($fp) @@ -865,9 +865,9 @@ lw $t1 12($t0) sw $t1 -568($fp) lw $t0 -532($fp) lw $t1 12($t0) -sw $t1 -564($fp) +sw $t1 -560($fp) lw $t0 -568($fp) -lw $t1 -564($fp) +lw $t1 -560($fp) seq $t0 $t0 $t1 sw $t0 -540($fp) j label_6 @@ -875,7 +875,7 @@ label_6: lw $t0 -540($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -572($fp) lw $t0 -572($fp) @@ -888,7 +888,7 @@ sw $t0 -484($fp) lw $t0 -484($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -480($fp) lw $t0 0($fp) @@ -897,7 +897,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -508($fp) +sw $t1 -512($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -905,25 +905,25 @@ sw $t0 -504($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -500($fp) +sw $t0 -496($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -496($fp) -lw $t0 -508($fp) +sw $t0 -500($fp) +lw $t0 -512($fp) lw $t1 -504($fp) seq $t0 $t0 $t1 sw $t0 -492($fp) lw $t0 -492($fp) bne $t0 $zero label_7 -lw $t0 -508($fp) -lw $t1 -500($fp) +lw $t0 -512($fp) +lw $t1 -496($fp) seq $t0 $t0 $t1 sw $t0 -492($fp) lw $t0 -492($fp) bne $t0 $zero label_8 -lw $t0 -508($fp) -lw $t1 -496($fp) +lw $t0 -512($fp) +lw $t1 -500($fp) seq $t0 $t0 $t1 sw $t0 -492($fp) lw $t0 -492($fp) @@ -939,9 +939,9 @@ lw $t1 12($t0) sw $t1 -516($fp) lw $t0 -480($fp) lw $t1 12($t0) -sw $t1 -512($fp) +sw $t1 -508($fp) lw $t0 -516($fp) -lw $t1 -512($fp) +lw $t1 -508($fp) seq $t0 $t0 $t1 sw $t0 -488($fp) j label_10 @@ -951,10 +951,10 @@ lw $t1 12($t0) sw $t1 -516($fp) lw $t0 -480($fp) lw $t1 12($t0) -sw $t1 -512($fp) +sw $t1 -508($fp) lw $t0 -516($fp) move $a0 $t0 -lw $t0 -512($fp) +lw $t0 -508($fp) move $a1 $t0 jal equal_str sw $v0 -488($fp) @@ -965,9 +965,9 @@ lw $t1 12($t0) sw $t1 -516($fp) lw $t0 -480($fp) lw $t1 12($t0) -sw $t1 -512($fp) +sw $t1 -508($fp) lw $t0 -516($fp) -lw $t1 -512($fp) +lw $t1 -508($fp) seq $t0 $t0 $t1 sw $t0 -488($fp) j label_10 @@ -975,7 +975,7 @@ label_10: lw $t0 -488($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -520($fp) lw $t0 -520($fp) @@ -988,7 +988,7 @@ sw $t0 -432($fp) lw $t0 -432($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -428($fp) lw $t0 0($fp) @@ -997,7 +997,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -456($fp) +sw $t1 -460($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1005,25 +1005,25 @@ sw $t0 -452($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -448($fp) +sw $t0 -444($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -444($fp) -lw $t0 -456($fp) +sw $t0 -448($fp) +lw $t0 -460($fp) lw $t1 -452($fp) seq $t0 $t0 $t1 sw $t0 -440($fp) lw $t0 -440($fp) bne $t0 $zero label_11 -lw $t0 -456($fp) -lw $t1 -448($fp) +lw $t0 -460($fp) +lw $t1 -444($fp) seq $t0 $t0 $t1 sw $t0 -440($fp) lw $t0 -440($fp) bne $t0 $zero label_12 -lw $t0 -456($fp) -lw $t1 -444($fp) +lw $t0 -460($fp) +lw $t1 -448($fp) seq $t0 $t0 $t1 sw $t0 -440($fp) lw $t0 -440($fp) @@ -1039,9 +1039,9 @@ lw $t1 12($t0) sw $t1 -464($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -460($fp) +sw $t1 -456($fp) lw $t0 -464($fp) -lw $t1 -460($fp) +lw $t1 -456($fp) seq $t0 $t0 $t1 sw $t0 -436($fp) j label_14 @@ -1051,10 +1051,10 @@ lw $t1 12($t0) sw $t1 -464($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -460($fp) +sw $t1 -456($fp) lw $t0 -464($fp) move $a0 $t0 -lw $t0 -460($fp) +lw $t0 -456($fp) move $a1 $t0 jal equal_str sw $v0 -436($fp) @@ -1065,9 +1065,9 @@ lw $t1 12($t0) sw $t1 -464($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -460($fp) +sw $t1 -456($fp) lw $t0 -464($fp) -lw $t1 -460($fp) +lw $t1 -456($fp) seq $t0 $t0 $t1 sw $t0 -436($fp) j label_14 @@ -1075,7 +1075,7 @@ label_14: lw $t0 -436($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -468($fp) lw $t0 -468($fp) @@ -1088,7 +1088,7 @@ sw $t0 -380($fp) lw $t0 -380($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -376($fp) lw $t0 0($fp) @@ -1097,7 +1097,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -404($fp) +sw $t1 -408($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1105,25 +1105,25 @@ sw $t0 -400($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -396($fp) +sw $t0 -392($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -392($fp) -lw $t0 -404($fp) +sw $t0 -396($fp) +lw $t0 -408($fp) lw $t1 -400($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) bne $t0 $zero label_15 -lw $t0 -404($fp) -lw $t1 -396($fp) +lw $t0 -408($fp) +lw $t1 -392($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) bne $t0 $zero label_16 -lw $t0 -404($fp) -lw $t1 -392($fp) +lw $t0 -408($fp) +lw $t1 -396($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) @@ -1139,9 +1139,9 @@ lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -376($fp) lw $t1 12($t0) -sw $t1 -408($fp) +sw $t1 -404($fp) lw $t0 -412($fp) -lw $t1 -408($fp) +lw $t1 -404($fp) seq $t0 $t0 $t1 sw $t0 -384($fp) j label_18 @@ -1151,10 +1151,10 @@ lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -376($fp) lw $t1 12($t0) -sw $t1 -408($fp) +sw $t1 -404($fp) lw $t0 -412($fp) move $a0 $t0 -lw $t0 -408($fp) +lw $t0 -404($fp) move $a1 $t0 jal equal_str sw $v0 -384($fp) @@ -1165,9 +1165,9 @@ lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -376($fp) lw $t1 12($t0) -sw $t1 -408($fp) +sw $t1 -404($fp) lw $t0 -412($fp) -lw $t1 -408($fp) +lw $t1 -404($fp) seq $t0 $t0 $t1 sw $t0 -384($fp) j label_18 @@ -1175,7 +1175,7 @@ label_18: lw $t0 -384($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -416($fp) lw $t0 -416($fp) @@ -1188,7 +1188,7 @@ sw $t0 -328($fp) lw $t0 -328($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -324($fp) lw $t0 0($fp) @@ -1197,7 +1197,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -352($fp) +sw $t1 -356($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1205,25 +1205,25 @@ sw $t0 -348($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -344($fp) +sw $t0 -340($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -340($fp) -lw $t0 -352($fp) +sw $t0 -344($fp) +lw $t0 -356($fp) lw $t1 -348($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) lw $t0 -336($fp) bne $t0 $zero label_19 -lw $t0 -352($fp) -lw $t1 -344($fp) +lw $t0 -356($fp) +lw $t1 -340($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) lw $t0 -336($fp) bne $t0 $zero label_20 -lw $t0 -352($fp) -lw $t1 -340($fp) +lw $t0 -356($fp) +lw $t1 -344($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) lw $t0 -336($fp) @@ -1239,9 +1239,9 @@ lw $t1 12($t0) sw $t1 -360($fp) lw $t0 -324($fp) lw $t1 12($t0) -sw $t1 -356($fp) +sw $t1 -352($fp) lw $t0 -360($fp) -lw $t1 -356($fp) +lw $t1 -352($fp) seq $t0 $t0 $t1 sw $t0 -332($fp) j label_22 @@ -1251,10 +1251,10 @@ lw $t1 12($t0) sw $t1 -360($fp) lw $t0 -324($fp) lw $t1 12($t0) -sw $t1 -356($fp) +sw $t1 -352($fp) lw $t0 -360($fp) move $a0 $t0 -lw $t0 -356($fp) +lw $t0 -352($fp) move $a1 $t0 jal equal_str sw $v0 -332($fp) @@ -1265,9 +1265,9 @@ lw $t1 12($t0) sw $t1 -360($fp) lw $t0 -324($fp) lw $t1 12($t0) -sw $t1 -356($fp) +sw $t1 -352($fp) lw $t0 -360($fp) -lw $t1 -356($fp) +lw $t1 -352($fp) seq $t0 $t0 $t1 sw $t0 -332($fp) j label_22 @@ -1275,7 +1275,7 @@ label_22: lw $t0 -332($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -364($fp) lw $t0 -364($fp) @@ -1288,7 +1288,7 @@ sw $t0 -276($fp) lw $t0 -276($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -272($fp) lw $t0 0($fp) @@ -1297,7 +1297,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -300($fp) +sw $t1 -304($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1305,25 +1305,25 @@ sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -292($fp) +sw $t0 -288($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -288($fp) -lw $t0 -300($fp) +sw $t0 -292($fp) +lw $t0 -304($fp) lw $t1 -296($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) bne $t0 $zero label_23 -lw $t0 -300($fp) -lw $t1 -292($fp) +lw $t0 -304($fp) +lw $t1 -288($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) bne $t0 $zero label_24 -lw $t0 -300($fp) -lw $t1 -288($fp) +lw $t0 -304($fp) +lw $t1 -292($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) @@ -1339,9 +1339,9 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -272($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) -lw $t1 -304($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -280($fp) j label_26 @@ -1351,10 +1351,10 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -272($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) move $a0 $t0 -lw $t0 -304($fp) +lw $t0 -300($fp) move $a1 $t0 jal equal_str sw $v0 -280($fp) @@ -1365,9 +1365,9 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -272($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) -lw $t1 -304($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -280($fp) j label_26 @@ -1375,7 +1375,7 @@ label_26: lw $t0 -280($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -312($fp) lw $t0 -312($fp) @@ -1388,7 +1388,7 @@ sw $t0 -224($fp) lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -220($fp) lw $t0 0($fp) @@ -1397,7 +1397,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -248($fp) +sw $t1 -252($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1405,25 +1405,25 @@ sw $t0 -244($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -240($fp) +sw $t0 -236($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -236($fp) -lw $t0 -248($fp) +sw $t0 -240($fp) +lw $t0 -252($fp) lw $t1 -244($fp) seq $t0 $t0 $t1 sw $t0 -232($fp) lw $t0 -232($fp) bne $t0 $zero label_27 -lw $t0 -248($fp) -lw $t1 -240($fp) +lw $t0 -252($fp) +lw $t1 -236($fp) seq $t0 $t0 $t1 sw $t0 -232($fp) lw $t0 -232($fp) bne $t0 $zero label_28 -lw $t0 -248($fp) -lw $t1 -236($fp) +lw $t0 -252($fp) +lw $t1 -240($fp) seq $t0 $t0 $t1 sw $t0 -232($fp) lw $t0 -232($fp) @@ -1439,9 +1439,9 @@ lw $t1 12($t0) sw $t1 -256($fp) lw $t0 -220($fp) lw $t1 12($t0) -sw $t1 -252($fp) +sw $t1 -248($fp) lw $t0 -256($fp) -lw $t1 -252($fp) +lw $t1 -248($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) j label_30 @@ -1451,10 +1451,10 @@ lw $t1 12($t0) sw $t1 -256($fp) lw $t0 -220($fp) lw $t1 12($t0) -sw $t1 -252($fp) +sw $t1 -248($fp) lw $t0 -256($fp) move $a0 $t0 -lw $t0 -252($fp) +lw $t0 -248($fp) move $a1 $t0 jal equal_str sw $v0 -228($fp) @@ -1465,9 +1465,9 @@ lw $t1 12($t0) sw $t1 -256($fp) lw $t0 -220($fp) lw $t1 12($t0) -sw $t1 -252($fp) +sw $t1 -248($fp) lw $t0 -256($fp) -lw $t1 -252($fp) +lw $t1 -248($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) j label_30 @@ -1475,7 +1475,7 @@ label_30: lw $t0 -228($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -260($fp) lw $t0 -260($fp) @@ -1488,7 +1488,7 @@ sw $t0 -172($fp) lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -168($fp) lw $t0 0($fp) @@ -1497,7 +1497,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -196($fp) +sw $t1 -200($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1505,25 +1505,25 @@ sw $t0 -192($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -188($fp) +sw $t0 -184($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -184($fp) -lw $t0 -196($fp) +sw $t0 -188($fp) +lw $t0 -200($fp) lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -180($fp) lw $t0 -180($fp) bne $t0 $zero label_31 -lw $t0 -196($fp) -lw $t1 -188($fp) +lw $t0 -200($fp) +lw $t1 -184($fp) seq $t0 $t0 $t1 sw $t0 -180($fp) lw $t0 -180($fp) bne $t0 $zero label_32 -lw $t0 -196($fp) -lw $t1 -184($fp) +lw $t0 -200($fp) +lw $t1 -188($fp) seq $t0 $t0 $t1 sw $t0 -180($fp) lw $t0 -180($fp) @@ -1539,9 +1539,9 @@ lw $t1 12($t0) sw $t1 -204($fp) lw $t0 -168($fp) lw $t1 12($t0) -sw $t1 -200($fp) +sw $t1 -196($fp) lw $t0 -204($fp) -lw $t1 -200($fp) +lw $t1 -196($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) j label_34 @@ -1551,10 +1551,10 @@ lw $t1 12($t0) sw $t1 -204($fp) lw $t0 -168($fp) lw $t1 12($t0) -sw $t1 -200($fp) +sw $t1 -196($fp) lw $t0 -204($fp) move $a0 $t0 -lw $t0 -200($fp) +lw $t0 -196($fp) move $a1 $t0 jal equal_str sw $v0 -176($fp) @@ -1565,9 +1565,9 @@ lw $t1 12($t0) sw $t1 -204($fp) lw $t0 -168($fp) lw $t1 12($t0) -sw $t1 -200($fp) +sw $t1 -196($fp) lw $t0 -204($fp) -lw $t1 -200($fp) +lw $t1 -196($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) j label_34 @@ -1575,7 +1575,7 @@ label_34: lw $t0 -176($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -208($fp) lw $t0 -208($fp) @@ -1588,7 +1588,7 @@ sw $t0 -120($fp) lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -116($fp) lw $t0 0($fp) @@ -1597,7 +1597,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -144($fp) +sw $t1 -148($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1605,25 +1605,25 @@ sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -136($fp) +sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -132($fp) -lw $t0 -144($fp) +sw $t0 -136($fp) +lw $t0 -148($fp) lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) bne $t0 $zero label_35 -lw $t0 -144($fp) -lw $t1 -136($fp) +lw $t0 -148($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) bne $t0 $zero label_36 -lw $t0 -144($fp) -lw $t1 -132($fp) +lw $t0 -148($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) @@ -1639,9 +1639,9 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) -lw $t1 -148($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) j label_38 @@ -1651,10 +1651,10 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) move $a0 $t0 -lw $t0 -148($fp) +lw $t0 -144($fp) move $a1 $t0 jal equal_str sw $v0 -124($fp) @@ -1665,9 +1665,9 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) -lw $t1 -148($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) j label_38 @@ -1675,7 +1675,7 @@ label_38: lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -156($fp) lw $t0 -156($fp) @@ -1688,7 +1688,7 @@ sw $t0 -68($fp) lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -64($fp) lw $t0 0($fp) @@ -1697,7 +1697,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -92($fp) +sw $t1 -96($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1705,25 +1705,25 @@ sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -84($fp) +sw $t0 -80($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -80($fp) -lw $t0 -92($fp) +sw $t0 -84($fp) +lw $t0 -96($fp) lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_39 -lw $t0 -92($fp) -lw $t1 -84($fp) +lw $t0 -96($fp) +lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_40 -lw $t0 -92($fp) -lw $t1 -80($fp) +lw $t0 -96($fp) +lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) @@ -1739,9 +1739,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_42 @@ -1751,10 +1751,10 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) move $a0 $t0 -lw $t0 -96($fp) +lw $t0 -92($fp) move $a1 $t0 jal equal_str sw $v0 -72($fp) @@ -1765,9 +1765,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_42 @@ -1775,7 +1775,7 @@ label_42: lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -104($fp) lw $t0 -104($fp) @@ -1813,7 +1813,7 @@ sw $v0 -56($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -1823,7 +1823,7 @@ label_45: li $t0 9 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 -48($fp) @@ -1836,7 +1836,7 @@ label_47: li $t0 8 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -1849,7 +1849,7 @@ label_49: li $t0 7 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -40($fp) lw $t0 -40($fp) @@ -1862,7 +1862,7 @@ label_51: li $t0 6 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -1875,7 +1875,7 @@ label_53: li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) @@ -1888,7 +1888,7 @@ label_55: li $t0 4 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -1901,7 +1901,7 @@ label_57: li $t0 3 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -24($fp) lw $t0 -24($fp) @@ -1914,7 +1914,7 @@ label_59: li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -1927,7 +1927,7 @@ label_61: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) @@ -1940,7 +1940,7 @@ label_63: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -1964,7 +1964,7 @@ addi $sp $sp -576 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -540($fp) lw $t0 0($fp) @@ -1973,7 +1973,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -564($fp) +sw $t1 -568($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1981,25 +1981,25 @@ sw $t0 -560($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -556($fp) +sw $t0 -552($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -552($fp) -lw $t0 -564($fp) +sw $t0 -556($fp) +lw $t0 -568($fp) lw $t1 -560($fp) seq $t0 $t0 $t1 sw $t0 -548($fp) lw $t0 -548($fp) bne $t0 $zero label_65 -lw $t0 -564($fp) -lw $t1 -556($fp) +lw $t0 -568($fp) +lw $t1 -552($fp) seq $t0 $t0 $t1 sw $t0 -548($fp) lw $t0 -548($fp) bne $t0 $zero label_66 -lw $t0 -564($fp) -lw $t1 -552($fp) +lw $t0 -568($fp) +lw $t1 -556($fp) seq $t0 $t0 $t1 sw $t0 -548($fp) lw $t0 -548($fp) @@ -2015,9 +2015,9 @@ lw $t1 12($t0) sw $t1 -572($fp) lw $t0 -540($fp) lw $t1 12($t0) -sw $t1 -568($fp) +sw $t1 -564($fp) lw $t0 -572($fp) -lw $t1 -568($fp) +lw $t1 -564($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) j label_68 @@ -2027,10 +2027,10 @@ lw $t1 12($t0) sw $t1 -572($fp) lw $t0 -540($fp) lw $t1 12($t0) -sw $t1 -568($fp) +sw $t1 -564($fp) lw $t0 -572($fp) move $a0 $t0 -lw $t0 -568($fp) +lw $t0 -564($fp) move $a1 $t0 jal equal_str sw $v0 -544($fp) @@ -2041,9 +2041,9 @@ lw $t1 12($t0) sw $t1 -572($fp) lw $t0 -540($fp) lw $t1 12($t0) -sw $t1 -568($fp) +sw $t1 -564($fp) lw $t0 -572($fp) -lw $t1 -568($fp) +lw $t1 -564($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) j label_68 @@ -2051,7 +2051,7 @@ label_68: lw $t0 -544($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -576($fp) lw $t0 -576($fp) @@ -2062,7 +2062,7 @@ bne $t0 $zero label_125 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -492($fp) lw $t0 0($fp) @@ -2071,7 +2071,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -516($fp) +sw $t1 -520($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2079,25 +2079,25 @@ sw $t0 -512($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -508($fp) +sw $t0 -504($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -504($fp) -lw $t0 -516($fp) +sw $t0 -508($fp) +lw $t0 -520($fp) lw $t1 -512($fp) seq $t0 $t0 $t1 sw $t0 -500($fp) lw $t0 -500($fp) bne $t0 $zero label_69 -lw $t0 -516($fp) -lw $t1 -508($fp) +lw $t0 -520($fp) +lw $t1 -504($fp) seq $t0 $t0 $t1 sw $t0 -500($fp) lw $t0 -500($fp) bne $t0 $zero label_70 -lw $t0 -516($fp) -lw $t1 -504($fp) +lw $t0 -520($fp) +lw $t1 -508($fp) seq $t0 $t0 $t1 sw $t0 -500($fp) lw $t0 -500($fp) @@ -2113,9 +2113,9 @@ lw $t1 12($t0) sw $t1 -524($fp) lw $t0 -492($fp) lw $t1 12($t0) -sw $t1 -520($fp) +sw $t1 -516($fp) lw $t0 -524($fp) -lw $t1 -520($fp) +lw $t1 -516($fp) seq $t0 $t0 $t1 sw $t0 -496($fp) j label_72 @@ -2125,10 +2125,10 @@ lw $t1 12($t0) sw $t1 -524($fp) lw $t0 -492($fp) lw $t1 12($t0) -sw $t1 -520($fp) +sw $t1 -516($fp) lw $t0 -524($fp) move $a0 $t0 -lw $t0 -520($fp) +lw $t0 -516($fp) move $a1 $t0 jal equal_str sw $v0 -496($fp) @@ -2139,9 +2139,9 @@ lw $t1 12($t0) sw $t1 -524($fp) lw $t0 -492($fp) lw $t1 12($t0) -sw $t1 -520($fp) +sw $t1 -516($fp) lw $t0 -524($fp) -lw $t1 -520($fp) +lw $t1 -516($fp) seq $t0 $t0 $t1 sw $t0 -496($fp) j label_72 @@ -2149,7 +2149,7 @@ label_72: lw $t0 -496($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -528($fp) lw $t0 -528($fp) @@ -2160,7 +2160,7 @@ bne $t0 $zero label_123 li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -444($fp) lw $t0 0($fp) @@ -2169,7 +2169,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -468($fp) +sw $t1 -472($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2177,25 +2177,25 @@ sw $t0 -464($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -460($fp) +sw $t0 -456($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -456($fp) -lw $t0 -468($fp) +sw $t0 -460($fp) +lw $t0 -472($fp) lw $t1 -464($fp) seq $t0 $t0 $t1 sw $t0 -452($fp) lw $t0 -452($fp) bne $t0 $zero label_73 -lw $t0 -468($fp) -lw $t1 -460($fp) +lw $t0 -472($fp) +lw $t1 -456($fp) seq $t0 $t0 $t1 sw $t0 -452($fp) lw $t0 -452($fp) bne $t0 $zero label_74 -lw $t0 -468($fp) -lw $t1 -456($fp) +lw $t0 -472($fp) +lw $t1 -460($fp) seq $t0 $t0 $t1 sw $t0 -452($fp) lw $t0 -452($fp) @@ -2211,9 +2211,9 @@ lw $t1 12($t0) sw $t1 -476($fp) lw $t0 -444($fp) lw $t1 12($t0) -sw $t1 -472($fp) +sw $t1 -468($fp) lw $t0 -476($fp) -lw $t1 -472($fp) +lw $t1 -468($fp) seq $t0 $t0 $t1 sw $t0 -448($fp) j label_76 @@ -2223,10 +2223,10 @@ lw $t1 12($t0) sw $t1 -476($fp) lw $t0 -444($fp) lw $t1 12($t0) -sw $t1 -472($fp) +sw $t1 -468($fp) lw $t0 -476($fp) move $a0 $t0 -lw $t0 -472($fp) +lw $t0 -468($fp) move $a1 $t0 jal equal_str sw $v0 -448($fp) @@ -2237,9 +2237,9 @@ lw $t1 12($t0) sw $t1 -476($fp) lw $t0 -444($fp) lw $t1 12($t0) -sw $t1 -472($fp) +sw $t1 -468($fp) lw $t0 -476($fp) -lw $t1 -472($fp) +lw $t1 -468($fp) seq $t0 $t0 $t1 sw $t0 -448($fp) j label_76 @@ -2247,7 +2247,7 @@ label_76: lw $t0 -448($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -480($fp) lw $t0 -480($fp) @@ -2258,7 +2258,7 @@ bne $t0 $zero label_121 li $t0 3 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -396($fp) lw $t0 0($fp) @@ -2267,7 +2267,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -420($fp) +sw $t1 -424($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2275,25 +2275,25 @@ sw $t0 -416($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -412($fp) +sw $t0 -408($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -408($fp) -lw $t0 -420($fp) +sw $t0 -412($fp) +lw $t0 -424($fp) lw $t1 -416($fp) seq $t0 $t0 $t1 sw $t0 -404($fp) lw $t0 -404($fp) bne $t0 $zero label_77 -lw $t0 -420($fp) -lw $t1 -412($fp) +lw $t0 -424($fp) +lw $t1 -408($fp) seq $t0 $t0 $t1 sw $t0 -404($fp) lw $t0 -404($fp) bne $t0 $zero label_78 -lw $t0 -420($fp) -lw $t1 -408($fp) +lw $t0 -424($fp) +lw $t1 -412($fp) seq $t0 $t0 $t1 sw $t0 -404($fp) lw $t0 -404($fp) @@ -2309,9 +2309,9 @@ lw $t1 12($t0) sw $t1 -428($fp) lw $t0 -396($fp) lw $t1 12($t0) -sw $t1 -424($fp) +sw $t1 -420($fp) lw $t0 -428($fp) -lw $t1 -424($fp) +lw $t1 -420($fp) seq $t0 $t0 $t1 sw $t0 -400($fp) j label_80 @@ -2321,10 +2321,10 @@ lw $t1 12($t0) sw $t1 -428($fp) lw $t0 -396($fp) lw $t1 12($t0) -sw $t1 -424($fp) +sw $t1 -420($fp) lw $t0 -428($fp) move $a0 $t0 -lw $t0 -424($fp) +lw $t0 -420($fp) move $a1 $t0 jal equal_str sw $v0 -400($fp) @@ -2335,9 +2335,9 @@ lw $t1 12($t0) sw $t1 -428($fp) lw $t0 -396($fp) lw $t1 12($t0) -sw $t1 -424($fp) +sw $t1 -420($fp) lw $t0 -428($fp) -lw $t1 -424($fp) +lw $t1 -420($fp) seq $t0 $t0 $t1 sw $t0 -400($fp) j label_80 @@ -2345,7 +2345,7 @@ label_80: lw $t0 -400($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -432($fp) lw $t0 -432($fp) @@ -2356,7 +2356,7 @@ bne $t0 $zero label_119 li $t0 4 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -348($fp) lw $t0 0($fp) @@ -2365,7 +2365,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -372($fp) +sw $t1 -376($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2373,25 +2373,25 @@ sw $t0 -368($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -364($fp) +sw $t0 -360($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -360($fp) -lw $t0 -372($fp) +sw $t0 -364($fp) +lw $t0 -376($fp) lw $t1 -368($fp) seq $t0 $t0 $t1 sw $t0 -356($fp) lw $t0 -356($fp) bne $t0 $zero label_81 -lw $t0 -372($fp) -lw $t1 -364($fp) +lw $t0 -376($fp) +lw $t1 -360($fp) seq $t0 $t0 $t1 sw $t0 -356($fp) lw $t0 -356($fp) bne $t0 $zero label_82 -lw $t0 -372($fp) -lw $t1 -360($fp) +lw $t0 -376($fp) +lw $t1 -364($fp) seq $t0 $t0 $t1 sw $t0 -356($fp) lw $t0 -356($fp) @@ -2407,9 +2407,9 @@ lw $t1 12($t0) sw $t1 -380($fp) lw $t0 -348($fp) lw $t1 12($t0) -sw $t1 -376($fp) +sw $t1 -372($fp) lw $t0 -380($fp) -lw $t1 -376($fp) +lw $t1 -372($fp) seq $t0 $t0 $t1 sw $t0 -352($fp) j label_84 @@ -2419,10 +2419,10 @@ lw $t1 12($t0) sw $t1 -380($fp) lw $t0 -348($fp) lw $t1 12($t0) -sw $t1 -376($fp) +sw $t1 -372($fp) lw $t0 -380($fp) move $a0 $t0 -lw $t0 -376($fp) +lw $t0 -372($fp) move $a1 $t0 jal equal_str sw $v0 -352($fp) @@ -2433,9 +2433,9 @@ lw $t1 12($t0) sw $t1 -380($fp) lw $t0 -348($fp) lw $t1 12($t0) -sw $t1 -376($fp) +sw $t1 -372($fp) lw $t0 -380($fp) -lw $t1 -376($fp) +lw $t1 -372($fp) seq $t0 $t0 $t1 sw $t0 -352($fp) j label_84 @@ -2443,7 +2443,7 @@ label_84: lw $t0 -352($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -384($fp) lw $t0 -384($fp) @@ -2454,7 +2454,7 @@ bne $t0 $zero label_117 li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -300($fp) lw $t0 0($fp) @@ -2463,7 +2463,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -324($fp) +sw $t1 -328($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2471,25 +2471,25 @@ sw $t0 -320($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -316($fp) +sw $t0 -312($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -312($fp) -lw $t0 -324($fp) +sw $t0 -316($fp) +lw $t0 -328($fp) lw $t1 -320($fp) seq $t0 $t0 $t1 sw $t0 -308($fp) lw $t0 -308($fp) bne $t0 $zero label_85 -lw $t0 -324($fp) -lw $t1 -316($fp) +lw $t0 -328($fp) +lw $t1 -312($fp) seq $t0 $t0 $t1 sw $t0 -308($fp) lw $t0 -308($fp) bne $t0 $zero label_86 -lw $t0 -324($fp) -lw $t1 -312($fp) +lw $t0 -328($fp) +lw $t1 -316($fp) seq $t0 $t0 $t1 sw $t0 -308($fp) lw $t0 -308($fp) @@ -2505,9 +2505,9 @@ lw $t1 12($t0) sw $t1 -332($fp) lw $t0 -300($fp) lw $t1 12($t0) -sw $t1 -328($fp) +sw $t1 -324($fp) lw $t0 -332($fp) -lw $t1 -328($fp) +lw $t1 -324($fp) seq $t0 $t0 $t1 sw $t0 -304($fp) j label_88 @@ -2517,10 +2517,10 @@ lw $t1 12($t0) sw $t1 -332($fp) lw $t0 -300($fp) lw $t1 12($t0) -sw $t1 -328($fp) +sw $t1 -324($fp) lw $t0 -332($fp) move $a0 $t0 -lw $t0 -328($fp) +lw $t0 -324($fp) move $a1 $t0 jal equal_str sw $v0 -304($fp) @@ -2531,9 +2531,9 @@ lw $t1 12($t0) sw $t1 -332($fp) lw $t0 -300($fp) lw $t1 12($t0) -sw $t1 -328($fp) +sw $t1 -324($fp) lw $t0 -332($fp) -lw $t1 -328($fp) +lw $t1 -324($fp) seq $t0 $t0 $t1 sw $t0 -304($fp) j label_88 @@ -2541,7 +2541,7 @@ label_88: lw $t0 -304($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -336($fp) lw $t0 -336($fp) @@ -2552,7 +2552,7 @@ bne $t0 $zero label_115 li $t0 6 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -252($fp) lw $t0 0($fp) @@ -2561,7 +2561,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -276($fp) +sw $t1 -280($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2569,25 +2569,25 @@ sw $t0 -272($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -268($fp) +sw $t0 -264($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -264($fp) -lw $t0 -276($fp) +sw $t0 -268($fp) +lw $t0 -280($fp) lw $t1 -272($fp) seq $t0 $t0 $t1 sw $t0 -260($fp) lw $t0 -260($fp) bne $t0 $zero label_89 -lw $t0 -276($fp) -lw $t1 -268($fp) +lw $t0 -280($fp) +lw $t1 -264($fp) seq $t0 $t0 $t1 sw $t0 -260($fp) lw $t0 -260($fp) bne $t0 $zero label_90 -lw $t0 -276($fp) -lw $t1 -264($fp) +lw $t0 -280($fp) +lw $t1 -268($fp) seq $t0 $t0 $t1 sw $t0 -260($fp) lw $t0 -260($fp) @@ -2603,9 +2603,9 @@ lw $t1 12($t0) sw $t1 -284($fp) lw $t0 -252($fp) lw $t1 12($t0) -sw $t1 -280($fp) +sw $t1 -276($fp) lw $t0 -284($fp) -lw $t1 -280($fp) +lw $t1 -276($fp) seq $t0 $t0 $t1 sw $t0 -256($fp) j label_92 @@ -2615,10 +2615,10 @@ lw $t1 12($t0) sw $t1 -284($fp) lw $t0 -252($fp) lw $t1 12($t0) -sw $t1 -280($fp) +sw $t1 -276($fp) lw $t0 -284($fp) move $a0 $t0 -lw $t0 -280($fp) +lw $t0 -276($fp) move $a1 $t0 jal equal_str sw $v0 -256($fp) @@ -2629,9 +2629,9 @@ lw $t1 12($t0) sw $t1 -284($fp) lw $t0 -252($fp) lw $t1 12($t0) -sw $t1 -280($fp) +sw $t1 -276($fp) lw $t0 -284($fp) -lw $t1 -280($fp) +lw $t1 -276($fp) seq $t0 $t0 $t1 sw $t0 -256($fp) j label_92 @@ -2639,7 +2639,7 @@ label_92: lw $t0 -256($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -288($fp) lw $t0 -288($fp) @@ -2650,7 +2650,7 @@ bne $t0 $zero label_113 li $t0 7 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -204($fp) lw $t0 0($fp) @@ -2659,7 +2659,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -228($fp) +sw $t1 -232($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2667,25 +2667,25 @@ sw $t0 -224($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -220($fp) +sw $t0 -216($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -216($fp) -lw $t0 -228($fp) +sw $t0 -220($fp) +lw $t0 -232($fp) lw $t1 -224($fp) seq $t0 $t0 $t1 sw $t0 -212($fp) lw $t0 -212($fp) bne $t0 $zero label_93 -lw $t0 -228($fp) -lw $t1 -220($fp) +lw $t0 -232($fp) +lw $t1 -216($fp) seq $t0 $t0 $t1 sw $t0 -212($fp) lw $t0 -212($fp) bne $t0 $zero label_94 -lw $t0 -228($fp) -lw $t1 -216($fp) +lw $t0 -232($fp) +lw $t1 -220($fp) seq $t0 $t0 $t1 sw $t0 -212($fp) lw $t0 -212($fp) @@ -2701,9 +2701,9 @@ lw $t1 12($t0) sw $t1 -236($fp) lw $t0 -204($fp) lw $t1 12($t0) -sw $t1 -232($fp) +sw $t1 -228($fp) lw $t0 -236($fp) -lw $t1 -232($fp) +lw $t1 -228($fp) seq $t0 $t0 $t1 sw $t0 -208($fp) j label_96 @@ -2713,10 +2713,10 @@ lw $t1 12($t0) sw $t1 -236($fp) lw $t0 -204($fp) lw $t1 12($t0) -sw $t1 -232($fp) +sw $t1 -228($fp) lw $t0 -236($fp) move $a0 $t0 -lw $t0 -232($fp) +lw $t0 -228($fp) move $a1 $t0 jal equal_str sw $v0 -208($fp) @@ -2727,9 +2727,9 @@ lw $t1 12($t0) sw $t1 -236($fp) lw $t0 -204($fp) lw $t1 12($t0) -sw $t1 -232($fp) +sw $t1 -228($fp) lw $t0 -236($fp) -lw $t1 -232($fp) +lw $t1 -228($fp) seq $t0 $t0 $t1 sw $t0 -208($fp) j label_96 @@ -2737,7 +2737,7 @@ label_96: lw $t0 -208($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -240($fp) lw $t0 -240($fp) @@ -2748,7 +2748,7 @@ bne $t0 $zero label_111 li $t0 8 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -156($fp) lw $t0 0($fp) @@ -2757,7 +2757,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -180($fp) +sw $t1 -184($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2765,25 +2765,25 @@ sw $t0 -176($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -172($fp) +sw $t0 -168($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -168($fp) -lw $t0 -180($fp) +sw $t0 -172($fp) +lw $t0 -184($fp) lw $t1 -176($fp) seq $t0 $t0 $t1 sw $t0 -164($fp) lw $t0 -164($fp) bne $t0 $zero label_97 -lw $t0 -180($fp) -lw $t1 -172($fp) +lw $t0 -184($fp) +lw $t1 -168($fp) seq $t0 $t0 $t1 sw $t0 -164($fp) lw $t0 -164($fp) bne $t0 $zero label_98 -lw $t0 -180($fp) -lw $t1 -168($fp) +lw $t0 -184($fp) +lw $t1 -172($fp) seq $t0 $t0 $t1 sw $t0 -164($fp) lw $t0 -164($fp) @@ -2799,9 +2799,9 @@ lw $t1 12($t0) sw $t1 -188($fp) lw $t0 -156($fp) lw $t1 12($t0) -sw $t1 -184($fp) +sw $t1 -180($fp) lw $t0 -188($fp) -lw $t1 -184($fp) +lw $t1 -180($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) j label_100 @@ -2811,10 +2811,10 @@ lw $t1 12($t0) sw $t1 -188($fp) lw $t0 -156($fp) lw $t1 12($t0) -sw $t1 -184($fp) +sw $t1 -180($fp) lw $t0 -188($fp) move $a0 $t0 -lw $t0 -184($fp) +lw $t0 -180($fp) move $a1 $t0 jal equal_str sw $v0 -160($fp) @@ -2825,9 +2825,9 @@ lw $t1 12($t0) sw $t1 -188($fp) lw $t0 -156($fp) lw $t1 12($t0) -sw $t1 -184($fp) +sw $t1 -180($fp) lw $t0 -188($fp) -lw $t1 -184($fp) +lw $t1 -180($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) j label_100 @@ -2835,7 +2835,7 @@ label_100: lw $t0 -160($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -192($fp) lw $t0 -192($fp) @@ -2846,7 +2846,7 @@ bne $t0 $zero label_109 li $t0 9 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -108($fp) lw $t0 0($fp) @@ -2855,7 +2855,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -132($fp) +sw $t1 -136($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2863,25 +2863,25 @@ sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -124($fp) +sw $t0 -120($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -120($fp) -lw $t0 -132($fp) +sw $t0 -124($fp) +lw $t0 -136($fp) lw $t1 -128($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) bne $t0 $zero label_101 -lw $t0 -132($fp) -lw $t1 -124($fp) +lw $t0 -136($fp) +lw $t1 -120($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) bne $t0 $zero label_102 -lw $t0 -132($fp) -lw $t1 -120($fp) +lw $t0 -136($fp) +lw $t1 -124($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) @@ -2897,9 +2897,9 @@ lw $t1 12($t0) sw $t1 -140($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -136($fp) +sw $t1 -132($fp) lw $t0 -140($fp) -lw $t1 -136($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -112($fp) j label_104 @@ -2909,10 +2909,10 @@ lw $t1 12($t0) sw $t1 -140($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -136($fp) +sw $t1 -132($fp) lw $t0 -140($fp) move $a0 $t0 -lw $t0 -136($fp) +lw $t0 -132($fp) move $a1 $t0 jal equal_str sw $v0 -112($fp) @@ -2923,9 +2923,9 @@ lw $t1 12($t0) sw $t1 -140($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -136($fp) +sw $t1 -132($fp) lw $t0 -140($fp) -lw $t1 -136($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -112($fp) j label_104 @@ -2933,7 +2933,7 @@ label_104: lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -144($fp) lw $t0 -144($fp) @@ -2973,7 +2973,7 @@ sw $t0 -96($fp) lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -92($fp) lw $t0 -92($fp) @@ -2985,7 +2985,7 @@ sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -3000,7 +3000,7 @@ sw $t0 -80($fp) lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -76($fp) lw $t0 -76($fp) @@ -3015,7 +3015,7 @@ sw $t0 -72($fp) lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -68($fp) @@ -3030,7 +3030,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -3045,7 +3045,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -3060,7 +3060,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -3075,7 +3075,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -3090,7 +3090,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -3105,7 +3105,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -3120,7 +3120,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -3171,7 +3171,7 @@ sw $v0 -272($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -268($fp) lw $t0 -272($fp) @@ -3180,7 +3180,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -300($fp) +sw $t1 -304($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3188,25 +3188,25 @@ sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -292($fp) +sw $t0 -288($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -288($fp) -lw $t0 -300($fp) +sw $t0 -292($fp) +lw $t0 -304($fp) lw $t1 -296($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) bne $t0 $zero label_129 -lw $t0 -300($fp) -lw $t1 -292($fp) +lw $t0 -304($fp) +lw $t1 -288($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) bne $t0 $zero label_130 -lw $t0 -300($fp) -lw $t1 -288($fp) +lw $t0 -304($fp) +lw $t1 -292($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) @@ -3222,9 +3222,9 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -268($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) -lw $t1 -304($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -280($fp) j label_132 @@ -3234,10 +3234,10 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -268($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) move $a0 $t0 -lw $t0 -304($fp) +lw $t0 -300($fp) move $a1 $t0 jal equal_str sw $v0 -280($fp) @@ -3248,9 +3248,9 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -268($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) -lw $t1 -304($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -280($fp) j label_132 @@ -3258,7 +3258,7 @@ label_132: lw $t0 -280($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -312($fp) lw $t0 -312($fp) @@ -3269,13 +3269,13 @@ bne $t0 $zero label_163 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -220($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -216($fp) lw $t0 0($fp) @@ -3316,7 +3316,7 @@ sw $t0 -204($fp) lw $t0 -204($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -200($fp) lw $t0 -208($fp) @@ -3325,7 +3325,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -244($fp) +sw $t1 -248($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3333,25 +3333,25 @@ sw $t0 -240($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -236($fp) +sw $t0 -232($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -232($fp) -lw $t0 -244($fp) +sw $t0 -236($fp) +lw $t0 -248($fp) lw $t1 -240($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) lw $t0 -228($fp) bne $t0 $zero label_135 -lw $t0 -244($fp) -lw $t1 -236($fp) +lw $t0 -248($fp) +lw $t1 -232($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) lw $t0 -228($fp) bne $t0 $zero label_136 -lw $t0 -244($fp) -lw $t1 -232($fp) +lw $t0 -248($fp) +lw $t1 -236($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) lw $t0 -228($fp) @@ -3367,9 +3367,9 @@ lw $t1 12($t0) sw $t1 -252($fp) lw $t0 -200($fp) lw $t1 12($t0) -sw $t1 -248($fp) +sw $t1 -244($fp) lw $t0 -252($fp) -lw $t1 -248($fp) +lw $t1 -244($fp) seq $t0 $t0 $t1 sw $t0 -224($fp) j label_138 @@ -3379,10 +3379,10 @@ lw $t1 12($t0) sw $t1 -252($fp) lw $t0 -200($fp) lw $t1 12($t0) -sw $t1 -248($fp) +sw $t1 -244($fp) lw $t0 -252($fp) move $a0 $t0 -lw $t0 -248($fp) +lw $t0 -244($fp) move $a1 $t0 jal equal_str sw $v0 -224($fp) @@ -3393,9 +3393,9 @@ lw $t1 12($t0) sw $t1 -252($fp) lw $t0 -200($fp) lw $t1 12($t0) -sw $t1 -248($fp) +sw $t1 -244($fp) lw $t0 -252($fp) -lw $t1 -248($fp) +lw $t1 -244($fp) seq $t0 $t0 $t1 sw $t0 -224($fp) j label_138 @@ -3403,7 +3403,7 @@ label_138: lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -256($fp) lw $t0 -256($fp) @@ -3414,13 +3414,13 @@ bne $t0 $zero label_155 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -152($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -148($fp) lw $t0 0($fp) @@ -3461,7 +3461,7 @@ sw $t0 -136($fp) lw $t0 -136($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -132($fp) lw $t0 -140($fp) @@ -3470,7 +3470,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -176($fp) +sw $t1 -180($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3478,25 +3478,25 @@ sw $t0 -172($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -168($fp) +sw $t0 -164($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -164($fp) -lw $t0 -176($fp) +sw $t0 -168($fp) +lw $t0 -180($fp) lw $t1 -172($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) lw $t0 -160($fp) bne $t0 $zero label_141 -lw $t0 -176($fp) -lw $t1 -168($fp) +lw $t0 -180($fp) +lw $t1 -164($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) lw $t0 -160($fp) bne $t0 $zero label_142 -lw $t0 -176($fp) -lw $t1 -164($fp) +lw $t0 -180($fp) +lw $t1 -168($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) lw $t0 -160($fp) @@ -3512,9 +3512,9 @@ lw $t1 12($t0) sw $t1 -184($fp) lw $t0 -132($fp) lw $t1 12($t0) -sw $t1 -180($fp) +sw $t1 -176($fp) lw $t0 -184($fp) -lw $t1 -180($fp) +lw $t1 -176($fp) seq $t0 $t0 $t1 sw $t0 -156($fp) j label_144 @@ -3524,10 +3524,10 @@ lw $t1 12($t0) sw $t1 -184($fp) lw $t0 -132($fp) lw $t1 12($t0) -sw $t1 -180($fp) +sw $t1 -176($fp) lw $t0 -184($fp) move $a0 $t0 -lw $t0 -180($fp) +lw $t0 -176($fp) move $a1 $t0 jal equal_str sw $v0 -156($fp) @@ -3538,9 +3538,9 @@ lw $t1 12($t0) sw $t1 -184($fp) lw $t0 -132($fp) lw $t1 12($t0) -sw $t1 -180($fp) +sw $t1 -176($fp) lw $t0 -184($fp) -lw $t1 -180($fp) +lw $t1 -176($fp) seq $t0 $t0 $t1 sw $t0 -156($fp) j label_144 @@ -3548,7 +3548,7 @@ label_144: lw $t0 -156($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -188($fp) lw $t0 -188($fp) @@ -3593,7 +3593,7 @@ label_147: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -120($fp) lw $t0 0($fp) @@ -3629,7 +3629,7 @@ sw $t1 -112($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -92($fp) lw $t0 -92($fp) @@ -3642,7 +3642,7 @@ sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -116($fp) lw $t0 0($fp) @@ -3718,7 +3718,7 @@ label_155: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -60($fp) lw $t0 0($fp) @@ -3754,7 +3754,7 @@ sw $t1 -52($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) @@ -3767,7 +3767,7 @@ sw $t0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 0($fp) @@ -3843,7 +3843,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) @@ -3856,7 +3856,7 @@ label_163: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -3880,7 +3880,7 @@ addi $sp $sp -124 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -128($fp) lw $t0 -128($fp) @@ -3917,7 +3917,7 @@ sw $t0 -124($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -108($fp) lw $t0 -108($fp) @@ -3936,7 +3936,7 @@ sw $t1 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -100($fp) lw $t0 -100($fp) @@ -3952,7 +3952,7 @@ sw $t1 -64($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -3965,7 +3965,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -68($fp) @@ -3974,7 +3974,7 @@ sw $t1 -80($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 0($fp) @@ -4050,7 +4050,7 @@ sw $t0 -72($fp) lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -4061,7 +4061,7 @@ sw $t1 -24($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -4074,7 +4074,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -4099,7 +4099,7 @@ addi $sp $sp -148 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -112($fp) lw $t0 0($fp) @@ -4108,7 +4108,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -136($fp) +sw $t1 -140($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4116,25 +4116,25 @@ sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -128($fp) +sw $t0 -124($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -124($fp) -lw $t0 -136($fp) +sw $t0 -128($fp) +lw $t0 -140($fp) lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) lw $t0 -120($fp) bne $t0 $zero label_174 -lw $t0 -136($fp) -lw $t1 -128($fp) +lw $t0 -140($fp) +lw $t1 -124($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) lw $t0 -120($fp) bne $t0 $zero label_175 -lw $t0 -136($fp) -lw $t1 -124($fp) +lw $t0 -140($fp) +lw $t1 -128($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) lw $t0 -120($fp) @@ -4150,9 +4150,9 @@ lw $t1 12($t0) sw $t1 -144($fp) lw $t0 -112($fp) lw $t1 12($t0) -sw $t1 -140($fp) +sw $t1 -136($fp) lw $t0 -144($fp) -lw $t1 -140($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) j label_177 @@ -4162,10 +4162,10 @@ lw $t1 12($t0) sw $t1 -144($fp) lw $t0 -112($fp) lw $t1 12($t0) -sw $t1 -140($fp) +sw $t1 -136($fp) lw $t0 -144($fp) move $a0 $t0 -lw $t0 -140($fp) +lw $t0 -136($fp) move $a1 $t0 jal equal_str sw $v0 -116($fp) @@ -4176,9 +4176,9 @@ lw $t1 12($t0) sw $t1 -144($fp) lw $t0 -112($fp) lw $t1 12($t0) -sw $t1 -140($fp) +sw $t1 -136($fp) lw $t0 -144($fp) -lw $t1 -140($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) j label_177 @@ -4186,7 +4186,7 @@ label_177: lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -148($fp) lw $t0 -148($fp) @@ -4197,7 +4197,7 @@ bne $t0 $zero label_186 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -4213,7 +4213,7 @@ sw $t1 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -100($fp) lw $t0 -100($fp) @@ -4227,7 +4227,7 @@ sw $t1 -76($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -4240,7 +4240,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -64($fp) lw $t0 -64($fp) @@ -4253,7 +4253,7 @@ sw $t0 -68($fp) lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -80($fp) lw $t0 4($fp) @@ -4291,7 +4291,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -4370,7 +4370,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -4394,7 +4394,7 @@ addi $sp $sp -144 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -108($fp) lw $t0 0($fp) @@ -4403,7 +4403,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -132($fp) +sw $t1 -136($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4411,25 +4411,25 @@ sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -124($fp) +sw $t0 -120($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -120($fp) -lw $t0 -132($fp) +sw $t0 -124($fp) +lw $t0 -136($fp) lw $t1 -128($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) bne $t0 $zero label_188 -lw $t0 -132($fp) -lw $t1 -124($fp) +lw $t0 -136($fp) +lw $t1 -120($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) bne $t0 $zero label_189 -lw $t0 -132($fp) -lw $t1 -120($fp) +lw $t0 -136($fp) +lw $t1 -124($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) @@ -4445,9 +4445,9 @@ lw $t1 12($t0) sw $t1 -140($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -136($fp) +sw $t1 -132($fp) lw $t0 -140($fp) -lw $t1 -136($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -112($fp) j label_191 @@ -4457,10 +4457,10 @@ lw $t1 12($t0) sw $t1 -140($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -136($fp) +sw $t1 -132($fp) lw $t0 -140($fp) move $a0 $t0 -lw $t0 -136($fp) +lw $t0 -132($fp) move $a1 $t0 jal equal_str sw $v0 -112($fp) @@ -4471,9 +4471,9 @@ lw $t1 12($t0) sw $t1 -140($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -136($fp) +sw $t1 -132($fp) lw $t0 -140($fp) -lw $t1 -136($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -112($fp) j label_191 @@ -4481,7 +4481,7 @@ label_191: lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -144($fp) lw $t0 -144($fp) @@ -4495,13 +4495,13 @@ sw $t1 -96($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -80($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -4532,7 +4532,7 @@ sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -100($fp) lw $t0 -100($fp) @@ -4546,7 +4546,7 @@ sw $t1 -56($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -4559,7 +4559,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -4572,7 +4572,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -76($fp) lw $t0 4($fp) @@ -4674,7 +4674,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -4688,7 +4688,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_A2I: +__ctor_A2I: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -4711,7 +4711,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_A2I +jal __attributes_ctor_A2I addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -4722,7 +4722,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -4749,10 +4749,10 @@ sw $t0 -96($fp) lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -92($fp) -jal __init_at_A2I +jal __ctor_A2I sw $v0 -88($fp) lw $t0 -88($fp) li $t1 0 @@ -4789,10 +4789,10 @@ sw $t0 -100($fp) li $t0 678987 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) -jal __init_at_A2I +jal __ctor_A2I sw $v0 -68($fp) lw $t0 -68($fp) li $t1 0 @@ -4861,7 +4861,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -44($fp) lw $t0 0($fp) @@ -4929,7 +4929,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -4970,7 +4970,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -4993,7 +4993,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index b83e4c5c0..2d3e3c02b 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -30,73 +30,73 @@ data_13: .asciiz "" .word 0 data_14: .asciiz "Abort called from class " .word 0 -data_15: .asciiz "Substring out of range" +data_15: .asciiz "Index out of range exception" .word 0 data_16: .asciiz "\n" .word 0 data_17: .asciiz "title: " .word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" +data_18: .asciiz "Function call in a void instance" .word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" +data_19: .asciiz "Function call in a void instance" .word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" +data_20: .asciiz "Function call in a void instance" .word 0 data_21: .asciiz "\n" .word 0 data_22: .asciiz "author: " .word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" +data_23: .asciiz "Function call in a void instance" .word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" +data_24: .asciiz "Function call in a void instance" .word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" +data_25: .asciiz "Function call in a void instance" .word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" +data_26: .asciiz "Function call in a void instance" .word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" +data_27: .asciiz "Function call in a void instance" .word 0 data_28: .asciiz "\n" .word 0 data_29: .asciiz "periodical: " .word 0 -data_30: .asciiz "RuntimeError: Function call in a void instance" +data_30: .asciiz "Function call in a void instance" .word 0 -data_31: .asciiz "RuntimeError: Function call in a void instance" +data_31: .asciiz "Function call in a void instance" .word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" +data_32: .asciiz "Function call in a void instance" .word 0 -data_33: .asciiz "RuntimeError: Function call in a void instance" +data_33: .asciiz "Function call in a void instance" .word 0 -data_34: .asciiz "RuntimeError: Function call in a void instance" +data_34: .asciiz "Function call in a void instance" .word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" +data_35: .asciiz "Function call in a void instance" .word 0 -data_36: .asciiz "RuntimeError: Function call in a void instance" +data_36: .asciiz "Function call in a void instance" .word 0 -data_37: .asciiz "RuntimeError: Function call in a void instance" +data_37: .asciiz "Function call in a void instance" .word 0 -data_38: .asciiz "RuntimeError: Function call in a void instance" +data_38: .asciiz "Function call in a void instance" .word 0 -data_39: .asciiz "RuntimeError: void in switch case" +data_39: .asciiz "Void isntance found in switch case" .word 0 -data_40: .asciiz "RuntimeError: Case statement without a match branch" +data_40: .asciiz "Switch Case without valid branches" .word 0 data_41: .asciiz "- dynamic type was Article -\n" .word 0 -data_42: .asciiz "RuntimeError: Function call in a void instance" +data_42: .asciiz "Function call in a void instance" .word 0 data_43: .asciiz "- dynamic type was Book -\n" .word 0 -data_44: .asciiz "RuntimeError: Function call in a void instance" +data_44: .asciiz "Function call in a void instance" .word 0 -data_45: .asciiz "RuntimeError: Function call in a void instance" +data_45: .asciiz "Function call in a void instance" .word 0 data_46: .asciiz "Compilers, Principles, Techniques, and Tools" .word 0 data_47: .asciiz "Aho, Sethi, and Ullman" .word 0 -data_48: .asciiz "RuntimeError: Function call in a void instance" +data_48: .asciiz "Function call in a void instance" .word 0 data_49: .asciiz "The Top 100 CD_ROMs" .word 0 @@ -104,13 +104,13 @@ data_50: .asciiz "Ulanoff" .word 0 data_51: .asciiz "PC Magazine" .word 0 -data_52: .asciiz "RuntimeError: Function call in a void instance" +data_52: .asciiz "Function call in a void instance" .word 0 -data_53: .asciiz "RuntimeError: Function call in a void instance" +data_53: .asciiz "Function call in a void instance" .word 0 -data_54: .asciiz "RuntimeError: Function call in a void instance" +data_54: .asciiz "Function call in a void instance" .word 0 -data_55: .asciiz "RuntimeError: Function call in a void instance" +data_55: .asciiz "Function call in a void instance" types_table: @@ -143,7 +143,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -160,7 +160,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -176,7 +176,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -191,7 +191,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -205,7 +205,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -225,8 +225,8 @@ type_6_dispatch: .word function_out_string_at_IO .word function_initBook_at_Book .word function_print_at_Book -.word __init_attr_at_Book -.word __init_at_Book +.word __attributes_ctor_Book +.word __ctor_Book type_6_prototype: .word 5 @@ -248,8 +248,8 @@ type_7_dispatch: .word function_initBook_at_Book .word function_print_at_Article .word function_initArticle_at_Article -.word __init_attr_at_Article -.word __init_at_Article +.word __attributes_ctor_Article +.word __ctor_Article type_7_prototype: .word 6 @@ -274,8 +274,8 @@ type_8_dispatch: .word function_cons_at_BookList .word function_isNil_at_BookList .word function_print_list_at_BookList -.word __init_attr_at_BookList -.word __init_at_BookList +.word __attributes_ctor_BookList +.word __ctor_BookList type_8_prototype: .word 7 @@ -298,8 +298,8 @@ type_9_dispatch: .word function_isNil_at_Cons .word function_print_list_at_Cons .word function_init_at_Cons -.word __init_attr_at_Cons -.word __init_at_Cons +.word __attributes_ctor_Cons +.word __ctor_Cons type_9_prototype: .word 8 @@ -323,8 +323,8 @@ type_10_dispatch: .word function_cons_at_BookList .word function_isNil_at_Nil .word function_print_list_at_Nil -.word __init_attr_at_Nil -.word __init_at_Nil +.word __attributes_ctor_Nil +.word __ctor_Nil type_10_prototype: .word 9 @@ -338,8 +338,8 @@ type_11_dispatch: .word function_copy_at_Object .word function_type_name_at_Object .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_11_prototype: .word 10 @@ -351,7 +351,7 @@ type_11_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -432,7 +432,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -467,7 +467,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -549,7 +549,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -573,7 +573,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -584,7 +584,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -613,7 +613,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -682,7 +682,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -741,7 +741,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -752,7 +752,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -783,7 +783,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -821,7 +821,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -838,19 +838,19 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_Book: +__attributes_ctor_Book: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 la $t0 data_13 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -16($fp) lw $t0 0($fp) @@ -861,14 +861,14 @@ sw $t0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -881,7 +881,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t0 4($fp) lw $t1 8($fp) addi $t1 $t1 16 @@ -891,7 +891,7 @@ lw $t1 8($fp) addi $t1 $t1 12 sw $t0 0($t1) lw $v0 8($fp) -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -904,13 +904,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -88 +addi $sp $sp -80 la $t0 data_16 sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -84($fp) la $t0 data_17 @@ -918,7 +918,7 @@ sw $t0 -80($fp) lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -76($fp) lw $t0 0($fp) @@ -1021,7 +1021,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -44($fp) la $t0 data_22 @@ -1029,7 +1029,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -36($fp) lw $t0 0($fp) @@ -1128,20 +1128,20 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 0($fp) -addi $sp $sp 88 +addi $sp $sp 80 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Book: +__ctor_Book: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 5 sll $t0 $t0 2 la $t1 prototype_table @@ -1158,28 +1158,28 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Book +jal __attributes_ctor_Book addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Article: +__attributes_ctor_Article: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -8 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Book +jal __attributes_ctor_Book addi $sp $sp 4 sw $v0 -16($fp) la $t0 data_13 @@ -1187,14 +1187,14 @@ sw $t0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 20($t0) lw $v0 0($fp) -addi $sp $sp 20 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1207,7 +1207,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -8 lw $t0 12($fp) li $t1 0 seq $t0 $t0 $t1 @@ -1246,7 +1246,7 @@ lw $t1 12($fp) addi $t1 $t1 20 sw $t0 0($t1) lw $v0 12($fp) -addi $sp $sp 20 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1259,7 +1259,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -60 +addi $sp $sp -48 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -1285,7 +1285,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -44($fp) la $t0 data_29 @@ -1293,7 +1293,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -36($fp) lw $t0 0($fp) @@ -1392,20 +1392,20 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 0($fp) -addi $sp $sp 60 +addi $sp $sp 48 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Article: +__ctor_Article: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -8 li $t0 6 sll $t0 $t0 2 la $t1 prototype_table @@ -1422,18 +1422,18 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Article +jal __attributes_ctor_Article addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 20 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_BookList: +__attributes_ctor_BookList: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1485,7 +1485,7 @@ sw $v0 -16($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -1503,7 +1503,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -16 -jal __init_at_Cons +jal __ctor_Cons sw $v0 -20($fp) lw $t0 -20($fp) sw $t0 -24($fp) @@ -1582,7 +1582,7 @@ lw $t0 0($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -16($fp) -jal __init_at_Book +jal __ctor_Book sw $v0 -12($fp) lw $v0 -12($fp) addi $sp $sp 12 @@ -1626,7 +1626,7 @@ lw $t0 0($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -16($fp) -jal __init_at_BookList +jal __ctor_BookList sw $v0 -12($fp) lw $v0 -12($fp) addi $sp $sp 12 @@ -1678,7 +1678,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_BookList: +__ctor_BookList: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1701,7 +1701,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_BookList +jal __attributes_ctor_BookList addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -1712,17 +1712,17 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Cons: +__attributes_ctor_Cons: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -12 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_BookList +jal __attributes_ctor_BookList addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -1732,7 +1732,7 @@ lw $t0 0($fp) lw $t1 -12($fp) sw $t1 16($t0) lw $v0 0($fp) -addi $sp $sp 20 +addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1745,15 +1745,15 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -4 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1766,7 +1766,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t0 4($fp) lw $t1 8($fp) addi $t1 $t1 12 @@ -1776,7 +1776,7 @@ lw $t1 8($fp) addi $t1 $t1 16 sw $t0 0($t1) lw $v0 8($fp) -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1789,14 +1789,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1809,14 +1809,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1829,7 +1829,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -84 +addi $sp $sp -76 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1926,7 +1926,7 @@ sw $t0 -52($fp) lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -48($fp) lw $t0 0($fp) @@ -1970,7 +1970,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -28($fp) lw $t0 0($fp) @@ -2050,20 +2050,20 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 84 +addi $sp $sp 76 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Cons: +__ctor_Cons: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 8 sll $t0 $t0 2 la $t1 prototype_table @@ -2080,18 +2080,18 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Cons +jal __attributes_ctor_Cons addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Nil: +__attributes_ctor_Nil: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -2101,7 +2101,7 @@ addi $sp $sp -4 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_BookList +jal __attributes_ctor_BookList addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) @@ -2122,7 +2122,7 @@ addi $sp $sp -4 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -2143,7 +2143,7 @@ addi $sp $sp -4 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -2154,7 +2154,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Nil: +__ctor_Nil: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -2177,7 +2177,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Nil +jal __attributes_ctor_Nil addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -2188,18 +2188,18 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 lw $t0 0($fp) lw $t1 -12($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2212,13 +2212,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -104 +addi $sp $sp -100 la $t0 data_46 sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -100($fp) la $t0 data_47 @@ -2226,10 +2226,10 @@ sw $t0 -96($fp) lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -92($fp) -jal __init_at_Book +jal __ctor_Book sw $v0 -88($fp) lw $t0 -88($fp) li $t1 0 @@ -2271,7 +2271,7 @@ sw $t0 -72($fp) lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -68($fp) la $t0 data_50 @@ -2279,7 +2279,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -60($fp) la $t0 data_51 @@ -2287,10 +2287,10 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -52($fp) -jal __init_at_Article +jal __ctor_Article sw $v0 -48($fp) lw $t0 -48($fp) li $t1 0 @@ -2330,7 +2330,7 @@ addi $sp $sp 16 sw $v0 -40($fp) lw $t0 -40($fp) sw $t0 -76($fp) -jal __init_at_Nil +jal __ctor_Nil sw $v0 -36($fp) lw $t0 -36($fp) li $t1 0 @@ -2439,20 +2439,20 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 104 +addi $sp $sp 100 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 10 sll $t0 $t0 2 la $t1 prototype_table @@ -2469,11 +2469,11 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index 5c2618fe9..4df3ff1e9 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -22,39 +22,39 @@ data_9: .asciiz "" .word 0 data_10: .asciiz "Abort called from class " .word 0 -data_11: .asciiz "Substring out of range" +data_11: .asciiz "Index out of range exception" .word 0 data_12: .asciiz "\n" .word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" +data_13: .asciiz "Function call in a void instance" .word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" +data_14: .asciiz "Function call in a void instance" .word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" +data_15: .asciiz "Function call in a void instance" .word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" +data_16: .asciiz "Function call in a void instance" .word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" +data_17: .asciiz "Function call in a void instance" .word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" +data_18: .asciiz "Function call in a void instance" .word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" +data_19: .asciiz "Function call in a void instance" .word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" +data_20: .asciiz "Function call in a void instance" .word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" +data_21: .asciiz "Function call in a void instance" .word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" +data_22: .asciiz "Function call in a void instance" .word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" +data_23: .asciiz "Function call in a void instance" .word 0 data_24: .asciiz "X" .word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" +data_25: .asciiz "Function call in a void instance" .word 0 data_26: .asciiz "X" .word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" +data_27: .asciiz "Function call in a void instance" .word 0 data_28: .asciiz "X" .word 0 @@ -62,21 +62,21 @@ data_29: .asciiz "." .word 0 data_30: .asciiz "X" .word 0 -data_31: .asciiz "RuntimeError: Function call in a void instance" +data_31: .asciiz "Function call in a void instance" .word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" +data_32: .asciiz "Function call in a void instance" .word 0 -data_33: .asciiz "RuntimeError: Function call in a void instance" +data_33: .asciiz "Function call in a void instance" .word 0 data_34: .asciiz " X " .word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" +data_35: .asciiz "Function call in a void instance" .word 0 -data_36: .asciiz "RuntimeError: Function call in a void instance" +data_36: .asciiz "Function call in a void instance" .word 0 -data_37: .asciiz "RuntimeError: Function call in a void instance" +data_37: .asciiz "Function call in a void instance" .word 0 -data_38: .asciiz "RuntimeError: Function call in a void instance" +data_38: .asciiz "Function call in a void instance" types_table: @@ -101,7 +101,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -118,7 +118,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -134,7 +134,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -149,7 +149,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -163,7 +163,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -189,8 +189,8 @@ type_6_dispatch: .word function_init_at_CellularAutomaton .word function_num_cells_at_CellularAutomaton .word function_print_at_CellularAutomaton -.word __init_attr_at_CellularAutomaton -.word __init_at_CellularAutomaton +.word __attributes_ctor_CellularAutomaton +.word __ctor_CellularAutomaton type_6_prototype: .word 5 @@ -205,8 +205,8 @@ type_7_dispatch: .word function_copy_at_Object .word function_type_name_at_Object .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_7_prototype: .word 6 @@ -218,7 +218,7 @@ type_7_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -299,7 +299,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -334,7 +334,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -416,7 +416,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -440,7 +440,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -451,7 +451,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -480,7 +480,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -549,7 +549,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -608,7 +608,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -619,7 +619,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -650,7 +650,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -688,7 +688,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -705,26 +705,26 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_CellularAutomaton: +__attributes_ctor_CellularAutomaton: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 la $t0 data_9 sw $t0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -737,13 +737,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -4 +addi $sp $sp 0 lw $t0 0($fp) lw $t1 4($fp) addi $t1 $t1 12 sw $t0 0($t1) lw $v0 4($fp) -addi $sp $sp 4 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -756,13 +756,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -28 +addi $sp $sp -24 la $t0 data_12 sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -28($fp) lw $t4 0($fp) @@ -841,7 +841,7 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 0($fp) -addi $sp $sp 28 +addi $sp $sp 24 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -854,7 +854,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -898,7 +898,7 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -911,11 +911,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -12 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t4 4($fp) @@ -967,7 +967,7 @@ jalr $ra $t0 addi $sp $sp 12 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -980,11 +980,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -116 +addi $sp $sp -112 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -76($fp) lw $t0 0($fp) @@ -993,7 +993,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -100($fp) +sw $t1 -104($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1001,25 +1001,25 @@ sw $t0 -96($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -92($fp) +sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -88($fp) -lw $t0 -100($fp) +sw $t0 -92($fp) +lw $t0 -104($fp) lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -84($fp) lw $t0 -84($fp) bne $t0 $zero label_11 -lw $t0 -100($fp) -lw $t1 -92($fp) +lw $t0 -104($fp) +lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -84($fp) lw $t0 -84($fp) bne $t0 $zero label_12 -lw $t0 -100($fp) -lw $t1 -88($fp) +lw $t0 -104($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -84($fp) lw $t0 -84($fp) @@ -1035,9 +1035,9 @@ lw $t1 12($t0) sw $t1 -108($fp) lw $t0 -76($fp) lw $t1 12($t0) -sw $t1 -104($fp) +sw $t1 -100($fp) lw $t0 -108($fp) -lw $t1 -104($fp) +lw $t1 -100($fp) seq $t0 $t0 $t1 sw $t0 -80($fp) j label_14 @@ -1047,10 +1047,10 @@ lw $t1 12($t0) sw $t1 -108($fp) lw $t0 -76($fp) lw $t1 12($t0) -sw $t1 -104($fp) +sw $t1 -100($fp) lw $t0 -108($fp) move $a0 $t0 -lw $t0 -104($fp) +lw $t0 -100($fp) move $a1 $t0 jal equal_str sw $v0 -80($fp) @@ -1061,9 +1061,9 @@ lw $t1 12($t0) sw $t1 -108($fp) lw $t0 -76($fp) lw $t1 12($t0) -sw $t1 -104($fp) +sw $t1 -100($fp) lw $t0 -108($fp) -lw $t1 -104($fp) +lw $t1 -100($fp) seq $t0 $t0 $t1 sw $t0 -80($fp) j label_14 @@ -1071,7 +1071,7 @@ label_14: lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -112($fp) lw $t0 -112($fp) @@ -1085,7 +1085,7 @@ sw $t1 -68($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 -56($fp) @@ -1098,7 +1098,7 @@ sw $t0 -60($fp) lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 4($fp) @@ -1168,7 +1168,7 @@ sw $t1 -40($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -1181,7 +1181,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -44($fp) lw $t0 4($fp) @@ -1218,7 +1218,7 @@ lw $t0 -12($fp) sw $t0 -120($fp) label_22: lw $v0 -120($fp) -addi $sp $sp 116 +addi $sp $sp 112 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1231,7 +1231,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -116 +addi $sp $sp -112 lw $t0 4($fp) li $t1 0 seq $t0 $t0 $t1 @@ -1265,7 +1265,7 @@ sw $t1 -72($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -1278,7 +1278,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -76($fp) lw $t0 0($fp) @@ -1287,7 +1287,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -100($fp) +sw $t1 -104($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1295,25 +1295,25 @@ sw $t0 -96($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -92($fp) +sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -88($fp) -lw $t0 -100($fp) +sw $t0 -92($fp) +lw $t0 -104($fp) lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -84($fp) lw $t0 -84($fp) bne $t0 $zero label_25 -lw $t0 -100($fp) -lw $t1 -92($fp) +lw $t0 -104($fp) +lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -84($fp) lw $t0 -84($fp) bne $t0 $zero label_26 -lw $t0 -100($fp) -lw $t1 -88($fp) +lw $t0 -104($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -84($fp) lw $t0 -84($fp) @@ -1329,9 +1329,9 @@ lw $t1 12($t0) sw $t1 -108($fp) lw $t0 -76($fp) lw $t1 12($t0) -sw $t1 -104($fp) +sw $t1 -100($fp) lw $t0 -108($fp) -lw $t1 -104($fp) +lw $t1 -100($fp) seq $t0 $t0 $t1 sw $t0 -80($fp) j label_28 @@ -1341,10 +1341,10 @@ lw $t1 12($t0) sw $t1 -108($fp) lw $t0 -76($fp) lw $t1 12($t0) -sw $t1 -104($fp) +sw $t1 -100($fp) lw $t0 -108($fp) move $a0 $t0 -lw $t0 -104($fp) +lw $t0 -100($fp) move $a1 $t0 jal equal_str sw $v0 -80($fp) @@ -1355,9 +1355,9 @@ lw $t1 12($t0) sw $t1 -108($fp) lw $t0 -76($fp) lw $t1 12($t0) -sw $t1 -104($fp) +sw $t1 -100($fp) lw $t0 -108($fp) -lw $t1 -104($fp) +lw $t1 -100($fp) seq $t0 $t0 $t1 sw $t0 -80($fp) j label_28 @@ -1365,7 +1365,7 @@ label_28: lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -112($fp) lw $t0 -112($fp) @@ -1379,7 +1379,7 @@ sw $t1 -44($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) @@ -1392,7 +1392,7 @@ sw $t0 -36($fp) lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 4($fp) @@ -1432,7 +1432,7 @@ label_31: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t0 4($fp) @@ -1469,7 +1469,7 @@ lw $t0 -12($fp) sw $t0 -120($fp) label_34: lw $v0 -120($fp) -addi $sp $sp 116 +addi $sp $sp 112 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1482,7 +1482,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -304 +addi $sp $sp -300 lw $t0 4($fp) li $t1 0 seq $t0 $t0 $t1 @@ -1518,7 +1518,7 @@ sw $t0 -180($fp) lw $t0 -180($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -176($fp) lw $t0 -184($fp) @@ -1527,7 +1527,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -212($fp) +sw $t1 -216($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1535,25 +1535,25 @@ sw $t0 -208($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -204($fp) +sw $t0 -200($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -200($fp) -lw $t0 -212($fp) +sw $t0 -204($fp) +lw $t0 -216($fp) lw $t1 -208($fp) seq $t0 $t0 $t1 sw $t0 -196($fp) lw $t0 -196($fp) bne $t0 $zero label_37 -lw $t0 -212($fp) -lw $t1 -204($fp) +lw $t0 -216($fp) +lw $t1 -200($fp) seq $t0 $t0 $t1 sw $t0 -196($fp) lw $t0 -196($fp) bne $t0 $zero label_38 -lw $t0 -212($fp) -lw $t1 -200($fp) +lw $t0 -216($fp) +lw $t1 -204($fp) seq $t0 $t0 $t1 sw $t0 -196($fp) lw $t0 -196($fp) @@ -1569,9 +1569,9 @@ lw $t1 12($t0) sw $t1 -220($fp) lw $t0 -176($fp) lw $t1 12($t0) -sw $t1 -216($fp) +sw $t1 -212($fp) lw $t0 -220($fp) -lw $t1 -216($fp) +lw $t1 -212($fp) seq $t0 $t0 $t1 sw $t0 -192($fp) j label_40 @@ -1581,10 +1581,10 @@ lw $t1 12($t0) sw $t1 -220($fp) lw $t0 -176($fp) lw $t1 12($t0) -sw $t1 -216($fp) +sw $t1 -212($fp) lw $t0 -220($fp) move $a0 $t0 -lw $t0 -216($fp) +lw $t0 -212($fp) move $a1 $t0 jal equal_str sw $v0 -192($fp) @@ -1595,9 +1595,9 @@ lw $t1 12($t0) sw $t1 -220($fp) lw $t0 -176($fp) lw $t1 12($t0) -sw $t1 -216($fp) +sw $t1 -212($fp) lw $t0 -220($fp) -lw $t1 -216($fp) +lw $t1 -212($fp) seq $t0 $t0 $t1 sw $t0 -192($fp) j label_40 @@ -1605,7 +1605,7 @@ label_40: lw $t0 -192($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -224($fp) lw $t0 -224($fp) @@ -1616,7 +1616,7 @@ bne $t0 $zero label_41 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -172($fp) lw $t0 -172($fp) @@ -1626,7 +1626,7 @@ label_41: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -168($fp) lw $t0 -168($fp) @@ -1670,7 +1670,7 @@ sw $t0 -112($fp) lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -108($fp) lw $t0 -116($fp) @@ -1679,7 +1679,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -144($fp) +sw $t1 -148($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1687,25 +1687,25 @@ sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -136($fp) +sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -132($fp) -lw $t0 -144($fp) +sw $t0 -136($fp) +lw $t0 -148($fp) lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) bne $t0 $zero label_45 -lw $t0 -144($fp) -lw $t1 -136($fp) +lw $t0 -148($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) bne $t0 $zero label_46 -lw $t0 -144($fp) -lw $t1 -132($fp) +lw $t0 -148($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) @@ -1721,9 +1721,9 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) -lw $t1 -148($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) j label_48 @@ -1733,10 +1733,10 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) move $a0 $t0 -lw $t0 -148($fp) +lw $t0 -144($fp) move $a1 $t0 jal equal_str sw $v0 -124($fp) @@ -1747,9 +1747,9 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -108($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) -lw $t1 -148($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) j label_48 @@ -1757,7 +1757,7 @@ label_48: lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -156($fp) lw $t0 -156($fp) @@ -1768,7 +1768,7 @@ bne $t0 $zero label_49 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -104($fp) lw $t0 -104($fp) @@ -1778,7 +1778,7 @@ label_49: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -100($fp) lw $t0 -100($fp) @@ -1794,7 +1794,7 @@ sw $t0 -236($fp) lw $t0 -236($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -248($fp) lw $t0 -248($fp) @@ -1835,7 +1835,7 @@ sw $t0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -40($fp) lw $t0 -48($fp) @@ -1844,7 +1844,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -76($fp) +sw $t1 -80($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1852,25 +1852,25 @@ sw $t0 -72($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -68($fp) +sw $t0 -64($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -64($fp) -lw $t0 -76($fp) +sw $t0 -68($fp) +lw $t0 -80($fp) lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -60($fp) lw $t0 -60($fp) bne $t0 $zero label_53 -lw $t0 -76($fp) -lw $t1 -68($fp) +lw $t0 -80($fp) +lw $t1 -64($fp) seq $t0 $t0 $t1 sw $t0 -60($fp) lw $t0 -60($fp) bne $t0 $zero label_54 -lw $t0 -76($fp) -lw $t1 -64($fp) +lw $t0 -80($fp) +lw $t1 -68($fp) seq $t0 $t0 $t1 sw $t0 -60($fp) lw $t0 -60($fp) @@ -1886,9 +1886,9 @@ lw $t1 12($t0) sw $t1 -84($fp) lw $t0 -40($fp) lw $t1 12($t0) -sw $t1 -80($fp) +sw $t1 -76($fp) lw $t0 -84($fp) -lw $t1 -80($fp) +lw $t1 -76($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) j label_56 @@ -1898,10 +1898,10 @@ lw $t1 12($t0) sw $t1 -84($fp) lw $t0 -40($fp) lw $t1 12($t0) -sw $t1 -80($fp) +sw $t1 -76($fp) lw $t0 -84($fp) move $a0 $t0 -lw $t0 -80($fp) +lw $t0 -76($fp) move $a1 $t0 jal equal_str sw $v0 -56($fp) @@ -1912,9 +1912,9 @@ lw $t1 12($t0) sw $t1 -84($fp) lw $t0 -40($fp) lw $t1 12($t0) -sw $t1 -80($fp) +sw $t1 -76($fp) lw $t0 -84($fp) -lw $t1 -80($fp) +lw $t1 -76($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) j label_56 @@ -1922,7 +1922,7 @@ label_56: lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -88($fp) lw $t0 -88($fp) @@ -1933,7 +1933,7 @@ bne $t0 $zero label_57 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -1943,7 +1943,7 @@ label_57: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) @@ -1959,13 +1959,13 @@ sw $t0 -252($fp) lw $t0 -252($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -264($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -264($fp) @@ -1974,7 +1974,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -288($fp) +sw $t1 -292($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1982,25 +1982,25 @@ sw $t0 -284($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -280($fp) +sw $t0 -276($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -276($fp) -lw $t0 -288($fp) +sw $t0 -280($fp) +lw $t0 -292($fp) lw $t1 -284($fp) seq $t0 $t0 $t1 sw $t0 -272($fp) lw $t0 -272($fp) bne $t0 $zero label_59 -lw $t0 -288($fp) -lw $t1 -280($fp) +lw $t0 -292($fp) +lw $t1 -276($fp) seq $t0 $t0 $t1 sw $t0 -272($fp) lw $t0 -272($fp) bne $t0 $zero label_60 -lw $t0 -288($fp) -lw $t1 -276($fp) +lw $t0 -292($fp) +lw $t1 -280($fp) seq $t0 $t0 $t1 sw $t0 -272($fp) lw $t0 -272($fp) @@ -2016,9 +2016,9 @@ lw $t1 12($t0) sw $t1 -296($fp) lw $t0 -28($fp) lw $t1 12($t0) -sw $t1 -292($fp) +sw $t1 -288($fp) lw $t0 -296($fp) -lw $t1 -292($fp) +lw $t1 -288($fp) seq $t0 $t0 $t1 sw $t0 -268($fp) j label_62 @@ -2028,10 +2028,10 @@ lw $t1 12($t0) sw $t1 -296($fp) lw $t0 -28($fp) lw $t1 12($t0) -sw $t1 -292($fp) +sw $t1 -288($fp) lw $t0 -296($fp) move $a0 $t0 -lw $t0 -292($fp) +lw $t0 -288($fp) move $a1 $t0 jal equal_str sw $v0 -268($fp) @@ -2042,9 +2042,9 @@ lw $t1 12($t0) sw $t1 -296($fp) lw $t0 -28($fp) lw $t1 12($t0) -sw $t1 -292($fp) +sw $t1 -288($fp) lw $t0 -296($fp) -lw $t1 -292($fp) +lw $t1 -288($fp) seq $t0 $t0 $t1 sw $t0 -268($fp) j label_62 @@ -2052,7 +2052,7 @@ label_62: lw $t0 -268($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -300($fp) lw $t0 -300($fp) @@ -2065,7 +2065,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -2077,14 +2077,14 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -308($fp) label_64: lw $v0 -308($fp) -addi $sp $sp 304 +addi $sp $sp 300 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2097,11 +2097,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -80 +addi $sp $sp -76 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 0($fp) @@ -2138,7 +2138,7 @@ sw $t0 -68($fp) lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -68($fp) label_67: @@ -2155,7 +2155,7 @@ sw $t1 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -2233,7 +2233,7 @@ sw $t1 -24($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -2246,7 +2246,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -2258,20 +2258,20 @@ lw $t1 0($fp) addi $t1 $t1 12 sw $t0 0($t1) lw $v0 0($fp) -addi $sp $sp 80 +addi $sp $sp 76 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_CellularAutomaton: +__ctor_CellularAutomaton: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 5 sll $t0 $t0 2 la $t1 prototype_table @@ -2288,29 +2288,29 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_CellularAutomaton +jal __attributes_ctor_CellularAutomaton addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 lw $t0 0($fp) lw $t1 -12($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2323,16 +2323,16 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -100 +addi $sp $sp -96 la $t0 data_34 sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -100($fp) -jal __init_at_CellularAutomaton +jal __ctor_CellularAutomaton sw $v0 -96($fp) lw $t0 -96($fp) li $t1 0 @@ -2413,7 +2413,7 @@ sw $v0 -80($fp) li $t0 20 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) @@ -2422,7 +2422,7 @@ label_78: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 -48($fp) @@ -2438,7 +2438,7 @@ sw $t1 -52($fp) lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -64($fp) lw $t0 -64($fp) @@ -2538,7 +2538,7 @@ sw $t1 -24($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -2551,7 +2551,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -2559,20 +2559,20 @@ sw $t0 -76($fp) j label_78 label_84: lw $v0 0($fp) -addi $sp $sp 100 +addi $sp $sp 96 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 6 sll $t0 $t0 2 la $t1 prototype_table @@ -2589,11 +2589,11 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index 5b3a59087..04afa7792 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -22,37 +22,37 @@ data_9: .asciiz "" .word 0 data_10: .asciiz "Abort called from class " .word 0 -data_11: .asciiz "Substring out of range" +data_11: .asciiz "Index out of range exception" .word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" +data_12: .asciiz "Function call in a void instance" .word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" +data_13: .asciiz "Function call in a void instance" .word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" +data_14: .asciiz "Function call in a void instance" .word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" +data_15: .asciiz "Function call in a void instance" .word 0 data_16: .asciiz "=(\n" .word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" +data_17: .asciiz "Function call in a void instance" .word 0 data_18: .asciiz "=)\n" .word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" +data_19: .asciiz "Function call in a void instance" .word 0 data_20: .asciiz "I" .word 0 data_21: .asciiz "+" .word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" +data_22: .asciiz "Function call in a void instance" .word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" +data_23: .asciiz "Function call in a void instance" .word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" +data_24: .asciiz "Function call in a void instance" .word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" +data_25: .asciiz "Function call in a void instance" .word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" +data_26: .asciiz "Function call in a void instance" types_table: @@ -77,7 +77,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -94,7 +94,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -110,7 +110,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -125,7 +125,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -139,7 +139,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -158,8 +158,8 @@ type_6_dispatch: .word function_out_int_at_IO .word function_out_string_at_IO .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_6_prototype: .word 5 @@ -181,8 +181,8 @@ type_7_dispatch: .word function_reflect_0_at_Complex .word function_reflect_X_at_Complex .word function_reflect_Y_at_Complex -.word __init_attr_at_Complex -.word __init_at_Complex +.word __attributes_ctor_Complex +.word __ctor_Complex type_7_prototype: .word 6 @@ -195,7 +195,7 @@ type_7_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -276,7 +276,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -311,7 +311,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -393,7 +393,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -417,7 +417,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -428,7 +428,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -457,7 +457,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -526,7 +526,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -585,7 +585,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -596,7 +596,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -627,7 +627,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -665,7 +665,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -682,7 +682,7 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -707,16 +707,16 @@ addi $sp $sp -124 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -128($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -124($fp) -jal __init_at_Complex +jal __ctor_Complex sw $v0 -120($fp) lw $t0 -120($fp) li $t1 0 @@ -840,7 +840,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -88($fp) +sw $t1 -92($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -848,25 +848,25 @@ sw $t0 -84($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -80($fp) +sw $t0 -76($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -76($fp) -lw $t0 -88($fp) +sw $t0 -80($fp) +lw $t0 -92($fp) lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) lw $t0 -72($fp) bne $t0 $zero label_11 -lw $t0 -88($fp) -lw $t1 -80($fp) +lw $t0 -92($fp) +lw $t1 -76($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) lw $t0 -72($fp) bne $t0 $zero label_12 -lw $t0 -88($fp) -lw $t1 -76($fp) +lw $t0 -92($fp) +lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) lw $t0 -72($fp) @@ -882,9 +882,9 @@ lw $t1 12($t0) sw $t1 -96($fp) lw $t0 -44($fp) lw $t1 12($t0) -sw $t1 -92($fp) +sw $t1 -88($fp) lw $t0 -96($fp) -lw $t1 -92($fp) +lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -68($fp) j label_14 @@ -894,10 +894,10 @@ lw $t1 12($t0) sw $t1 -96($fp) lw $t0 -44($fp) lw $t1 12($t0) -sw $t1 -92($fp) +sw $t1 -88($fp) lw $t0 -96($fp) move $a0 $t0 -lw $t0 -92($fp) +lw $t0 -88($fp) move $a1 $t0 jal equal_str sw $v0 -68($fp) @@ -908,9 +908,9 @@ lw $t1 12($t0) sw $t1 -96($fp) lw $t0 -44($fp) lw $t1 12($t0) -sw $t1 -92($fp) +sw $t1 -88($fp) lw $t0 -96($fp) -lw $t1 -92($fp) +lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -68($fp) j label_14 @@ -918,7 +918,7 @@ label_14: lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -100($fp) lw $t0 -100($fp) @@ -931,7 +931,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -36($fp) lw $t0 0($fp) @@ -973,7 +973,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -1017,7 +1017,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1040,7 +1040,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -1051,17 +1051,17 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Complex: +__attributes_ctor_Complex: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -16($fp) lw $t0 0($fp) @@ -1070,14 +1070,14 @@ sw $t1 12($t0) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 16($t0) lw $v0 0($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1090,7 +1090,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -80 +addi $sp $sp -72 lw $t4 8($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1102,7 +1102,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -68($fp) +sw $t1 -72($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1110,25 +1110,25 @@ sw $t0 -64($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -60($fp) +sw $t0 -56($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -56($fp) -lw $t0 -68($fp) +sw $t0 -60($fp) +lw $t0 -72($fp) lw $t1 -64($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) lw $t0 -52($fp) bne $t0 $zero label_21 -lw $t0 -68($fp) -lw $t1 -60($fp) +lw $t0 -72($fp) +lw $t1 -56($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) lw $t0 -52($fp) bne $t0 $zero label_22 -lw $t0 -68($fp) -lw $t1 -56($fp) +lw $t0 -72($fp) +lw $t1 -60($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) lw $t0 -52($fp) @@ -1154,9 +1154,9 @@ lw $t1 12($t0) sw $t1 -76($fp) lw $t0 4($fp) lw $t1 12($t0) -sw $t1 -72($fp) +sw $t1 -68($fp) lw $t0 -76($fp) -lw $t1 -72($fp) +lw $t1 -68($fp) seq $t0 $t0 $t1 sw $t0 -48($fp) j label_24 @@ -1171,10 +1171,10 @@ lw $t1 12($t0) sw $t1 -76($fp) lw $t0 4($fp) lw $t1 12($t0) -sw $t1 -72($fp) +sw $t1 -68($fp) lw $t0 -76($fp) move $a0 $t0 -lw $t0 -72($fp) +lw $t0 -68($fp) move $a1 $t0 jal equal_str sw $v0 -48($fp) @@ -1190,9 +1190,9 @@ lw $t1 12($t0) sw $t1 -76($fp) lw $t0 4($fp) lw $t1 12($t0) -sw $t1 -72($fp) +sw $t1 -68($fp) lw $t0 -76($fp) -lw $t1 -72($fp) +lw $t1 -68($fp) seq $t0 $t0 $t1 sw $t0 -48($fp) j label_24 @@ -1200,7 +1200,7 @@ label_24: lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -80($fp) lw $t4 8($fp) @@ -1214,7 +1214,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -32($fp) +sw $t1 -36($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1222,25 +1222,25 @@ sw $t0 -28($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -24($fp) +sw $t0 -20($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -20($fp) -lw $t0 -32($fp) +sw $t0 -24($fp) +lw $t0 -36($fp) lw $t1 -28($fp) seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) bne $t0 $zero label_25 -lw $t0 -32($fp) -lw $t1 -24($fp) +lw $t0 -36($fp) +lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) bne $t0 $zero label_26 -lw $t0 -32($fp) -lw $t1 -20($fp) +lw $t0 -36($fp) +lw $t1 -24($fp) seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) @@ -1266,9 +1266,9 @@ lw $t1 12($t0) sw $t1 -40($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -36($fp) +sw $t1 -32($fp) lw $t0 -40($fp) -lw $t1 -36($fp) +lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -12($fp) j label_28 @@ -1283,10 +1283,10 @@ lw $t1 12($t0) sw $t1 -40($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -36($fp) +sw $t1 -32($fp) lw $t0 -40($fp) move $a0 $t0 -lw $t0 -36($fp) +lw $t0 -32($fp) move $a1 $t0 jal equal_str sw $v0 -12($fp) @@ -1302,9 +1302,9 @@ lw $t1 12($t0) sw $t1 -40($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -36($fp) +sw $t1 -32($fp) lw $t0 -40($fp) -lw $t1 -36($fp) +lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -12($fp) j label_28 @@ -1312,11 +1312,11 @@ label_28: lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -44($fp) lw $v0 8($fp) -addi $sp $sp 80 +addi $sp $sp 72 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1329,11 +1329,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -112 +addi $sp $sp -104 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -68($fp) lw $t4 0($fp) @@ -1347,7 +1347,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -92($fp) +sw $t1 -96($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1355,25 +1355,25 @@ sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -84($fp) +sw $t0 -80($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -80($fp) -lw $t0 -92($fp) +sw $t0 -84($fp) +lw $t0 -96($fp) lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_29 -lw $t0 -92($fp) -lw $t1 -84($fp) +lw $t0 -96($fp) +lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_30 -lw $t0 -92($fp) -lw $t1 -80($fp) +lw $t0 -96($fp) +lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) @@ -1399,9 +1399,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_32 @@ -1416,10 +1416,10 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) move $a0 $t0 -lw $t0 -96($fp) +lw $t0 -92($fp) move $a1 $t0 jal equal_str sw $v0 -72($fp) @@ -1435,9 +1435,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_32 @@ -1445,7 +1445,7 @@ label_32: lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -104($fp) lw $t0 -104($fp) @@ -1458,7 +1458,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -60($fp) la $t0 data_21 @@ -1466,7 +1466,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -52($fp) lw $t0 0($fp) @@ -1642,7 +1642,7 @@ lw $t0 -12($fp) sw $t0 -112($fp) label_44: lw $v0 -112($fp) -addi $sp $sp 112 +addi $sp $sp 104 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1655,7 +1655,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -104 +addi $sp $sp -96 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1671,7 +1671,7 @@ sw $t0 -60($fp) lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -68($fp) lw $t4 0($fp) @@ -1685,7 +1685,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -92($fp) +sw $t1 -96($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1693,25 +1693,25 @@ sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -84($fp) +sw $t0 -80($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -80($fp) -lw $t0 -92($fp) +sw $t0 -84($fp) +lw $t0 -96($fp) lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_45 -lw $t0 -92($fp) -lw $t1 -84($fp) +lw $t0 -96($fp) +lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_46 -lw $t0 -92($fp) -lw $t1 -80($fp) +lw $t0 -96($fp) +lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) @@ -1737,9 +1737,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_48 @@ -1754,10 +1754,10 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) move $a0 $t0 -lw $t0 -96($fp) +lw $t0 -92($fp) move $a1 $t0 jal equal_str sw $v0 -72($fp) @@ -1773,9 +1773,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_48 @@ -1783,7 +1783,7 @@ label_48: lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -104($fp) lw $t4 0($fp) @@ -1801,7 +1801,7 @@ sw $t0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t4 0($fp) @@ -1815,7 +1815,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -44($fp) +sw $t1 -48($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1823,25 +1823,25 @@ sw $t0 -40($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -36($fp) +sw $t0 -32($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -32($fp) -lw $t0 -44($fp) +sw $t0 -36($fp) +lw $t0 -48($fp) lw $t1 -40($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) bne $t0 $zero label_49 -lw $t0 -44($fp) -lw $t1 -36($fp) +lw $t0 -48($fp) +lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) bne $t0 $zero label_50 -lw $t0 -44($fp) -lw $t1 -32($fp) +lw $t0 -48($fp) +lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) @@ -1867,9 +1867,9 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) -lw $t1 -48($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) j label_52 @@ -1884,10 +1884,10 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) move $a0 $t0 -lw $t0 -48($fp) +lw $t0 -44($fp) move $a1 $t0 jal equal_str sw $v0 -24($fp) @@ -1903,9 +1903,9 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) -lw $t1 -48($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) j label_52 @@ -1913,11 +1913,11 @@ label_52: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -56($fp) lw $v0 0($fp) -addi $sp $sp 104 +addi $sp $sp 96 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1930,7 +1930,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -56 +addi $sp $sp -48 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1946,7 +1946,7 @@ sw $t0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t4 0($fp) @@ -1960,7 +1960,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -44($fp) +sw $t1 -48($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1968,25 +1968,25 @@ sw $t0 -40($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -36($fp) +sw $t0 -32($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -32($fp) -lw $t0 -44($fp) +sw $t0 -36($fp) +lw $t0 -48($fp) lw $t1 -40($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) bne $t0 $zero label_53 -lw $t0 -44($fp) -lw $t1 -36($fp) +lw $t0 -48($fp) +lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) bne $t0 $zero label_54 -lw $t0 -44($fp) -lw $t1 -32($fp) +lw $t0 -48($fp) +lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) @@ -2012,9 +2012,9 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) -lw $t1 -48($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) j label_56 @@ -2029,10 +2029,10 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) move $a0 $t0 -lw $t0 -48($fp) +lw $t0 -44($fp) move $a1 $t0 jal equal_str sw $v0 -24($fp) @@ -2048,9 +2048,9 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) -lw $t1 -48($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) j label_56 @@ -2058,11 +2058,11 @@ label_56: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -56($fp) lw $v0 0($fp) -addi $sp $sp 56 +addi $sp $sp 48 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2075,7 +2075,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -56 +addi $sp $sp -48 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2091,7 +2091,7 @@ sw $t0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t4 0($fp) @@ -2105,7 +2105,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -44($fp) +sw $t1 -48($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2113,25 +2113,25 @@ sw $t0 -40($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -36($fp) +sw $t0 -32($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -32($fp) -lw $t0 -44($fp) +sw $t0 -36($fp) +lw $t0 -48($fp) lw $t1 -40($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) bne $t0 $zero label_57 -lw $t0 -44($fp) -lw $t1 -36($fp) +lw $t0 -48($fp) +lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) bne $t0 $zero label_58 -lw $t0 -44($fp) -lw $t1 -32($fp) +lw $t0 -48($fp) +lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) @@ -2157,9 +2157,9 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) -lw $t1 -48($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) j label_60 @@ -2174,10 +2174,10 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) move $a0 $t0 -lw $t0 -48($fp) +lw $t0 -44($fp) move $a1 $t0 jal equal_str sw $v0 -24($fp) @@ -2193,9 +2193,9 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) -lw $t1 -48($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) j label_60 @@ -2203,24 +2203,24 @@ label_60: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -56($fp) lw $v0 0($fp) -addi $sp $sp 56 +addi $sp $sp 48 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Complex: +__ctor_Complex: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 6 sll $t0 $t0 2 la $t1 prototype_table @@ -2237,11 +2237,11 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Complex +jal __attributes_ctor_Complex addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index 45276198c..4f3a67e39 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -20,21 +20,21 @@ data_8: .asciiz "" .word 0 data_9: .asciiz "Abort called from class " .word 0 -data_10: .asciiz "Substring out of range" +data_10: .asciiz "Index out of range exception" .word 0 data_11: .asciiz "Enter n to find nth fibonacci number!\n" .word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" +data_12: .asciiz "Function call in a void instance" .word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" +data_13: .asciiz "Function call in a void instance" .word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" +data_14: .asciiz "Function call in a void instance" .word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" +data_15: .asciiz "Function call in a void instance" .word 0 data_16: .asciiz "\n" .word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" +data_17: .asciiz "Function call in a void instance" types_table: @@ -57,7 +57,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -74,7 +74,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -90,7 +90,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -105,7 +105,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -119,7 +119,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -139,8 +139,8 @@ type_6_dispatch: .word function_out_string_at_IO .word function_fib_at_Main .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_6_prototype: .word 5 @@ -151,7 +151,7 @@ type_6_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -232,7 +232,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -267,7 +267,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -349,7 +349,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -373,7 +373,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -384,7 +384,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -413,7 +413,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -482,7 +482,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -541,7 +541,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -552,7 +552,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -583,7 +583,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -621,7 +621,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -638,7 +638,7 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -665,7 +665,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -60($fp) lw $t0 0($fp) @@ -790,7 +790,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -841,7 +841,7 @@ addi $sp $sp -116 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -120($fp) lw $t0 -120($fp) @@ -849,7 +849,7 @@ sw $t0 -124($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -112($fp) lw $t0 -112($fp) @@ -857,7 +857,7 @@ sw $t0 -116($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -104($fp) lw $t0 -104($fp) @@ -866,7 +866,7 @@ label_13: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 0($fp) @@ -875,7 +875,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -72($fp) +sw $t1 -76($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -883,25 +883,25 @@ sw $t0 -68($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -64($fp) +sw $t0 -60($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -60($fp) -lw $t0 -72($fp) +sw $t0 -64($fp) +lw $t0 -76($fp) lw $t1 -68($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) lw $t0 -56($fp) bne $t0 $zero label_14 -lw $t0 -72($fp) -lw $t1 -64($fp) +lw $t0 -76($fp) +lw $t1 -60($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) lw $t0 -56($fp) bne $t0 $zero label_15 -lw $t0 -72($fp) -lw $t1 -60($fp) +lw $t0 -76($fp) +lw $t1 -64($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) lw $t0 -56($fp) @@ -917,9 +917,9 @@ lw $t1 12($t0) sw $t1 -80($fp) lw $t0 -48($fp) lw $t1 12($t0) -sw $t1 -76($fp) +sw $t1 -72($fp) lw $t0 -80($fp) -lw $t1 -76($fp) +lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) j label_17 @@ -929,10 +929,10 @@ lw $t1 12($t0) sw $t1 -80($fp) lw $t0 -48($fp) lw $t1 12($t0) -sw $t1 -76($fp) +sw $t1 -72($fp) lw $t0 -80($fp) move $a0 $t0 -lw $t0 -76($fp) +lw $t0 -72($fp) move $a1 $t0 jal equal_str sw $v0 -52($fp) @@ -943,9 +943,9 @@ lw $t1 12($t0) sw $t1 -80($fp) lw $t0 -48($fp) lw $t1 12($t0) -sw $t1 -76($fp) +sw $t1 -72($fp) lw $t0 -80($fp) -lw $t1 -76($fp) +lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) j label_17 @@ -953,7 +953,7 @@ label_17: lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -965,7 +965,7 @@ sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -96($fp) lw $t0 -96($fp) @@ -988,7 +988,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -999,7 +999,7 @@ sw $t1 -24($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -1012,7 +1012,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -1031,7 +1031,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1054,7 +1054,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index a59b9382e..e494724ec 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -38,109 +38,109 @@ data_17: .asciiz "" .word 0 data_18: .asciiz "Abort called from class " .word 0 -data_19: .asciiz "Substring out of range" +data_19: .asciiz "Index out of range exception" .word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" +data_20: .asciiz "Function call in a void instance" .word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" +data_21: .asciiz "Function call in a void instance" .word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" +data_22: .asciiz "Function call in a void instance" .word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" +data_23: .asciiz "Function call in a void instance" .word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" +data_24: .asciiz "Function call in a void instance" .word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" +data_25: .asciiz "Function call in a void instance" .word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" +data_26: .asciiz "Function call in a void instance" .word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" +data_27: .asciiz "Function call in a void instance" .word 0 data_28: .asciiz " (" .word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" +data_29: .asciiz "Function call in a void instance" .word 0 -data_30: .asciiz "RuntimeError: Function call in a void instance" +data_30: .asciiz "Function call in a void instance" .word 0 data_31: .asciiz "," .word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" +data_32: .asciiz "Function call in a void instance" .word 0 -data_33: .asciiz "RuntimeError: Function call in a void instance" +data_33: .asciiz "Function call in a void instance" .word 0 data_34: .asciiz ")" .word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" +data_35: .asciiz "Function call in a void instance" .word 0 -data_36: .asciiz "RuntimeError: Function call in a void instance" +data_36: .asciiz "Function call in a void instance" .word 0 -data_37: .asciiz "RuntimeError: Function call in a void instance" +data_37: .asciiz "Function call in a void instance" .word 0 -data_38: .asciiz "RuntimeError: Function call in a void instance" +data_38: .asciiz "Function call in a void instance" .word 0 -data_39: .asciiz "RuntimeError: Function call in a void instance" +data_39: .asciiz "Function call in a void instance" .word 0 -data_40: .asciiz "RuntimeError: Function call in a void instance" +data_40: .asciiz "Function call in a void instance" .word 0 -data_41: .asciiz "RuntimeError: Function call in a void instance" +data_41: .asciiz "Function call in a void instance" .word 0 -data_42: .asciiz "RuntimeError: Function call in a void instance" +data_42: .asciiz "Function call in a void instance" .word 0 -data_43: .asciiz "RuntimeError: Function call in a void instance" +data_43: .asciiz "Function call in a void instance" .word 0 -data_44: .asciiz "RuntimeError: Function call in a void instance" +data_44: .asciiz "Function call in a void instance" .word 0 data_45: .asciiz "\n" .word 0 -data_46: .asciiz "RuntimeError: Function call in a void instance" +data_46: .asciiz "Function call in a void instance" .word 0 -data_47: .asciiz "RuntimeError: Function call in a void instance" +data_47: .asciiz "Function call in a void instance" .word 0 -data_48: .asciiz "RuntimeError: Function call in a void instance" +data_48: .asciiz "Function call in a void instance" .word 0 -data_49: .asciiz "RuntimeError: Function call in a void instance" +data_49: .asciiz "Function call in a void instance" .word 0 -data_50: .asciiz "RuntimeError: Function call in a void instance" +data_50: .asciiz "Function call in a void instance" .word 0 -data_51: .asciiz "RuntimeError: Function call in a void instance" +data_51: .asciiz "Function call in a void instance" .word 0 data_52: .asciiz "\n" .word 0 -data_53: .asciiz "RuntimeError: Function call in a void instance" +data_53: .asciiz "Function call in a void instance" .word 0 -data_54: .asciiz "RuntimeError: Function call in a void instance" +data_54: .asciiz "Function call in a void instance" .word 0 -data_55: .asciiz "RuntimeError: Function call in a void instance" +data_55: .asciiz "Function call in a void instance" .word 0 -data_56: .asciiz "RuntimeError: Function call in a void instance" +data_56: .asciiz "Function call in a void instance" .word 0 data_57: .asciiz "\n" .word 0 data_58: .asciiz "" .word 0 -data_59: .asciiz "RuntimeError: Function call in a void instance" +data_59: .asciiz "Function call in a void instance" .word 0 -data_60: .asciiz "RuntimeError: Function call in a void instance" +data_60: .asciiz "Function call in a void instance" .word 0 -data_61: .asciiz "RuntimeError: Function call in a void instance" +data_61: .asciiz "Function call in a void instance" .word 0 -data_62: .asciiz "RuntimeError: Function call in a void instance" +data_62: .asciiz "Function call in a void instance" .word 0 -data_63: .asciiz "RuntimeError: Function call in a void instance" +data_63: .asciiz "Function call in a void instance" .word 0 -data_64: .asciiz "RuntimeError: Function call in a void instance" +data_64: .asciiz "Function call in a void instance" .word 0 -data_65: .asciiz "RuntimeError: Function call in a void instance" +data_65: .asciiz "Function call in a void instance" .word 0 -data_66: .asciiz "RuntimeError: Function call in a void instance" +data_66: .asciiz "Function call in a void instance" .word 0 -data_67: .asciiz "RuntimeError: Function call in a void instance" +data_67: .asciiz "Function call in a void instance" .word 0 -data_68: .asciiz "RuntimeError: Function call in a void instance" +data_68: .asciiz "Function call in a void instance" .word 0 -data_69: .asciiz "RuntimeError: Function call in a void instance" +data_69: .asciiz "Function call in a void instance" .word 0 -data_70: .asciiz "RuntimeError: Function call in a void instance" +data_70: .asciiz "Function call in a void instance" .word 0 data_71: .asciiz "0" .word 0 @@ -162,61 +162,61 @@ data_79: .asciiz "8" .word 0 data_80: .asciiz "9" .word 0 -data_81: .asciiz "RuntimeError: Function call in a void instance" +data_81: .asciiz "Function call in a void instance" .word 0 -data_82: .asciiz "RuntimeError: Function call in a void instance" +data_82: .asciiz "Function call in a void instance" .word 0 -data_83: .asciiz "RuntimeError: Function call in a void instance" +data_83: .asciiz "Function call in a void instance" .word 0 data_84: .asciiz "-" .word 0 -data_85: .asciiz "RuntimeError: Function call in a void instance" +data_85: .asciiz "Function call in a void instance" .word 0 data_86: .asciiz " " .word 0 -data_87: .asciiz "RuntimeError: Function call in a void instance" +data_87: .asciiz "Function call in a void instance" .word 0 -data_88: .asciiz "RuntimeError: Function call in a void instance" +data_88: .asciiz "Function call in a void instance" .word 0 -data_89: .asciiz "RuntimeError: Function call in a void instance" +data_89: .asciiz "Function call in a void instance" .word 0 -data_90: .asciiz "RuntimeError: Function call in a void instance" +data_90: .asciiz "Function call in a void instance" .word 0 -data_91: .asciiz "RuntimeError: Function call in a void instance" +data_91: .asciiz "Function call in a void instance" .word 0 -data_92: .asciiz "RuntimeError: Function call in a void instance" +data_92: .asciiz "Function call in a void instance" .word 0 -data_93: .asciiz "RuntimeError: Function call in a void instance" +data_93: .asciiz "Function call in a void instance" .word 0 -data_94: .asciiz "RuntimeError: Function call in a void instance" +data_94: .asciiz "Function call in a void instance" .word 0 -data_95: .asciiz "RuntimeError: Function call in a void instance" +data_95: .asciiz "Function call in a void instance" .word 0 data_96: .asciiz " " .word 0 data_97: .asciiz "," .word 0 -data_98: .asciiz "RuntimeError: Function call in a void instance" +data_98: .asciiz "Function call in a void instance" .word 0 -data_99: .asciiz "RuntimeError: Function call in a void instance" +data_99: .asciiz "Function call in a void instance" .word 0 data_100: .asciiz "" .word 0 data_101: .asciiz "" .word 0 -data_102: .asciiz "RuntimeError: Function call in a void instance" +data_102: .asciiz "Function call in a void instance" .word 0 -data_103: .asciiz "RuntimeError: Function call in a void instance" +data_103: .asciiz "Function call in a void instance" .word 0 -data_104: .asciiz "RuntimeError: Function call in a void instance" +data_104: .asciiz "Function call in a void instance" .word 0 -data_105: .asciiz "RuntimeError: Function call in a void instance" +data_105: .asciiz "Function call in a void instance" .word 0 -data_106: .asciiz "RuntimeError: Function call in a void instance" +data_106: .asciiz "Function call in a void instance" .word 0 -data_107: .asciiz "RuntimeError: Function call in a void instance" +data_107: .asciiz "Function call in a void instance" .word 0 -data_108: .asciiz "RuntimeError: Function call in a void instance" +data_108: .asciiz "Function call in a void instance" types_table: @@ -257,7 +257,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -274,7 +274,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -290,7 +290,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -305,7 +305,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -319,7 +319,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -336,8 +336,8 @@ type_6_dispatch: .word function_add_vertice_at_Graph .word function_print_E_at_Graph .word function_print_V_at_Graph -.word __init_attr_at_Graph -.word __init_at_Graph +.word __attributes_ctor_Graph +.word __ctor_Graph type_6_prototype: .word 5 @@ -361,8 +361,8 @@ type_7_dispatch: .word function_number_at_Vertice .word function_outgoing_at_Vertice .word function_print_at_Vertice -.word __init_attr_at_Vertice -.word __init_at_Vertice +.word __attributes_ctor_Vertice +.word __ctor_Vertice type_7_prototype: .word 6 @@ -383,8 +383,8 @@ type_8_dispatch: .word function_out_string_at_IO .word function_init_at_Edge .word function_print_at_Edge -.word __init_attr_at_Edge -.word __init_at_Edge +.word __attributes_ctor_Edge +.word __ctor_Edge type_8_prototype: .word 7 @@ -410,8 +410,8 @@ type_9_dispatch: .word function_isNil_at_EList .word function_print_at_EList .word function_tail_at_EList -.word __init_attr_at_EList -.word __init_at_EList +.word __attributes_ctor_EList +.word __ctor_EList type_9_prototype: .word 8 @@ -436,8 +436,8 @@ type_10_dispatch: .word function_print_at_ECons .word function_tail_at_ECons .word function_init_at_ECons -.word __init_attr_at_ECons -.word __init_at_ECons +.word __attributes_ctor_ECons +.word __ctor_ECons type_10_prototype: .word 9 @@ -461,8 +461,8 @@ type_11_dispatch: .word function_isNil_at_VList .word function_print_at_VList .word function_tail_at_VList -.word __init_attr_at_VList -.word __init_at_VList +.word __attributes_ctor_VList +.word __ctor_VList type_11_prototype: .word 10 @@ -486,8 +486,8 @@ type_12_dispatch: .word function_print_at_VCons .word function_tail_at_VCons .word function_init_at_VCons -.word __init_attr_at_VCons -.word __init_at_VCons +.word __attributes_ctor_VCons +.word __ctor_VCons type_12_prototype: .word 11 @@ -511,8 +511,8 @@ type_13_dispatch: .word function_c2i_at_Parse .word function_parse_line_at_Parse .word function_read_input_at_Parse -.word __init_attr_at_Parse -.word __init_at_Parse +.word __attributes_ctor_Parse +.word __ctor_Parse type_13_prototype: .word 12 @@ -537,8 +537,8 @@ type_14_dispatch: .word function_parse_line_at_Parse .word function_read_input_at_Parse .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_14_prototype: .word 13 @@ -556,8 +556,8 @@ type_15_dispatch: .word function_type_name_at_Object .word function_and_at_BoolOp .word function_or_at_BoolOp -.word __init_attr_at_BoolOp -.word __init_at_BoolOp +.word __attributes_ctor_BoolOp +.word __ctor_BoolOp type_15_prototype: .word 14 @@ -568,7 +568,7 @@ type_15_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -649,7 +649,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -684,7 +684,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -766,7 +766,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -790,7 +790,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -801,7 +801,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -830,7 +830,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -899,7 +899,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -958,7 +958,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -969,7 +969,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1000,7 +1000,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1038,7 +1038,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -1055,21 +1055,21 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_Graph: +__attributes_ctor_Graph: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 -jal __init_at_VList +addi $sp $sp -16 +jal __ctor_VList sw $v0 -20($fp) lw $t0 -20($fp) sw $t0 -24($fp) lw $t0 0($fp) lw $t1 -24($fp) sw $t1 16($t0) -jal __init_at_EList +jal __ctor_EList sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -16($fp) @@ -1077,7 +1077,7 @@ lw $t0 0($fp) lw $t1 -16($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 24 +addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1090,7 +1090,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -32 +addi $sp $sp -24 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -1212,7 +1212,7 @@ addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 32 +addi $sp $sp 24 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1225,7 +1225,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1269,7 +1269,7 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1282,7 +1282,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1326,20 +1326,20 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Graph: +__ctor_Graph: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 5 sll $t0 $t0 2 la $t1 prototype_table @@ -1356,34 +1356,34 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Graph +jal __attributes_ctor_Graph addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Vertice: +__attributes_ctor_Vertice: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -12 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) lw $t1 -20($fp) sw $t1 12($t0) -jal __init_at_EList +jal __ctor_EList sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -16($fp) @@ -1391,7 +1391,7 @@ lw $t0 0($fp) lw $t1 -16($fp) sw $t1 16($t0) lw $v0 0($fp) -addi $sp $sp 20 +addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1404,14 +1404,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1424,14 +1424,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1444,13 +1444,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t0 0($fp) lw $t1 4($fp) addi $t1 $t1 12 sw $t0 0($t1) lw $v0 4($fp) -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1463,7 +1463,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1514,7 +1514,7 @@ lw $t1 4($fp) addi $t1 $t1 16 sw $t0 0($t1) lw $v0 4($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1527,7 +1527,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -16 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -1606,20 +1606,20 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 24 +addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Vertice: +__ctor_Vertice: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 6 sll $t0 $t0 2 la $t1 prototype_table @@ -1636,28 +1636,28 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Vertice +jal __attributes_ctor_Vertice addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Edge: +__attributes_ctor_Edge: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -12 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -1666,7 +1666,7 @@ sw $t1 12($t0) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -16($fp) lw $t0 0($fp) @@ -1675,14 +1675,14 @@ sw $t1 16($t0) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 20($t0) lw $v0 0($fp) -addi $sp $sp 24 +addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1695,7 +1695,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp 0 lw $t0 8($fp) lw $t1 12($fp) addi $t1 $t1 12 @@ -1709,7 +1709,7 @@ lw $t1 12($fp) addi $t1 $t1 20 sw $t0 0($t1) lw $v0 12($fp) -addi $sp $sp 12 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1722,13 +1722,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -84 +addi $sp $sp -72 la $t0 data_28 sw $t0 -80($fp) lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -76($fp) lw $t0 0($fp) @@ -1801,7 +1801,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -52($fp) lw $t0 0($fp) @@ -1874,7 +1874,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -28($fp) lw $t0 0($fp) @@ -1943,20 +1943,20 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 84 +addi $sp $sp 72 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Edge: +__ctor_Edge: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -8 li $t0 7 sll $t0 $t0 2 la $t1 prototype_table @@ -1973,29 +1973,29 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Edge +jal __attributes_ctor_Edge addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 20 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_EList: +__attributes_ctor_EList: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 lw $t0 0($fp) lw $t1 -12($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2008,15 +2008,15 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2029,7 +2029,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -2063,7 +2063,7 @@ addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2076,7 +2076,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -2105,7 +2105,7 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2118,8 +2118,8 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 -jal __init_at_ECons +addi $sp $sp -12 +jal __ctor_ECons sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -2155,7 +2155,7 @@ jalr $ra $t0 addi $sp $sp 12 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2168,7 +2168,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -52 +addi $sp $sp -48 lw $t0 4($fp) li $t1 0 seq $t0 $t0 $t1 @@ -2323,7 +2323,7 @@ lw $t0 0($fp) sw $t0 -56($fp) label_48: lw $v0 -56($fp) -addi $sp $sp 52 +addi $sp $sp 48 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2336,13 +2336,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -16 la $t0 data_45 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -2376,20 +2376,20 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 20 +addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_EList: +__ctor_EList: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 8 sll $t0 $t0 2 la $t1 prototype_table @@ -2406,35 +2406,35 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_EList +jal __attributes_ctor_EList addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_ECons: +__attributes_ctor_ECons: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_EList +jal __attributes_ctor_EList addi $sp $sp 4 sw $v0 -16($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 16($t0) lw $v0 0($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2447,15 +2447,15 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -4 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2468,14 +2468,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2488,14 +2488,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2508,7 +2508,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t0 4($fp) lw $t1 8($fp) addi $t1 $t1 12 @@ -2518,7 +2518,7 @@ lw $t1 8($fp) addi $t1 $t1 16 sw $t0 0($t1) lw $v0 8($fp) -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2531,7 +2531,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -16 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2617,20 +2617,20 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 24 +addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_ECons: +__ctor_ECons: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 9 sll $t0 $t0 2 la $t1 prototype_table @@ -2647,29 +2647,29 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_ECons +jal __attributes_ctor_ECons addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_VList: +__attributes_ctor_VList: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 lw $t0 0($fp) lw $t1 -12($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2682,15 +2682,15 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2703,7 +2703,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -2737,7 +2737,7 @@ addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2750,7 +2750,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -2779,7 +2779,7 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2792,8 +2792,8 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 -jal __init_at_VCons +addi $sp $sp -12 +jal __ctor_VCons sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -2829,7 +2829,7 @@ jalr $ra $t0 addi $sp $sp 12 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2842,13 +2842,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -16 la $t0 data_52 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -2882,20 +2882,20 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 20 +addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_VList: +__ctor_VList: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 10 sll $t0 $t0 2 la $t1 prototype_table @@ -2912,35 +2912,35 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_VList +jal __attributes_ctor_VList addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_VCons: +__attributes_ctor_VCons: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_VList +jal __attributes_ctor_VList addi $sp $sp 4 sw $v0 -16($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 16($t0) lw $v0 0($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2953,15 +2953,15 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -4 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2974,14 +2974,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2994,14 +2994,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3014,7 +3014,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t0 4($fp) lw $t1 8($fp) addi $t1 $t1 12 @@ -3024,7 +3024,7 @@ lw $t1 8($fp) addi $t1 $t1 16 sw $t0 0($t1) lw $v0 8($fp) -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3037,7 +3037,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -16 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -3123,20 +3123,20 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 24 +addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_VCons: +__ctor_VCons: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 11 sll $t0 $t0 2 la $t1 prototype_table @@ -3153,25 +3153,25 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_VCons +jal __attributes_ctor_VCons addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Parse: +__attributes_ctor_Parse: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 -jal __init_at_BoolOp +addi $sp $sp -12 +jal __ctor_BoolOp sw $v0 -16($fp) lw $t0 -16($fp) sw $t0 -20($fp) @@ -3183,14 +3183,14 @@ sw $t0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 16($t0) lw $v0 0($fp) -addi $sp $sp 20 +addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3203,8 +3203,8 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -176 -jal __init_at_Graph +addi $sp $sp -168 +jal __ctor_Graph sw $v0 -172($fp) lw $t0 -172($fp) sw $t0 -176($fp) @@ -3243,7 +3243,7 @@ sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -100($fp) lw $t0 -168($fp) @@ -3252,7 +3252,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -128($fp) +sw $t1 -132($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3260,25 +3260,25 @@ sw $t0 -124($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -120($fp) +sw $t0 -116($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -116($fp) -lw $t0 -128($fp) +sw $t0 -120($fp) +lw $t0 -132($fp) lw $t1 -124($fp) seq $t0 $t0 $t1 sw $t0 -112($fp) lw $t0 -112($fp) bne $t0 $zero label_70 -lw $t0 -128($fp) -lw $t1 -120($fp) +lw $t0 -132($fp) +lw $t1 -116($fp) seq $t0 $t0 $t1 sw $t0 -112($fp) lw $t0 -112($fp) bne $t0 $zero label_71 -lw $t0 -128($fp) -lw $t1 -116($fp) +lw $t0 -132($fp) +lw $t1 -120($fp) seq $t0 $t0 $t1 sw $t0 -112($fp) lw $t0 -112($fp) @@ -3294,9 +3294,9 @@ lw $t1 12($t0) sw $t1 -136($fp) lw $t0 -100($fp) lw $t1 12($t0) -sw $t1 -132($fp) +sw $t1 -128($fp) lw $t0 -136($fp) -lw $t1 -132($fp) +lw $t1 -128($fp) seq $t0 $t0 $t1 sw $t0 -108($fp) j label_73 @@ -3306,10 +3306,10 @@ lw $t1 12($t0) sw $t1 -136($fp) lw $t0 -100($fp) lw $t1 12($t0) -sw $t1 -132($fp) +sw $t1 -128($fp) lw $t0 -136($fp) move $a0 $t0 -lw $t0 -132($fp) +lw $t0 -128($fp) move $a1 $t0 jal equal_str sw $v0 -108($fp) @@ -3320,9 +3320,9 @@ lw $t1 12($t0) sw $t1 -136($fp) lw $t0 -100($fp) lw $t1 12($t0) -sw $t1 -132($fp) +sw $t1 -128($fp) lw $t0 -136($fp) -lw $t1 -132($fp) +lw $t1 -128($fp) seq $t0 $t0 $t1 sw $t0 -108($fp) j label_73 @@ -3330,7 +3330,7 @@ label_73: lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -140($fp) lw $t0 -140($fp) @@ -3342,7 +3342,7 @@ sw $t0 -144($fp) lw $t0 -144($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -152($fp) la $t0 data_58 @@ -3350,7 +3350,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -168($fp) @@ -3359,7 +3359,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -72($fp) +sw $t1 -76($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3367,25 +3367,25 @@ sw $t0 -68($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -64($fp) +sw $t0 -60($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -60($fp) -lw $t0 -72($fp) +sw $t0 -64($fp) +lw $t0 -76($fp) lw $t1 -68($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) lw $t0 -56($fp) bne $t0 $zero label_74 -lw $t0 -72($fp) -lw $t1 -64($fp) +lw $t0 -76($fp) +lw $t1 -60($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) lw $t0 -56($fp) bne $t0 $zero label_75 -lw $t0 -72($fp) -lw $t1 -60($fp) +lw $t0 -76($fp) +lw $t1 -64($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) lw $t0 -56($fp) @@ -3401,9 +3401,9 @@ lw $t1 12($t0) sw $t1 -80($fp) lw $t0 -44($fp) lw $t1 12($t0) -sw $t1 -76($fp) +sw $t1 -72($fp) lw $t0 -80($fp) -lw $t1 -76($fp) +lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) j label_77 @@ -3413,10 +3413,10 @@ lw $t1 12($t0) sw $t1 -80($fp) lw $t0 -44($fp) lw $t1 12($t0) -sw $t1 -76($fp) +sw $t1 -72($fp) lw $t0 -80($fp) move $a0 $t0 -lw $t0 -76($fp) +lw $t0 -72($fp) move $a1 $t0 jal equal_str sw $v0 -52($fp) @@ -3427,9 +3427,9 @@ lw $t1 12($t0) sw $t1 -80($fp) lw $t0 -44($fp) lw $t1 12($t0) -sw $t1 -76($fp) +sw $t1 -72($fp) lw $t0 -80($fp) -lw $t1 -76($fp) +lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) j label_77 @@ -3437,7 +3437,7 @@ label_77: lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -3449,7 +3449,7 @@ sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -96($fp) lw $t4 0($fp) @@ -3599,7 +3599,7 @@ sw $t0 -168($fp) j label_69 label_87: lw $v0 -176($fp) -addi $sp $sp 176 +addi $sp $sp 168 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3612,7 +3612,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -148 +addi $sp $sp -140 lw $t0 4($fp) li $t1 0 seq $t0 $t0 $t1 @@ -3643,7 +3643,7 @@ lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 sw $v0 -140($fp) -jal __init_at_Vertice +jal __ctor_Vertice sw $v0 -136($fp) lw $t0 -136($fp) li $t1 0 @@ -3723,7 +3723,7 @@ sw $v0 -68($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -64($fp) lw $t0 -68($fp) @@ -3732,7 +3732,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -96($fp) +sw $t1 -100($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3740,25 +3740,25 @@ sw $t0 -92($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -88($fp) +sw $t0 -84($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -84($fp) -lw $t0 -96($fp) +sw $t0 -88($fp) +lw $t0 -100($fp) lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -80($fp) lw $t0 -80($fp) bne $t0 $zero label_95 -lw $t0 -96($fp) -lw $t1 -88($fp) +lw $t0 -100($fp) +lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -80($fp) lw $t0 -80($fp) bne $t0 $zero label_96 -lw $t0 -96($fp) -lw $t1 -84($fp) +lw $t0 -100($fp) +lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -80($fp) lw $t0 -80($fp) @@ -3774,9 +3774,9 @@ lw $t1 12($t0) sw $t1 -104($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -100($fp) +sw $t1 -96($fp) lw $t0 -104($fp) -lw $t1 -100($fp) +lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) j label_98 @@ -3786,10 +3786,10 @@ lw $t1 12($t0) sw $t1 -104($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -100($fp) +sw $t1 -96($fp) lw $t0 -104($fp) move $a0 $t0 -lw $t0 -100($fp) +lw $t0 -96($fp) move $a1 $t0 jal equal_str sw $v0 -76($fp) @@ -3800,9 +3800,9 @@ lw $t1 12($t0) sw $t1 -104($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -100($fp) +sw $t1 -96($fp) lw $t0 -104($fp) -lw $t1 -100($fp) +lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) j label_98 @@ -3810,7 +3810,7 @@ label_98: lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -108($fp) lw $t0 -108($fp) @@ -3822,7 +3822,7 @@ sw $t0 -112($fp) lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -120($fp) lw $t0 -120($fp) @@ -3933,7 +3933,7 @@ lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -32($fp) -jal __init_at_Edge +jal __ctor_Edge sw $v0 -28($fp) lw $t0 -28($fp) li $t1 0 @@ -4004,7 +4004,7 @@ sw $v0 -12($fp) j label_92 label_110: lw $v0 -148($fp) -addi $sp $sp 148 +addi $sp $sp 140 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -4017,13 +4017,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -580 +addi $sp $sp -572 la $t0 data_71 sw $t0 -536($fp) lw $t0 -536($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -532($fp) lw $t0 0($fp) @@ -4032,7 +4032,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -560($fp) +sw $t1 -564($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4040,25 +4040,25 @@ sw $t0 -556($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -552($fp) +sw $t0 -548($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -548($fp) -lw $t0 -560($fp) +sw $t0 -552($fp) +lw $t0 -564($fp) lw $t1 -556($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) lw $t0 -544($fp) bne $t0 $zero label_111 -lw $t0 -560($fp) -lw $t1 -552($fp) +lw $t0 -564($fp) +lw $t1 -548($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) lw $t0 -544($fp) bne $t0 $zero label_112 -lw $t0 -560($fp) -lw $t1 -548($fp) +lw $t0 -564($fp) +lw $t1 -552($fp) seq $t0 $t0 $t1 sw $t0 -544($fp) lw $t0 -544($fp) @@ -4074,9 +4074,9 @@ lw $t1 12($t0) sw $t1 -568($fp) lw $t0 -532($fp) lw $t1 12($t0) -sw $t1 -564($fp) +sw $t1 -560($fp) lw $t0 -568($fp) -lw $t1 -564($fp) +lw $t1 -560($fp) seq $t0 $t0 $t1 sw $t0 -540($fp) j label_114 @@ -4086,10 +4086,10 @@ lw $t1 12($t0) sw $t1 -568($fp) lw $t0 -532($fp) lw $t1 12($t0) -sw $t1 -564($fp) +sw $t1 -560($fp) lw $t0 -568($fp) move $a0 $t0 -lw $t0 -564($fp) +lw $t0 -560($fp) move $a1 $t0 jal equal_str sw $v0 -540($fp) @@ -4100,9 +4100,9 @@ lw $t1 12($t0) sw $t1 -568($fp) lw $t0 -532($fp) lw $t1 12($t0) -sw $t1 -564($fp) +sw $t1 -560($fp) lw $t0 -568($fp) -lw $t1 -564($fp) +lw $t1 -560($fp) seq $t0 $t0 $t1 sw $t0 -540($fp) j label_114 @@ -4110,7 +4110,7 @@ label_114: lw $t0 -540($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -572($fp) lw $t0 -572($fp) @@ -4123,7 +4123,7 @@ sw $t0 -484($fp) lw $t0 -484($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -480($fp) lw $t0 0($fp) @@ -4132,7 +4132,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -508($fp) +sw $t1 -512($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4140,25 +4140,25 @@ sw $t0 -504($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -500($fp) +sw $t0 -496($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -496($fp) -lw $t0 -508($fp) +sw $t0 -500($fp) +lw $t0 -512($fp) lw $t1 -504($fp) seq $t0 $t0 $t1 sw $t0 -492($fp) lw $t0 -492($fp) bne $t0 $zero label_115 -lw $t0 -508($fp) -lw $t1 -500($fp) +lw $t0 -512($fp) +lw $t1 -496($fp) seq $t0 $t0 $t1 sw $t0 -492($fp) lw $t0 -492($fp) bne $t0 $zero label_116 -lw $t0 -508($fp) -lw $t1 -496($fp) +lw $t0 -512($fp) +lw $t1 -500($fp) seq $t0 $t0 $t1 sw $t0 -492($fp) lw $t0 -492($fp) @@ -4174,9 +4174,9 @@ lw $t1 12($t0) sw $t1 -516($fp) lw $t0 -480($fp) lw $t1 12($t0) -sw $t1 -512($fp) +sw $t1 -508($fp) lw $t0 -516($fp) -lw $t1 -512($fp) +lw $t1 -508($fp) seq $t0 $t0 $t1 sw $t0 -488($fp) j label_118 @@ -4186,10 +4186,10 @@ lw $t1 12($t0) sw $t1 -516($fp) lw $t0 -480($fp) lw $t1 12($t0) -sw $t1 -512($fp) +sw $t1 -508($fp) lw $t0 -516($fp) move $a0 $t0 -lw $t0 -512($fp) +lw $t0 -508($fp) move $a1 $t0 jal equal_str sw $v0 -488($fp) @@ -4200,9 +4200,9 @@ lw $t1 12($t0) sw $t1 -516($fp) lw $t0 -480($fp) lw $t1 12($t0) -sw $t1 -512($fp) +sw $t1 -508($fp) lw $t0 -516($fp) -lw $t1 -512($fp) +lw $t1 -508($fp) seq $t0 $t0 $t1 sw $t0 -488($fp) j label_118 @@ -4210,7 +4210,7 @@ label_118: lw $t0 -488($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -520($fp) lw $t0 -520($fp) @@ -4223,7 +4223,7 @@ sw $t0 -432($fp) lw $t0 -432($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -428($fp) lw $t0 0($fp) @@ -4232,7 +4232,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -456($fp) +sw $t1 -460($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4240,25 +4240,25 @@ sw $t0 -452($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -448($fp) +sw $t0 -444($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -444($fp) -lw $t0 -456($fp) +sw $t0 -448($fp) +lw $t0 -460($fp) lw $t1 -452($fp) seq $t0 $t0 $t1 sw $t0 -440($fp) lw $t0 -440($fp) bne $t0 $zero label_119 -lw $t0 -456($fp) -lw $t1 -448($fp) +lw $t0 -460($fp) +lw $t1 -444($fp) seq $t0 $t0 $t1 sw $t0 -440($fp) lw $t0 -440($fp) bne $t0 $zero label_120 -lw $t0 -456($fp) -lw $t1 -444($fp) +lw $t0 -460($fp) +lw $t1 -448($fp) seq $t0 $t0 $t1 sw $t0 -440($fp) lw $t0 -440($fp) @@ -4274,9 +4274,9 @@ lw $t1 12($t0) sw $t1 -464($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -460($fp) +sw $t1 -456($fp) lw $t0 -464($fp) -lw $t1 -460($fp) +lw $t1 -456($fp) seq $t0 $t0 $t1 sw $t0 -436($fp) j label_122 @@ -4286,10 +4286,10 @@ lw $t1 12($t0) sw $t1 -464($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -460($fp) +sw $t1 -456($fp) lw $t0 -464($fp) move $a0 $t0 -lw $t0 -460($fp) +lw $t0 -456($fp) move $a1 $t0 jal equal_str sw $v0 -436($fp) @@ -4300,9 +4300,9 @@ lw $t1 12($t0) sw $t1 -464($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -460($fp) +sw $t1 -456($fp) lw $t0 -464($fp) -lw $t1 -460($fp) +lw $t1 -456($fp) seq $t0 $t0 $t1 sw $t0 -436($fp) j label_122 @@ -4310,7 +4310,7 @@ label_122: lw $t0 -436($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -468($fp) lw $t0 -468($fp) @@ -4323,7 +4323,7 @@ sw $t0 -380($fp) lw $t0 -380($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -376($fp) lw $t0 0($fp) @@ -4332,7 +4332,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -404($fp) +sw $t1 -408($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4340,25 +4340,25 @@ sw $t0 -400($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -396($fp) +sw $t0 -392($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -392($fp) -lw $t0 -404($fp) +sw $t0 -396($fp) +lw $t0 -408($fp) lw $t1 -400($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) bne $t0 $zero label_123 -lw $t0 -404($fp) -lw $t1 -396($fp) +lw $t0 -408($fp) +lw $t1 -392($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) bne $t0 $zero label_124 -lw $t0 -404($fp) -lw $t1 -392($fp) +lw $t0 -408($fp) +lw $t1 -396($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) @@ -4374,9 +4374,9 @@ lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -376($fp) lw $t1 12($t0) -sw $t1 -408($fp) +sw $t1 -404($fp) lw $t0 -412($fp) -lw $t1 -408($fp) +lw $t1 -404($fp) seq $t0 $t0 $t1 sw $t0 -384($fp) j label_126 @@ -4386,10 +4386,10 @@ lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -376($fp) lw $t1 12($t0) -sw $t1 -408($fp) +sw $t1 -404($fp) lw $t0 -412($fp) move $a0 $t0 -lw $t0 -408($fp) +lw $t0 -404($fp) move $a1 $t0 jal equal_str sw $v0 -384($fp) @@ -4400,9 +4400,9 @@ lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -376($fp) lw $t1 12($t0) -sw $t1 -408($fp) +sw $t1 -404($fp) lw $t0 -412($fp) -lw $t1 -408($fp) +lw $t1 -404($fp) seq $t0 $t0 $t1 sw $t0 -384($fp) j label_126 @@ -4410,7 +4410,7 @@ label_126: lw $t0 -384($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -416($fp) lw $t0 -416($fp) @@ -4423,7 +4423,7 @@ sw $t0 -328($fp) lw $t0 -328($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -324($fp) lw $t0 0($fp) @@ -4432,7 +4432,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -352($fp) +sw $t1 -356($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4440,25 +4440,25 @@ sw $t0 -348($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -344($fp) +sw $t0 -340($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -340($fp) -lw $t0 -352($fp) +sw $t0 -344($fp) +lw $t0 -356($fp) lw $t1 -348($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) lw $t0 -336($fp) bne $t0 $zero label_127 -lw $t0 -352($fp) -lw $t1 -344($fp) +lw $t0 -356($fp) +lw $t1 -340($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) lw $t0 -336($fp) bne $t0 $zero label_128 -lw $t0 -352($fp) -lw $t1 -340($fp) +lw $t0 -356($fp) +lw $t1 -344($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) lw $t0 -336($fp) @@ -4474,9 +4474,9 @@ lw $t1 12($t0) sw $t1 -360($fp) lw $t0 -324($fp) lw $t1 12($t0) -sw $t1 -356($fp) +sw $t1 -352($fp) lw $t0 -360($fp) -lw $t1 -356($fp) +lw $t1 -352($fp) seq $t0 $t0 $t1 sw $t0 -332($fp) j label_130 @@ -4486,10 +4486,10 @@ lw $t1 12($t0) sw $t1 -360($fp) lw $t0 -324($fp) lw $t1 12($t0) -sw $t1 -356($fp) +sw $t1 -352($fp) lw $t0 -360($fp) move $a0 $t0 -lw $t0 -356($fp) +lw $t0 -352($fp) move $a1 $t0 jal equal_str sw $v0 -332($fp) @@ -4500,9 +4500,9 @@ lw $t1 12($t0) sw $t1 -360($fp) lw $t0 -324($fp) lw $t1 12($t0) -sw $t1 -356($fp) +sw $t1 -352($fp) lw $t0 -360($fp) -lw $t1 -356($fp) +lw $t1 -352($fp) seq $t0 $t0 $t1 sw $t0 -332($fp) j label_130 @@ -4510,7 +4510,7 @@ label_130: lw $t0 -332($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -364($fp) lw $t0 -364($fp) @@ -4523,7 +4523,7 @@ sw $t0 -276($fp) lw $t0 -276($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -272($fp) lw $t0 0($fp) @@ -4532,7 +4532,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -300($fp) +sw $t1 -304($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4540,25 +4540,25 @@ sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -292($fp) +sw $t0 -288($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -288($fp) -lw $t0 -300($fp) +sw $t0 -292($fp) +lw $t0 -304($fp) lw $t1 -296($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) bne $t0 $zero label_131 -lw $t0 -300($fp) -lw $t1 -292($fp) +lw $t0 -304($fp) +lw $t1 -288($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) bne $t0 $zero label_132 -lw $t0 -300($fp) -lw $t1 -288($fp) +lw $t0 -304($fp) +lw $t1 -292($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) @@ -4574,9 +4574,9 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -272($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) -lw $t1 -304($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -280($fp) j label_134 @@ -4586,10 +4586,10 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -272($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) move $a0 $t0 -lw $t0 -304($fp) +lw $t0 -300($fp) move $a1 $t0 jal equal_str sw $v0 -280($fp) @@ -4600,9 +4600,9 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -272($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) -lw $t1 -304($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -280($fp) j label_134 @@ -4610,7 +4610,7 @@ label_134: lw $t0 -280($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -312($fp) lw $t0 -312($fp) @@ -4623,7 +4623,7 @@ sw $t0 -224($fp) lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -220($fp) lw $t0 0($fp) @@ -4632,7 +4632,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -248($fp) +sw $t1 -252($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4640,25 +4640,25 @@ sw $t0 -244($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -240($fp) +sw $t0 -236($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -236($fp) -lw $t0 -248($fp) +sw $t0 -240($fp) +lw $t0 -252($fp) lw $t1 -244($fp) seq $t0 $t0 $t1 sw $t0 -232($fp) lw $t0 -232($fp) bne $t0 $zero label_135 -lw $t0 -248($fp) -lw $t1 -240($fp) +lw $t0 -252($fp) +lw $t1 -236($fp) seq $t0 $t0 $t1 sw $t0 -232($fp) lw $t0 -232($fp) bne $t0 $zero label_136 -lw $t0 -248($fp) -lw $t1 -236($fp) +lw $t0 -252($fp) +lw $t1 -240($fp) seq $t0 $t0 $t1 sw $t0 -232($fp) lw $t0 -232($fp) @@ -4674,9 +4674,9 @@ lw $t1 12($t0) sw $t1 -256($fp) lw $t0 -220($fp) lw $t1 12($t0) -sw $t1 -252($fp) +sw $t1 -248($fp) lw $t0 -256($fp) -lw $t1 -252($fp) +lw $t1 -248($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) j label_138 @@ -4686,10 +4686,10 @@ lw $t1 12($t0) sw $t1 -256($fp) lw $t0 -220($fp) lw $t1 12($t0) -sw $t1 -252($fp) +sw $t1 -248($fp) lw $t0 -256($fp) move $a0 $t0 -lw $t0 -252($fp) +lw $t0 -248($fp) move $a1 $t0 jal equal_str sw $v0 -228($fp) @@ -4700,9 +4700,9 @@ lw $t1 12($t0) sw $t1 -256($fp) lw $t0 -220($fp) lw $t1 12($t0) -sw $t1 -252($fp) +sw $t1 -248($fp) lw $t0 -256($fp) -lw $t1 -252($fp) +lw $t1 -248($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) j label_138 @@ -4710,7 +4710,7 @@ label_138: lw $t0 -228($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -260($fp) lw $t0 -260($fp) @@ -4723,7 +4723,7 @@ sw $t0 -172($fp) lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -168($fp) lw $t0 0($fp) @@ -4732,7 +4732,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -196($fp) +sw $t1 -200($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4740,25 +4740,25 @@ sw $t0 -192($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -188($fp) +sw $t0 -184($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -184($fp) -lw $t0 -196($fp) +sw $t0 -188($fp) +lw $t0 -200($fp) lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -180($fp) lw $t0 -180($fp) bne $t0 $zero label_139 -lw $t0 -196($fp) -lw $t1 -188($fp) +lw $t0 -200($fp) +lw $t1 -184($fp) seq $t0 $t0 $t1 sw $t0 -180($fp) lw $t0 -180($fp) bne $t0 $zero label_140 -lw $t0 -196($fp) -lw $t1 -184($fp) +lw $t0 -200($fp) +lw $t1 -188($fp) seq $t0 $t0 $t1 sw $t0 -180($fp) lw $t0 -180($fp) @@ -4774,9 +4774,9 @@ lw $t1 12($t0) sw $t1 -204($fp) lw $t0 -168($fp) lw $t1 12($t0) -sw $t1 -200($fp) +sw $t1 -196($fp) lw $t0 -204($fp) -lw $t1 -200($fp) +lw $t1 -196($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) j label_142 @@ -4786,10 +4786,10 @@ lw $t1 12($t0) sw $t1 -204($fp) lw $t0 -168($fp) lw $t1 12($t0) -sw $t1 -200($fp) +sw $t1 -196($fp) lw $t0 -204($fp) move $a0 $t0 -lw $t0 -200($fp) +lw $t0 -196($fp) move $a1 $t0 jal equal_str sw $v0 -176($fp) @@ -4800,9 +4800,9 @@ lw $t1 12($t0) sw $t1 -204($fp) lw $t0 -168($fp) lw $t1 12($t0) -sw $t1 -200($fp) +sw $t1 -196($fp) lw $t0 -204($fp) -lw $t1 -200($fp) +lw $t1 -196($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) j label_142 @@ -4810,7 +4810,7 @@ label_142: lw $t0 -176($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -208($fp) lw $t0 -208($fp) @@ -4823,7 +4823,7 @@ sw $t0 -120($fp) lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -116($fp) lw $t0 0($fp) @@ -4832,7 +4832,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -144($fp) +sw $t1 -148($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4840,25 +4840,25 @@ sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -136($fp) +sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -132($fp) -lw $t0 -144($fp) +sw $t0 -136($fp) +lw $t0 -148($fp) lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) bne $t0 $zero label_143 -lw $t0 -144($fp) -lw $t1 -136($fp) +lw $t0 -148($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) bne $t0 $zero label_144 -lw $t0 -144($fp) -lw $t1 -132($fp) +lw $t0 -148($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) @@ -4874,9 +4874,9 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) -lw $t1 -148($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) j label_146 @@ -4886,10 +4886,10 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) move $a0 $t0 -lw $t0 -148($fp) +lw $t0 -144($fp) move $a1 $t0 jal equal_str sw $v0 -124($fp) @@ -4900,9 +4900,9 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) -lw $t1 -148($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) j label_146 @@ -4910,7 +4910,7 @@ label_146: lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -156($fp) lw $t0 -156($fp) @@ -4923,7 +4923,7 @@ sw $t0 -68($fp) lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -64($fp) lw $t0 0($fp) @@ -4932,7 +4932,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -92($fp) +sw $t1 -96($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4940,25 +4940,25 @@ sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -84($fp) +sw $t0 -80($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -80($fp) -lw $t0 -92($fp) +sw $t0 -84($fp) +lw $t0 -96($fp) lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_147 -lw $t0 -92($fp) -lw $t1 -84($fp) +lw $t0 -96($fp) +lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_148 -lw $t0 -92($fp) -lw $t1 -80($fp) +lw $t0 -96($fp) +lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) @@ -4974,9 +4974,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_150 @@ -4986,10 +4986,10 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) move $a0 $t0 -lw $t0 -96($fp) +lw $t0 -92($fp) move $a1 $t0 jal equal_str sw $v0 -72($fp) @@ -5000,9 +5000,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_150 @@ -5010,7 +5010,7 @@ label_150: lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -104($fp) lw $t0 -104($fp) @@ -5048,7 +5048,7 @@ sw $v0 -56($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -5058,7 +5058,7 @@ label_153: li $t0 9 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 -48($fp) @@ -5071,7 +5071,7 @@ label_155: li $t0 8 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -5084,7 +5084,7 @@ label_157: li $t0 7 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -40($fp) lw $t0 -40($fp) @@ -5097,7 +5097,7 @@ label_159: li $t0 6 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -5110,7 +5110,7 @@ label_161: li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) @@ -5123,7 +5123,7 @@ label_163: li $t0 4 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -5136,7 +5136,7 @@ label_165: li $t0 3 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -24($fp) lw $t0 -24($fp) @@ -5149,7 +5149,7 @@ label_167: li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -5162,7 +5162,7 @@ label_169: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) @@ -5175,14 +5175,14 @@ label_171: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -580($fp) label_172: lw $v0 -580($fp) -addi $sp $sp 580 +addi $sp $sp 572 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -5195,7 +5195,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -320 +addi $sp $sp -312 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -5226,7 +5226,7 @@ sw $v0 -272($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -268($fp) lw $t0 -272($fp) @@ -5235,7 +5235,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -300($fp) +sw $t1 -304($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5243,25 +5243,25 @@ sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -292($fp) +sw $t0 -288($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -288($fp) -lw $t0 -300($fp) +sw $t0 -292($fp) +lw $t0 -304($fp) lw $t1 -296($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) bne $t0 $zero label_175 -lw $t0 -300($fp) -lw $t1 -292($fp) +lw $t0 -304($fp) +lw $t1 -288($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) bne $t0 $zero label_176 -lw $t0 -300($fp) -lw $t1 -288($fp) +lw $t0 -304($fp) +lw $t1 -292($fp) seq $t0 $t0 $t1 sw $t0 -284($fp) lw $t0 -284($fp) @@ -5277,9 +5277,9 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -268($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) -lw $t1 -304($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -280($fp) j label_178 @@ -5289,10 +5289,10 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -268($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) move $a0 $t0 -lw $t0 -304($fp) +lw $t0 -300($fp) move $a1 $t0 jal equal_str sw $v0 -280($fp) @@ -5303,9 +5303,9 @@ lw $t1 12($t0) sw $t1 -308($fp) lw $t0 -268($fp) lw $t1 12($t0) -sw $t1 -304($fp) +sw $t1 -300($fp) lw $t0 -308($fp) -lw $t1 -304($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -280($fp) j label_178 @@ -5313,7 +5313,7 @@ label_178: lw $t0 -280($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -312($fp) lw $t0 -312($fp) @@ -5324,13 +5324,13 @@ bne $t0 $zero label_209 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -220($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -216($fp) lw $t0 0($fp) @@ -5371,7 +5371,7 @@ sw $t0 -204($fp) lw $t0 -204($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -200($fp) lw $t0 -208($fp) @@ -5380,7 +5380,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -244($fp) +sw $t1 -248($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5388,25 +5388,25 @@ sw $t0 -240($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -236($fp) +sw $t0 -232($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -232($fp) -lw $t0 -244($fp) +sw $t0 -236($fp) +lw $t0 -248($fp) lw $t1 -240($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) lw $t0 -228($fp) bne $t0 $zero label_181 -lw $t0 -244($fp) -lw $t1 -236($fp) +lw $t0 -248($fp) +lw $t1 -232($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) lw $t0 -228($fp) bne $t0 $zero label_182 -lw $t0 -244($fp) -lw $t1 -232($fp) +lw $t0 -248($fp) +lw $t1 -236($fp) seq $t0 $t0 $t1 sw $t0 -228($fp) lw $t0 -228($fp) @@ -5422,9 +5422,9 @@ lw $t1 12($t0) sw $t1 -252($fp) lw $t0 -200($fp) lw $t1 12($t0) -sw $t1 -248($fp) +sw $t1 -244($fp) lw $t0 -252($fp) -lw $t1 -248($fp) +lw $t1 -244($fp) seq $t0 $t0 $t1 sw $t0 -224($fp) j label_184 @@ -5434,10 +5434,10 @@ lw $t1 12($t0) sw $t1 -252($fp) lw $t0 -200($fp) lw $t1 12($t0) -sw $t1 -248($fp) +sw $t1 -244($fp) lw $t0 -252($fp) move $a0 $t0 -lw $t0 -248($fp) +lw $t0 -244($fp) move $a1 $t0 jal equal_str sw $v0 -224($fp) @@ -5448,9 +5448,9 @@ lw $t1 12($t0) sw $t1 -252($fp) lw $t0 -200($fp) lw $t1 12($t0) -sw $t1 -248($fp) +sw $t1 -244($fp) lw $t0 -252($fp) -lw $t1 -248($fp) +lw $t1 -244($fp) seq $t0 $t0 $t1 sw $t0 -224($fp) j label_184 @@ -5458,7 +5458,7 @@ label_184: lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -256($fp) lw $t0 -256($fp) @@ -5469,13 +5469,13 @@ bne $t0 $zero label_201 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -152($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -148($fp) lw $t0 0($fp) @@ -5516,7 +5516,7 @@ sw $t0 -136($fp) lw $t0 -136($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -132($fp) lw $t0 -140($fp) @@ -5525,7 +5525,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -176($fp) +sw $t1 -180($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5533,25 +5533,25 @@ sw $t0 -172($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -168($fp) +sw $t0 -164($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -164($fp) -lw $t0 -176($fp) +sw $t0 -168($fp) +lw $t0 -180($fp) lw $t1 -172($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) lw $t0 -160($fp) bne $t0 $zero label_187 -lw $t0 -176($fp) -lw $t1 -168($fp) +lw $t0 -180($fp) +lw $t1 -164($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) lw $t0 -160($fp) bne $t0 $zero label_188 -lw $t0 -176($fp) -lw $t1 -164($fp) +lw $t0 -180($fp) +lw $t1 -168($fp) seq $t0 $t0 $t1 sw $t0 -160($fp) lw $t0 -160($fp) @@ -5567,9 +5567,9 @@ lw $t1 12($t0) sw $t1 -184($fp) lw $t0 -132($fp) lw $t1 12($t0) -sw $t1 -180($fp) +sw $t1 -176($fp) lw $t0 -184($fp) -lw $t1 -180($fp) +lw $t1 -176($fp) seq $t0 $t0 $t1 sw $t0 -156($fp) j label_190 @@ -5579,10 +5579,10 @@ lw $t1 12($t0) sw $t1 -184($fp) lw $t0 -132($fp) lw $t1 12($t0) -sw $t1 -180($fp) +sw $t1 -176($fp) lw $t0 -184($fp) move $a0 $t0 -lw $t0 -180($fp) +lw $t0 -176($fp) move $a1 $t0 jal equal_str sw $v0 -156($fp) @@ -5593,9 +5593,9 @@ lw $t1 12($t0) sw $t1 -184($fp) lw $t0 -132($fp) lw $t1 12($t0) -sw $t1 -180($fp) +sw $t1 -176($fp) lw $t0 -184($fp) -lw $t1 -180($fp) +lw $t1 -176($fp) seq $t0 $t0 $t1 sw $t0 -156($fp) j label_190 @@ -5603,7 +5603,7 @@ label_190: lw $t0 -156($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -188($fp) lw $t0 -188($fp) @@ -5648,7 +5648,7 @@ label_193: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -120($fp) lw $t0 0($fp) @@ -5684,7 +5684,7 @@ sw $t1 -112($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -92($fp) lw $t0 -92($fp) @@ -5697,7 +5697,7 @@ sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -116($fp) lw $t0 0($fp) @@ -5773,7 +5773,7 @@ label_201: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -60($fp) lw $t0 0($fp) @@ -5809,7 +5809,7 @@ sw $t1 -52($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) @@ -5822,7 +5822,7 @@ sw $t0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 0($fp) @@ -5898,7 +5898,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) @@ -5911,14 +5911,14 @@ label_209: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -320($fp) label_210: lw $v0 -320($fp) -addi $sp $sp 320 +addi $sp $sp 312 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -5931,11 +5931,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -456 +addi $sp $sp -448 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -452($fp) lw $t0 -452($fp) @@ -5972,7 +5972,7 @@ sw $t0 -448($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -432($fp) lw $t0 -432($fp) @@ -5991,7 +5991,7 @@ sw $t1 -412($fp) lw $t0 -412($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -424($fp) lw $t0 -424($fp) @@ -6004,7 +6004,7 @@ label_214: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -404($fp) lw $t0 0($fp) @@ -6047,7 +6047,7 @@ sw $t0 -348($fp) lw $t0 -348($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -344($fp) lw $t0 -408($fp) @@ -6056,7 +6056,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -372($fp) +sw $t1 -376($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -6064,25 +6064,25 @@ sw $t0 -368($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -364($fp) +sw $t0 -360($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -360($fp) -lw $t0 -372($fp) +sw $t0 -364($fp) +lw $t0 -376($fp) lw $t1 -368($fp) seq $t0 $t0 $t1 sw $t0 -356($fp) lw $t0 -356($fp) bne $t0 $zero label_217 -lw $t0 -372($fp) -lw $t1 -364($fp) +lw $t0 -376($fp) +lw $t1 -360($fp) seq $t0 $t0 $t1 sw $t0 -356($fp) lw $t0 -356($fp) bne $t0 $zero label_218 -lw $t0 -372($fp) -lw $t1 -360($fp) +lw $t0 -376($fp) +lw $t1 -364($fp) seq $t0 $t0 $t1 sw $t0 -356($fp) lw $t0 -356($fp) @@ -6098,9 +6098,9 @@ lw $t1 12($t0) sw $t1 -380($fp) lw $t0 -344($fp) lw $t1 12($t0) -sw $t1 -376($fp) +sw $t1 -372($fp) lw $t0 -380($fp) -lw $t1 -376($fp) +lw $t1 -372($fp) seq $t0 $t0 $t1 sw $t0 -352($fp) j label_220 @@ -6110,10 +6110,10 @@ lw $t1 12($t0) sw $t1 -380($fp) lw $t0 -344($fp) lw $t1 12($t0) -sw $t1 -376($fp) +sw $t1 -372($fp) lw $t0 -380($fp) move $a0 $t0 -lw $t0 -376($fp) +lw $t0 -372($fp) move $a1 $t0 jal equal_str sw $v0 -352($fp) @@ -6124,9 +6124,9 @@ lw $t1 12($t0) sw $t1 -380($fp) lw $t0 -344($fp) lw $t1 12($t0) -sw $t1 -376($fp) +sw $t1 -372($fp) lw $t0 -380($fp) -lw $t1 -376($fp) +lw $t1 -372($fp) seq $t0 $t0 $t1 sw $t0 -352($fp) j label_220 @@ -6134,7 +6134,7 @@ label_220: lw $t0 -352($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -384($fp) lw $t0 -384($fp) @@ -6147,7 +6147,7 @@ sw $t0 -296($fp) lw $t0 -296($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -292($fp) lw $t0 -408($fp) @@ -6156,7 +6156,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -320($fp) +sw $t1 -324($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -6164,25 +6164,25 @@ sw $t0 -316($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -312($fp) +sw $t0 -308($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -308($fp) -lw $t0 -320($fp) +sw $t0 -312($fp) +lw $t0 -324($fp) lw $t1 -316($fp) seq $t0 $t0 $t1 sw $t0 -304($fp) lw $t0 -304($fp) bne $t0 $zero label_221 -lw $t0 -320($fp) -lw $t1 -312($fp) +lw $t0 -324($fp) +lw $t1 -308($fp) seq $t0 $t0 $t1 sw $t0 -304($fp) lw $t0 -304($fp) bne $t0 $zero label_222 -lw $t0 -320($fp) -lw $t1 -308($fp) +lw $t0 -324($fp) +lw $t1 -312($fp) seq $t0 $t0 $t1 sw $t0 -304($fp) lw $t0 -304($fp) @@ -6198,9 +6198,9 @@ lw $t1 12($t0) sw $t1 -328($fp) lw $t0 -292($fp) lw $t1 12($t0) -sw $t1 -324($fp) +sw $t1 -320($fp) lw $t0 -328($fp) -lw $t1 -324($fp) +lw $t1 -320($fp) seq $t0 $t0 $t1 sw $t0 -300($fp) j label_224 @@ -6210,10 +6210,10 @@ lw $t1 12($t0) sw $t1 -328($fp) lw $t0 -292($fp) lw $t1 12($t0) -sw $t1 -324($fp) +sw $t1 -320($fp) lw $t0 -328($fp) move $a0 $t0 -lw $t0 -324($fp) +lw $t0 -320($fp) move $a1 $t0 jal equal_str sw $v0 -300($fp) @@ -6224,9 +6224,9 @@ lw $t1 12($t0) sw $t1 -328($fp) lw $t0 -292($fp) lw $t1 12($t0) -sw $t1 -324($fp) +sw $t1 -320($fp) lw $t0 -328($fp) -lw $t1 -324($fp) +lw $t1 -320($fp) seq $t0 $t0 $t1 sw $t0 -300($fp) j label_224 @@ -6234,7 +6234,7 @@ label_224: lw $t0 -300($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -332($fp) lw $t0 -332($fp) @@ -6248,7 +6248,7 @@ sw $t1 -268($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -256($fp) lw $t0 -256($fp) @@ -6261,7 +6261,7 @@ sw $t0 -260($fp) lw $t0 -260($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -272($fp) lw $t0 -272($fp) @@ -6270,7 +6270,7 @@ sw $t1 -284($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -252($fp) lw $t0 0($fp) @@ -6346,7 +6346,7 @@ sw $t0 -276($fp) lw $t0 -276($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -288($fp) lw $t0 -288($fp) @@ -6357,7 +6357,7 @@ sw $t1 -228($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -216($fp) lw $t0 -216($fp) @@ -6370,7 +6370,7 @@ sw $t0 -220($fp) lw $t0 -220($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -232($fp) lw $t0 -232($fp) @@ -6381,7 +6381,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -192($fp) +sw $t1 -196($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -6389,25 +6389,25 @@ sw $t0 -188($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -184($fp) +sw $t0 -180($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -180($fp) -lw $t0 -192($fp) +sw $t0 -184($fp) +lw $t0 -196($fp) lw $t1 -188($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) bne $t0 $zero label_229 -lw $t0 -192($fp) -lw $t1 -184($fp) +lw $t0 -196($fp) +lw $t1 -180($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) bne $t0 $zero label_230 -lw $t0 -192($fp) -lw $t1 -180($fp) +lw $t0 -196($fp) +lw $t1 -184($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) @@ -6423,9 +6423,9 @@ lw $t1 12($t0) sw $t1 -200($fp) lw $t0 -448($fp) lw $t1 12($t0) -sw $t1 -196($fp) +sw $t1 -192($fp) lw $t0 -200($fp) -lw $t1 -196($fp) +lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) j label_232 @@ -6435,10 +6435,10 @@ lw $t1 12($t0) sw $t1 -200($fp) lw $t0 -448($fp) lw $t1 12($t0) -sw $t1 -196($fp) +sw $t1 -192($fp) lw $t0 -200($fp) move $a0 $t0 -lw $t0 -196($fp) +lw $t0 -192($fp) move $a1 $t0 jal equal_str sw $v0 -172($fp) @@ -6449,9 +6449,9 @@ lw $t1 12($t0) sw $t1 -200($fp) lw $t0 -448($fp) lw $t1 12($t0) -sw $t1 -196($fp) +sw $t1 -192($fp) lw $t0 -200($fp) -lw $t1 -196($fp) +lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) j label_232 @@ -6459,7 +6459,7 @@ label_232: lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -204($fp) lw $t0 -204($fp) @@ -6472,7 +6472,7 @@ sw $t0 -168($fp) lw $t0 -168($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -164($fp) lw $t0 -164($fp) @@ -6484,7 +6484,7 @@ sw $t0 -160($fp) lw $t0 -160($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -156($fp) lw $t0 -156($fp) @@ -6509,7 +6509,7 @@ sw $t1 -148($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -136($fp) lw $t0 -136($fp) @@ -6522,7 +6522,7 @@ sw $t0 -140($fp) lw $t0 -140($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -152($fp) lw $t0 0($fp) @@ -6565,7 +6565,7 @@ sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -116($fp) lw $t0 -116($fp) @@ -6574,7 +6574,7 @@ sw $t1 -128($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -92($fp) lw $t0 -92($fp) @@ -6587,7 +6587,7 @@ sw $t0 -120($fp) lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -132($fp) lw $t0 0($fp) @@ -6642,7 +6642,7 @@ sw $t1 -76($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -64($fp) lw $t0 -64($fp) @@ -6655,7 +6655,7 @@ sw $t0 -68($fp) lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -80($fp) lw $t0 0($fp) @@ -6698,7 +6698,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -6707,7 +6707,7 @@ sw $t1 -56($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -6720,7 +6720,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -60($fp) lw $t0 0($fp) @@ -6768,20 +6768,20 @@ label_246: j label_213 label_247: lw $v0 -456($fp) -addi $sp $sp 456 +addi $sp $sp 448 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Parse: +__ctor_Parse: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 12 sll $t0 $t0 2 la $t1 prototype_table @@ -6798,28 +6798,28 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Parse +jal __attributes_ctor_Parse addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -28 +addi $sp $sp -16 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Parse +jal __attributes_ctor_Parse addi $sp $sp 4 sw $v0 -24($fp) lw $t0 0($fp) @@ -6855,7 +6855,7 @@ lw $t0 0($fp) lw $t1 -20($fp) sw $t1 20($t0) lw $v0 0($fp) -addi $sp $sp 28 +addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -6868,7 +6868,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -28 +addi $sp $sp -16 lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -6954,20 +6954,20 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 28 +addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -8 li $t0 13 sll $t0 $t0 2 la $t1 prototype_table @@ -6984,18 +6984,18 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 20 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_BoolOp: +__attributes_ctor_BoolOp: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -7025,7 +7025,7 @@ bne $t0 $zero label_254 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -7062,7 +7062,7 @@ label_256: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -7076,7 +7076,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_BoolOp: +__ctor_BoolOp: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -7099,7 +7099,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_BoolOp +jal __attributes_ctor_BoolOp addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index 35451f79e..a2fc47ef1 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -28,45 +28,45 @@ data_12: .asciiz "" .word 0 data_13: .asciiz "Abort called from class " .word 0 -data_14: .asciiz "Substring out of range" +data_14: .asciiz "Index out of range exception" .word 0 -data_15: .asciiz "RuntimeError: void in switch case" +data_15: .asciiz "Void isntance found in switch case" .word 0 -data_16: .asciiz "RuntimeError: Case statement without a match branch" +data_16: .asciiz "Switch Case without valid branches" .word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" +data_17: .asciiz "Function call in a void instance" .word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" +data_18: .asciiz "Function call in a void instance" .word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" +data_19: .asciiz "Function call in a void instance" .word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" +data_20: .asciiz "Function call in a void instance" .word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" +data_21: .asciiz "Function call in a void instance" .word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" +data_22: .asciiz "Function call in a void instance" .word 0 -data_23: .asciiz "RuntimeError: void in switch case" +data_23: .asciiz "Void isntance found in switch case" .word 0 -data_24: .asciiz "RuntimeError: Case statement without a match branch" +data_24: .asciiz "Switch Case without valid branches" .word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" +data_25: .asciiz "Function call in a void instance" .word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" +data_26: .asciiz "Function call in a void instance" .word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" +data_27: .asciiz "Function call in a void instance" .word 0 -data_28: .asciiz "RuntimeError: Function call in a void instance" +data_28: .asciiz "Function call in a void instance" .word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" +data_29: .asciiz "Function call in a void instance" .word 0 -data_30: .asciiz "RuntimeError: void in switch case" +data_30: .asciiz "Void isntance found in switch case" .word 0 -data_31: .asciiz "RuntimeError: Case statement without a match branch" +data_31: .asciiz "Switch Case without valid branches" .word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" +data_32: .asciiz "Function call in a void instance" .word 0 -data_33: .asciiz "RuntimeError: Function call in a void instance" +data_33: .asciiz "Function call in a void instance" .word 0 data_34: .asciiz "do nothing" @@ -99,7 +99,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -116,7 +116,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -132,7 +132,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -147,7 +147,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -161,7 +161,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -181,8 +181,8 @@ type_6_dispatch: .word function_out_string_at_IO .word function_doh_at_Foo .word function_printh_at_Bazz -.word __init_attr_at_Foo -.word __init_at_Foo +.word __attributes_ctor_Foo +.word __ctor_Foo type_6_prototype: .word 5 @@ -206,8 +206,8 @@ type_7_dispatch: .word function_out_string_at_IO .word function_doh_at_Foo .word function_printh_at_Bazz -.word __init_attr_at_Bar -.word __init_at_Bar +.word __attributes_ctor_Bar +.word __ctor_Bar type_7_prototype: .word 6 @@ -235,8 +235,8 @@ type_8_dispatch: .word function_out_string_at_IO .word function_doh_at_Foo .word function_printh_at_Bazz -.word __init_attr_at_Razz -.word __init_at_Razz +.word __attributes_ctor_Razz +.word __ctor_Razz type_8_prototype: .word 7 @@ -262,8 +262,8 @@ type_9_dispatch: .word function_out_string_at_IO .word function_doh_at_Bazz .word function_printh_at_Bazz -.word __init_attr_at_Bazz -.word __init_at_Bazz +.word __attributes_ctor_Bazz +.word __ctor_Bazz type_9_prototype: .word 8 @@ -280,8 +280,8 @@ type_10_dispatch: .word function_copy_at_Object .word function_type_name_at_Object .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_10_prototype: .word 9 @@ -296,7 +296,7 @@ type_10_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -377,7 +377,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -412,7 +412,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -494,7 +494,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -518,7 +518,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -529,7 +529,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -558,7 +558,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -627,7 +627,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -686,7 +686,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -697,7 +697,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -728,7 +728,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -766,7 +766,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -783,17 +783,17 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_Foo: +__attributes_ctor_Foo: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -152 +addi $sp $sp -132 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Bazz +jal __attributes_ctor_Bazz addi $sp $sp 4 sw $v0 -140($fp) lw $t0 0($fp) @@ -861,7 +861,7 @@ j label_8 label_6: lw $t0 0($fp) sw $t0 -108($fp) -jal __init_at_Bar +jal __ctor_Bar sw $v0 -104($fp) lw $t0 -104($fp) sw $t0 -132($fp) @@ -869,7 +869,7 @@ j label_8 label_7: lw $t0 0($fp) sw $t0 -100($fp) -jal __init_at_Razz +jal __ctor_Razz sw $v0 -96($fp) lw $t0 -96($fp) sw $t0 -132($fp) @@ -977,7 +977,7 @@ sw $t0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 -56($fp) @@ -1020,7 +1020,7 @@ sw $t0 -60($fp) lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) @@ -1063,7 +1063,7 @@ sw $t0 -76($fp) lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -88($fp) lw $t0 -88($fp) @@ -1072,7 +1072,7 @@ lw $t0 0($fp) lw $t1 -92($fp) sw $t1 28($t0) lw $v0 0($fp) -addi $sp $sp 152 +addi $sp $sp 132 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1085,7 +1085,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -44 +addi $sp $sp -24 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1104,7 +1104,7 @@ sw $t1 -24($fp) li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -1117,7 +1117,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -1125,20 +1125,20 @@ lw $t1 0($fp) addi $t1 $t1 16 sw $t0 0($t1) lw $v0 -32($fp) -addi $sp $sp 44 +addi $sp $sp 24 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Foo: +__ctor_Foo: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -28 +addi $sp $sp -8 li $t0 5 sll $t0 $t0 2 la $t1 prototype_table @@ -1155,28 +1155,28 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Foo +jal __attributes_ctor_Foo addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 28 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Bar: +__attributes_ctor_Bar: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -64 +addi $sp $sp -28 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Razz +jal __attributes_ctor_Razz addi $sp $sp 4 sw $v0 -36($fp) lw $t0 0($fp) @@ -1244,20 +1244,20 @@ lw $t0 0($fp) lw $t1 -20($fp) sw $t1 44($t0) lw $v0 0($fp) -addi $sp $sp 64 +addi $sp $sp 28 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bar: +__ctor_Bar: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -44 +addi $sp $sp -8 li $t0 6 sll $t0 $t0 2 la $t1 prototype_table @@ -1274,28 +1274,28 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Bar +jal __attributes_ctor_Bar addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 44 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Razz: +__attributes_ctor_Razz: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -176 +addi $sp $sp -148 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Foo +jal __attributes_ctor_Foo addi $sp $sp 4 sw $v0 -156($fp) lw $t0 0($fp) @@ -1353,7 +1353,7 @@ j label_25 label_24: lw $t0 0($fp) sw $t0 -124($fp) -jal __init_at_Bar +jal __ctor_Bar sw $v0 -120($fp) lw $t0 -120($fp) sw $t0 -148($fp) @@ -1449,7 +1449,7 @@ sw $t0 -52($fp) lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -64($fp) lw $t0 -64($fp) @@ -1507,7 +1507,7 @@ sw $t0 -68($fp) lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -80($fp) lw $t0 -80($fp) @@ -1550,7 +1550,7 @@ sw $t0 -84($fp) lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -96($fp) lw $t0 -96($fp) @@ -1593,7 +1593,7 @@ sw $t0 -100($fp) lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -112($fp) lw $t0 -112($fp) @@ -1602,20 +1602,20 @@ lw $t0 0($fp) lw $t1 -116($fp) sw $t1 36($t0) lw $v0 0($fp) -addi $sp $sp 176 +addi $sp $sp 148 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Razz: +__ctor_Razz: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -36 +addi $sp $sp -8 li $t0 7 sll $t0 $t0 2 la $t1 prototype_table @@ -1632,28 +1632,28 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Razz +jal __attributes_ctor_Razz addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 36 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Bazz: +__attributes_ctor_Bazz: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -84 +addi $sp $sp -72 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -76($fp) lw $t0 -76($fp) @@ -1736,7 +1736,7 @@ j label_42 label_39: lw $t0 0($fp) sw $t0 -44($fp) -jal __init_at_Bar +jal __ctor_Bar sw $v0 -40($fp) lw $t0 -40($fp) sw $t0 -68($fp) @@ -1744,7 +1744,7 @@ j label_42 label_40: lw $t0 0($fp) sw $t0 -36($fp) -jal __init_at_Razz +jal __ctor_Razz sw $v0 -32($fp) lw $t0 -32($fp) sw $t0 -68($fp) @@ -1752,7 +1752,7 @@ j label_42 label_41: lw $t0 0($fp) sw $t0 -28($fp) -jal __init_at_Foo +jal __ctor_Foo sw $v0 -24($fp) lw $t0 -24($fp) sw $t0 -68($fp) @@ -1796,7 +1796,7 @@ lw $t0 0($fp) lw $t1 -20($fp) sw $t1 20($t0) lw $v0 0($fp) -addi $sp $sp 84 +addi $sp $sp 72 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1809,7 +1809,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -12 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -1848,11 +1848,11 @@ sw $v0 -16($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 24 +addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1865,7 +1865,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -36 +addi $sp $sp -24 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1884,7 +1884,7 @@ sw $t1 -24($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -1897,7 +1897,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -1905,20 +1905,20 @@ lw $t1 0($fp) addi $t1 $t1 16 sw $t0 0($t1) lw $v0 -32($fp) -addi $sp $sp 36 +addi $sp $sp 24 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bazz: +__ctor_Bazz: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -8 li $t0 8 sll $t0 $t0 2 la $t1 prototype_table @@ -1935,46 +1935,46 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Bazz +jal __attributes_ctor_Bazz addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 20 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -48 -jal __init_at_Bazz +addi $sp $sp -32 +jal __ctor_Bazz sw $v0 -36($fp) lw $t0 -36($fp) sw $t0 -40($fp) lw $t0 0($fp) lw $t1 -40($fp) sw $t1 12($t0) -jal __init_at_Foo +jal __ctor_Foo sw $v0 -28($fp) lw $t0 -28($fp) sw $t0 -32($fp) lw $t0 0($fp) lw $t1 -32($fp) sw $t1 16($t0) -jal __init_at_Razz +jal __ctor_Razz sw $v0 -20($fp) lw $t0 -20($fp) sw $t0 -24($fp) lw $t0 0($fp) lw $t1 -24($fp) sw $t1 20($t0) -jal __init_at_Bar +jal __ctor_Bar sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -16($fp) @@ -1982,7 +1982,7 @@ lw $t0 0($fp) lw $t1 -16($fp) sw $t1 24($t0) lw $v0 0($fp) -addi $sp $sp 48 +addi $sp $sp 32 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1995,30 +1995,30 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -8 la $t0 data_34 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 24 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -8 li $t0 9 sll $t0 $t0 2 la $t1 prototype_table @@ -2035,11 +2035,11 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 24 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index 7eb729c88..db04dbea2 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -20,11 +20,11 @@ data_8: .asciiz "" .word 0 data_9: .asciiz "Abort called from class " .word 0 -data_10: .asciiz "Substring out of range" +data_10: .asciiz "Index out of range exception" .word 0 data_11: .asciiz "Hello, World.\n" .word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" +data_12: .asciiz "Function call in a void instance" types_table: @@ -47,7 +47,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -64,7 +64,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -80,7 +80,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -95,7 +95,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -109,7 +109,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -128,8 +128,8 @@ type_6_dispatch: .word function_out_int_at_IO .word function_out_string_at_IO .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_6_prototype: .word 5 @@ -140,7 +140,7 @@ type_6_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -221,7 +221,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -256,7 +256,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -338,7 +338,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -362,7 +362,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -373,7 +373,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -402,7 +402,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -471,7 +471,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -530,7 +530,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -541,7 +541,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -572,7 +572,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -610,7 +610,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -627,7 +627,7 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -654,7 +654,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -695,7 +695,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -718,7 +718,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index b3b670c25..1086ee33f 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -28,35 +28,35 @@ data_12: .asciiz "" .word 0 data_13: .asciiz "Abort called from class " .word 0 -data_14: .asciiz "Substring out of range" +data_14: .asciiz "Index out of range exception" .word 0 data_15: .asciiz "A: Hello world\n" .word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" +data_16: .asciiz "Function call in a void instance" .word 0 data_17: .asciiz "B: Hello world\n" .word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" +data_18: .asciiz "Function call in a void instance" .word 0 data_19: .asciiz "C: Hello world\n" .word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" +data_20: .asciiz "Function call in a void instance" .word 0 data_21: .asciiz "D: Hello world\n" .word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" +data_22: .asciiz "Function call in a void instance" .word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" +data_23: .asciiz "Function call in a void instance" .word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" +data_24: .asciiz "Function call in a void instance" .word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" +data_25: .asciiz "Function call in a void instance" .word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" +data_26: .asciiz "Function call in a void instance" .word 0 data_27: .asciiz "Done.\n" .word 0 -data_28: .asciiz "RuntimeError: Function call in a void instance" +data_28: .asciiz "Function call in a void instance" types_table: @@ -87,7 +87,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -104,7 +104,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -120,7 +120,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -135,7 +135,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -149,7 +149,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -164,8 +164,8 @@ type_6_dispatch: .word function_copy_at_Object .word function_type_name_at_Object .word function_out_a_at_A -.word __init_attr_at_A -.word __init_at_A +.word __attributes_ctor_A +.word __ctor_A type_6_prototype: .word 5 @@ -181,8 +181,8 @@ type_7_dispatch: .word function_type_name_at_Object .word function_out_a_at_A .word function_out_b_at_B -.word __init_attr_at_B -.word __init_at_B +.word __attributes_ctor_B +.word __ctor_B type_7_prototype: .word 6 @@ -201,8 +201,8 @@ type_8_dispatch: .word function_out_int_at_IO .word function_out_string_at_IO .word function_out_c_at_C -.word __init_attr_at_C -.word __init_at_C +.word __attributes_ctor_C +.word __ctor_C type_8_prototype: .word 7 @@ -221,8 +221,8 @@ type_9_dispatch: .word function_out_string_at_IO .word function_out_c_at_C .word function_out_d_at_D -.word __init_attr_at_D -.word __init_at_D +.word __attributes_ctor_D +.word __ctor_D type_9_prototype: .word 8 @@ -240,8 +240,8 @@ type_10_dispatch: .word function_out_int_at_IO .word function_out_string_at_IO .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_10_prototype: .word 9 @@ -252,7 +252,7 @@ type_10_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -333,7 +333,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -368,7 +368,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -450,7 +450,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -474,7 +474,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -485,7 +485,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -514,7 +514,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -583,7 +583,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -642,7 +642,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -653,7 +653,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -684,7 +684,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -722,7 +722,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -739,14 +739,14 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_A: +__attributes_ctor_A: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 -jal __init_at_IO +addi $sp $sp -8 +jal __ctor_IO sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -16($fp) @@ -754,7 +754,7 @@ lw $t0 0($fp) lw $t1 -16($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -767,13 +767,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -16 la $t0 data_15 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t4 0($fp) @@ -822,20 +822,20 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 20 +addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_A: +__ctor_A: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 5 sll $t0 $t0 2 la $t1 prototype_table @@ -852,32 +852,32 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_A +jal __attributes_ctor_A addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_B: +__attributes_ctor_B: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_A +jal __attributes_ctor_A addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -890,13 +890,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -16 la $t0 data_17 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t4 0($fp) @@ -945,20 +945,20 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 20 +addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_B: +__ctor_B: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 6 sll $t0 $t0 2 la $t1 prototype_table @@ -975,18 +975,18 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_B +jal __attributes_ctor_B addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_C: +__attributes_ctor_C: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1013,7 +1013,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -1054,7 +1054,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_C: +__ctor_C: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1077,7 +1077,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_C +jal __attributes_ctor_C addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -1088,7 +1088,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_D: +__attributes_ctor_D: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1098,7 +1098,7 @@ addi $sp $sp -4 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_C +jal __attributes_ctor_C addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) @@ -1121,7 +1121,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -1162,7 +1162,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_D: +__ctor_D: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1185,7 +1185,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_D +jal __attributes_ctor_D addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -1196,7 +1196,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1218,7 +1218,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -64 -jal __init_at_A +jal __ctor_A sw $v0 -72($fp) lw $t0 -72($fp) li $t1 0 @@ -1247,7 +1247,7 @@ lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -64($fp) -jal __init_at_B +jal __ctor_B sw $v0 -60($fp) lw $t0 -60($fp) li $t1 0 @@ -1276,7 +1276,7 @@ lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -52($fp) -jal __init_at_C +jal __ctor_C sw $v0 -48($fp) lw $t0 -48($fp) li $t1 0 @@ -1305,7 +1305,7 @@ lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -40($fp) -jal __init_at_D +jal __ctor_D sw $v0 -36($fp) lw $t0 -36($fp) li $t1 0 @@ -1339,7 +1339,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -1380,7 +1380,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1403,7 +1403,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 410d7159a..6f954ec6e 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -24,129 +24,129 @@ data_10: .asciiz "" .word 0 data_11: .asciiz "Abort called from class " .word 0 -data_12: .asciiz "Substring out of range" +data_12: .asciiz "Index out of range exception" .word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" +data_13: .asciiz "Function call in a void instance" .word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" +data_14: .asciiz "Function call in a void instance" .word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" +data_15: .asciiz "Function call in a void instance" .word 0 data_16: .asciiz "\n" .word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" +data_17: .asciiz "Function call in a void instance" .word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" +data_18: .asciiz "Function call in a void instance" .word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" +data_19: .asciiz "Function call in a void instance" .word 0 data_20: .asciiz "\n" .word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" +data_21: .asciiz "Function call in a void instance" .word 0 data_22: .asciiz "\n" .word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" +data_23: .asciiz "Function call in a void instance" .word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" +data_24: .asciiz "Function call in a void instance" .word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" +data_25: .asciiz "Function call in a void instance" .word 0 data_26: .asciiz " " .word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" +data_27: .asciiz "Function call in a void instance" .word 0 data_28: .asciiz " " .word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" +data_29: .asciiz "Function call in a void instance" .word 0 data_30: .asciiz " " .word 0 -data_31: .asciiz "RuntimeError: Division by zero" +data_31: .asciiz "Division by zero exception" .word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" +data_32: .asciiz "Function call in a void instance" .word 0 data_33: .asciiz " " .word 0 -data_34: .asciiz "RuntimeError: Division by zero" +data_34: .asciiz "Division by zero exception" .word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" +data_35: .asciiz "Function call in a void instance" .word 0 data_36: .asciiz " " .word 0 data_37: .asciiz " " .word 0 -data_38: .asciiz "RuntimeError: Division by zero" +data_38: .asciiz "Division by zero exception" .word 0 -data_39: .asciiz "RuntimeError: Function call in a void instance" +data_39: .asciiz "Function call in a void instance" .word 0 data_40: .asciiz " " .word 0 data_41: .asciiz " " .word 0 -data_42: .asciiz "RuntimeError: Division by zero" +data_42: .asciiz "Division by zero exception" .word 0 -data_43: .asciiz "RuntimeError: Function call in a void instance" +data_43: .asciiz "Function call in a void instance" .word 0 data_44: .asciiz " " .word 0 data_45: .asciiz " " .word 0 -data_46: .asciiz "RuntimeError: Division by zero" +data_46: .asciiz "Division by zero exception" .word 0 -data_47: .asciiz "RuntimeError: Function call in a void instance" +data_47: .asciiz "Function call in a void instance" .word 0 data_48: .asciiz " " .word 0 data_49: .asciiz " " .word 0 -data_50: .asciiz "RuntimeError: Division by zero" +data_50: .asciiz "Division by zero exception" .word 0 -data_51: .asciiz "RuntimeError: Function call in a void instance" +data_51: .asciiz "Function call in a void instance" .word 0 data_52: .asciiz " " .word 0 data_53: .asciiz " " .word 0 -data_54: .asciiz "RuntimeError: Function call in a void instance" +data_54: .asciiz "Function call in a void instance" .word 0 data_55: .asciiz "X" .word 0 -data_56: .asciiz "RuntimeError: Function call in a void instance" +data_56: .asciiz "Function call in a void instance" .word 0 data_57: .asciiz "X" .word 0 -data_58: .asciiz "RuntimeError: Function call in a void instance" +data_58: .asciiz "Function call in a void instance" .word 0 data_59: .asciiz "X" .word 0 -data_60: .asciiz "RuntimeError: Function call in a void instance" +data_60: .asciiz "Function call in a void instance" .word 0 data_61: .asciiz "X" .word 0 -data_62: .asciiz "RuntimeError: Function call in a void instance" +data_62: .asciiz "Function call in a void instance" .word 0 data_63: .asciiz "X" .word 0 -data_64: .asciiz "RuntimeError: Function call in a void instance" +data_64: .asciiz "Function call in a void instance" .word 0 data_65: .asciiz "X" .word 0 -data_66: .asciiz "RuntimeError: Function call in a void instance" +data_66: .asciiz "Function call in a void instance" .word 0 data_67: .asciiz "X" .word 0 -data_68: .asciiz "RuntimeError: Function call in a void instance" +data_68: .asciiz "Function call in a void instance" .word 0 data_69: .asciiz "X" .word 0 -data_70: .asciiz "RuntimeError: Function call in a void instance" +data_70: .asciiz "Function call in a void instance" .word 0 -data_71: .asciiz "RuntimeError: Function call in a void instance" +data_71: .asciiz "Function call in a void instance" .word 0 data_72: .asciiz "-" .word 0 -data_73: .asciiz "RuntimeError: Function call in a void instance" +data_73: .asciiz "Function call in a void instance" .word 0 data_74: .asciiz "X" .word 0 @@ -156,109 +156,109 @@ data_76: .asciiz "X" .word 0 data_77: .asciiz "X" .word 0 -data_78: .asciiz "RuntimeError: Function call in a void instance" +data_78: .asciiz "Function call in a void instance" .word 0 -data_79: .asciiz "RuntimeError: Function call in a void instance" +data_79: .asciiz "Function call in a void instance" .word 0 -data_80: .asciiz "RuntimeError: Function call in a void instance" +data_80: .asciiz "Function call in a void instance" .word 0 data_81: .asciiz "\nPlease chose a number:\n" .word 0 -data_82: .asciiz "RuntimeError: Function call in a void instance" +data_82: .asciiz "Function call in a void instance" .word 0 data_83: .asciiz "\t1: A cross\n" .word 0 -data_84: .asciiz "RuntimeError: Function call in a void instance" +data_84: .asciiz "Function call in a void instance" .word 0 data_85: .asciiz "\t2: A slash from the upper left to lower right\n" .word 0 -data_86: .asciiz "RuntimeError: Function call in a void instance" +data_86: .asciiz "Function call in a void instance" .word 0 data_87: .asciiz "\t3: A slash from the upper right to lower left\n" .word 0 -data_88: .asciiz "RuntimeError: Function call in a void instance" +data_88: .asciiz "Function call in a void instance" .word 0 data_89: .asciiz "\t4: An X\n" .word 0 -data_90: .asciiz "RuntimeError: Function call in a void instance" +data_90: .asciiz "Function call in a void instance" .word 0 data_91: .asciiz "\t5: A greater than sign \n" .word 0 -data_92: .asciiz "RuntimeError: Function call in a void instance" +data_92: .asciiz "Function call in a void instance" .word 0 data_93: .asciiz "\t6: A less than sign\n" .word 0 -data_94: .asciiz "RuntimeError: Function call in a void instance" +data_94: .asciiz "Function call in a void instance" .word 0 data_95: .asciiz "\t7: Two greater than signs\n" .word 0 -data_96: .asciiz "RuntimeError: Function call in a void instance" +data_96: .asciiz "Function call in a void instance" .word 0 data_97: .asciiz "\t8: Two less than signs\n" .word 0 -data_98: .asciiz "RuntimeError: Function call in a void instance" +data_98: .asciiz "Function call in a void instance" .word 0 data_99: .asciiz "\t9: A 'V'\n" .word 0 -data_100: .asciiz "RuntimeError: Function call in a void instance" +data_100: .asciiz "Function call in a void instance" .word 0 data_101: .asciiz "\t10: An inverse 'V'\n" .word 0 -data_102: .asciiz "RuntimeError: Function call in a void instance" +data_102: .asciiz "Function call in a void instance" .word 0 data_103: .asciiz "\t11: Numbers 9 and 10 combined\n" .word 0 -data_104: .asciiz "RuntimeError: Function call in a void instance" +data_104: .asciiz "Function call in a void instance" .word 0 data_105: .asciiz "\t12: A full grid\n" .word 0 -data_106: .asciiz "RuntimeError: Function call in a void instance" +data_106: .asciiz "Function call in a void instance" .word 0 data_107: .asciiz "\t13: A 'T'\n" .word 0 -data_108: .asciiz "RuntimeError: Function call in a void instance" +data_108: .asciiz "Function call in a void instance" .word 0 data_109: .asciiz "\t14: A plus '+'\n" .word 0 -data_110: .asciiz "RuntimeError: Function call in a void instance" +data_110: .asciiz "Function call in a void instance" .word 0 data_111: .asciiz "\t15: A 'W'\n" .word 0 -data_112: .asciiz "RuntimeError: Function call in a void instance" +data_112: .asciiz "Function call in a void instance" .word 0 data_113: .asciiz "\t16: An 'M'\n" .word 0 -data_114: .asciiz "RuntimeError: Function call in a void instance" +data_114: .asciiz "Function call in a void instance" .word 0 data_115: .asciiz "\t17: An 'E'\n" .word 0 -data_116: .asciiz "RuntimeError: Function call in a void instance" +data_116: .asciiz "Function call in a void instance" .word 0 data_117: .asciiz "\t18: A '3'\n" .word 0 -data_118: .asciiz "RuntimeError: Function call in a void instance" +data_118: .asciiz "Function call in a void instance" .word 0 data_119: .asciiz "\t19: An 'O'\n" .word 0 -data_120: .asciiz "RuntimeError: Function call in a void instance" +data_120: .asciiz "Function call in a void instance" .word 0 data_121: .asciiz "\t20: An '8'\n" .word 0 -data_122: .asciiz "RuntimeError: Function call in a void instance" +data_122: .asciiz "Function call in a void instance" .word 0 data_123: .asciiz "\t21: An 'S'\n" .word 0 -data_124: .asciiz "RuntimeError: Function call in a void instance" +data_124: .asciiz "Function call in a void instance" .word 0 data_125: .asciiz "Your choice => " .word 0 -data_126: .asciiz "RuntimeError: Function call in a void instance" +data_126: .asciiz "Function call in a void instance" .word 0 -data_127: .asciiz "RuntimeError: Function call in a void instance" +data_127: .asciiz "Function call in a void instance" .word 0 data_128: .asciiz "\n" .word 0 -data_129: .asciiz "RuntimeError: Function call in a void instance" +data_129: .asciiz "Function call in a void instance" .word 0 data_130: .asciiz " " .word 0 @@ -306,57 +306,57 @@ data_151: .asciiz " XX XXXX XXXX XX " .word 0 data_152: .asciiz "Would you like to continue with the next generation? \n" .word 0 -data_153: .asciiz "RuntimeError: Function call in a void instance" +data_153: .asciiz "Function call in a void instance" .word 0 data_154: .asciiz "Please use lowercase y or n for your answer [y]: " .word 0 -data_155: .asciiz "RuntimeError: Function call in a void instance" +data_155: .asciiz "Function call in a void instance" .word 0 -data_156: .asciiz "RuntimeError: Function call in a void instance" +data_156: .asciiz "Function call in a void instance" .word 0 data_157: .asciiz "\n" .word 0 -data_158: .asciiz "RuntimeError: Function call in a void instance" +data_158: .asciiz "Function call in a void instance" .word 0 data_159: .asciiz "n" .word 0 data_160: .asciiz "\n\n" .word 0 -data_161: .asciiz "RuntimeError: Function call in a void instance" +data_161: .asciiz "Function call in a void instance" .word 0 data_162: .asciiz "Would you like to choose a background pattern? \n" .word 0 -data_163: .asciiz "RuntimeError: Function call in a void instance" +data_163: .asciiz "Function call in a void instance" .word 0 data_164: .asciiz "Please use lowercase y or n for your answer [n]: " .word 0 -data_165: .asciiz "RuntimeError: Function call in a void instance" +data_165: .asciiz "Function call in a void instance" .word 0 -data_166: .asciiz "RuntimeError: Function call in a void instance" +data_166: .asciiz "Function call in a void instance" .word 0 data_167: .asciiz "y" .word 0 data_168: .asciiz "Welcome to the Game of Life.\n" .word 0 -data_169: .asciiz "RuntimeError: Function call in a void instance" +data_169: .asciiz "Function call in a void instance" .word 0 data_170: .asciiz "There are many initial states to choose from. \n" .word 0 -data_171: .asciiz "RuntimeError: Function call in a void instance" +data_171: .asciiz "Function call in a void instance" .word 0 -data_172: .asciiz "RuntimeError: Function call in a void instance" +data_172: .asciiz "Function call in a void instance" .word 0 -data_173: .asciiz "RuntimeError: Function call in a void instance" +data_173: .asciiz "Function call in a void instance" .word 0 -data_174: .asciiz "RuntimeError: Function call in a void instance" +data_174: .asciiz "Function call in a void instance" .word 0 -data_175: .asciiz "RuntimeError: Function call in a void instance" +data_175: .asciiz "Function call in a void instance" .word 0 -data_176: .asciiz "RuntimeError: Function call in a void instance" +data_176: .asciiz "Function call in a void instance" .word 0 -data_177: .asciiz "RuntimeError: Function call in a void instance" +data_177: .asciiz "Function call in a void instance" .word 0 -data_178: .asciiz "RuntimeError: Function call in a void instance" +data_178: .asciiz "Function call in a void instance" types_table: @@ -383,7 +383,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -400,7 +400,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -416,7 +416,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -431,7 +431,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -445,7 +445,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -465,8 +465,8 @@ type_6_dispatch: .word function_out_string_at_IO .word function_board_init_at_Board .word function_size_of_board_at_Board -.word __init_attr_at_Board -.word __init_at_Board +.word __attributes_ctor_Board +.word __ctor_Board type_6_prototype: .word 5 @@ -506,8 +506,8 @@ type_7_dispatch: .word function_southeast_at_CellularAutomaton .word function_southwest_at_CellularAutomaton .word function_west_at_CellularAutomaton -.word __init_attr_at_CellularAutomaton -.word __init_at_CellularAutomaton +.word __attributes_ctor_CellularAutomaton +.word __ctor_CellularAutomaton type_7_prototype: .word 6 @@ -549,8 +549,8 @@ type_8_dispatch: .word function_southwest_at_CellularAutomaton .word function_west_at_CellularAutomaton .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_8_prototype: .word 7 @@ -566,7 +566,7 @@ type_8_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -647,7 +647,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -682,7 +682,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -764,7 +764,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -788,7 +788,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -799,7 +799,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -828,7 +828,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -897,7 +897,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -956,7 +956,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -967,7 +967,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -998,7 +998,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1036,7 +1036,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -1053,17 +1053,17 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_Board: +__attributes_ctor_Board: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -12 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -1072,7 +1072,7 @@ sw $t1 20($t0) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -16($fp) lw $t0 0($fp) @@ -1081,14 +1081,14 @@ sw $t1 16($t0) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 24 +addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1101,7 +1101,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -8 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -1130,7 +1130,7 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 20 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1143,7 +1143,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -368 +addi $sp $sp -356 lw $t0 4($fp) li $t1 0 seq $t0 $t0 $t1 @@ -1179,7 +1179,7 @@ sw $t0 -364($fp) li $t0 15 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -308($fp) lw $t0 -364($fp) @@ -1188,7 +1188,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -332($fp) +sw $t1 -336($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1196,25 +1196,25 @@ sw $t0 -328($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -324($fp) +sw $t0 -320($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -320($fp) -lw $t0 -332($fp) +sw $t0 -324($fp) +lw $t0 -336($fp) lw $t1 -328($fp) seq $t0 $t0 $t1 sw $t0 -316($fp) lw $t0 -316($fp) bne $t0 $zero label_7 -lw $t0 -332($fp) -lw $t1 -324($fp) +lw $t0 -336($fp) +lw $t1 -320($fp) seq $t0 $t0 $t1 sw $t0 -316($fp) lw $t0 -316($fp) bne $t0 $zero label_8 -lw $t0 -332($fp) -lw $t1 -320($fp) +lw $t0 -336($fp) +lw $t1 -324($fp) seq $t0 $t0 $t1 sw $t0 -316($fp) lw $t0 -316($fp) @@ -1230,9 +1230,9 @@ lw $t1 12($t0) sw $t1 -340($fp) lw $t0 -308($fp) lw $t1 12($t0) -sw $t1 -336($fp) +sw $t1 -332($fp) lw $t0 -340($fp) -lw $t1 -336($fp) +lw $t1 -332($fp) seq $t0 $t0 $t1 sw $t0 -312($fp) j label_10 @@ -1242,10 +1242,10 @@ lw $t1 12($t0) sw $t1 -340($fp) lw $t0 -308($fp) lw $t1 12($t0) -sw $t1 -336($fp) +sw $t1 -332($fp) lw $t0 -340($fp) move $a0 $t0 -lw $t0 -336($fp) +lw $t0 -332($fp) move $a1 $t0 jal equal_str sw $v0 -312($fp) @@ -1256,9 +1256,9 @@ lw $t1 12($t0) sw $t1 -340($fp) lw $t0 -308($fp) lw $t1 12($t0) -sw $t1 -336($fp) +sw $t1 -332($fp) lw $t0 -340($fp) -lw $t1 -336($fp) +lw $t1 -332($fp) seq $t0 $t0 $t1 sw $t0 -312($fp) j label_10 @@ -1266,7 +1266,7 @@ label_10: lw $t0 -312($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -344($fp) lw $t0 -344($fp) @@ -1277,7 +1277,7 @@ bne $t0 $zero label_41 li $t0 16 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -260($fp) lw $t0 -364($fp) @@ -1286,7 +1286,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -284($fp) +sw $t1 -288($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1294,25 +1294,25 @@ sw $t0 -280($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -276($fp) +sw $t0 -272($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -272($fp) -lw $t0 -284($fp) +sw $t0 -276($fp) +lw $t0 -288($fp) lw $t1 -280($fp) seq $t0 $t0 $t1 sw $t0 -268($fp) lw $t0 -268($fp) bne $t0 $zero label_11 -lw $t0 -284($fp) -lw $t1 -276($fp) +lw $t0 -288($fp) +lw $t1 -272($fp) seq $t0 $t0 $t1 sw $t0 -268($fp) lw $t0 -268($fp) bne $t0 $zero label_12 -lw $t0 -284($fp) -lw $t1 -272($fp) +lw $t0 -288($fp) +lw $t1 -276($fp) seq $t0 $t0 $t1 sw $t0 -268($fp) lw $t0 -268($fp) @@ -1328,9 +1328,9 @@ lw $t1 12($t0) sw $t1 -292($fp) lw $t0 -260($fp) lw $t1 12($t0) -sw $t1 -288($fp) +sw $t1 -284($fp) lw $t0 -292($fp) -lw $t1 -288($fp) +lw $t1 -284($fp) seq $t0 $t0 $t1 sw $t0 -264($fp) j label_14 @@ -1340,10 +1340,10 @@ lw $t1 12($t0) sw $t1 -292($fp) lw $t0 -260($fp) lw $t1 12($t0) -sw $t1 -288($fp) +sw $t1 -284($fp) lw $t0 -292($fp) move $a0 $t0 -lw $t0 -288($fp) +lw $t0 -284($fp) move $a1 $t0 jal equal_str sw $v0 -264($fp) @@ -1354,9 +1354,9 @@ lw $t1 12($t0) sw $t1 -292($fp) lw $t0 -260($fp) lw $t1 12($t0) -sw $t1 -288($fp) +sw $t1 -284($fp) lw $t0 -292($fp) -lw $t1 -288($fp) +lw $t1 -284($fp) seq $t0 $t0 $t1 sw $t0 -264($fp) j label_14 @@ -1364,7 +1364,7 @@ label_14: lw $t0 -264($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -296($fp) lw $t0 -296($fp) @@ -1375,7 +1375,7 @@ bne $t0 $zero label_39 li $t0 20 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -212($fp) lw $t0 -364($fp) @@ -1384,7 +1384,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -236($fp) +sw $t1 -240($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1392,25 +1392,25 @@ sw $t0 -232($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -228($fp) +sw $t0 -224($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -224($fp) -lw $t0 -236($fp) +sw $t0 -228($fp) +lw $t0 -240($fp) lw $t1 -232($fp) seq $t0 $t0 $t1 sw $t0 -220($fp) lw $t0 -220($fp) bne $t0 $zero label_15 -lw $t0 -236($fp) -lw $t1 -228($fp) +lw $t0 -240($fp) +lw $t1 -224($fp) seq $t0 $t0 $t1 sw $t0 -220($fp) lw $t0 -220($fp) bne $t0 $zero label_16 -lw $t0 -236($fp) -lw $t1 -224($fp) +lw $t0 -240($fp) +lw $t1 -228($fp) seq $t0 $t0 $t1 sw $t0 -220($fp) lw $t0 -220($fp) @@ -1426,9 +1426,9 @@ lw $t1 12($t0) sw $t1 -244($fp) lw $t0 -212($fp) lw $t1 12($t0) -sw $t1 -240($fp) +sw $t1 -236($fp) lw $t0 -244($fp) -lw $t1 -240($fp) +lw $t1 -236($fp) seq $t0 $t0 $t1 sw $t0 -216($fp) j label_18 @@ -1438,10 +1438,10 @@ lw $t1 12($t0) sw $t1 -244($fp) lw $t0 -212($fp) lw $t1 12($t0) -sw $t1 -240($fp) +sw $t1 -236($fp) lw $t0 -244($fp) move $a0 $t0 -lw $t0 -240($fp) +lw $t0 -236($fp) move $a1 $t0 jal equal_str sw $v0 -216($fp) @@ -1452,9 +1452,9 @@ lw $t1 12($t0) sw $t1 -244($fp) lw $t0 -212($fp) lw $t1 12($t0) -sw $t1 -240($fp) +sw $t1 -236($fp) lw $t0 -244($fp) -lw $t1 -240($fp) +lw $t1 -236($fp) seq $t0 $t0 $t1 sw $t0 -216($fp) j label_18 @@ -1462,7 +1462,7 @@ label_18: lw $t0 -216($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -248($fp) lw $t0 -248($fp) @@ -1473,7 +1473,7 @@ bne $t0 $zero label_37 li $t0 21 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -164($fp) lw $t0 -364($fp) @@ -1482,7 +1482,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -188($fp) +sw $t1 -192($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1490,25 +1490,25 @@ sw $t0 -184($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -180($fp) +sw $t0 -176($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -176($fp) -lw $t0 -188($fp) +sw $t0 -180($fp) +lw $t0 -192($fp) lw $t1 -184($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) lw $t0 -172($fp) bne $t0 $zero label_19 -lw $t0 -188($fp) -lw $t1 -180($fp) +lw $t0 -192($fp) +lw $t1 -176($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) lw $t0 -172($fp) bne $t0 $zero label_20 -lw $t0 -188($fp) -lw $t1 -176($fp) +lw $t0 -192($fp) +lw $t1 -180($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) lw $t0 -172($fp) @@ -1524,9 +1524,9 @@ lw $t1 12($t0) sw $t1 -196($fp) lw $t0 -164($fp) lw $t1 12($t0) -sw $t1 -192($fp) +sw $t1 -188($fp) lw $t0 -196($fp) -lw $t1 -192($fp) +lw $t1 -188($fp) seq $t0 $t0 $t1 sw $t0 -168($fp) j label_22 @@ -1536,10 +1536,10 @@ lw $t1 12($t0) sw $t1 -196($fp) lw $t0 -164($fp) lw $t1 12($t0) -sw $t1 -192($fp) +sw $t1 -188($fp) lw $t0 -196($fp) move $a0 $t0 -lw $t0 -192($fp) +lw $t0 -188($fp) move $a1 $t0 jal equal_str sw $v0 -168($fp) @@ -1550,9 +1550,9 @@ lw $t1 12($t0) sw $t1 -196($fp) lw $t0 -164($fp) lw $t1 12($t0) -sw $t1 -192($fp) +sw $t1 -188($fp) lw $t0 -196($fp) -lw $t1 -192($fp) +lw $t1 -188($fp) seq $t0 $t0 $t1 sw $t0 -168($fp) j label_22 @@ -1560,7 +1560,7 @@ label_22: lw $t0 -168($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -200($fp) lw $t0 -200($fp) @@ -1571,7 +1571,7 @@ bne $t0 $zero label_35 li $t0 25 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -116($fp) lw $t0 -364($fp) @@ -1580,7 +1580,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -140($fp) +sw $t1 -144($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1588,25 +1588,25 @@ sw $t0 -136($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -132($fp) +sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -128($fp) -lw $t0 -140($fp) +sw $t0 -132($fp) +lw $t0 -144($fp) lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) lw $t0 -124($fp) bne $t0 $zero label_23 -lw $t0 -140($fp) -lw $t1 -132($fp) +lw $t0 -144($fp) +lw $t1 -128($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) lw $t0 -124($fp) bne $t0 $zero label_24 -lw $t0 -140($fp) -lw $t1 -128($fp) +lw $t0 -144($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) lw $t0 -124($fp) @@ -1622,9 +1622,9 @@ lw $t1 12($t0) sw $t1 -148($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -144($fp) +sw $t1 -140($fp) lw $t0 -148($fp) -lw $t1 -144($fp) +lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) j label_26 @@ -1634,10 +1634,10 @@ lw $t1 12($t0) sw $t1 -148($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -144($fp) +sw $t1 -140($fp) lw $t0 -148($fp) move $a0 $t0 -lw $t0 -144($fp) +lw $t0 -140($fp) move $a1 $t0 jal equal_str sw $v0 -120($fp) @@ -1648,9 +1648,9 @@ lw $t1 12($t0) sw $t1 -148($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -144($fp) +sw $t1 -140($fp) lw $t0 -148($fp) -lw $t1 -144($fp) +lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) j label_26 @@ -1658,7 +1658,7 @@ label_26: lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -152($fp) lw $t0 -152($fp) @@ -1669,7 +1669,7 @@ bne $t0 $zero label_33 li $t0 28 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -364($fp) @@ -1678,7 +1678,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -92($fp) +sw $t1 -96($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1686,25 +1686,25 @@ sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -84($fp) +sw $t0 -80($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -80($fp) -lw $t0 -92($fp) +sw $t0 -84($fp) +lw $t0 -96($fp) lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_27 -lw $t0 -92($fp) -lw $t1 -84($fp) +lw $t0 -96($fp) +lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_28 -lw $t0 -92($fp) -lw $t1 -80($fp) +lw $t0 -96($fp) +lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) @@ -1720,9 +1720,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_30 @@ -1732,10 +1732,10 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) move $a0 $t0 -lw $t0 -96($fp) +lw $t0 -92($fp) move $a1 $t0 jal equal_str sw $v0 -72($fp) @@ -1746,9 +1746,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_30 @@ -1756,7 +1756,7 @@ label_30: lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -104($fp) lw $t0 -104($fp) @@ -1767,7 +1767,7 @@ bne $t0 $zero label_31 li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -64($fp) lw $t0 -64($fp) @@ -1777,7 +1777,7 @@ sw $t0 0($t1) li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -1800,7 +1800,7 @@ label_31: li $t0 7 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 -56($fp) @@ -1810,7 +1810,7 @@ sw $t0 0($t1) li $t0 4 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -1836,7 +1836,7 @@ label_33: li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 -48($fp) @@ -1846,7 +1846,7 @@ sw $t0 0($t1) li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -1872,7 +1872,7 @@ label_35: li $t0 3 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -40($fp) lw $t0 -40($fp) @@ -1882,7 +1882,7 @@ sw $t0 0($t1) li $t0 7 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -1908,7 +1908,7 @@ label_37: li $t0 4 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) @@ -1918,7 +1918,7 @@ sw $t0 0($t1) li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -1944,7 +1944,7 @@ label_39: li $t0 4 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -24($fp) lw $t0 -24($fp) @@ -1954,7 +1954,7 @@ sw $t0 0($t1) li $t0 4 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -1980,7 +1980,7 @@ label_41: li $t0 3 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) @@ -1990,7 +1990,7 @@ sw $t0 0($t1) li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -2010,20 +2010,20 @@ addi $sp $sp 4 sw $t0 -352($fp) label_42: lw $v0 4($fp) -addi $sp $sp 368 +addi $sp $sp 356 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Board: +__ctor_Board: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -8 li $t0 5 sll $t0 $t0 2 la $t1 prototype_table @@ -2040,28 +2040,28 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Board +jal __attributes_ctor_Board addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 20 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_CellularAutomaton: +__attributes_ctor_CellularAutomaton: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -8 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Board +jal __attributes_ctor_Board addi $sp $sp 4 sw $v0 -16($fp) la $t0 data_10 @@ -2069,14 +2069,14 @@ sw $t0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 24($t0) lw $v0 0($fp) -addi $sp $sp 24 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2089,7 +2089,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -8 lw $t0 0($fp) lw $t1 4($fp) addi $t1 $t1 24 @@ -2125,7 +2125,7 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 4($fp) -addi $sp $sp 24 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2138,11 +2138,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -128 +addi $sp $sp -112 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -116($fp) lw $t0 -116($fp) @@ -2159,7 +2159,7 @@ sw $t0 -108($fp) lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -104($fp) lw $t0 0($fp) @@ -2206,7 +2206,7 @@ sw $t1 -76($fp) lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -88($fp) lw $t0 -88($fp) @@ -2304,7 +2304,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -52($fp) lw $t0 0($fp) @@ -2355,7 +2355,7 @@ sw $t0 -28($fp) lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -40($fp) lw $t0 -40($fp) @@ -2367,7 +2367,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -2401,7 +2401,7 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 0($fp) -addi $sp $sp 128 +addi $sp $sp 112 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2414,7 +2414,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -8 lw $t4 0($fp) lw $t4 24($t4) addi $sp $sp -4 @@ -2458,7 +2458,7 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 24 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2471,7 +2471,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -80 +addi $sp $sp -64 lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2483,7 +2483,7 @@ sw $t1 -44($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) @@ -2496,7 +2496,7 @@ sw $t0 -36($fp) lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 -48($fp) @@ -2512,7 +2512,7 @@ sw $t1 -52($fp) lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -64($fp) lw $t0 -64($fp) @@ -2523,7 +2523,7 @@ bne $t0 $zero label_62 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t4 4($fp) @@ -2583,14 +2583,14 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -72($fp) label_63: lw $v0 -72($fp) -addi $sp $sp 80 +addi $sp $sp 64 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2603,7 +2603,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -92 +addi $sp $sp -76 lw $t0 0($fp) lw $t1 12($t0) sw $t1 -56($fp) @@ -2622,7 +2622,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -2631,7 +2631,7 @@ sw $t1 -72($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -2644,7 +2644,7 @@ sw $t1 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -76($fp) lw $t0 -76($fp) @@ -2670,7 +2670,7 @@ sw $t0 -28($fp) lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -40($fp) lw $t0 4($fp) @@ -2712,14 +2712,14 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -84($fp) label_67: lw $v0 -84($fp) -addi $sp $sp 92 +addi $sp $sp 76 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2732,7 +2732,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -88 +addi $sp $sp -72 lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2759,7 +2759,7 @@ sw $t0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 -56($fp) @@ -2772,7 +2772,7 @@ sw $t1 -60($fp) lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) @@ -2798,7 +2798,7 @@ sw $t0 -28($fp) lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -40($fp) lw $t0 4($fp) @@ -2840,14 +2840,14 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -80($fp) label_71: lw $v0 -80($fp) -addi $sp $sp 88 +addi $sp $sp 72 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2860,14 +2860,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -172 +addi $sp $sp -156 lw $t0 0($fp) lw $t1 12($t0) sw $t1 -80($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -68($fp) @@ -2880,7 +2880,7 @@ sw $t0 -72($fp) lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -2889,7 +2889,7 @@ sw $t1 -100($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -88($fp) lw $t0 -88($fp) @@ -2925,7 +2925,7 @@ sw $t0 -92($fp) lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -104($fp) lw $t0 -104($fp) @@ -2946,7 +2946,7 @@ sw $t0 -108($fp) lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -120($fp) lw $t0 0($fp) @@ -2955,7 +2955,7 @@ sw $t1 -60($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -48($fp) lw $t0 -48($fp) @@ -2968,7 +2968,7 @@ sw $t0 -52($fp) lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -64($fp) lw $t0 -120($fp) @@ -2977,7 +2977,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -144($fp) +sw $t1 -148($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2985,25 +2985,25 @@ sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -136($fp) +sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -132($fp) -lw $t0 -144($fp) +sw $t0 -136($fp) +lw $t0 -148($fp) lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) bne $t0 $zero label_74 -lw $t0 -144($fp) -lw $t1 -136($fp) +lw $t0 -148($fp) +lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) bne $t0 $zero label_75 -lw $t0 -144($fp) -lw $t1 -132($fp) +lw $t0 -148($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) lw $t0 -128($fp) @@ -3019,9 +3019,9 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) -lw $t1 -148($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) j label_77 @@ -3031,10 +3031,10 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) move $a0 $t0 -lw $t0 -148($fp) +lw $t0 -144($fp) move $a1 $t0 jal equal_str sw $v0 -124($fp) @@ -3045,9 +3045,9 @@ lw $t1 12($t0) sw $t1 -152($fp) lw $t0 -64($fp) lw $t1 12($t0) -sw $t1 -148($fp) +sw $t1 -144($fp) lw $t0 -152($fp) -lw $t1 -148($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) j label_77 @@ -3055,7 +3055,7 @@ label_77: lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -156($fp) lw $t0 -156($fp) @@ -3069,7 +3069,7 @@ sw $t1 -40($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -3082,7 +3082,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -44($fp) lw $t0 4($fp) @@ -3124,14 +3124,14 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -164($fp) label_81: lw $v0 -164($fp) -addi $sp $sp 172 +addi $sp $sp 156 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3144,11 +3144,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -188 +addi $sp $sp -172 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -136($fp) lw $t0 0($fp) @@ -3157,7 +3157,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -160($fp) +sw $t1 -164($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3165,25 +3165,25 @@ sw $t0 -156($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -152($fp) +sw $t0 -148($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -148($fp) -lw $t0 -160($fp) +sw $t0 -152($fp) +lw $t0 -164($fp) lw $t1 -156($fp) seq $t0 $t0 $t1 sw $t0 -144($fp) lw $t0 -144($fp) bne $t0 $zero label_82 -lw $t0 -160($fp) -lw $t1 -152($fp) +lw $t0 -164($fp) +lw $t1 -148($fp) seq $t0 $t0 $t1 sw $t0 -144($fp) lw $t0 -144($fp) bne $t0 $zero label_83 -lw $t0 -160($fp) -lw $t1 -148($fp) +lw $t0 -164($fp) +lw $t1 -152($fp) seq $t0 $t0 $t1 sw $t0 -144($fp) lw $t0 -144($fp) @@ -3199,9 +3199,9 @@ lw $t1 12($t0) sw $t1 -168($fp) lw $t0 -136($fp) lw $t1 12($t0) -sw $t1 -164($fp) +sw $t1 -160($fp) lw $t0 -168($fp) -lw $t1 -164($fp) +lw $t1 -160($fp) seq $t0 $t0 $t1 sw $t0 -140($fp) j label_85 @@ -3211,10 +3211,10 @@ lw $t1 12($t0) sw $t1 -168($fp) lw $t0 -136($fp) lw $t1 12($t0) -sw $t1 -164($fp) +sw $t1 -160($fp) lw $t0 -168($fp) move $a0 $t0 -lw $t0 -164($fp) +lw $t0 -160($fp) move $a1 $t0 jal equal_str sw $v0 -140($fp) @@ -3225,9 +3225,9 @@ lw $t1 12($t0) sw $t1 -168($fp) lw $t0 -136($fp) lw $t1 12($t0) -sw $t1 -164($fp) +sw $t1 -160($fp) lw $t0 -168($fp) -lw $t1 -164($fp) +lw $t1 -160($fp) seq $t0 $t0 $t1 sw $t0 -140($fp) j label_85 @@ -3235,7 +3235,7 @@ label_85: lw $t0 -140($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -172($fp) lw $t0 -172($fp) @@ -3249,7 +3249,7 @@ sw $t1 -68($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 -56($fp) @@ -3285,7 +3285,7 @@ sw $t0 -60($fp) lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) @@ -3306,7 +3306,7 @@ sw $t0 -76($fp) lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -88($fp) lw $t0 -88($fp) @@ -3315,7 +3315,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -112($fp) +sw $t1 -116($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3323,26 +3323,26 @@ sw $t0 -108($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -104($fp) +sw $t0 -100($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -100($fp) -lw $t0 -112($fp) +sw $t0 -104($fp) +lw $t0 -116($fp) lw $t1 -108($fp) seq $t0 $t0 $t1 sw $t0 -96($fp) lw $t0 -96($fp) bne $t0 $zero label_88 -lw $t0 -112($fp) -lw $t1 -104($fp) +lw $t0 -116($fp) +lw $t1 -100($fp) seq $t0 $t0 $t1 sw $t0 -96($fp) lw $t0 -96($fp) bne $t0 $zero label_89 -lw $t0 -112($fp) -lw $t1 -100($fp) -seq $t0 $t0 $t1 +lw $t0 -116($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 sw $t0 -96($fp) lw $t0 -96($fp) bne $t0 $zero label_90 @@ -3357,9 +3357,9 @@ lw $t1 12($t0) sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -116($fp) +sw $t1 -112($fp) lw $t0 -120($fp) -lw $t1 -116($fp) +lw $t1 -112($fp) seq $t0 $t0 $t1 sw $t0 -92($fp) j label_91 @@ -3369,10 +3369,10 @@ lw $t1 12($t0) sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -116($fp) +sw $t1 -112($fp) lw $t0 -120($fp) move $a0 $t0 -lw $t0 -116($fp) +lw $t0 -112($fp) move $a1 $t0 jal equal_str sw $v0 -92($fp) @@ -3383,9 +3383,9 @@ lw $t1 12($t0) sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -116($fp) +sw $t1 -112($fp) lw $t0 -120($fp) -lw $t1 -116($fp) +lw $t1 -112($fp) seq $t0 $t0 $t1 sw $t0 -92($fp) j label_91 @@ -3393,7 +3393,7 @@ label_91: lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -124($fp) lw $t0 -124($fp) @@ -3407,7 +3407,7 @@ sw $t1 -48($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -3420,7 +3420,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 4($fp) @@ -3462,7 +3462,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -3477,14 +3477,14 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -180($fp) label_97: lw $v0 -180($fp) -addi $sp $sp 188 +addi $sp $sp 172 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3497,7 +3497,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -184 +addi $sp $sp -168 lw $t0 0($fp) lw $t1 12($t0) sw $t1 -148($fp) @@ -3516,7 +3516,7 @@ sw $t0 -140($fp) lw $t0 -140($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -152($fp) lw $t0 -152($fp) @@ -3525,7 +3525,7 @@ sw $t1 -164($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -136($fp) lw $t0 -136($fp) @@ -3538,7 +3538,7 @@ sw $t1 -156($fp) lw $t0 -156($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -168($fp) lw $t0 -168($fp) @@ -3552,7 +3552,7 @@ sw $t1 -68($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 -56($fp) @@ -3588,7 +3588,7 @@ sw $t0 -60($fp) lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) @@ -3609,7 +3609,7 @@ sw $t0 -76($fp) lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -88($fp) lw $t0 -88($fp) @@ -3618,7 +3618,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -112($fp) +sw $t1 -116($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3626,25 +3626,25 @@ sw $t0 -108($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -104($fp) +sw $t0 -100($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -100($fp) -lw $t0 -112($fp) +sw $t0 -104($fp) +lw $t0 -116($fp) lw $t1 -108($fp) seq $t0 $t0 $t1 sw $t0 -96($fp) lw $t0 -96($fp) bne $t0 $zero label_100 -lw $t0 -112($fp) -lw $t1 -104($fp) +lw $t0 -116($fp) +lw $t1 -100($fp) seq $t0 $t0 $t1 sw $t0 -96($fp) lw $t0 -96($fp) bne $t0 $zero label_101 -lw $t0 -112($fp) -lw $t1 -100($fp) +lw $t0 -116($fp) +lw $t1 -104($fp) seq $t0 $t0 $t1 sw $t0 -96($fp) lw $t0 -96($fp) @@ -3660,9 +3660,9 @@ lw $t1 12($t0) sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -116($fp) +sw $t1 -112($fp) lw $t0 -120($fp) -lw $t1 -116($fp) +lw $t1 -112($fp) seq $t0 $t0 $t1 sw $t0 -92($fp) j label_103 @@ -3672,10 +3672,10 @@ lw $t1 12($t0) sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -116($fp) +sw $t1 -112($fp) lw $t0 -120($fp) move $a0 $t0 -lw $t0 -116($fp) +lw $t0 -112($fp) move $a1 $t0 jal equal_str sw $v0 -92($fp) @@ -3686,9 +3686,9 @@ lw $t1 12($t0) sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -116($fp) +sw $t1 -112($fp) lw $t0 -120($fp) -lw $t1 -116($fp) +lw $t1 -112($fp) seq $t0 $t0 $t1 sw $t0 -92($fp) j label_103 @@ -3696,7 +3696,7 @@ label_103: lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -124($fp) lw $t0 -124($fp) @@ -3710,7 +3710,7 @@ sw $t1 -48($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -3723,7 +3723,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 4($fp) @@ -3765,7 +3765,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -3780,14 +3780,14 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -176($fp) label_109: lw $v0 -176($fp) -addi $sp $sp 184 +addi $sp $sp 168 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3800,7 +3800,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -224 +addi $sp $sp -208 lw $t0 0($fp) lw $t1 12($t0) sw $t1 -188($fp) @@ -3819,7 +3819,7 @@ sw $t0 -180($fp) lw $t0 -180($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -192($fp) lw $t0 -192($fp) @@ -3828,7 +3828,7 @@ sw $t1 -204($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -176($fp) lw $t0 -176($fp) @@ -3841,7 +3841,7 @@ sw $t1 -196($fp) lw $t0 -196($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -208($fp) lw $t0 -208($fp) @@ -3855,7 +3855,7 @@ sw $t1 -88($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -76($fp) lw $t0 -76($fp) @@ -3868,7 +3868,7 @@ sw $t0 -80($fp) lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -92($fp) lw $t0 -92($fp) @@ -3877,7 +3877,7 @@ sw $t1 -108($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -96($fp) lw $t0 -96($fp) @@ -3913,7 +3913,7 @@ sw $t0 -100($fp) lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -112($fp) lw $t0 -112($fp) @@ -3934,7 +3934,7 @@ sw $t0 -116($fp) lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -128($fp) lw $t0 0($fp) @@ -3943,7 +3943,7 @@ sw $t1 -68($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 -56($fp) @@ -3956,7 +3956,7 @@ sw $t0 -60($fp) lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -128($fp) @@ -3965,7 +3965,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -152($fp) +sw $t1 -156($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -3973,25 +3973,25 @@ sw $t0 -148($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -144($fp) +sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -140($fp) -lw $t0 -152($fp) +sw $t0 -144($fp) +lw $t0 -156($fp) lw $t1 -148($fp) seq $t0 $t0 $t1 sw $t0 -136($fp) lw $t0 -136($fp) bne $t0 $zero label_112 -lw $t0 -152($fp) -lw $t1 -144($fp) +lw $t0 -156($fp) +lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -136($fp) lw $t0 -136($fp) bne $t0 $zero label_113 -lw $t0 -152($fp) -lw $t1 -140($fp) +lw $t0 -156($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -136($fp) lw $t0 -136($fp) @@ -4007,9 +4007,9 @@ lw $t1 12($t0) sw $t1 -160($fp) lw $t0 -72($fp) lw $t1 12($t0) -sw $t1 -156($fp) +sw $t1 -152($fp) lw $t0 -160($fp) -lw $t1 -156($fp) +lw $t1 -152($fp) seq $t0 $t0 $t1 sw $t0 -132($fp) j label_115 @@ -4019,10 +4019,10 @@ lw $t1 12($t0) sw $t1 -160($fp) lw $t0 -72($fp) lw $t1 12($t0) -sw $t1 -156($fp) +sw $t1 -152($fp) lw $t0 -160($fp) move $a0 $t0 -lw $t0 -156($fp) +lw $t0 -152($fp) move $a1 $t0 jal equal_str sw $v0 -132($fp) @@ -4033,9 +4033,9 @@ lw $t1 12($t0) sw $t1 -160($fp) lw $t0 -72($fp) lw $t1 12($t0) -sw $t1 -156($fp) +sw $t1 -152($fp) lw $t0 -160($fp) -lw $t1 -156($fp) +lw $t1 -152($fp) seq $t0 $t0 $t1 sw $t0 -132($fp) j label_115 @@ -4043,7 +4043,7 @@ label_115: lw $t0 -132($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -164($fp) lw $t0 -164($fp) @@ -4057,7 +4057,7 @@ sw $t1 -48($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -4070,7 +4070,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 4($fp) @@ -4112,7 +4112,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -4127,14 +4127,14 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -216($fp) label_121: lw $v0 -216($fp) -addi $sp $sp 224 +addi $sp $sp 208 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -4147,7 +4147,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -220 +addi $sp $sp -204 lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -4174,7 +4174,7 @@ sw $t0 -176($fp) lw $t0 -176($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -188($fp) lw $t0 -188($fp) @@ -4187,7 +4187,7 @@ sw $t1 -192($fp) lw $t0 -192($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -204($fp) lw $t0 -204($fp) @@ -4201,7 +4201,7 @@ sw $t1 -88($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -76($fp) lw $t0 -76($fp) @@ -4214,7 +4214,7 @@ sw $t0 -80($fp) lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -92($fp) lw $t0 -92($fp) @@ -4223,7 +4223,7 @@ sw $t1 -108($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -96($fp) lw $t0 -96($fp) @@ -4259,7 +4259,7 @@ sw $t0 -100($fp) lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -112($fp) lw $t0 -112($fp) @@ -4280,7 +4280,7 @@ sw $t0 -116($fp) lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -128($fp) lw $t0 0($fp) @@ -4289,7 +4289,7 @@ sw $t1 -68($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 -56($fp) @@ -4302,7 +4302,7 @@ sw $t0 -60($fp) lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -128($fp) @@ -4311,7 +4311,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -152($fp) +sw $t1 -156($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4319,25 +4319,25 @@ sw $t0 -148($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -144($fp) +sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -140($fp) -lw $t0 -152($fp) +sw $t0 -144($fp) +lw $t0 -156($fp) lw $t1 -148($fp) seq $t0 $t0 $t1 sw $t0 -136($fp) lw $t0 -136($fp) bne $t0 $zero label_124 -lw $t0 -152($fp) -lw $t1 -144($fp) +lw $t0 -156($fp) +lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -136($fp) lw $t0 -136($fp) bne $t0 $zero label_125 -lw $t0 -152($fp) -lw $t1 -140($fp) +lw $t0 -156($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -136($fp) lw $t0 -136($fp) @@ -4353,9 +4353,9 @@ lw $t1 12($t0) sw $t1 -160($fp) lw $t0 -72($fp) lw $t1 12($t0) -sw $t1 -156($fp) +sw $t1 -152($fp) lw $t0 -160($fp) -lw $t1 -156($fp) +lw $t1 -152($fp) seq $t0 $t0 $t1 sw $t0 -132($fp) j label_127 @@ -4365,10 +4365,10 @@ lw $t1 12($t0) sw $t1 -160($fp) lw $t0 -72($fp) lw $t1 12($t0) -sw $t1 -156($fp) +sw $t1 -152($fp) lw $t0 -160($fp) move $a0 $t0 -lw $t0 -156($fp) +lw $t0 -152($fp) move $a1 $t0 jal equal_str sw $v0 -132($fp) @@ -4379,9 +4379,9 @@ lw $t1 12($t0) sw $t1 -160($fp) lw $t0 -72($fp) lw $t1 12($t0) -sw $t1 -156($fp) +sw $t1 -152($fp) lw $t0 -160($fp) -lw $t1 -156($fp) +lw $t1 -152($fp) seq $t0 $t0 $t1 sw $t0 -132($fp) j label_127 @@ -4389,7 +4389,7 @@ label_127: lw $t0 -132($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -164($fp) lw $t0 -164($fp) @@ -4403,7 +4403,7 @@ sw $t1 -48($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -4416,7 +4416,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 4($fp) @@ -4458,7 +4458,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -4473,14 +4473,14 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -212($fp) label_133: lw $v0 -212($fp) -addi $sp $sp 220 +addi $sp $sp 204 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -4493,7 +4493,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -180 +addi $sp $sp -164 lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -4520,7 +4520,7 @@ sw $t0 -136($fp) lw $t0 -136($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -148($fp) lw $t0 -148($fp) @@ -4533,7 +4533,7 @@ sw $t1 -152($fp) lw $t0 -152($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -164($fp) lw $t0 -164($fp) @@ -4547,7 +4547,7 @@ sw $t1 -68($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -56($fp) lw $t0 -56($fp) @@ -4583,7 +4583,7 @@ sw $t0 -60($fp) lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) @@ -4604,7 +4604,7 @@ sw $t0 -76($fp) lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -88($fp) lw $t0 -88($fp) @@ -4613,7 +4613,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -112($fp) +sw $t1 -116($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4621,25 +4621,25 @@ sw $t0 -108($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -104($fp) +sw $t0 -100($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -100($fp) -lw $t0 -112($fp) +sw $t0 -104($fp) +lw $t0 -116($fp) lw $t1 -108($fp) seq $t0 $t0 $t1 sw $t0 -96($fp) lw $t0 -96($fp) bne $t0 $zero label_136 -lw $t0 -112($fp) -lw $t1 -104($fp) +lw $t0 -116($fp) +lw $t1 -100($fp) seq $t0 $t0 $t1 sw $t0 -96($fp) lw $t0 -96($fp) bne $t0 $zero label_137 -lw $t0 -112($fp) -lw $t1 -100($fp) +lw $t0 -116($fp) +lw $t1 -104($fp) seq $t0 $t0 $t1 sw $t0 -96($fp) lw $t0 -96($fp) @@ -4655,9 +4655,9 @@ lw $t1 12($t0) sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -116($fp) +sw $t1 -112($fp) lw $t0 -120($fp) -lw $t1 -116($fp) +lw $t1 -112($fp) seq $t0 $t0 $t1 sw $t0 -92($fp) j label_139 @@ -4667,10 +4667,10 @@ lw $t1 12($t0) sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -116($fp) +sw $t1 -112($fp) lw $t0 -120($fp) move $a0 $t0 -lw $t0 -116($fp) +lw $t0 -112($fp) move $a1 $t0 jal equal_str sw $v0 -92($fp) @@ -4681,9 +4681,9 @@ lw $t1 12($t0) sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -116($fp) +sw $t1 -112($fp) lw $t0 -120($fp) -lw $t1 -116($fp) +lw $t1 -112($fp) seq $t0 $t0 $t1 sw $t0 -92($fp) j label_139 @@ -4691,7 +4691,7 @@ label_139: lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -124($fp) lw $t0 -124($fp) @@ -4705,7 +4705,7 @@ sw $t1 -48($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -4718,7 +4718,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -52($fp) lw $t0 4($fp) @@ -4760,7 +4760,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -4775,14 +4775,14 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -172($fp) label_145: lw $v0 -172($fp) -addi $sp $sp 180 +addi $sp $sp 164 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -4795,7 +4795,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -672 +addi $sp $sp -656 lw $t0 4($fp) li $t1 0 seq $t0 $t0 $t1 @@ -4831,7 +4831,7 @@ sw $t0 -500($fp) lw $t0 -500($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -496($fp) lw $t0 -504($fp) @@ -4840,7 +4840,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -532($fp) +sw $t1 -536($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -4848,25 +4848,25 @@ sw $t0 -528($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -524($fp) +sw $t0 -520($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -520($fp) -lw $t0 -532($fp) +sw $t0 -524($fp) +lw $t0 -536($fp) lw $t1 -528($fp) seq $t0 $t0 $t1 sw $t0 -516($fp) lw $t0 -516($fp) bne $t0 $zero label_148 -lw $t0 -532($fp) -lw $t1 -524($fp) +lw $t0 -536($fp) +lw $t1 -520($fp) seq $t0 $t0 $t1 sw $t0 -516($fp) lw $t0 -516($fp) bne $t0 $zero label_149 -lw $t0 -532($fp) -lw $t1 -520($fp) +lw $t0 -536($fp) +lw $t1 -524($fp) seq $t0 $t0 $t1 sw $t0 -516($fp) lw $t0 -516($fp) @@ -4882,9 +4882,9 @@ lw $t1 12($t0) sw $t1 -540($fp) lw $t0 -496($fp) lw $t1 12($t0) -sw $t1 -536($fp) +sw $t1 -532($fp) lw $t0 -540($fp) -lw $t1 -536($fp) +lw $t1 -532($fp) seq $t0 $t0 $t1 sw $t0 -512($fp) j label_151 @@ -4894,10 +4894,10 @@ lw $t1 12($t0) sw $t1 -540($fp) lw $t0 -496($fp) lw $t1 12($t0) -sw $t1 -536($fp) +sw $t1 -532($fp) lw $t0 -540($fp) move $a0 $t0 -lw $t0 -536($fp) +lw $t0 -532($fp) move $a1 $t0 jal equal_str sw $v0 -512($fp) @@ -4908,9 +4908,9 @@ lw $t1 12($t0) sw $t1 -540($fp) lw $t0 -496($fp) lw $t1 12($t0) -sw $t1 -536($fp) +sw $t1 -532($fp) lw $t0 -540($fp) -lw $t1 -536($fp) +lw $t1 -532($fp) seq $t0 $t0 $t1 sw $t0 -512($fp) j label_151 @@ -4918,7 +4918,7 @@ label_151: lw $t0 -512($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -544($fp) lw $t0 -544($fp) @@ -4929,7 +4929,7 @@ bne $t0 $zero label_152 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -492($fp) lw $t0 -492($fp) @@ -4939,7 +4939,7 @@ label_152: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -488($fp) lw $t0 -488($fp) @@ -4983,7 +4983,7 @@ sw $t0 -432($fp) lw $t0 -432($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -428($fp) lw $t0 -436($fp) @@ -4992,7 +4992,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -464($fp) +sw $t1 -468($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5000,25 +5000,25 @@ sw $t0 -460($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -456($fp) +sw $t0 -452($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -452($fp) -lw $t0 -464($fp) +sw $t0 -456($fp) +lw $t0 -468($fp) lw $t1 -460($fp) seq $t0 $t0 $t1 sw $t0 -448($fp) lw $t0 -448($fp) bne $t0 $zero label_156 -lw $t0 -464($fp) -lw $t1 -456($fp) +lw $t0 -468($fp) +lw $t1 -452($fp) seq $t0 $t0 $t1 sw $t0 -448($fp) lw $t0 -448($fp) bne $t0 $zero label_157 -lw $t0 -464($fp) -lw $t1 -452($fp) +lw $t0 -468($fp) +lw $t1 -456($fp) seq $t0 $t0 $t1 sw $t0 -448($fp) lw $t0 -448($fp) @@ -5034,9 +5034,9 @@ lw $t1 12($t0) sw $t1 -472($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -468($fp) +sw $t1 -464($fp) lw $t0 -472($fp) -lw $t1 -468($fp) +lw $t1 -464($fp) seq $t0 $t0 $t1 sw $t0 -444($fp) j label_159 @@ -5046,10 +5046,10 @@ lw $t1 12($t0) sw $t1 -472($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -468($fp) +sw $t1 -464($fp) lw $t0 -472($fp) move $a0 $t0 -lw $t0 -468($fp) +lw $t0 -464($fp) move $a1 $t0 jal equal_str sw $v0 -444($fp) @@ -5060,9 +5060,9 @@ lw $t1 12($t0) sw $t1 -472($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -468($fp) +sw $t1 -464($fp) lw $t0 -472($fp) -lw $t1 -468($fp) +lw $t1 -464($fp) seq $t0 $t0 $t1 sw $t0 -444($fp) j label_159 @@ -5070,7 +5070,7 @@ label_159: lw $t0 -444($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -476($fp) lw $t0 -476($fp) @@ -5081,7 +5081,7 @@ bne $t0 $zero label_160 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -424($fp) lw $t0 -424($fp) @@ -5091,7 +5091,7 @@ label_160: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -420($fp) lw $t0 -420($fp) @@ -5107,7 +5107,7 @@ sw $t0 -556($fp) lw $t0 -556($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -568($fp) lw $t0 -568($fp) @@ -5148,7 +5148,7 @@ sw $t0 -364($fp) lw $t0 -364($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -360($fp) lw $t0 -368($fp) @@ -5157,7 +5157,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -396($fp) +sw $t1 -400($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5165,25 +5165,25 @@ sw $t0 -392($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -388($fp) +sw $t0 -384($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -384($fp) -lw $t0 -396($fp) +sw $t0 -388($fp) +lw $t0 -400($fp) lw $t1 -392($fp) seq $t0 $t0 $t1 sw $t0 -380($fp) lw $t0 -380($fp) bne $t0 $zero label_164 -lw $t0 -396($fp) -lw $t1 -388($fp) +lw $t0 -400($fp) +lw $t1 -384($fp) seq $t0 $t0 $t1 sw $t0 -380($fp) lw $t0 -380($fp) bne $t0 $zero label_165 -lw $t0 -396($fp) -lw $t1 -384($fp) +lw $t0 -400($fp) +lw $t1 -388($fp) seq $t0 $t0 $t1 sw $t0 -380($fp) lw $t0 -380($fp) @@ -5199,9 +5199,9 @@ lw $t1 12($t0) sw $t1 -404($fp) lw $t0 -360($fp) lw $t1 12($t0) -sw $t1 -400($fp) +sw $t1 -396($fp) lw $t0 -404($fp) -lw $t1 -400($fp) +lw $t1 -396($fp) seq $t0 $t0 $t1 sw $t0 -376($fp) j label_167 @@ -5211,10 +5211,10 @@ lw $t1 12($t0) sw $t1 -404($fp) lw $t0 -360($fp) lw $t1 12($t0) -sw $t1 -400($fp) +sw $t1 -396($fp) lw $t0 -404($fp) move $a0 $t0 -lw $t0 -400($fp) +lw $t0 -396($fp) move $a1 $t0 jal equal_str sw $v0 -376($fp) @@ -5225,9 +5225,9 @@ lw $t1 12($t0) sw $t1 -404($fp) lw $t0 -360($fp) lw $t1 12($t0) -sw $t1 -400($fp) +sw $t1 -396($fp) lw $t0 -404($fp) -lw $t1 -400($fp) +lw $t1 -396($fp) seq $t0 $t0 $t1 sw $t0 -376($fp) j label_167 @@ -5235,7 +5235,7 @@ label_167: lw $t0 -376($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -408($fp) lw $t0 -408($fp) @@ -5246,7 +5246,7 @@ bne $t0 $zero label_168 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -356($fp) lw $t0 -356($fp) @@ -5256,7 +5256,7 @@ label_168: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -352($fp) lw $t0 -352($fp) @@ -5272,7 +5272,7 @@ sw $t0 -572($fp) lw $t0 -572($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -584($fp) lw $t0 -584($fp) @@ -5313,7 +5313,7 @@ sw $t0 -296($fp) lw $t0 -296($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -292($fp) lw $t0 -300($fp) @@ -5322,7 +5322,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -328($fp) +sw $t1 -332($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5330,25 +5330,25 @@ sw $t0 -324($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -320($fp) +sw $t0 -316($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -316($fp) -lw $t0 -328($fp) +sw $t0 -320($fp) +lw $t0 -332($fp) lw $t1 -324($fp) seq $t0 $t0 $t1 sw $t0 -312($fp) lw $t0 -312($fp) bne $t0 $zero label_172 -lw $t0 -328($fp) -lw $t1 -320($fp) +lw $t0 -332($fp) +lw $t1 -316($fp) seq $t0 $t0 $t1 sw $t0 -312($fp) lw $t0 -312($fp) bne $t0 $zero label_173 -lw $t0 -328($fp) -lw $t1 -316($fp) +lw $t0 -332($fp) +lw $t1 -320($fp) seq $t0 $t0 $t1 sw $t0 -312($fp) lw $t0 -312($fp) @@ -5364,9 +5364,9 @@ lw $t1 12($t0) sw $t1 -336($fp) lw $t0 -292($fp) lw $t1 12($t0) -sw $t1 -332($fp) +sw $t1 -328($fp) lw $t0 -336($fp) -lw $t1 -332($fp) +lw $t1 -328($fp) seq $t0 $t0 $t1 sw $t0 -308($fp) j label_175 @@ -5376,10 +5376,10 @@ lw $t1 12($t0) sw $t1 -336($fp) lw $t0 -292($fp) lw $t1 12($t0) -sw $t1 -332($fp) +sw $t1 -328($fp) lw $t0 -336($fp) move $a0 $t0 -lw $t0 -332($fp) +lw $t0 -328($fp) move $a1 $t0 jal equal_str sw $v0 -308($fp) @@ -5390,9 +5390,9 @@ lw $t1 12($t0) sw $t1 -336($fp) lw $t0 -292($fp) lw $t1 12($t0) -sw $t1 -332($fp) +sw $t1 -328($fp) lw $t0 -336($fp) -lw $t1 -332($fp) +lw $t1 -328($fp) seq $t0 $t0 $t1 sw $t0 -308($fp) j label_175 @@ -5400,7 +5400,7 @@ label_175: lw $t0 -308($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -340($fp) lw $t0 -340($fp) @@ -5411,7 +5411,7 @@ bne $t0 $zero label_176 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -288($fp) lw $t0 -288($fp) @@ -5421,7 +5421,7 @@ label_176: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -284($fp) lw $t0 -284($fp) @@ -5437,7 +5437,7 @@ sw $t0 -588($fp) lw $t0 -588($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -600($fp) lw $t0 -600($fp) @@ -5478,7 +5478,7 @@ sw $t0 -228($fp) lw $t0 -228($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -224($fp) lw $t0 -232($fp) @@ -5487,7 +5487,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -260($fp) +sw $t1 -264($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5495,25 +5495,25 @@ sw $t0 -256($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -252($fp) +sw $t0 -248($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -248($fp) -lw $t0 -260($fp) +sw $t0 -252($fp) +lw $t0 -264($fp) lw $t1 -256($fp) seq $t0 $t0 $t1 sw $t0 -244($fp) lw $t0 -244($fp) bne $t0 $zero label_180 -lw $t0 -260($fp) -lw $t1 -252($fp) +lw $t0 -264($fp) +lw $t1 -248($fp) seq $t0 $t0 $t1 sw $t0 -244($fp) lw $t0 -244($fp) bne $t0 $zero label_181 -lw $t0 -260($fp) -lw $t1 -248($fp) +lw $t0 -264($fp) +lw $t1 -252($fp) seq $t0 $t0 $t1 sw $t0 -244($fp) lw $t0 -244($fp) @@ -5529,9 +5529,9 @@ lw $t1 12($t0) sw $t1 -268($fp) lw $t0 -224($fp) lw $t1 12($t0) -sw $t1 -264($fp) +sw $t1 -260($fp) lw $t0 -268($fp) -lw $t1 -264($fp) +lw $t1 -260($fp) seq $t0 $t0 $t1 sw $t0 -240($fp) j label_183 @@ -5541,10 +5541,10 @@ lw $t1 12($t0) sw $t1 -268($fp) lw $t0 -224($fp) lw $t1 12($t0) -sw $t1 -264($fp) +sw $t1 -260($fp) lw $t0 -268($fp) move $a0 $t0 -lw $t0 -264($fp) +lw $t0 -260($fp) move $a1 $t0 jal equal_str sw $v0 -240($fp) @@ -5555,9 +5555,9 @@ lw $t1 12($t0) sw $t1 -268($fp) lw $t0 -224($fp) lw $t1 12($t0) -sw $t1 -264($fp) +sw $t1 -260($fp) lw $t0 -268($fp) -lw $t1 -264($fp) +lw $t1 -260($fp) seq $t0 $t0 $t1 sw $t0 -240($fp) j label_183 @@ -5565,7 +5565,7 @@ label_183: lw $t0 -240($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -272($fp) lw $t0 -272($fp) @@ -5576,7 +5576,7 @@ bne $t0 $zero label_184 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -220($fp) lw $t0 -220($fp) @@ -5586,7 +5586,7 @@ label_184: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -216($fp) lw $t0 -216($fp) @@ -5602,7 +5602,7 @@ sw $t0 -604($fp) lw $t0 -604($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -616($fp) lw $t0 -616($fp) @@ -5643,7 +5643,7 @@ sw $t0 -160($fp) lw $t0 -160($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -156($fp) lw $t0 -164($fp) @@ -5652,7 +5652,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -192($fp) +sw $t1 -196($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5660,25 +5660,25 @@ sw $t0 -188($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -184($fp) +sw $t0 -180($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -180($fp) -lw $t0 -192($fp) +sw $t0 -184($fp) +lw $t0 -196($fp) lw $t1 -188($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) bne $t0 $zero label_188 -lw $t0 -192($fp) -lw $t1 -184($fp) +lw $t0 -196($fp) +lw $t1 -180($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) bne $t0 $zero label_189 -lw $t0 -192($fp) -lw $t1 -180($fp) +lw $t0 -196($fp) +lw $t1 -184($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) @@ -5694,9 +5694,9 @@ lw $t1 12($t0) sw $t1 -200($fp) lw $t0 -156($fp) lw $t1 12($t0) -sw $t1 -196($fp) +sw $t1 -192($fp) lw $t0 -200($fp) -lw $t1 -196($fp) +lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) j label_191 @@ -5706,10 +5706,10 @@ lw $t1 12($t0) sw $t1 -200($fp) lw $t0 -156($fp) lw $t1 12($t0) -sw $t1 -196($fp) +sw $t1 -192($fp) lw $t0 -200($fp) move $a0 $t0 -lw $t0 -196($fp) +lw $t0 -192($fp) move $a1 $t0 jal equal_str sw $v0 -172($fp) @@ -5720,9 +5720,9 @@ lw $t1 12($t0) sw $t1 -200($fp) lw $t0 -156($fp) lw $t1 12($t0) -sw $t1 -196($fp) +sw $t1 -192($fp) lw $t0 -200($fp) -lw $t1 -196($fp) +lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) j label_191 @@ -5730,7 +5730,7 @@ label_191: lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -204($fp) lw $t0 -204($fp) @@ -5741,7 +5741,7 @@ bne $t0 $zero label_192 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -152($fp) lw $t0 -152($fp) @@ -5751,7 +5751,7 @@ label_192: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -148($fp) lw $t0 -148($fp) @@ -5767,7 +5767,7 @@ sw $t0 -620($fp) lw $t0 -620($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -632($fp) lw $t0 -632($fp) @@ -5808,7 +5808,7 @@ sw $t0 -92($fp) lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -88($fp) lw $t0 -96($fp) @@ -5817,7 +5817,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -124($fp) +sw $t1 -128($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5825,25 +5825,25 @@ sw $t0 -120($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -116($fp) +sw $t0 -112($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -112($fp) -lw $t0 -124($fp) +sw $t0 -116($fp) +lw $t0 -128($fp) lw $t1 -120($fp) seq $t0 $t0 $t1 sw $t0 -108($fp) lw $t0 -108($fp) bne $t0 $zero label_196 -lw $t0 -124($fp) -lw $t1 -116($fp) +lw $t0 -128($fp) +lw $t1 -112($fp) seq $t0 $t0 $t1 sw $t0 -108($fp) lw $t0 -108($fp) bne $t0 $zero label_197 -lw $t0 -124($fp) -lw $t1 -112($fp) +lw $t0 -128($fp) +lw $t1 -116($fp) seq $t0 $t0 $t1 sw $t0 -108($fp) lw $t0 -108($fp) @@ -5859,9 +5859,9 @@ lw $t1 12($t0) sw $t1 -132($fp) lw $t0 -88($fp) lw $t1 12($t0) -sw $t1 -128($fp) +sw $t1 -124($fp) lw $t0 -132($fp) -lw $t1 -128($fp) +lw $t1 -124($fp) seq $t0 $t0 $t1 sw $t0 -104($fp) j label_199 @@ -5871,10 +5871,10 @@ lw $t1 12($t0) sw $t1 -132($fp) lw $t0 -88($fp) lw $t1 12($t0) -sw $t1 -128($fp) +sw $t1 -124($fp) lw $t0 -132($fp) move $a0 $t0 -lw $t0 -128($fp) +lw $t0 -124($fp) move $a1 $t0 jal equal_str sw $v0 -104($fp) @@ -5885,9 +5885,9 @@ lw $t1 12($t0) sw $t1 -132($fp) lw $t0 -88($fp) lw $t1 12($t0) -sw $t1 -128($fp) +sw $t1 -124($fp) lw $t0 -132($fp) -lw $t1 -128($fp) +lw $t1 -124($fp) seq $t0 $t0 $t1 sw $t0 -104($fp) j label_199 @@ -5895,7 +5895,7 @@ label_199: lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -136($fp) lw $t0 -136($fp) @@ -5906,7 +5906,7 @@ bne $t0 $zero label_200 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -5916,7 +5916,7 @@ label_200: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -80($fp) lw $t0 -80($fp) @@ -5932,7 +5932,7 @@ sw $t0 -636($fp) lw $t0 -636($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -648($fp) lw $t0 -648($fp) @@ -5973,7 +5973,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -28($fp) @@ -5982,7 +5982,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -56($fp) +sw $t1 -60($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -5990,25 +5990,25 @@ sw $t0 -52($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -48($fp) +sw $t0 -44($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -44($fp) -lw $t0 -56($fp) +sw $t0 -48($fp) +lw $t0 -60($fp) lw $t1 -52($fp) seq $t0 $t0 $t1 sw $t0 -40($fp) lw $t0 -40($fp) bne $t0 $zero label_204 -lw $t0 -56($fp) -lw $t1 -48($fp) +lw $t0 -60($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -40($fp) lw $t0 -40($fp) bne $t0 $zero label_205 -lw $t0 -56($fp) -lw $t1 -44($fp) +lw $t0 -60($fp) +lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -40($fp) lw $t0 -40($fp) @@ -6024,9 +6024,9 @@ lw $t1 12($t0) sw $t1 -64($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -60($fp) +sw $t1 -56($fp) lw $t0 -64($fp) -lw $t1 -60($fp) +lw $t1 -56($fp) seq $t0 $t0 $t1 sw $t0 -36($fp) j label_207 @@ -6036,10 +6036,10 @@ lw $t1 12($t0) sw $t1 -64($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -60($fp) +sw $t1 -56($fp) lw $t0 -64($fp) move $a0 $t0 -lw $t0 -60($fp) +lw $t0 -56($fp) move $a1 $t0 jal equal_str sw $v0 -36($fp) @@ -6050,9 +6050,9 @@ lw $t1 12($t0) sw $t1 -64($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -60($fp) +sw $t1 -56($fp) lw $t0 -64($fp) -lw $t1 -60($fp) +lw $t1 -56($fp) seq $t0 $t0 $t1 sw $t0 -36($fp) j label_207 @@ -6060,7 +6060,7 @@ label_207: lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -68($fp) @@ -6071,7 +6071,7 @@ bne $t0 $zero label_208 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) @@ -6081,7 +6081,7 @@ label_208: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -6097,11 +6097,11 @@ sw $t0 -652($fp) lw $t0 -652($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -664($fp) lw $v0 -664($fp) -addi $sp $sp 672 +addi $sp $sp 656 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -6114,7 +6114,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -220 +addi $sp $sp -204 lw $t0 4($fp) li $t1 0 seq $t0 $t0 $t1 @@ -6148,7 +6148,7 @@ sw $v0 -164($fp) li $t0 3 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -160($fp) lw $t0 -164($fp) @@ -6157,7 +6157,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -192($fp) +sw $t1 -196($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -6165,25 +6165,25 @@ sw $t0 -188($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -184($fp) +sw $t0 -180($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -180($fp) -lw $t0 -192($fp) +sw $t0 -184($fp) +lw $t0 -196($fp) lw $t1 -188($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) bne $t0 $zero label_212 -lw $t0 -192($fp) -lw $t1 -184($fp) +lw $t0 -196($fp) +lw $t1 -180($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) bne $t0 $zero label_213 -lw $t0 -192($fp) -lw $t1 -180($fp) +lw $t0 -196($fp) +lw $t1 -184($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) @@ -6199,9 +6199,9 @@ lw $t1 12($t0) sw $t1 -200($fp) lw $t0 -160($fp) lw $t1 12($t0) -sw $t1 -196($fp) +sw $t1 -192($fp) lw $t0 -200($fp) -lw $t1 -196($fp) +lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) j label_215 @@ -6211,10 +6211,10 @@ lw $t1 12($t0) sw $t1 -200($fp) lw $t0 -160($fp) lw $t1 12($t0) -sw $t1 -196($fp) +sw $t1 -192($fp) lw $t0 -200($fp) move $a0 $t0 -lw $t0 -196($fp) +lw $t0 -192($fp) move $a1 $t0 jal equal_str sw $v0 -172($fp) @@ -6225,9 +6225,9 @@ lw $t1 12($t0) sw $t1 -200($fp) lw $t0 -160($fp) lw $t1 12($t0) -sw $t1 -196($fp) +sw $t1 -192($fp) lw $t0 -200($fp) -lw $t1 -196($fp) +lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) j label_215 @@ -6235,7 +6235,7 @@ label_215: lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -204($fp) lw $t0 -204($fp) @@ -6276,7 +6276,7 @@ sw $v0 -108($fp) li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -104($fp) lw $t0 -108($fp) @@ -6285,7 +6285,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -136($fp) +sw $t1 -140($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -6293,25 +6293,25 @@ sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -128($fp) +sw $t0 -124($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -124($fp) -lw $t0 -136($fp) +sw $t0 -128($fp) +lw $t0 -140($fp) lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) lw $t0 -120($fp) bne $t0 $zero label_218 -lw $t0 -136($fp) -lw $t1 -128($fp) +lw $t0 -140($fp) +lw $t1 -124($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) lw $t0 -120($fp) bne $t0 $zero label_219 -lw $t0 -136($fp) -lw $t1 -124($fp) +lw $t0 -140($fp) +lw $t1 -128($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) lw $t0 -120($fp) @@ -6327,9 +6327,9 @@ lw $t1 12($t0) sw $t1 -144($fp) lw $t0 -104($fp) lw $t1 12($t0) -sw $t1 -140($fp) +sw $t1 -136($fp) lw $t0 -144($fp) -lw $t1 -140($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) j label_221 @@ -6339,10 +6339,10 @@ lw $t1 12($t0) sw $t1 -144($fp) lw $t0 -104($fp) lw $t1 12($t0) -sw $t1 -140($fp) +sw $t1 -136($fp) lw $t0 -144($fp) move $a0 $t0 -lw $t0 -140($fp) +lw $t0 -136($fp) move $a1 $t0 jal equal_str sw $v0 -116($fp) @@ -6353,9 +6353,9 @@ lw $t1 12($t0) sw $t1 -144($fp) lw $t0 -104($fp) lw $t1 12($t0) -sw $t1 -140($fp) +sw $t1 -136($fp) lw $t0 -144($fp) -lw $t1 -140($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -116($fp) j label_221 @@ -6363,7 +6363,7 @@ label_221: lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -148($fp) lw $t0 -148($fp) @@ -6376,7 +6376,7 @@ sw $t0 -100($fp) lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -96($fp) lw $t0 -96($fp) @@ -6418,7 +6418,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -44($fp) @@ -6427,7 +6427,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -72($fp) +sw $t1 -76($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -6435,25 +6435,25 @@ sw $t0 -68($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -64($fp) +sw $t0 -60($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -60($fp) -lw $t0 -72($fp) +sw $t0 -64($fp) +lw $t0 -76($fp) lw $t1 -68($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) lw $t0 -56($fp) bne $t0 $zero label_225 -lw $t0 -72($fp) -lw $t1 -64($fp) +lw $t0 -76($fp) +lw $t1 -60($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) lw $t0 -56($fp) bne $t0 $zero label_226 -lw $t0 -72($fp) -lw $t1 -60($fp) +lw $t0 -76($fp) +lw $t1 -64($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) lw $t0 -56($fp) @@ -6469,9 +6469,9 @@ lw $t1 12($t0) sw $t1 -80($fp) lw $t0 -36($fp) lw $t1 12($t0) -sw $t1 -76($fp) +sw $t1 -72($fp) lw $t0 -80($fp) -lw $t1 -76($fp) +lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) j label_228 @@ -6481,10 +6481,10 @@ lw $t1 12($t0) sw $t1 -80($fp) lw $t0 -36($fp) lw $t1 12($t0) -sw $t1 -76($fp) +sw $t1 -72($fp) lw $t0 -80($fp) move $a0 $t0 -lw $t0 -76($fp) +lw $t0 -72($fp) move $a1 $t0 jal equal_str sw $v0 -52($fp) @@ -6495,9 +6495,9 @@ lw $t1 12($t0) sw $t1 -80($fp) lw $t0 -36($fp) lw $t1 12($t0) -sw $t1 -76($fp) +sw $t1 -72($fp) lw $t0 -80($fp) -lw $t1 -76($fp) +lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) j label_228 @@ -6505,7 +6505,7 @@ label_228: lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -6518,7 +6518,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -6530,7 +6530,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -6548,14 +6548,14 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -212($fp) label_233: lw $v0 -212($fp) -addi $sp $sp 220 +addi $sp $sp 204 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -6568,11 +6568,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -96 +addi $sp $sp -80 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -6611,7 +6611,7 @@ sw $t0 -68($fp) lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -68($fp) label_236: @@ -6628,7 +6628,7 @@ sw $t1 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -6706,7 +6706,7 @@ sw $t1 -24($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -6719,7 +6719,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -6731,7 +6731,7 @@ lw $t1 0($fp) addi $t1 $t1 24 sw $t0 0($t1) lw $v0 0($fp) -addi $sp $sp 96 +addi $sp $sp 80 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -6744,11 +6744,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -1596 +addi $sp $sp -1580 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -1588($fp) la $t0 data_81 @@ -6756,7 +6756,7 @@ sw $t0 -1584($fp) lw $t0 -1584($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1580($fp) lw $t0 0($fp) @@ -6794,7 +6794,7 @@ sw $t0 -1568($fp) lw $t0 -1568($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1564($fp) lw $t0 0($fp) @@ -6832,7 +6832,7 @@ sw $t0 -1552($fp) lw $t0 -1552($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1548($fp) lw $t0 0($fp) @@ -6870,7 +6870,7 @@ sw $t0 -1536($fp) lw $t0 -1536($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1532($fp) lw $t0 0($fp) @@ -6908,7 +6908,7 @@ sw $t0 -1520($fp) lw $t0 -1520($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1516($fp) lw $t0 0($fp) @@ -6946,7 +6946,7 @@ sw $t0 -1504($fp) lw $t0 -1504($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1500($fp) lw $t0 0($fp) @@ -6984,7 +6984,7 @@ sw $t0 -1488($fp) lw $t0 -1488($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1484($fp) lw $t0 0($fp) @@ -7022,7 +7022,7 @@ sw $t0 -1472($fp) lw $t0 -1472($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1468($fp) lw $t0 0($fp) @@ -7060,7 +7060,7 @@ sw $t0 -1456($fp) lw $t0 -1456($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1452($fp) lw $t0 0($fp) @@ -7098,7 +7098,7 @@ sw $t0 -1440($fp) lw $t0 -1440($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1436($fp) lw $t0 0($fp) @@ -7136,7 +7136,7 @@ sw $t0 -1424($fp) lw $t0 -1424($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1420($fp) lw $t0 0($fp) @@ -7174,7 +7174,7 @@ sw $t0 -1408($fp) lw $t0 -1408($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1404($fp) lw $t0 0($fp) @@ -7212,7 +7212,7 @@ sw $t0 -1392($fp) lw $t0 -1392($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1388($fp) lw $t0 0($fp) @@ -7250,7 +7250,7 @@ sw $t0 -1376($fp) lw $t0 -1376($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1372($fp) lw $t0 0($fp) @@ -7288,7 +7288,7 @@ sw $t0 -1360($fp) lw $t0 -1360($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1356($fp) lw $t0 0($fp) @@ -7326,7 +7326,7 @@ sw $t0 -1344($fp) lw $t0 -1344($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1340($fp) lw $t0 0($fp) @@ -7364,7 +7364,7 @@ sw $t0 -1328($fp) lw $t0 -1328($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1324($fp) lw $t0 0($fp) @@ -7402,7 +7402,7 @@ sw $t0 -1312($fp) lw $t0 -1312($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1308($fp) lw $t0 0($fp) @@ -7440,7 +7440,7 @@ sw $t0 -1296($fp) lw $t0 -1296($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1292($fp) lw $t0 0($fp) @@ -7478,7 +7478,7 @@ sw $t0 -1280($fp) lw $t0 -1280($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1276($fp) lw $t0 0($fp) @@ -7516,7 +7516,7 @@ sw $t0 -1264($fp) lw $t0 -1264($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1260($fp) lw $t0 0($fp) @@ -7554,7 +7554,7 @@ sw $t0 -1248($fp) lw $t0 -1248($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1244($fp) lw $t0 0($fp) @@ -7592,7 +7592,7 @@ sw $t0 -1232($fp) lw $t0 -1232($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1228($fp) lw $t0 0($fp) @@ -7659,7 +7659,7 @@ sw $t0 -1208($fp) lw $t0 -1208($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -1204($fp) lw $t0 0($fp) @@ -7695,7 +7695,7 @@ sw $v0 -1196($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -1148($fp) lw $t0 -1588($fp) @@ -7704,7 +7704,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -1172($fp) +sw $t1 -1176($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -7712,25 +7712,25 @@ sw $t0 -1168($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -1164($fp) +sw $t0 -1160($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -1160($fp) -lw $t0 -1172($fp) +sw $t0 -1164($fp) +lw $t0 -1176($fp) lw $t1 -1168($fp) seq $t0 $t0 $t1 sw $t0 -1156($fp) lw $t0 -1156($fp) bne $t0 $zero label_293 -lw $t0 -1172($fp) -lw $t1 -1164($fp) +lw $t0 -1176($fp) +lw $t1 -1160($fp) seq $t0 $t0 $t1 sw $t0 -1156($fp) lw $t0 -1156($fp) bne $t0 $zero label_294 -lw $t0 -1172($fp) -lw $t1 -1160($fp) +lw $t0 -1176($fp) +lw $t1 -1164($fp) seq $t0 $t0 $t1 sw $t0 -1156($fp) lw $t0 -1156($fp) @@ -7746,9 +7746,9 @@ lw $t1 12($t0) sw $t1 -1180($fp) lw $t0 -1148($fp) lw $t1 12($t0) -sw $t1 -1176($fp) +sw $t1 -1172($fp) lw $t0 -1180($fp) -lw $t1 -1176($fp) +lw $t1 -1172($fp) seq $t0 $t0 $t1 sw $t0 -1152($fp) j label_296 @@ -7758,10 +7758,10 @@ lw $t1 12($t0) sw $t1 -1180($fp) lw $t0 -1148($fp) lw $t1 12($t0) -sw $t1 -1176($fp) +sw $t1 -1172($fp) lw $t0 -1180($fp) move $a0 $t0 -lw $t0 -1176($fp) +lw $t0 -1172($fp) move $a1 $t0 jal equal_str sw $v0 -1152($fp) @@ -7772,9 +7772,9 @@ lw $t1 12($t0) sw $t1 -1180($fp) lw $t0 -1148($fp) lw $t1 12($t0) -sw $t1 -1176($fp) +sw $t1 -1172($fp) lw $t0 -1180($fp) -lw $t1 -1176($fp) +lw $t1 -1172($fp) seq $t0 $t0 $t1 sw $t0 -1152($fp) j label_296 @@ -7782,7 +7782,7 @@ label_296: lw $t0 -1152($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -1184($fp) lw $t0 -1184($fp) @@ -7793,7 +7793,7 @@ bne $t0 $zero label_417 li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -1100($fp) lw $t0 -1588($fp) @@ -7802,7 +7802,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -1124($fp) +sw $t1 -1128($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -7810,25 +7810,25 @@ sw $t0 -1120($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -1116($fp) +sw $t0 -1112($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -1112($fp) -lw $t0 -1124($fp) +sw $t0 -1116($fp) +lw $t0 -1128($fp) lw $t1 -1120($fp) seq $t0 $t0 $t1 sw $t0 -1108($fp) lw $t0 -1108($fp) bne $t0 $zero label_297 -lw $t0 -1124($fp) -lw $t1 -1116($fp) +lw $t0 -1128($fp) +lw $t1 -1112($fp) seq $t0 $t0 $t1 sw $t0 -1108($fp) lw $t0 -1108($fp) bne $t0 $zero label_298 -lw $t0 -1124($fp) -lw $t1 -1112($fp) +lw $t0 -1128($fp) +lw $t1 -1116($fp) seq $t0 $t0 $t1 sw $t0 -1108($fp) lw $t0 -1108($fp) @@ -7844,9 +7844,9 @@ lw $t1 12($t0) sw $t1 -1132($fp) lw $t0 -1100($fp) lw $t1 12($t0) -sw $t1 -1128($fp) +sw $t1 -1124($fp) lw $t0 -1132($fp) -lw $t1 -1128($fp) +lw $t1 -1124($fp) seq $t0 $t0 $t1 sw $t0 -1104($fp) j label_300 @@ -7856,10 +7856,10 @@ lw $t1 12($t0) sw $t1 -1132($fp) lw $t0 -1100($fp) lw $t1 12($t0) -sw $t1 -1128($fp) +sw $t1 -1124($fp) lw $t0 -1132($fp) move $a0 $t0 -lw $t0 -1128($fp) +lw $t0 -1124($fp) move $a1 $t0 jal equal_str sw $v0 -1104($fp) @@ -7870,9 +7870,9 @@ lw $t1 12($t0) sw $t1 -1132($fp) lw $t0 -1100($fp) lw $t1 12($t0) -sw $t1 -1128($fp) +sw $t1 -1124($fp) lw $t0 -1132($fp) -lw $t1 -1128($fp) +lw $t1 -1124($fp) seq $t0 $t0 $t1 sw $t0 -1104($fp) j label_300 @@ -7880,7 +7880,7 @@ label_300: lw $t0 -1104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -1136($fp) lw $t0 -1136($fp) @@ -7891,7 +7891,7 @@ bne $t0 $zero label_415 li $t0 3 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -1052($fp) lw $t0 -1588($fp) @@ -7900,7 +7900,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -1076($fp) +sw $t1 -1080($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -7908,25 +7908,25 @@ sw $t0 -1072($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -1068($fp) +sw $t0 -1064($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -1064($fp) -lw $t0 -1076($fp) +sw $t0 -1068($fp) +lw $t0 -1080($fp) lw $t1 -1072($fp) seq $t0 $t0 $t1 sw $t0 -1060($fp) lw $t0 -1060($fp) bne $t0 $zero label_301 -lw $t0 -1076($fp) -lw $t1 -1068($fp) +lw $t0 -1080($fp) +lw $t1 -1064($fp) seq $t0 $t0 $t1 sw $t0 -1060($fp) lw $t0 -1060($fp) bne $t0 $zero label_302 -lw $t0 -1076($fp) -lw $t1 -1064($fp) +lw $t0 -1080($fp) +lw $t1 -1068($fp) seq $t0 $t0 $t1 sw $t0 -1060($fp) lw $t0 -1060($fp) @@ -7942,9 +7942,9 @@ lw $t1 12($t0) sw $t1 -1084($fp) lw $t0 -1052($fp) lw $t1 12($t0) -sw $t1 -1080($fp) +sw $t1 -1076($fp) lw $t0 -1084($fp) -lw $t1 -1080($fp) +lw $t1 -1076($fp) seq $t0 $t0 $t1 sw $t0 -1056($fp) j label_304 @@ -7954,10 +7954,10 @@ lw $t1 12($t0) sw $t1 -1084($fp) lw $t0 -1052($fp) lw $t1 12($t0) -sw $t1 -1080($fp) +sw $t1 -1076($fp) lw $t0 -1084($fp) move $a0 $t0 -lw $t0 -1080($fp) +lw $t0 -1076($fp) move $a1 $t0 jal equal_str sw $v0 -1056($fp) @@ -7968,9 +7968,9 @@ lw $t1 12($t0) sw $t1 -1084($fp) lw $t0 -1052($fp) lw $t1 12($t0) -sw $t1 -1080($fp) +sw $t1 -1076($fp) lw $t0 -1084($fp) -lw $t1 -1080($fp) +lw $t1 -1076($fp) seq $t0 $t0 $t1 sw $t0 -1056($fp) j label_304 @@ -7978,7 +7978,7 @@ label_304: lw $t0 -1056($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -1088($fp) lw $t0 -1088($fp) @@ -7989,7 +7989,7 @@ bne $t0 $zero label_413 li $t0 4 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -1004($fp) lw $t0 -1588($fp) @@ -7998,7 +7998,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -1028($fp) +sw $t1 -1032($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8006,25 +8006,25 @@ sw $t0 -1024($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -1020($fp) +sw $t0 -1016($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -1016($fp) -lw $t0 -1028($fp) +sw $t0 -1020($fp) +lw $t0 -1032($fp) lw $t1 -1024($fp) seq $t0 $t0 $t1 sw $t0 -1012($fp) lw $t0 -1012($fp) bne $t0 $zero label_305 -lw $t0 -1028($fp) -lw $t1 -1020($fp) +lw $t0 -1032($fp) +lw $t1 -1016($fp) seq $t0 $t0 $t1 sw $t0 -1012($fp) lw $t0 -1012($fp) bne $t0 $zero label_306 -lw $t0 -1028($fp) -lw $t1 -1016($fp) +lw $t0 -1032($fp) +lw $t1 -1020($fp) seq $t0 $t0 $t1 sw $t0 -1012($fp) lw $t0 -1012($fp) @@ -8040,9 +8040,9 @@ lw $t1 12($t0) sw $t1 -1036($fp) lw $t0 -1004($fp) lw $t1 12($t0) -sw $t1 -1032($fp) +sw $t1 -1028($fp) lw $t0 -1036($fp) -lw $t1 -1032($fp) +lw $t1 -1028($fp) seq $t0 $t0 $t1 sw $t0 -1008($fp) j label_308 @@ -8052,10 +8052,10 @@ lw $t1 12($t0) sw $t1 -1036($fp) lw $t0 -1004($fp) lw $t1 12($t0) -sw $t1 -1032($fp) +sw $t1 -1028($fp) lw $t0 -1036($fp) move $a0 $t0 -lw $t0 -1032($fp) +lw $t0 -1028($fp) move $a1 $t0 jal equal_str sw $v0 -1008($fp) @@ -8066,9 +8066,9 @@ lw $t1 12($t0) sw $t1 -1036($fp) lw $t0 -1004($fp) lw $t1 12($t0) -sw $t1 -1032($fp) +sw $t1 -1028($fp) lw $t0 -1036($fp) -lw $t1 -1032($fp) +lw $t1 -1028($fp) seq $t0 $t0 $t1 sw $t0 -1008($fp) j label_308 @@ -8076,7 +8076,7 @@ label_308: lw $t0 -1008($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -1040($fp) lw $t0 -1040($fp) @@ -8087,7 +8087,7 @@ bne $t0 $zero label_411 li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -956($fp) lw $t0 -1588($fp) @@ -8096,7 +8096,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -980($fp) +sw $t1 -984($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8104,25 +8104,25 @@ sw $t0 -976($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -972($fp) +sw $t0 -968($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -968($fp) -lw $t0 -980($fp) +sw $t0 -972($fp) +lw $t0 -984($fp) lw $t1 -976($fp) seq $t0 $t0 $t1 sw $t0 -964($fp) lw $t0 -964($fp) bne $t0 $zero label_309 -lw $t0 -980($fp) -lw $t1 -972($fp) +lw $t0 -984($fp) +lw $t1 -968($fp) seq $t0 $t0 $t1 sw $t0 -964($fp) lw $t0 -964($fp) bne $t0 $zero label_310 -lw $t0 -980($fp) -lw $t1 -968($fp) +lw $t0 -984($fp) +lw $t1 -972($fp) seq $t0 $t0 $t1 sw $t0 -964($fp) lw $t0 -964($fp) @@ -8138,9 +8138,9 @@ lw $t1 12($t0) sw $t1 -988($fp) lw $t0 -956($fp) lw $t1 12($t0) -sw $t1 -984($fp) +sw $t1 -980($fp) lw $t0 -988($fp) -lw $t1 -984($fp) +lw $t1 -980($fp) seq $t0 $t0 $t1 sw $t0 -960($fp) j label_312 @@ -8150,10 +8150,10 @@ lw $t1 12($t0) sw $t1 -988($fp) lw $t0 -956($fp) lw $t1 12($t0) -sw $t1 -984($fp) +sw $t1 -980($fp) lw $t0 -988($fp) move $a0 $t0 -lw $t0 -984($fp) +lw $t0 -980($fp) move $a1 $t0 jal equal_str sw $v0 -960($fp) @@ -8164,9 +8164,9 @@ lw $t1 12($t0) sw $t1 -988($fp) lw $t0 -956($fp) lw $t1 12($t0) -sw $t1 -984($fp) +sw $t1 -980($fp) lw $t0 -988($fp) -lw $t1 -984($fp) +lw $t1 -980($fp) seq $t0 $t0 $t1 sw $t0 -960($fp) j label_312 @@ -8174,7 +8174,7 @@ label_312: lw $t0 -960($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -992($fp) lw $t0 -992($fp) @@ -8185,7 +8185,7 @@ bne $t0 $zero label_409 li $t0 6 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -908($fp) lw $t0 -1588($fp) @@ -8194,7 +8194,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -932($fp) +sw $t1 -936($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8202,25 +8202,25 @@ sw $t0 -928($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -924($fp) +sw $t0 -920($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -920($fp) -lw $t0 -932($fp) +sw $t0 -924($fp) +lw $t0 -936($fp) lw $t1 -928($fp) seq $t0 $t0 $t1 sw $t0 -916($fp) lw $t0 -916($fp) bne $t0 $zero label_313 -lw $t0 -932($fp) -lw $t1 -924($fp) +lw $t0 -936($fp) +lw $t1 -920($fp) seq $t0 $t0 $t1 sw $t0 -916($fp) lw $t0 -916($fp) bne $t0 $zero label_314 -lw $t0 -932($fp) -lw $t1 -920($fp) +lw $t0 -936($fp) +lw $t1 -924($fp) seq $t0 $t0 $t1 sw $t0 -916($fp) lw $t0 -916($fp) @@ -8236,9 +8236,9 @@ lw $t1 12($t0) sw $t1 -940($fp) lw $t0 -908($fp) lw $t1 12($t0) -sw $t1 -936($fp) +sw $t1 -932($fp) lw $t0 -940($fp) -lw $t1 -936($fp) +lw $t1 -932($fp) seq $t0 $t0 $t1 sw $t0 -912($fp) j label_316 @@ -8248,10 +8248,10 @@ lw $t1 12($t0) sw $t1 -940($fp) lw $t0 -908($fp) lw $t1 12($t0) -sw $t1 -936($fp) +sw $t1 -932($fp) lw $t0 -940($fp) move $a0 $t0 -lw $t0 -936($fp) +lw $t0 -932($fp) move $a1 $t0 jal equal_str sw $v0 -912($fp) @@ -8262,9 +8262,9 @@ lw $t1 12($t0) sw $t1 -940($fp) lw $t0 -908($fp) lw $t1 12($t0) -sw $t1 -936($fp) +sw $t1 -932($fp) lw $t0 -940($fp) -lw $t1 -936($fp) +lw $t1 -932($fp) seq $t0 $t0 $t1 sw $t0 -912($fp) j label_316 @@ -8272,7 +8272,7 @@ label_316: lw $t0 -912($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -944($fp) lw $t0 -944($fp) @@ -8283,7 +8283,7 @@ bne $t0 $zero label_407 li $t0 7 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -860($fp) lw $t0 -1588($fp) @@ -8292,7 +8292,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -884($fp) +sw $t1 -888($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8300,25 +8300,25 @@ sw $t0 -880($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -876($fp) +sw $t0 -872($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -872($fp) -lw $t0 -884($fp) +sw $t0 -876($fp) +lw $t0 -888($fp) lw $t1 -880($fp) seq $t0 $t0 $t1 sw $t0 -868($fp) lw $t0 -868($fp) bne $t0 $zero label_317 -lw $t0 -884($fp) -lw $t1 -876($fp) +lw $t0 -888($fp) +lw $t1 -872($fp) seq $t0 $t0 $t1 sw $t0 -868($fp) lw $t0 -868($fp) bne $t0 $zero label_318 -lw $t0 -884($fp) -lw $t1 -872($fp) +lw $t0 -888($fp) +lw $t1 -876($fp) seq $t0 $t0 $t1 sw $t0 -868($fp) lw $t0 -868($fp) @@ -8334,9 +8334,9 @@ lw $t1 12($t0) sw $t1 -892($fp) lw $t0 -860($fp) lw $t1 12($t0) -sw $t1 -888($fp) +sw $t1 -884($fp) lw $t0 -892($fp) -lw $t1 -888($fp) +lw $t1 -884($fp) seq $t0 $t0 $t1 sw $t0 -864($fp) j label_320 @@ -8346,10 +8346,10 @@ lw $t1 12($t0) sw $t1 -892($fp) lw $t0 -860($fp) lw $t1 12($t0) -sw $t1 -888($fp) +sw $t1 -884($fp) lw $t0 -892($fp) move $a0 $t0 -lw $t0 -888($fp) +lw $t0 -884($fp) move $a1 $t0 jal equal_str sw $v0 -864($fp) @@ -8360,9 +8360,9 @@ lw $t1 12($t0) sw $t1 -892($fp) lw $t0 -860($fp) lw $t1 12($t0) -sw $t1 -888($fp) +sw $t1 -884($fp) lw $t0 -892($fp) -lw $t1 -888($fp) +lw $t1 -884($fp) seq $t0 $t0 $t1 sw $t0 -864($fp) j label_320 @@ -8370,7 +8370,7 @@ label_320: lw $t0 -864($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -896($fp) lw $t0 -896($fp) @@ -8381,7 +8381,7 @@ bne $t0 $zero label_405 li $t0 8 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -812($fp) lw $t0 -1588($fp) @@ -8390,7 +8390,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -836($fp) +sw $t1 -840($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8398,25 +8398,25 @@ sw $t0 -832($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -828($fp) +sw $t0 -824($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -824($fp) -lw $t0 -836($fp) +sw $t0 -828($fp) +lw $t0 -840($fp) lw $t1 -832($fp) seq $t0 $t0 $t1 sw $t0 -820($fp) lw $t0 -820($fp) bne $t0 $zero label_321 -lw $t0 -836($fp) -lw $t1 -828($fp) +lw $t0 -840($fp) +lw $t1 -824($fp) seq $t0 $t0 $t1 sw $t0 -820($fp) lw $t0 -820($fp) bne $t0 $zero label_322 -lw $t0 -836($fp) -lw $t1 -824($fp) +lw $t0 -840($fp) +lw $t1 -828($fp) seq $t0 $t0 $t1 sw $t0 -820($fp) lw $t0 -820($fp) @@ -8432,9 +8432,9 @@ lw $t1 12($t0) sw $t1 -844($fp) lw $t0 -812($fp) lw $t1 12($t0) -sw $t1 -840($fp) +sw $t1 -836($fp) lw $t0 -844($fp) -lw $t1 -840($fp) +lw $t1 -836($fp) seq $t0 $t0 $t1 sw $t0 -816($fp) j label_324 @@ -8444,10 +8444,10 @@ lw $t1 12($t0) sw $t1 -844($fp) lw $t0 -812($fp) lw $t1 12($t0) -sw $t1 -840($fp) +sw $t1 -836($fp) lw $t0 -844($fp) move $a0 $t0 -lw $t0 -840($fp) +lw $t0 -836($fp) move $a1 $t0 jal equal_str sw $v0 -816($fp) @@ -8458,9 +8458,9 @@ lw $t1 12($t0) sw $t1 -844($fp) lw $t0 -812($fp) lw $t1 12($t0) -sw $t1 -840($fp) +sw $t1 -836($fp) lw $t0 -844($fp) -lw $t1 -840($fp) +lw $t1 -836($fp) seq $t0 $t0 $t1 sw $t0 -816($fp) j label_324 @@ -8468,7 +8468,7 @@ label_324: lw $t0 -816($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -848($fp) lw $t0 -848($fp) @@ -8479,7 +8479,7 @@ bne $t0 $zero label_403 li $t0 9 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -764($fp) lw $t0 -1588($fp) @@ -8488,7 +8488,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -788($fp) +sw $t1 -792($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8496,25 +8496,25 @@ sw $t0 -784($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -780($fp) +sw $t0 -776($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -776($fp) -lw $t0 -788($fp) +sw $t0 -780($fp) +lw $t0 -792($fp) lw $t1 -784($fp) seq $t0 $t0 $t1 sw $t0 -772($fp) lw $t0 -772($fp) bne $t0 $zero label_325 -lw $t0 -788($fp) -lw $t1 -780($fp) +lw $t0 -792($fp) +lw $t1 -776($fp) seq $t0 $t0 $t1 sw $t0 -772($fp) lw $t0 -772($fp) bne $t0 $zero label_326 -lw $t0 -788($fp) -lw $t1 -776($fp) +lw $t0 -792($fp) +lw $t1 -780($fp) seq $t0 $t0 $t1 sw $t0 -772($fp) lw $t0 -772($fp) @@ -8530,9 +8530,9 @@ lw $t1 12($t0) sw $t1 -796($fp) lw $t0 -764($fp) lw $t1 12($t0) -sw $t1 -792($fp) +sw $t1 -788($fp) lw $t0 -796($fp) -lw $t1 -792($fp) +lw $t1 -788($fp) seq $t0 $t0 $t1 sw $t0 -768($fp) j label_328 @@ -8542,10 +8542,10 @@ lw $t1 12($t0) sw $t1 -796($fp) lw $t0 -764($fp) lw $t1 12($t0) -sw $t1 -792($fp) +sw $t1 -788($fp) lw $t0 -796($fp) move $a0 $t0 -lw $t0 -792($fp) +lw $t0 -788($fp) move $a1 $t0 jal equal_str sw $v0 -768($fp) @@ -8556,9 +8556,9 @@ lw $t1 12($t0) sw $t1 -796($fp) lw $t0 -764($fp) lw $t1 12($t0) -sw $t1 -792($fp) +sw $t1 -788($fp) lw $t0 -796($fp) -lw $t1 -792($fp) +lw $t1 -788($fp) seq $t0 $t0 $t1 sw $t0 -768($fp) j label_328 @@ -8566,7 +8566,7 @@ label_328: lw $t0 -768($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -800($fp) lw $t0 -800($fp) @@ -8577,7 +8577,7 @@ bne $t0 $zero label_401 li $t0 10 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -716($fp) lw $t0 -1588($fp) @@ -8586,7 +8586,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -740($fp) +sw $t1 -744($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8594,25 +8594,25 @@ sw $t0 -736($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -732($fp) +sw $t0 -728($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -728($fp) -lw $t0 -740($fp) +sw $t0 -732($fp) +lw $t0 -744($fp) lw $t1 -736($fp) seq $t0 $t0 $t1 sw $t0 -724($fp) lw $t0 -724($fp) bne $t0 $zero label_329 -lw $t0 -740($fp) -lw $t1 -732($fp) +lw $t0 -744($fp) +lw $t1 -728($fp) seq $t0 $t0 $t1 sw $t0 -724($fp) lw $t0 -724($fp) bne $t0 $zero label_330 -lw $t0 -740($fp) -lw $t1 -728($fp) +lw $t0 -744($fp) +lw $t1 -732($fp) seq $t0 $t0 $t1 sw $t0 -724($fp) lw $t0 -724($fp) @@ -8628,9 +8628,9 @@ lw $t1 12($t0) sw $t1 -748($fp) lw $t0 -716($fp) lw $t1 12($t0) -sw $t1 -744($fp) +sw $t1 -740($fp) lw $t0 -748($fp) -lw $t1 -744($fp) +lw $t1 -740($fp) seq $t0 $t0 $t1 sw $t0 -720($fp) j label_332 @@ -8640,10 +8640,10 @@ lw $t1 12($t0) sw $t1 -748($fp) lw $t0 -716($fp) lw $t1 12($t0) -sw $t1 -744($fp) +sw $t1 -740($fp) lw $t0 -748($fp) move $a0 $t0 -lw $t0 -744($fp) +lw $t0 -740($fp) move $a1 $t0 jal equal_str sw $v0 -720($fp) @@ -8654,9 +8654,9 @@ lw $t1 12($t0) sw $t1 -748($fp) lw $t0 -716($fp) lw $t1 12($t0) -sw $t1 -744($fp) +sw $t1 -740($fp) lw $t0 -748($fp) -lw $t1 -744($fp) +lw $t1 -740($fp) seq $t0 $t0 $t1 sw $t0 -720($fp) j label_332 @@ -8664,7 +8664,7 @@ label_332: lw $t0 -720($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -752($fp) lw $t0 -752($fp) @@ -8675,7 +8675,7 @@ bne $t0 $zero label_399 li $t0 11 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -668($fp) lw $t0 -1588($fp) @@ -8684,7 +8684,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -692($fp) +sw $t1 -696($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8692,25 +8692,25 @@ sw $t0 -688($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -684($fp) +sw $t0 -680($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -680($fp) -lw $t0 -692($fp) +sw $t0 -684($fp) +lw $t0 -696($fp) lw $t1 -688($fp) seq $t0 $t0 $t1 sw $t0 -676($fp) lw $t0 -676($fp) bne $t0 $zero label_333 -lw $t0 -692($fp) -lw $t1 -684($fp) +lw $t0 -696($fp) +lw $t1 -680($fp) seq $t0 $t0 $t1 sw $t0 -676($fp) lw $t0 -676($fp) bne $t0 $zero label_334 -lw $t0 -692($fp) -lw $t1 -680($fp) +lw $t0 -696($fp) +lw $t1 -684($fp) seq $t0 $t0 $t1 sw $t0 -676($fp) lw $t0 -676($fp) @@ -8726,9 +8726,9 @@ lw $t1 12($t0) sw $t1 -700($fp) lw $t0 -668($fp) lw $t1 12($t0) -sw $t1 -696($fp) +sw $t1 -692($fp) lw $t0 -700($fp) -lw $t1 -696($fp) +lw $t1 -692($fp) seq $t0 $t0 $t1 sw $t0 -672($fp) j label_336 @@ -8738,10 +8738,10 @@ lw $t1 12($t0) sw $t1 -700($fp) lw $t0 -668($fp) lw $t1 12($t0) -sw $t1 -696($fp) +sw $t1 -692($fp) lw $t0 -700($fp) move $a0 $t0 -lw $t0 -696($fp) +lw $t0 -692($fp) move $a1 $t0 jal equal_str sw $v0 -672($fp) @@ -8752,9 +8752,9 @@ lw $t1 12($t0) sw $t1 -700($fp) lw $t0 -668($fp) lw $t1 12($t0) -sw $t1 -696($fp) +sw $t1 -692($fp) lw $t0 -700($fp) -lw $t1 -696($fp) +lw $t1 -692($fp) seq $t0 $t0 $t1 sw $t0 -672($fp) j label_336 @@ -8762,7 +8762,7 @@ label_336: lw $t0 -672($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -704($fp) lw $t0 -704($fp) @@ -8773,7 +8773,7 @@ bne $t0 $zero label_397 li $t0 12 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -620($fp) lw $t0 -1588($fp) @@ -8782,7 +8782,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -644($fp) +sw $t1 -648($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8790,25 +8790,25 @@ sw $t0 -640($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -636($fp) +sw $t0 -632($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -632($fp) -lw $t0 -644($fp) +sw $t0 -636($fp) +lw $t0 -648($fp) lw $t1 -640($fp) seq $t0 $t0 $t1 sw $t0 -628($fp) lw $t0 -628($fp) bne $t0 $zero label_337 -lw $t0 -644($fp) -lw $t1 -636($fp) +lw $t0 -648($fp) +lw $t1 -632($fp) seq $t0 $t0 $t1 sw $t0 -628($fp) lw $t0 -628($fp) bne $t0 $zero label_338 -lw $t0 -644($fp) -lw $t1 -632($fp) +lw $t0 -648($fp) +lw $t1 -636($fp) seq $t0 $t0 $t1 sw $t0 -628($fp) lw $t0 -628($fp) @@ -8824,9 +8824,9 @@ lw $t1 12($t0) sw $t1 -652($fp) lw $t0 -620($fp) lw $t1 12($t0) -sw $t1 -648($fp) +sw $t1 -644($fp) lw $t0 -652($fp) -lw $t1 -648($fp) +lw $t1 -644($fp) seq $t0 $t0 $t1 sw $t0 -624($fp) j label_340 @@ -8836,10 +8836,10 @@ lw $t1 12($t0) sw $t1 -652($fp) lw $t0 -620($fp) lw $t1 12($t0) -sw $t1 -648($fp) +sw $t1 -644($fp) lw $t0 -652($fp) move $a0 $t0 -lw $t0 -648($fp) +lw $t0 -644($fp) move $a1 $t0 jal equal_str sw $v0 -624($fp) @@ -8850,9 +8850,9 @@ lw $t1 12($t0) sw $t1 -652($fp) lw $t0 -620($fp) lw $t1 12($t0) -sw $t1 -648($fp) +sw $t1 -644($fp) lw $t0 -652($fp) -lw $t1 -648($fp) +lw $t1 -644($fp) seq $t0 $t0 $t1 sw $t0 -624($fp) j label_340 @@ -8860,7 +8860,7 @@ label_340: lw $t0 -624($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -656($fp) lw $t0 -656($fp) @@ -8871,7 +8871,7 @@ bne $t0 $zero label_395 li $t0 13 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -572($fp) lw $t0 -1588($fp) @@ -8880,7 +8880,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -596($fp) +sw $t1 -600($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8888,25 +8888,25 @@ sw $t0 -592($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -588($fp) +sw $t0 -584($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -584($fp) -lw $t0 -596($fp) +sw $t0 -588($fp) +lw $t0 -600($fp) lw $t1 -592($fp) seq $t0 $t0 $t1 sw $t0 -580($fp) lw $t0 -580($fp) bne $t0 $zero label_341 -lw $t0 -596($fp) -lw $t1 -588($fp) +lw $t0 -600($fp) +lw $t1 -584($fp) seq $t0 $t0 $t1 sw $t0 -580($fp) lw $t0 -580($fp) bne $t0 $zero label_342 -lw $t0 -596($fp) -lw $t1 -584($fp) +lw $t0 -600($fp) +lw $t1 -588($fp) seq $t0 $t0 $t1 sw $t0 -580($fp) lw $t0 -580($fp) @@ -8922,9 +8922,9 @@ lw $t1 12($t0) sw $t1 -604($fp) lw $t0 -572($fp) lw $t1 12($t0) -sw $t1 -600($fp) +sw $t1 -596($fp) lw $t0 -604($fp) -lw $t1 -600($fp) +lw $t1 -596($fp) seq $t0 $t0 $t1 sw $t0 -576($fp) j label_344 @@ -8934,10 +8934,10 @@ lw $t1 12($t0) sw $t1 -604($fp) lw $t0 -572($fp) lw $t1 12($t0) -sw $t1 -600($fp) +sw $t1 -596($fp) lw $t0 -604($fp) move $a0 $t0 -lw $t0 -600($fp) +lw $t0 -596($fp) move $a1 $t0 jal equal_str sw $v0 -576($fp) @@ -8948,9 +8948,9 @@ lw $t1 12($t0) sw $t1 -604($fp) lw $t0 -572($fp) lw $t1 12($t0) -sw $t1 -600($fp) +sw $t1 -596($fp) lw $t0 -604($fp) -lw $t1 -600($fp) +lw $t1 -596($fp) seq $t0 $t0 $t1 sw $t0 -576($fp) j label_344 @@ -8958,7 +8958,7 @@ label_344: lw $t0 -576($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -608($fp) lw $t0 -608($fp) @@ -8969,7 +8969,7 @@ bne $t0 $zero label_393 li $t0 14 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -524($fp) lw $t0 -1588($fp) @@ -8978,7 +8978,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -548($fp) +sw $t1 -552($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -8986,25 +8986,25 @@ sw $t0 -544($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -540($fp) +sw $t0 -536($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -536($fp) -lw $t0 -548($fp) +sw $t0 -540($fp) +lw $t0 -552($fp) lw $t1 -544($fp) seq $t0 $t0 $t1 sw $t0 -532($fp) lw $t0 -532($fp) bne $t0 $zero label_345 -lw $t0 -548($fp) -lw $t1 -540($fp) +lw $t0 -552($fp) +lw $t1 -536($fp) seq $t0 $t0 $t1 sw $t0 -532($fp) lw $t0 -532($fp) bne $t0 $zero label_346 -lw $t0 -548($fp) -lw $t1 -536($fp) +lw $t0 -552($fp) +lw $t1 -540($fp) seq $t0 $t0 $t1 sw $t0 -532($fp) lw $t0 -532($fp) @@ -9020,9 +9020,9 @@ lw $t1 12($t0) sw $t1 -556($fp) lw $t0 -524($fp) lw $t1 12($t0) -sw $t1 -552($fp) +sw $t1 -548($fp) lw $t0 -556($fp) -lw $t1 -552($fp) +lw $t1 -548($fp) seq $t0 $t0 $t1 sw $t0 -528($fp) j label_348 @@ -9032,10 +9032,10 @@ lw $t1 12($t0) sw $t1 -556($fp) lw $t0 -524($fp) lw $t1 12($t0) -sw $t1 -552($fp) +sw $t1 -548($fp) lw $t0 -556($fp) move $a0 $t0 -lw $t0 -552($fp) +lw $t0 -548($fp) move $a1 $t0 jal equal_str sw $v0 -528($fp) @@ -9046,9 +9046,9 @@ lw $t1 12($t0) sw $t1 -556($fp) lw $t0 -524($fp) lw $t1 12($t0) -sw $t1 -552($fp) +sw $t1 -548($fp) lw $t0 -556($fp) -lw $t1 -552($fp) +lw $t1 -548($fp) seq $t0 $t0 $t1 sw $t0 -528($fp) j label_348 @@ -9056,7 +9056,7 @@ label_348: lw $t0 -528($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -560($fp) lw $t0 -560($fp) @@ -9067,7 +9067,7 @@ bne $t0 $zero label_391 li $t0 15 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -476($fp) lw $t0 -1588($fp) @@ -9076,7 +9076,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -500($fp) +sw $t1 -504($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9084,25 +9084,25 @@ sw $t0 -496($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -492($fp) +sw $t0 -488($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -488($fp) -lw $t0 -500($fp) +sw $t0 -492($fp) +lw $t0 -504($fp) lw $t1 -496($fp) seq $t0 $t0 $t1 sw $t0 -484($fp) lw $t0 -484($fp) bne $t0 $zero label_349 -lw $t0 -500($fp) -lw $t1 -492($fp) +lw $t0 -504($fp) +lw $t1 -488($fp) seq $t0 $t0 $t1 sw $t0 -484($fp) lw $t0 -484($fp) bne $t0 $zero label_350 -lw $t0 -500($fp) -lw $t1 -488($fp) +lw $t0 -504($fp) +lw $t1 -492($fp) seq $t0 $t0 $t1 sw $t0 -484($fp) lw $t0 -484($fp) @@ -9118,9 +9118,9 @@ lw $t1 12($t0) sw $t1 -508($fp) lw $t0 -476($fp) lw $t1 12($t0) -sw $t1 -504($fp) +sw $t1 -500($fp) lw $t0 -508($fp) -lw $t1 -504($fp) +lw $t1 -500($fp) seq $t0 $t0 $t1 sw $t0 -480($fp) j label_352 @@ -9130,10 +9130,10 @@ lw $t1 12($t0) sw $t1 -508($fp) lw $t0 -476($fp) lw $t1 12($t0) -sw $t1 -504($fp) +sw $t1 -500($fp) lw $t0 -508($fp) move $a0 $t0 -lw $t0 -504($fp) +lw $t0 -500($fp) move $a1 $t0 jal equal_str sw $v0 -480($fp) @@ -9144,9 +9144,9 @@ lw $t1 12($t0) sw $t1 -508($fp) lw $t0 -476($fp) lw $t1 12($t0) -sw $t1 -504($fp) +sw $t1 -500($fp) lw $t0 -508($fp) -lw $t1 -504($fp) +lw $t1 -500($fp) seq $t0 $t0 $t1 sw $t0 -480($fp) j label_352 @@ -9154,7 +9154,7 @@ label_352: lw $t0 -480($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -512($fp) lw $t0 -512($fp) @@ -9165,7 +9165,7 @@ bne $t0 $zero label_389 li $t0 16 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -428($fp) lw $t0 -1588($fp) @@ -9174,7 +9174,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -452($fp) +sw $t1 -456($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9182,25 +9182,25 @@ sw $t0 -448($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -444($fp) +sw $t0 -440($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -440($fp) -lw $t0 -452($fp) +sw $t0 -444($fp) +lw $t0 -456($fp) lw $t1 -448($fp) seq $t0 $t0 $t1 sw $t0 -436($fp) lw $t0 -436($fp) bne $t0 $zero label_353 -lw $t0 -452($fp) -lw $t1 -444($fp) +lw $t0 -456($fp) +lw $t1 -440($fp) seq $t0 $t0 $t1 sw $t0 -436($fp) lw $t0 -436($fp) bne $t0 $zero label_354 -lw $t0 -452($fp) -lw $t1 -440($fp) +lw $t0 -456($fp) +lw $t1 -444($fp) seq $t0 $t0 $t1 sw $t0 -436($fp) lw $t0 -436($fp) @@ -9216,9 +9216,9 @@ lw $t1 12($t0) sw $t1 -460($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -456($fp) +sw $t1 -452($fp) lw $t0 -460($fp) -lw $t1 -456($fp) +lw $t1 -452($fp) seq $t0 $t0 $t1 sw $t0 -432($fp) j label_356 @@ -9228,10 +9228,10 @@ lw $t1 12($t0) sw $t1 -460($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -456($fp) +sw $t1 -452($fp) lw $t0 -460($fp) move $a0 $t0 -lw $t0 -456($fp) +lw $t0 -452($fp) move $a1 $t0 jal equal_str sw $v0 -432($fp) @@ -9242,9 +9242,9 @@ lw $t1 12($t0) sw $t1 -460($fp) lw $t0 -428($fp) lw $t1 12($t0) -sw $t1 -456($fp) +sw $t1 -452($fp) lw $t0 -460($fp) -lw $t1 -456($fp) +lw $t1 -452($fp) seq $t0 $t0 $t1 sw $t0 -432($fp) j label_356 @@ -9252,7 +9252,7 @@ label_356: lw $t0 -432($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -464($fp) lw $t0 -464($fp) @@ -9263,7 +9263,7 @@ bne $t0 $zero label_387 li $t0 17 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -380($fp) lw $t0 -1588($fp) @@ -9272,7 +9272,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -404($fp) +sw $t1 -408($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9280,25 +9280,25 @@ sw $t0 -400($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -396($fp) +sw $t0 -392($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -392($fp) -lw $t0 -404($fp) +sw $t0 -396($fp) +lw $t0 -408($fp) lw $t1 -400($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) bne $t0 $zero label_357 -lw $t0 -404($fp) -lw $t1 -396($fp) +lw $t0 -408($fp) +lw $t1 -392($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) bne $t0 $zero label_358 -lw $t0 -404($fp) -lw $t1 -392($fp) +lw $t0 -408($fp) +lw $t1 -396($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) @@ -9314,9 +9314,9 @@ lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -380($fp) lw $t1 12($t0) -sw $t1 -408($fp) +sw $t1 -404($fp) lw $t0 -412($fp) -lw $t1 -408($fp) +lw $t1 -404($fp) seq $t0 $t0 $t1 sw $t0 -384($fp) j label_360 @@ -9326,10 +9326,10 @@ lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -380($fp) lw $t1 12($t0) -sw $t1 -408($fp) +sw $t1 -404($fp) lw $t0 -412($fp) move $a0 $t0 -lw $t0 -408($fp) +lw $t0 -404($fp) move $a1 $t0 jal equal_str sw $v0 -384($fp) @@ -9340,9 +9340,9 @@ lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -380($fp) lw $t1 12($t0) -sw $t1 -408($fp) +sw $t1 -404($fp) lw $t0 -412($fp) -lw $t1 -408($fp) +lw $t1 -404($fp) seq $t0 $t0 $t1 sw $t0 -384($fp) j label_360 @@ -9350,7 +9350,7 @@ label_360: lw $t0 -384($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -416($fp) lw $t0 -416($fp) @@ -9361,7 +9361,7 @@ bne $t0 $zero label_385 li $t0 18 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -332($fp) lw $t0 -1588($fp) @@ -9370,7 +9370,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -356($fp) +sw $t1 -360($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9378,25 +9378,25 @@ sw $t0 -352($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -348($fp) +sw $t0 -344($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -344($fp) -lw $t0 -356($fp) +sw $t0 -348($fp) +lw $t0 -360($fp) lw $t1 -352($fp) seq $t0 $t0 $t1 sw $t0 -340($fp) lw $t0 -340($fp) bne $t0 $zero label_361 -lw $t0 -356($fp) -lw $t1 -348($fp) +lw $t0 -360($fp) +lw $t1 -344($fp) seq $t0 $t0 $t1 sw $t0 -340($fp) lw $t0 -340($fp) bne $t0 $zero label_362 -lw $t0 -356($fp) -lw $t1 -344($fp) +lw $t0 -360($fp) +lw $t1 -348($fp) seq $t0 $t0 $t1 sw $t0 -340($fp) lw $t0 -340($fp) @@ -9412,9 +9412,9 @@ lw $t1 12($t0) sw $t1 -364($fp) lw $t0 -332($fp) lw $t1 12($t0) -sw $t1 -360($fp) +sw $t1 -356($fp) lw $t0 -364($fp) -lw $t1 -360($fp) +lw $t1 -356($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) j label_364 @@ -9424,10 +9424,10 @@ lw $t1 12($t0) sw $t1 -364($fp) lw $t0 -332($fp) lw $t1 12($t0) -sw $t1 -360($fp) +sw $t1 -356($fp) lw $t0 -364($fp) move $a0 $t0 -lw $t0 -360($fp) +lw $t0 -356($fp) move $a1 $t0 jal equal_str sw $v0 -336($fp) @@ -9438,9 +9438,9 @@ lw $t1 12($t0) sw $t1 -364($fp) lw $t0 -332($fp) lw $t1 12($t0) -sw $t1 -360($fp) +sw $t1 -356($fp) lw $t0 -364($fp) -lw $t1 -360($fp) +lw $t1 -356($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) j label_364 @@ -9448,7 +9448,7 @@ label_364: lw $t0 -336($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -368($fp) lw $t0 -368($fp) @@ -9459,7 +9459,7 @@ bne $t0 $zero label_383 li $t0 19 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -284($fp) lw $t0 -1588($fp) @@ -9468,7 +9468,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -308($fp) +sw $t1 -312($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9476,25 +9476,25 @@ sw $t0 -304($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -300($fp) +sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -296($fp) -lw $t0 -308($fp) +sw $t0 -300($fp) +lw $t0 -312($fp) lw $t1 -304($fp) seq $t0 $t0 $t1 sw $t0 -292($fp) lw $t0 -292($fp) bne $t0 $zero label_365 -lw $t0 -308($fp) -lw $t1 -300($fp) +lw $t0 -312($fp) +lw $t1 -296($fp) seq $t0 $t0 $t1 sw $t0 -292($fp) lw $t0 -292($fp) bne $t0 $zero label_366 -lw $t0 -308($fp) -lw $t1 -296($fp) +lw $t0 -312($fp) +lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -292($fp) lw $t0 -292($fp) @@ -9510,9 +9510,9 @@ lw $t1 12($t0) sw $t1 -316($fp) lw $t0 -284($fp) lw $t1 12($t0) -sw $t1 -312($fp) +sw $t1 -308($fp) lw $t0 -316($fp) -lw $t1 -312($fp) +lw $t1 -308($fp) seq $t0 $t0 $t1 sw $t0 -288($fp) j label_368 @@ -9522,10 +9522,10 @@ lw $t1 12($t0) sw $t1 -316($fp) lw $t0 -284($fp) lw $t1 12($t0) -sw $t1 -312($fp) +sw $t1 -308($fp) lw $t0 -316($fp) move $a0 $t0 -lw $t0 -312($fp) +lw $t0 -308($fp) move $a1 $t0 jal equal_str sw $v0 -288($fp) @@ -9536,9 +9536,9 @@ lw $t1 12($t0) sw $t1 -316($fp) lw $t0 -284($fp) lw $t1 12($t0) -sw $t1 -312($fp) +sw $t1 -308($fp) lw $t0 -316($fp) -lw $t1 -312($fp) +lw $t1 -308($fp) seq $t0 $t0 $t1 sw $t0 -288($fp) j label_368 @@ -9546,7 +9546,7 @@ label_368: lw $t0 -288($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -320($fp) lw $t0 -320($fp) @@ -9557,7 +9557,7 @@ bne $t0 $zero label_381 li $t0 20 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -236($fp) lw $t0 -1588($fp) @@ -9566,7 +9566,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -260($fp) +sw $t1 -264($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9574,25 +9574,25 @@ sw $t0 -256($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -252($fp) +sw $t0 -248($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -248($fp) -lw $t0 -260($fp) +sw $t0 -252($fp) +lw $t0 -264($fp) lw $t1 -256($fp) seq $t0 $t0 $t1 sw $t0 -244($fp) lw $t0 -244($fp) bne $t0 $zero label_369 -lw $t0 -260($fp) -lw $t1 -252($fp) +lw $t0 -264($fp) +lw $t1 -248($fp) seq $t0 $t0 $t1 sw $t0 -244($fp) lw $t0 -244($fp) bne $t0 $zero label_370 -lw $t0 -260($fp) -lw $t1 -248($fp) +lw $t0 -264($fp) +lw $t1 -252($fp) seq $t0 $t0 $t1 sw $t0 -244($fp) lw $t0 -244($fp) @@ -9608,9 +9608,9 @@ lw $t1 12($t0) sw $t1 -268($fp) lw $t0 -236($fp) lw $t1 12($t0) -sw $t1 -264($fp) +sw $t1 -260($fp) lw $t0 -268($fp) -lw $t1 -264($fp) +lw $t1 -260($fp) seq $t0 $t0 $t1 sw $t0 -240($fp) j label_372 @@ -9620,10 +9620,10 @@ lw $t1 12($t0) sw $t1 -268($fp) lw $t0 -236($fp) lw $t1 12($t0) -sw $t1 -264($fp) +sw $t1 -260($fp) lw $t0 -268($fp) move $a0 $t0 -lw $t0 -264($fp) +lw $t0 -260($fp) move $a1 $t0 jal equal_str sw $v0 -240($fp) @@ -9634,9 +9634,9 @@ lw $t1 12($t0) sw $t1 -268($fp) lw $t0 -236($fp) lw $t1 12($t0) -sw $t1 -264($fp) +sw $t1 -260($fp) lw $t0 -268($fp) -lw $t1 -264($fp) +lw $t1 -260($fp) seq $t0 $t0 $t1 sw $t0 -240($fp) j label_372 @@ -9644,7 +9644,7 @@ label_372: lw $t0 -240($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -272($fp) lw $t0 -272($fp) @@ -9655,7 +9655,7 @@ bne $t0 $zero label_379 li $t0 21 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -188($fp) lw $t0 -1588($fp) @@ -9664,7 +9664,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -212($fp) +sw $t1 -216($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -9672,25 +9672,25 @@ sw $t0 -208($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -204($fp) +sw $t0 -200($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -200($fp) -lw $t0 -212($fp) +sw $t0 -204($fp) +lw $t0 -216($fp) lw $t1 -208($fp) seq $t0 $t0 $t1 sw $t0 -196($fp) lw $t0 -196($fp) bne $t0 $zero label_373 -lw $t0 -212($fp) -lw $t1 -204($fp) +lw $t0 -216($fp) +lw $t1 -200($fp) seq $t0 $t0 $t1 sw $t0 -196($fp) lw $t0 -196($fp) bne $t0 $zero label_374 -lw $t0 -212($fp) -lw $t1 -200($fp) +lw $t0 -216($fp) +lw $t1 -204($fp) seq $t0 $t0 $t1 sw $t0 -196($fp) lw $t0 -196($fp) @@ -9706,9 +9706,9 @@ lw $t1 12($t0) sw $t1 -220($fp) lw $t0 -188($fp) lw $t1 12($t0) -sw $t1 -216($fp) +sw $t1 -212($fp) lw $t0 -220($fp) -lw $t1 -216($fp) +lw $t1 -212($fp) seq $t0 $t0 $t1 sw $t0 -192($fp) j label_376 @@ -9718,10 +9718,10 @@ lw $t1 12($t0) sw $t1 -220($fp) lw $t0 -188($fp) lw $t1 12($t0) -sw $t1 -216($fp) +sw $t1 -212($fp) lw $t0 -220($fp) move $a0 $t0 -lw $t0 -216($fp) +lw $t0 -212($fp) move $a1 $t0 jal equal_str sw $v0 -192($fp) @@ -9732,9 +9732,9 @@ lw $t1 12($t0) sw $t1 -220($fp) lw $t0 -188($fp) lw $t1 12($t0) -sw $t1 -216($fp) +sw $t1 -212($fp) lw $t0 -220($fp) -lw $t1 -216($fp) +lw $t1 -212($fp) seq $t0 $t0 $t1 sw $t0 -192($fp) j label_376 @@ -9742,7 +9742,7 @@ label_376: lw $t0 -192($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -224($fp) lw $t0 -224($fp) @@ -9755,7 +9755,7 @@ sw $t0 -184($fp) lw $t0 -184($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -180($fp) lw $t0 -180($fp) @@ -9767,7 +9767,7 @@ sw $t0 -176($fp) lw $t0 -176($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -172($fp) lw $t0 -172($fp) @@ -9782,7 +9782,7 @@ sw $t0 -168($fp) lw $t0 -168($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -164($fp) lw $t0 -164($fp) @@ -9797,7 +9797,7 @@ sw $t0 -160($fp) lw $t0 -160($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -156($fp) lw $t0 -156($fp) @@ -9812,7 +9812,7 @@ sw $t0 -152($fp) lw $t0 -152($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -148($fp) lw $t0 -148($fp) @@ -9827,7 +9827,7 @@ sw $t0 -144($fp) lw $t0 -144($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -140($fp) lw $t0 -140($fp) @@ -9842,7 +9842,7 @@ sw $t0 -136($fp) lw $t0 -136($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -132($fp) lw $t0 -132($fp) @@ -9857,7 +9857,7 @@ sw $t0 -128($fp) lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -124($fp) lw $t0 -124($fp) @@ -9872,7 +9872,7 @@ sw $t0 -120($fp) lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -116($fp) lw $t0 -116($fp) @@ -9887,7 +9887,7 @@ sw $t0 -112($fp) lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -108($fp) lw $t0 -108($fp) @@ -9902,7 +9902,7 @@ sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -100($fp) lw $t0 -100($fp) @@ -9917,7 +9917,7 @@ sw $t0 -96($fp) lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -92($fp) lw $t0 -92($fp) @@ -9932,7 +9932,7 @@ sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -9947,7 +9947,7 @@ sw $t0 -80($fp) lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -76($fp) lw $t0 -76($fp) @@ -9962,7 +9962,7 @@ sw $t0 -72($fp) lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -68($fp) @@ -9977,7 +9977,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -9992,7 +9992,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) @@ -10007,7 +10007,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -10022,7 +10022,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -10037,7 +10037,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -10052,7 +10052,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -10067,14 +10067,14 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -1192($fp) label_418: lw $v0 -1192($fp) -addi $sp $sp 1596 +addi $sp $sp 1580 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -10087,13 +10087,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -136 +addi $sp $sp -120 la $t0 data_10 sw $t0 -128($fp) lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -128($fp) la $t0 data_152 @@ -10101,7 +10101,7 @@ sw $t0 -124($fp) lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -120($fp) lw $t0 0($fp) @@ -10139,7 +10139,7 @@ sw $t0 -108($fp) lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -104($fp) lw $t0 0($fp) @@ -10206,7 +10206,7 @@ sw $t0 -84($fp) lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -80($fp) lw $t0 0($fp) @@ -10244,7 +10244,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -128($fp) @@ -10253,7 +10253,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -48($fp) +sw $t1 -52($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -10261,25 +10261,25 @@ sw $t0 -44($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -40($fp) +sw $t0 -36($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -36($fp) -lw $t0 -48($fp) +sw $t0 -40($fp) +lw $t0 -52($fp) lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) bne $t0 $zero label_427 -lw $t0 -48($fp) -lw $t1 -40($fp) +lw $t0 -52($fp) +lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) bne $t0 $zero label_428 -lw $t0 -48($fp) -lw $t1 -36($fp) +lw $t0 -52($fp) +lw $t1 -40($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) @@ -10295,9 +10295,9 @@ lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -52($fp) +sw $t1 -48($fp) lw $t0 -56($fp) -lw $t1 -52($fp) +lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) j label_430 @@ -10307,10 +10307,10 @@ lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -52($fp) +sw $t1 -48($fp) lw $t0 -56($fp) move $a0 $t0 -lw $t0 -52($fp) +lw $t0 -48($fp) move $a1 $t0 jal equal_str sw $v0 -28($fp) @@ -10321,9 +10321,9 @@ lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -52($fp) +sw $t1 -48($fp) lw $t0 -56($fp) -lw $t1 -52($fp) +lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) j label_430 @@ -10331,7 +10331,7 @@ label_430: lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -10342,7 +10342,7 @@ bne $t0 $zero label_431 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) @@ -10352,14 +10352,14 @@ label_431: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -68($fp) label_432: lw $v0 -68($fp) -addi $sp $sp 136 +addi $sp $sp 120 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -10372,13 +10372,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -136 +addi $sp $sp -120 la $t0 data_10 sw $t0 -128($fp) lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -128($fp) la $t0 data_160 @@ -10386,7 +10386,7 @@ sw $t0 -124($fp) lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -120($fp) lw $t0 0($fp) @@ -10424,7 +10424,7 @@ sw $t0 -108($fp) lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -104($fp) lw $t0 0($fp) @@ -10462,7 +10462,7 @@ sw $t0 -92($fp) lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -88($fp) lw $t0 0($fp) @@ -10529,7 +10529,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -128($fp) @@ -10538,7 +10538,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -48($fp) +sw $t1 -52($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -10546,25 +10546,25 @@ sw $t0 -44($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -40($fp) +sw $t0 -36($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -36($fp) -lw $t0 -48($fp) +sw $t0 -40($fp) +lw $t0 -52($fp) lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) bne $t0 $zero label_441 -lw $t0 -48($fp) -lw $t1 -40($fp) +lw $t0 -52($fp) +lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) bne $t0 $zero label_442 -lw $t0 -48($fp) -lw $t1 -36($fp) +lw $t0 -52($fp) +lw $t1 -40($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) @@ -10580,9 +10580,9 @@ lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -52($fp) +sw $t1 -48($fp) lw $t0 -56($fp) -lw $t1 -52($fp) +lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) j label_444 @@ -10592,10 +10592,10 @@ lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -52($fp) +sw $t1 -48($fp) lw $t0 -56($fp) move $a0 $t0 -lw $t0 -52($fp) +lw $t0 -48($fp) move $a1 $t0 jal equal_str sw $v0 -28($fp) @@ -10606,9 +10606,9 @@ lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -52($fp) +sw $t1 -48($fp) lw $t0 -56($fp) -lw $t1 -52($fp) +lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) j label_444 @@ -10616,7 +10616,7 @@ label_444: lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -10627,7 +10627,7 @@ bne $t0 $zero label_445 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) @@ -10637,27 +10637,27 @@ label_445: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -68($fp) label_446: lw $v0 -68($fp) -addi $sp $sp 136 +addi $sp $sp 120 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_CellularAutomaton: +__ctor_CellularAutomaton: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -8 li $t0 6 sll $t0 $t0 2 la $t1 prototype_table @@ -10674,35 +10674,35 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_CellularAutomaton +jal __attributes_ctor_CellularAutomaton addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 24 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -28 +addi $sp $sp -8 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_CellularAutomaton +jal __attributes_ctor_CellularAutomaton addi $sp $sp 4 sw $v0 -16($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 28($t0) lw $v0 0($fp) -addi $sp $sp 28 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -10715,11 +10715,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -144 +addi $sp $sp -124 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -132($fp) la $t0 data_10 @@ -10727,7 +10727,7 @@ sw $t0 -128($fp) lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -128($fp) la $t0 data_168 @@ -10735,7 +10735,7 @@ sw $t0 -124($fp) lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -120($fp) lw $t0 0($fp) @@ -10773,7 +10773,7 @@ sw $t0 -108($fp) lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -104($fp) lw $t0 0($fp) @@ -10844,7 +10844,7 @@ label_454: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -80($fp) lw $t0 -80($fp) @@ -10878,7 +10878,7 @@ addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) sw $t0 -128($fp) -jal __init_at_CellularAutomaton +jal __ctor_CellularAutomaton sw $v0 -68($fp) lw $t0 -68($fp) li $t1 0 @@ -10999,7 +10999,7 @@ bne $t0 $zero label_465 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -11100,20 +11100,20 @@ label_471: j label_451 label_472: lw $v0 0($fp) -addi $sp $sp 144 +addi $sp $sp 124 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -28 +addi $sp $sp -8 li $t0 7 sll $t0 $t0 2 la $t1 prototype_table @@ -11130,11 +11130,11 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 28 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index 944462c52..114da278b 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -24,47 +24,47 @@ data_10: .asciiz "" .word 0 data_11: .asciiz "Abort called from class " .word 0 -data_12: .asciiz "Substring out of range" +data_12: .asciiz "Index out of range exception" .word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" +data_13: .asciiz "Function call in a void instance" .word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" +data_14: .asciiz "Function call in a void instance" .word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" +data_15: .asciiz "Function call in a void instance" .word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" +data_16: .asciiz "Function call in a void instance" .word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" +data_17: .asciiz "Function call in a void instance" .word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" +data_18: .asciiz "Function call in a void instance" .word 0 data_19: .asciiz " " .word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" +data_20: .asciiz "Function call in a void instance" .word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" +data_21: .asciiz "Function call in a void instance" .word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" +data_22: .asciiz "Function call in a void instance" .word 0 data_23: .asciiz "\n" .word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" +data_24: .asciiz "Function call in a void instance" .word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" +data_25: .asciiz "Function call in a void instance" .word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" +data_26: .asciiz "Function call in a void instance" .word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" +data_27: .asciiz "Function call in a void instance" .word 0 -data_28: .asciiz "RuntimeError: Function call in a void instance" +data_28: .asciiz "Function call in a void instance" .word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" +data_29: .asciiz "Function call in a void instance" .word 0 -data_30: .asciiz "RuntimeError: Function call in a void instance" +data_30: .asciiz "Function call in a void instance" .word 0 -data_31: .asciiz "RuntimeError: Function call in a void instance" +data_31: .asciiz "Function call in a void instance" .word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" +data_32: .asciiz "Function call in a void instance" types_table: @@ -91,7 +91,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -108,7 +108,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -124,7 +124,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -139,7 +139,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -153,7 +153,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -171,8 +171,8 @@ type_6_dispatch: .word function_head_at_List .word function_isNil_at_List .word function_tail_at_List -.word __init_attr_at_List -.word __init_at_List +.word __attributes_ctor_List +.word __ctor_List type_6_prototype: .word 5 @@ -190,8 +190,8 @@ type_7_dispatch: .word function_isNil_at_Cons .word function_tail_at_Cons .word function_init_at_Cons -.word __init_attr_at_Cons -.word __init_at_Cons +.word __attributes_ctor_Cons +.word __ctor_Cons type_7_prototype: .word 6 @@ -212,8 +212,8 @@ type_8_dispatch: .word function_out_string_at_IO .word function_main_at_Main .word function_print_list_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_8_prototype: .word 7 @@ -225,7 +225,7 @@ type_8_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -306,7 +306,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -341,7 +341,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -423,7 +423,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -447,7 +447,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -458,7 +458,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -487,7 +487,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -556,7 +556,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -615,7 +615,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -626,7 +626,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -657,7 +657,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -695,7 +695,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -712,7 +712,7 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_List: +__attributes_ctor_List: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -737,7 +737,7 @@ addi $sp $sp -4 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -785,7 +785,7 @@ sw $v0 -16($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -845,7 +845,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -12 -jal __init_at_Cons +jal __ctor_Cons sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -888,7 +888,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_List: +__ctor_List: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -911,7 +911,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_List +jal __attributes_ctor_List addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -922,23 +922,23 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Cons: +__attributes_ctor_Cons: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -12 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_List +jal __attributes_ctor_List addi $sp $sp 4 sw $v0 -20($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -16($fp) lw $t0 0($fp) @@ -948,7 +948,7 @@ lw $t0 0($fp) lw $t1 -12($fp) sw $t1 16($t0) lw $v0 0($fp) -addi $sp $sp 20 +addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -961,15 +961,15 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -4 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -982,14 +982,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1002,14 +1002,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1022,7 +1022,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t0 4($fp) lw $t1 8($fp) addi $t1 $t1 12 @@ -1032,20 +1032,20 @@ lw $t1 8($fp) addi $t1 $t1 16 sw $t0 0($t1) lw $v0 8($fp) -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Cons: +__ctor_Cons: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 6 sll $t0 $t0 2 la $t1 prototype_table @@ -1062,29 +1062,29 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Cons +jal __attributes_ctor_Cons addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 lw $t0 0($fp) lw $t1 -12($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1097,7 +1097,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -84 +addi $sp $sp -80 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -1192,7 +1192,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -52($fp) lw $t0 4($fp) @@ -1291,7 +1291,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 4($fp) @@ -1328,7 +1328,7 @@ lw $t0 -12($fp) sw $t0 -88($fp) label_24: lw $v0 -88($fp) -addi $sp $sp 84 +addi $sp $sp 80 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1341,38 +1341,38 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -108 +addi $sp $sp -104 li $t0 5 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -112($fp) li $t0 4 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -108($fp) li $t0 3 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -104($fp) li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -100($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -96($fp) -jal __init_at_List +jal __ctor_List sw $v0 -92($fp) lw $t0 -92($fp) li $t1 0 @@ -1580,7 +1580,7 @@ sw $t0 -36($fp) lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) @@ -1674,20 +1674,20 @@ sw $t0 0($t1) j label_35 label_43: li $v0 0 -addi $sp $sp 108 +addi $sp $sp 104 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 7 sll $t0 $t0 2 la $t1 prototype_table @@ -1704,11 +1704,11 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index 9aa570808..5f6668396 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -22,55 +22,55 @@ data_9: .asciiz "" .word 0 data_10: .asciiz "Abort called from class " .word 0 -data_11: .asciiz "Substring out of range" +data_11: .asciiz "Index out of range exception" .word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" +data_12: .asciiz "Function call in a void instance" .word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" +data_13: .asciiz "Function call in a void instance" .word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" +data_14: .asciiz "Function call in a void instance" .word 0 data_15: .asciiz "=(\n" .word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" +data_16: .asciiz "Function call in a void instance" .word 0 data_17: .asciiz "=)\n" .word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" +data_18: .asciiz "Function call in a void instance" .word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" +data_19: .asciiz "Function call in a void instance" .word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" +data_20: .asciiz "Function call in a void instance" .word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" +data_21: .asciiz "Function call in a void instance" .word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" +data_22: .asciiz "Function call in a void instance" .word 0 data_23: .asciiz "=(\n" .word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" +data_24: .asciiz "Function call in a void instance" .word 0 data_25: .asciiz "=)\n" .word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" +data_26: .asciiz "Function call in a void instance" .word 0 data_27: .asciiz "I" .word 0 data_28: .asciiz "+" .word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" +data_29: .asciiz "Function call in a void instance" .word 0 -data_30: .asciiz "RuntimeError: Function call in a void instance" +data_30: .asciiz "Function call in a void instance" .word 0 -data_31: .asciiz "RuntimeError: Function call in a void instance" +data_31: .asciiz "Function call in a void instance" .word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" +data_32: .asciiz "Function call in a void instance" .word 0 -data_33: .asciiz "RuntimeError: Function call in a void instance" +data_33: .asciiz "Function call in a void instance" .word 0 -data_34: .asciiz "RuntimeError: Function call in a void instance" +data_34: .asciiz "Function call in a void instance" .word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" +data_35: .asciiz "Function call in a void instance" types_table: @@ -95,7 +95,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -112,7 +112,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -128,7 +128,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -143,7 +143,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -157,7 +157,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -176,8 +176,8 @@ type_6_dispatch: .word function_out_int_at_IO .word function_out_string_at_IO .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_6_prototype: .word 5 @@ -202,8 +202,8 @@ type_7_dispatch: .word function_reflect_Y_at_Complex .word function_x_value_at_Complex .word function_y_value_at_Complex -.word __init_attr_at_Complex -.word __init_at_Complex +.word __attributes_ctor_Complex +.word __ctor_Complex type_7_prototype: .word 6 @@ -216,7 +216,7 @@ type_7_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -297,7 +297,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -332,7 +332,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -414,7 +414,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -438,7 +438,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -449,7 +449,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -478,7 +478,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -547,7 +547,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -606,7 +606,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -617,7 +617,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -648,7 +648,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -686,7 +686,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -703,7 +703,7 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -728,16 +728,16 @@ addi $sp $sp -188 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -192($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -188($fp) -jal __init_at_Complex +jal __ctor_Complex sw $v0 -184($fp) lw $t0 -184($fp) li $t1 0 @@ -834,7 +834,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -152($fp) +sw $t1 -156($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -842,25 +842,25 @@ sw $t0 -148($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -144($fp) +sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -140($fp) -lw $t0 -152($fp) +sw $t0 -144($fp) +lw $t0 -156($fp) lw $t1 -148($fp) seq $t0 $t0 $t1 sw $t0 -136($fp) lw $t0 -136($fp) bne $t0 $zero label_9 -lw $t0 -152($fp) -lw $t1 -144($fp) +lw $t0 -156($fp) +lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -136($fp) lw $t0 -136($fp) bne $t0 $zero label_10 -lw $t0 -152($fp) -lw $t1 -140($fp) +lw $t0 -156($fp) +lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -136($fp) lw $t0 -136($fp) @@ -876,9 +876,9 @@ lw $t1 12($t0) sw $t1 -160($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -156($fp) +sw $t1 -152($fp) lw $t0 -160($fp) -lw $t1 -156($fp) +lw $t1 -152($fp) seq $t0 $t0 $t1 sw $t0 -132($fp) j label_12 @@ -888,10 +888,10 @@ lw $t1 12($t0) sw $t1 -160($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -156($fp) +sw $t1 -152($fp) lw $t0 -160($fp) move $a0 $t0 -lw $t0 -156($fp) +lw $t0 -152($fp) move $a1 $t0 jal equal_str sw $v0 -132($fp) @@ -902,9 +902,9 @@ lw $t1 12($t0) sw $t1 -160($fp) lw $t0 -116($fp) lw $t1 12($t0) -sw $t1 -156($fp) +sw $t1 -152($fp) lw $t0 -160($fp) -lw $t1 -156($fp) +lw $t1 -152($fp) seq $t0 $t0 $t1 sw $t0 -132($fp) j label_12 @@ -912,7 +912,7 @@ label_12: lw $t0 -132($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -164($fp) lw $t0 -164($fp) @@ -925,7 +925,7 @@ sw $t0 -112($fp) lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -108($fp) lw $t0 0($fp) @@ -967,7 +967,7 @@ sw $t0 -96($fp) lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -92($fp) lw $t0 0($fp) @@ -1124,7 +1124,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -36($fp) lw $t0 0($fp) @@ -1166,7 +1166,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -1210,7 +1210,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1233,7 +1233,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -1244,17 +1244,17 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Complex: +__attributes_ctor_Complex: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -16($fp) lw $t0 0($fp) @@ -1263,14 +1263,14 @@ sw $t1 12($t0) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 16($t0) lw $v0 0($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1283,7 +1283,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -80 +addi $sp $sp -72 lw $t4 8($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1295,7 +1295,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -68($fp) +sw $t1 -72($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1303,25 +1303,25 @@ sw $t0 -64($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -60($fp) +sw $t0 -56($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -56($fp) -lw $t0 -68($fp) +sw $t0 -60($fp) +lw $t0 -72($fp) lw $t1 -64($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) lw $t0 -52($fp) bne $t0 $zero label_33 -lw $t0 -68($fp) -lw $t1 -60($fp) +lw $t0 -72($fp) +lw $t1 -56($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) lw $t0 -52($fp) bne $t0 $zero label_34 -lw $t0 -68($fp) -lw $t1 -56($fp) +lw $t0 -72($fp) +lw $t1 -60($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) lw $t0 -52($fp) @@ -1347,9 +1347,9 @@ lw $t1 12($t0) sw $t1 -76($fp) lw $t0 4($fp) lw $t1 12($t0) -sw $t1 -72($fp) +sw $t1 -68($fp) lw $t0 -76($fp) -lw $t1 -72($fp) +lw $t1 -68($fp) seq $t0 $t0 $t1 sw $t0 -48($fp) j label_36 @@ -1364,10 +1364,10 @@ lw $t1 12($t0) sw $t1 -76($fp) lw $t0 4($fp) lw $t1 12($t0) -sw $t1 -72($fp) +sw $t1 -68($fp) lw $t0 -76($fp) move $a0 $t0 -lw $t0 -72($fp) +lw $t0 -68($fp) move $a1 $t0 jal equal_str sw $v0 -48($fp) @@ -1383,9 +1383,9 @@ lw $t1 12($t0) sw $t1 -76($fp) lw $t0 4($fp) lw $t1 12($t0) -sw $t1 -72($fp) +sw $t1 -68($fp) lw $t0 -76($fp) -lw $t1 -72($fp) +lw $t1 -68($fp) seq $t0 $t0 $t1 sw $t0 -48($fp) j label_36 @@ -1393,7 +1393,7 @@ label_36: lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -80($fp) lw $t4 8($fp) @@ -1407,7 +1407,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -32($fp) +sw $t1 -36($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1415,25 +1415,25 @@ sw $t0 -28($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -24($fp) +sw $t0 -20($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -20($fp) -lw $t0 -32($fp) +sw $t0 -24($fp) +lw $t0 -36($fp) lw $t1 -28($fp) seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) bne $t0 $zero label_37 -lw $t0 -32($fp) -lw $t1 -24($fp) +lw $t0 -36($fp) +lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) bne $t0 $zero label_38 -lw $t0 -32($fp) -lw $t1 -20($fp) +lw $t0 -36($fp) +lw $t1 -24($fp) seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) @@ -1459,9 +1459,9 @@ lw $t1 12($t0) sw $t1 -40($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -36($fp) +sw $t1 -32($fp) lw $t0 -40($fp) -lw $t1 -36($fp) +lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -12($fp) j label_40 @@ -1476,10 +1476,10 @@ lw $t1 12($t0) sw $t1 -40($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -36($fp) +sw $t1 -32($fp) lw $t0 -40($fp) move $a0 $t0 -lw $t0 -36($fp) +lw $t0 -32($fp) move $a1 $t0 jal equal_str sw $v0 -12($fp) @@ -1495,9 +1495,9 @@ lw $t1 12($t0) sw $t1 -40($fp) lw $t0 0($fp) lw $t1 12($t0) -sw $t1 -36($fp) +sw $t1 -32($fp) lw $t0 -40($fp) -lw $t1 -36($fp) +lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -12($fp) j label_40 @@ -1505,11 +1505,11 @@ label_40: lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -44($fp) lw $v0 8($fp) -addi $sp $sp 80 +addi $sp $sp 72 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1522,11 +1522,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -112 +addi $sp $sp -104 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -68($fp) lw $t4 0($fp) @@ -1540,7 +1540,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -92($fp) +sw $t1 -96($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1548,25 +1548,25 @@ sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -84($fp) +sw $t0 -80($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -80($fp) -lw $t0 -92($fp) +sw $t0 -84($fp) +lw $t0 -96($fp) lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_41 -lw $t0 -92($fp) -lw $t1 -84($fp) +lw $t0 -96($fp) +lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_42 -lw $t0 -92($fp) -lw $t1 -80($fp) +lw $t0 -96($fp) +lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) @@ -1592,9 +1592,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_44 @@ -1609,10 +1609,10 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) move $a0 $t0 -lw $t0 -96($fp) +lw $t0 -92($fp) move $a1 $t0 jal equal_str sw $v0 -72($fp) @@ -1628,9 +1628,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_44 @@ -1638,7 +1638,7 @@ label_44: lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -104($fp) lw $t0 -104($fp) @@ -1651,7 +1651,7 @@ sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -60($fp) la $t0 data_28 @@ -1659,7 +1659,7 @@ sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -52($fp) lw $t0 0($fp) @@ -1835,7 +1835,7 @@ lw $t0 -12($fp) sw $t0 -112($fp) label_56: lw $v0 -112($fp) -addi $sp $sp 112 +addi $sp $sp 104 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1848,7 +1848,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -104 +addi $sp $sp -96 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1864,7 +1864,7 @@ sw $t0 -60($fp) lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -68($fp) lw $t4 0($fp) @@ -1878,7 +1878,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -92($fp) +sw $t1 -96($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1886,25 +1886,25 @@ sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -84($fp) +sw $t0 -80($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -80($fp) -lw $t0 -92($fp) +sw $t0 -84($fp) +lw $t0 -96($fp) lw $t1 -88($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_57 -lw $t0 -92($fp) -lw $t1 -84($fp) +lw $t0 -96($fp) +lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) bne $t0 $zero label_58 -lw $t0 -92($fp) -lw $t1 -80($fp) +lw $t0 -96($fp) +lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) @@ -1930,9 +1930,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_60 @@ -1947,10 +1947,10 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) move $a0 $t0 -lw $t0 -96($fp) +lw $t0 -92($fp) move $a1 $t0 jal equal_str sw $v0 -72($fp) @@ -1966,9 +1966,9 @@ lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) lw $t1 12($t0) -sw $t1 -96($fp) +sw $t1 -92($fp) lw $t0 -100($fp) -lw $t1 -96($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) j label_60 @@ -1976,7 +1976,7 @@ label_60: lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -104($fp) lw $t4 0($fp) @@ -1994,7 +1994,7 @@ sw $t0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t4 0($fp) @@ -2008,7 +2008,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -44($fp) +sw $t1 -48($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2016,25 +2016,25 @@ sw $t0 -40($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -36($fp) +sw $t0 -32($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -32($fp) -lw $t0 -44($fp) +sw $t0 -36($fp) +lw $t0 -48($fp) lw $t1 -40($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) bne $t0 $zero label_61 -lw $t0 -44($fp) -lw $t1 -36($fp) +lw $t0 -48($fp) +lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) bne $t0 $zero label_62 -lw $t0 -44($fp) -lw $t1 -32($fp) +lw $t0 -48($fp) +lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) @@ -2060,9 +2060,9 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) -lw $t1 -48($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) j label_64 @@ -2077,10 +2077,10 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) move $a0 $t0 -lw $t0 -48($fp) +lw $t0 -44($fp) move $a1 $t0 jal equal_str sw $v0 -24($fp) @@ -2096,9 +2096,9 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) -lw $t1 -48($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) j label_64 @@ -2106,11 +2106,11 @@ label_64: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -56($fp) lw $v0 0($fp) -addi $sp $sp 104 +addi $sp $sp 96 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2123,7 +2123,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -56 +addi $sp $sp -48 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2139,7 +2139,7 @@ sw $t0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t4 0($fp) @@ -2153,7 +2153,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -44($fp) +sw $t1 -48($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2161,25 +2161,25 @@ sw $t0 -40($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -36($fp) +sw $t0 -32($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -32($fp) -lw $t0 -44($fp) +sw $t0 -36($fp) +lw $t0 -48($fp) lw $t1 -40($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) bne $t0 $zero label_65 -lw $t0 -44($fp) -lw $t1 -36($fp) +lw $t0 -48($fp) +lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) bne $t0 $zero label_66 -lw $t0 -44($fp) -lw $t1 -32($fp) +lw $t0 -48($fp) +lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) @@ -2205,9 +2205,9 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) -lw $t1 -48($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) j label_68 @@ -2222,10 +2222,10 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) move $a0 $t0 -lw $t0 -48($fp) +lw $t0 -44($fp) move $a1 $t0 jal equal_str sw $v0 -24($fp) @@ -2241,9 +2241,9 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) -lw $t1 -48($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) j label_68 @@ -2251,11 +2251,11 @@ label_68: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -56($fp) lw $v0 0($fp) -addi $sp $sp 56 +addi $sp $sp 48 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2268,7 +2268,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -56 +addi $sp $sp -48 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2284,7 +2284,7 @@ sw $t0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -20($fp) lw $t4 0($fp) @@ -2298,7 +2298,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -44($fp) +sw $t1 -48($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2306,25 +2306,25 @@ sw $t0 -40($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -36($fp) +sw $t0 -32($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -32($fp) -lw $t0 -44($fp) +sw $t0 -36($fp) +lw $t0 -48($fp) lw $t1 -40($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) bne $t0 $zero label_69 -lw $t0 -44($fp) -lw $t1 -36($fp) +lw $t0 -48($fp) +lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) bne $t0 $zero label_70 -lw $t0 -44($fp) -lw $t1 -32($fp) +lw $t0 -48($fp) +lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) @@ -2350,9 +2350,9 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) -lw $t1 -48($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) j label_72 @@ -2367,10 +2367,10 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) move $a0 $t0 -lw $t0 -48($fp) +lw $t0 -44($fp) move $a1 $t0 jal equal_str sw $v0 -24($fp) @@ -2386,9 +2386,9 @@ lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -48($fp) +sw $t1 -44($fp) lw $t0 -52($fp) -lw $t1 -48($fp) +lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) j label_72 @@ -2396,11 +2396,11 @@ label_72: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -56($fp) lw $v0 0($fp) -addi $sp $sp 56 +addi $sp $sp 48 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2413,7 +2413,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -124 +addi $sp $sp -116 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -2452,7 +2452,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -104($fp) +sw $t1 -108($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2460,25 +2460,25 @@ sw $t0 -100($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -96($fp) +sw $t0 -92($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -92($fp) -lw $t0 -104($fp) +sw $t0 -96($fp) +lw $t0 -108($fp) lw $t1 -100($fp) seq $t0 $t0 $t1 sw $t0 -88($fp) lw $t0 -88($fp) bne $t0 $zero label_75 -lw $t0 -104($fp) -lw $t1 -96($fp) +lw $t0 -108($fp) +lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -88($fp) lw $t0 -88($fp) bne $t0 $zero label_76 -lw $t0 -104($fp) -lw $t1 -92($fp) +lw $t0 -108($fp) +lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -88($fp) lw $t0 -88($fp) @@ -2504,9 +2504,9 @@ lw $t1 12($t0) sw $t1 -112($fp) lw $t0 -76($fp) lw $t1 12($t0) -sw $t1 -108($fp) +sw $t1 -104($fp) lw $t0 -112($fp) -lw $t1 -108($fp) +lw $t1 -104($fp) seq $t0 $t0 $t1 sw $t0 -84($fp) j label_78 @@ -2521,10 +2521,10 @@ lw $t1 12($t0) sw $t1 -112($fp) lw $t0 -76($fp) lw $t1 12($t0) -sw $t1 -108($fp) +sw $t1 -104($fp) lw $t0 -112($fp) move $a0 $t0 -lw $t0 -108($fp) +lw $t0 -104($fp) move $a1 $t0 jal equal_str sw $v0 -84($fp) @@ -2540,9 +2540,9 @@ lw $t1 12($t0) sw $t1 -112($fp) lw $t0 -76($fp) lw $t1 12($t0) -sw $t1 -108($fp) +sw $t1 -104($fp) lw $t0 -112($fp) -lw $t1 -108($fp) +lw $t1 -104($fp) seq $t0 $t0 $t1 sw $t0 -84($fp) j label_78 @@ -2550,7 +2550,7 @@ label_78: lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -116($fp) lw $t0 -116($fp) @@ -2561,7 +2561,7 @@ bne $t0 $zero label_79 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) @@ -2606,7 +2606,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -48($fp) +sw $t1 -52($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -2614,25 +2614,25 @@ sw $t0 -44($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -40($fp) +sw $t0 -36($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -36($fp) -lw $t0 -48($fp) +sw $t0 -40($fp) +lw $t0 -52($fp) lw $t1 -44($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) bne $t0 $zero label_82 -lw $t0 -48($fp) -lw $t1 -40($fp) +lw $t0 -52($fp) +lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) bne $t0 $zero label_83 -lw $t0 -48($fp) -lw $t1 -36($fp) +lw $t0 -52($fp) +lw $t1 -40($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) @@ -2658,9 +2658,9 @@ lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -52($fp) +sw $t1 -48($fp) lw $t0 -56($fp) -lw $t1 -52($fp) +lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) j label_85 @@ -2675,10 +2675,10 @@ lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -52($fp) +sw $t1 -48($fp) lw $t0 -56($fp) move $a0 $t0 -lw $t0 -52($fp) +lw $t0 -48($fp) move $a1 $t0 jal equal_str sw $v0 -28($fp) @@ -2694,9 +2694,9 @@ lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) lw $t1 12($t0) -sw $t1 -52($fp) +sw $t1 -48($fp) lw $t0 -56($fp) -lw $t1 -52($fp) +lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) j label_85 @@ -2704,7 +2704,7 @@ label_85: lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) @@ -2715,7 +2715,7 @@ bne $t0 $zero label_86 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) @@ -2725,7 +2725,7 @@ label_86: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -2735,7 +2735,7 @@ lw $t0 -68($fp) sw $t0 -124($fp) label_88: lw $v0 -124($fp) -addi $sp $sp 124 +addi $sp $sp 116 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2748,14 +2748,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2768,27 +2768,27 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Complex: +__ctor_Complex: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 6 sll $t0 $t0 2 la $t1 prototype_table @@ -2805,11 +2805,11 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Complex +jal __attributes_ctor_Complex addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index 1288fba3c..650b2fac9 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -20,39 +20,39 @@ data_8: .asciiz "" .word 0 data_9: .asciiz "Abort called from class " .word 0 -data_10: .asciiz "Substring out of range" +data_10: .asciiz "Index out of range exception" .word 0 -data_11: .asciiz "RuntimeError: Function call in a void instance" +data_11: .asciiz "Function call in a void instance" .word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" +data_12: .asciiz "Function call in a void instance" .word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" +data_13: .asciiz "Function call in a void instance" .word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" +data_14: .asciiz "Function call in a void instance" .word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" +data_15: .asciiz "Function call in a void instance" .word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" +data_16: .asciiz "Function call in a void instance" .word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" +data_17: .asciiz "Function call in a void instance" .word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" +data_18: .asciiz "Function call in a void instance" .word 0 data_19: .asciiz "enter a string\n" .word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" +data_20: .asciiz "Function call in a void instance" .word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" +data_21: .asciiz "Function call in a void instance" .word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" +data_22: .asciiz "Function call in a void instance" .word 0 data_23: .asciiz "that was not a palindrome\n" .word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" +data_24: .asciiz "Function call in a void instance" .word 0 data_25: .asciiz "that was a palindrome\n" .word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" +data_26: .asciiz "Function call in a void instance" types_table: @@ -75,7 +75,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -92,7 +92,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -108,7 +108,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -123,7 +123,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -137,7 +137,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -157,8 +157,8 @@ type_6_dispatch: .word function_out_string_at_IO .word function_main_at_Main .word function_pal_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_6_prototype: .word 5 @@ -170,7 +170,7 @@ type_6_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -251,7 +251,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -286,7 +286,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -368,7 +368,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -392,7 +392,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -403,7 +403,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -432,7 +432,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -501,7 +501,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -560,7 +560,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -571,7 +571,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -602,7 +602,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -640,7 +640,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -657,24 +657,24 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 0($fp) lw $t1 -12($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -687,7 +687,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -276 +addi $sp $sp -272 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -718,7 +718,7 @@ sw $v0 -232($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -228($fp) lw $t0 -232($fp) @@ -727,7 +727,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -260($fp) +sw $t1 -264($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -735,25 +735,25 @@ sw $t0 -256($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -252($fp) +sw $t0 -248($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -248($fp) -lw $t0 -260($fp) +sw $t0 -252($fp) +lw $t0 -264($fp) lw $t1 -256($fp) seq $t0 $t0 $t1 sw $t0 -244($fp) lw $t0 -244($fp) bne $t0 $zero label_5 -lw $t0 -260($fp) -lw $t1 -252($fp) +lw $t0 -264($fp) +lw $t1 -248($fp) seq $t0 $t0 $t1 sw $t0 -244($fp) lw $t0 -244($fp) bne $t0 $zero label_6 -lw $t0 -260($fp) -lw $t1 -248($fp) +lw $t0 -264($fp) +lw $t1 -252($fp) seq $t0 $t0 $t1 sw $t0 -244($fp) lw $t0 -244($fp) @@ -769,9 +769,9 @@ lw $t1 12($t0) sw $t1 -268($fp) lw $t0 -228($fp) lw $t1 12($t0) -sw $t1 -264($fp) +sw $t1 -260($fp) lw $t0 -268($fp) -lw $t1 -264($fp) +lw $t1 -260($fp) seq $t0 $t0 $t1 sw $t0 -240($fp) j label_8 @@ -781,10 +781,10 @@ lw $t1 12($t0) sw $t1 -268($fp) lw $t0 -228($fp) lw $t1 12($t0) -sw $t1 -264($fp) +sw $t1 -260($fp) lw $t0 -268($fp) move $a0 $t0 -lw $t0 -264($fp) +lw $t0 -260($fp) move $a1 $t0 jal equal_str sw $v0 -240($fp) @@ -795,9 +795,9 @@ lw $t1 12($t0) sw $t1 -268($fp) lw $t0 -228($fp) lw $t1 12($t0) -sw $t1 -264($fp) +sw $t1 -260($fp) lw $t0 -268($fp) -lw $t1 -264($fp) +lw $t1 -260($fp) seq $t0 $t0 $t1 sw $t0 -240($fp) j label_8 @@ -805,7 +805,7 @@ label_8: lw $t0 -240($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -272($fp) lw $t0 -272($fp) @@ -843,7 +843,7 @@ sw $v0 -176($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -172($fp) lw $t0 -176($fp) @@ -852,7 +852,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -204($fp) +sw $t1 -208($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -860,25 +860,25 @@ sw $t0 -200($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -196($fp) +sw $t0 -192($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -192($fp) -lw $t0 -204($fp) +sw $t0 -196($fp) +lw $t0 -208($fp) lw $t1 -200($fp) seq $t0 $t0 $t1 sw $t0 -188($fp) lw $t0 -188($fp) bne $t0 $zero label_11 -lw $t0 -204($fp) -lw $t1 -196($fp) +lw $t0 -208($fp) +lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -188($fp) lw $t0 -188($fp) bne $t0 $zero label_12 -lw $t0 -204($fp) -lw $t1 -192($fp) +lw $t0 -208($fp) +lw $t1 -196($fp) seq $t0 $t0 $t1 sw $t0 -188($fp) lw $t0 -188($fp) @@ -894,9 +894,9 @@ lw $t1 12($t0) sw $t1 -212($fp) lw $t0 -172($fp) lw $t1 12($t0) -sw $t1 -208($fp) +sw $t1 -204($fp) lw $t0 -212($fp) -lw $t1 -208($fp) +lw $t1 -204($fp) seq $t0 $t0 $t1 sw $t0 -184($fp) j label_14 @@ -906,10 +906,10 @@ lw $t1 12($t0) sw $t1 -212($fp) lw $t0 -172($fp) lw $t1 12($t0) -sw $t1 -208($fp) +sw $t1 -204($fp) lw $t0 -212($fp) move $a0 $t0 -lw $t0 -208($fp) +lw $t0 -204($fp) move $a1 $t0 jal equal_str sw $v0 -184($fp) @@ -920,9 +920,9 @@ lw $t1 12($t0) sw $t1 -212($fp) lw $t0 -172($fp) lw $t1 12($t0) -sw $t1 -208($fp) +sw $t1 -204($fp) lw $t0 -212($fp) -lw $t1 -208($fp) +lw $t1 -204($fp) seq $t0 $t0 $t1 sw $t0 -184($fp) j label_14 @@ -930,7 +930,7 @@ label_14: lw $t0 -184($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -216($fp) lw $t0 -216($fp) @@ -941,13 +941,13 @@ bne $t0 $zero label_33 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -124($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -120($fp) lw $t0 0($fp) @@ -1016,7 +1016,7 @@ sw $t1 -104($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -1029,13 +1029,13 @@ sw $t0 -96($fp) lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -108($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -80($fp) lw $t0 0($fp) @@ -1077,7 +1077,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -148($fp) +sw $t1 -152($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -1085,25 +1085,25 @@ sw $t0 -144($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -140($fp) +sw $t0 -136($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -136($fp) -lw $t0 -148($fp) +sw $t0 -140($fp) +lw $t0 -152($fp) lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -132($fp) lw $t0 -132($fp) bne $t0 $zero label_21 -lw $t0 -148($fp) -lw $t1 -140($fp) +lw $t0 -152($fp) +lw $t1 -136($fp) seq $t0 $t0 $t1 sw $t0 -132($fp) lw $t0 -132($fp) bne $t0 $zero label_22 -lw $t0 -148($fp) -lw $t1 -136($fp) +lw $t0 -152($fp) +lw $t1 -140($fp) seq $t0 $t0 $t1 sw $t0 -132($fp) lw $t0 -132($fp) @@ -1119,9 +1119,9 @@ lw $t1 12($t0) sw $t1 -156($fp) lw $t0 -72($fp) lw $t1 12($t0) -sw $t1 -152($fp) +sw $t1 -148($fp) lw $t0 -156($fp) -lw $t1 -152($fp) +lw $t1 -148($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) j label_24 @@ -1131,10 +1131,10 @@ lw $t1 12($t0) sw $t1 -156($fp) lw $t0 -72($fp) lw $t1 12($t0) -sw $t1 -152($fp) +sw $t1 -148($fp) lw $t0 -156($fp) move $a0 $t0 -lw $t0 -152($fp) +lw $t0 -148($fp) move $a1 $t0 jal equal_str sw $v0 -128($fp) @@ -1145,9 +1145,9 @@ lw $t1 12($t0) sw $t1 -156($fp) lw $t0 -72($fp) lw $t1 12($t0) -sw $t1 -152($fp) +sw $t1 -148($fp) lw $t0 -156($fp) -lw $t1 -152($fp) +lw $t1 -148($fp) seq $t0 $t0 $t1 sw $t0 -128($fp) j label_24 @@ -1155,7 +1155,7 @@ label_24: lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -160($fp) lw $t0 -160($fp) @@ -1166,7 +1166,7 @@ bne $t0 $zero label_25 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -68($fp) @@ -1176,7 +1176,7 @@ label_25: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -64($fp) lw $t0 0($fp) @@ -1212,7 +1212,7 @@ sw $t1 -56($fp) li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) @@ -1225,7 +1225,7 @@ sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -60($fp) lw $t0 0($fp) @@ -1301,7 +1301,7 @@ label_33: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) @@ -1314,14 +1314,14 @@ label_35: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -280($fp) label_36: lw $v0 -280($fp) -addi $sp $sp 276 +addi $sp $sp 272 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1334,11 +1334,11 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -92 +addi $sp $sp -88 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -1351,7 +1351,7 @@ sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -96($fp) lw $t0 -96($fp) @@ -1363,7 +1363,7 @@ sw $t0 -80($fp) lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -76($fp) lw $t0 0($fp) @@ -1463,7 +1463,7 @@ sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -36($fp) lw $t0 0($fp) @@ -1505,7 +1505,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -1542,20 +1542,20 @@ lw $t0 -12($fp) sw $t0 -64($fp) label_48: lw $v0 -64($fp) -addi $sp $sp 92 +addi $sp $sp 88 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 5 sll $t0 $t0 2 la $t1 prototype_table @@ -1572,11 +1572,11 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index c424699ff..d8d0223d5 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -20,25 +20,25 @@ data_8: .asciiz "" .word 0 data_9: .asciiz "Abort called from class " .word 0 -data_10: .asciiz "Substring out of range" +data_10: .asciiz "Index out of range exception" .word 0 data_11: .asciiz "2 is trivially prime.\n" .word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" +data_12: .asciiz "Function call in a void instance" .word 0 -data_13: .asciiz "RuntimeError: Division by zero" +data_13: .asciiz "Division by zero exception" .word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" +data_14: .asciiz "Function call in a void instance" .word 0 data_15: .asciiz " is prime.\n" .word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" +data_16: .asciiz "Function call in a void instance" .word 0 data_17: .asciiz "continue" .word 0 data_18: .asciiz "halt" .word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" +data_19: .asciiz "Function call in a void instance" types_table: @@ -61,7 +61,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -78,7 +78,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -94,7 +94,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -109,7 +109,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -123,7 +123,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -142,8 +142,8 @@ type_6_dispatch: .word function_out_int_at_IO .word function_out_string_at_IO .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_6_prototype: .word 5 @@ -159,7 +159,7 @@ type_6_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -240,7 +240,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -275,7 +275,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -357,7 +357,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -381,7 +381,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -392,7 +392,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -421,7 +421,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -490,7 +490,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -549,7 +549,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -560,7 +560,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -591,7 +591,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -629,7 +629,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -646,19 +646,19 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -388 +addi $sp $sp -368 la $t0 data_11 sw $t0 -372($fp) lw $t0 -372($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -368($fp) lw $t0 0($fp) @@ -694,7 +694,7 @@ sw $v0 -360($fp) li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -356($fp) lw $t0 -356($fp) @@ -715,7 +715,7 @@ sw $t1 28($t0) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -348($fp) lw $t0 0($fp) @@ -724,7 +724,7 @@ sw $t1 12($t0) li $t0 500 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -340($fp) lw $t0 -340($fp) @@ -736,7 +736,7 @@ label_5: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -328($fp) lw $t0 -328($fp) @@ -757,7 +757,7 @@ sw $t1 -320($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -308($fp) lw $t0 -308($fp) @@ -770,7 +770,7 @@ sw $t0 -312($fp) lw $t0 -312($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -324($fp) lw $t0 -324($fp) @@ -780,7 +780,7 @@ sw $t0 0($t1) li $t0 2 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -304($fp) lw $t0 -304($fp) @@ -819,7 +819,7 @@ sw $t0 -260($fp) lw $t0 -260($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -272($fp) lw $t0 -272($fp) @@ -832,7 +832,7 @@ sw $t1 -276($fp) lw $t0 -276($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -288($fp) lw $t0 -288($fp) @@ -867,7 +867,7 @@ sw $t1 -176($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -164($fp) lw $t0 -164($fp) @@ -903,7 +903,7 @@ sw $t0 -168($fp) lw $t0 -168($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -180($fp) lw $t0 -180($fp) @@ -916,7 +916,7 @@ sw $t0 -184($fp) lw $t0 -184($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -196($fp) lw $t0 -196($fp) @@ -929,13 +929,13 @@ sw $t0 -200($fp) lw $t0 -200($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -212($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -160($fp) lw $t0 -212($fp) @@ -944,7 +944,7 @@ sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) -sw $t1 -236($fp) +sw $t1 -240($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) @@ -952,25 +952,25 @@ sw $t0 -232($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) -sw $t0 -228($fp) +sw $t0 -224($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) -sw $t0 -224($fp) -lw $t0 -236($fp) +sw $t0 -228($fp) +lw $t0 -240($fp) lw $t1 -232($fp) seq $t0 $t0 $t1 sw $t0 -220($fp) lw $t0 -220($fp) bne $t0 $zero label_10 -lw $t0 -236($fp) -lw $t1 -228($fp) +lw $t0 -240($fp) +lw $t1 -224($fp) seq $t0 $t0 $t1 sw $t0 -220($fp) lw $t0 -220($fp) bne $t0 $zero label_11 -lw $t0 -236($fp) -lw $t1 -224($fp) +lw $t0 -240($fp) +lw $t1 -228($fp) seq $t0 $t0 $t1 sw $t0 -220($fp) lw $t0 -220($fp) @@ -986,9 +986,9 @@ lw $t1 12($t0) sw $t1 -244($fp) lw $t0 -160($fp) lw $t1 12($t0) -sw $t1 -240($fp) +sw $t1 -236($fp) lw $t0 -244($fp) -lw $t1 -240($fp) +lw $t1 -236($fp) seq $t0 $t0 $t1 sw $t0 -216($fp) j label_13 @@ -998,10 +998,10 @@ lw $t1 12($t0) sw $t1 -244($fp) lw $t0 -160($fp) lw $t1 12($t0) -sw $t1 -240($fp) +sw $t1 -236($fp) lw $t0 -244($fp) move $a0 $t0 -lw $t0 -240($fp) +lw $t0 -236($fp) move $a1 $t0 jal equal_str sw $v0 -216($fp) @@ -1012,9 +1012,9 @@ lw $t1 12($t0) sw $t1 -244($fp) lw $t0 -160($fp) lw $t1 12($t0) -sw $t1 -240($fp) +sw $t1 -236($fp) lw $t0 -244($fp) -lw $t1 -240($fp) +lw $t1 -236($fp) seq $t0 $t0 $t1 sw $t0 -216($fp) j label_13 @@ -1022,7 +1022,7 @@ label_13: lw $t0 -216($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -248($fp) lw $t0 -248($fp) @@ -1033,7 +1033,7 @@ bne $t0 $zero label_14 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -156($fp) lw $t0 -156($fp) @@ -1043,7 +1043,7 @@ label_14: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -152($fp) lw $t0 -152($fp) @@ -1056,7 +1056,7 @@ label_16: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -148($fp) lw $t0 -148($fp) @@ -1080,7 +1080,7 @@ sw $t1 -140($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -128($fp) lw $t0 -128($fp) @@ -1093,7 +1093,7 @@ sw $t0 -132($fp) lw $t0 -132($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -144($fp) lw $t0 -144($fp) @@ -1133,7 +1133,7 @@ sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -100($fp) lw $t0 -100($fp) @@ -1146,7 +1146,7 @@ sw $t1 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -116($fp) lw $t0 -116($fp) @@ -1157,7 +1157,7 @@ bne $t0 $zero label_20 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) @@ -1213,7 +1213,7 @@ sw $t0 -72($fp) lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -68($fp) lw $t0 0($fp) @@ -1272,7 +1272,7 @@ sw $t0 -36($fp) lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -48($fp) lw $t0 -48($fp) @@ -1285,7 +1285,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -1297,7 +1297,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) @@ -1337,7 +1337,7 @@ lw $t0 0($fp) lw $t1 -336($fp) sw $t1 16($t0) lw $v0 0($fp) -addi $sp $sp 388 +addi $sp $sp 368 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1350,28 +1350,28 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -4 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 24 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -28 +addi $sp $sp -8 li $t0 5 sll $t0 $t0 2 la $t1 prototype_table @@ -1388,11 +1388,11 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 28 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index 33c312920..e475cd9c2 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -20,23 +20,23 @@ data_8: .asciiz "" .word 0 data_9: .asciiz "Abort called from class " .word 0 -data_10: .asciiz "Substring out of range" +data_10: .asciiz "Index out of range exception" .word 0 -data_11: .asciiz "RuntimeError: Function call in a void instance" +data_11: .asciiz "Function call in a void instance" .word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" +data_12: .asciiz "Function call in a void instance" .word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" +data_13: .asciiz "Function call in a void instance" .word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" +data_14: .asciiz "Function call in a void instance" .word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" +data_15: .asciiz "Function call in a void instance" .word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" +data_16: .asciiz "Function call in a void instance" .word 0 data_17: .asciiz "\n" .word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" +data_18: .asciiz "Function call in a void instance" types_table: @@ -59,7 +59,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -76,7 +76,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -92,7 +92,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -107,7 +107,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -121,7 +121,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -140,8 +140,8 @@ type_6_dispatch: .word function_out_int_at_IO .word function_out_string_at_IO .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_6_prototype: .word 5 @@ -152,7 +152,7 @@ type_6_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -233,7 +233,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -268,7 +268,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -350,7 +350,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -374,7 +374,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -385,7 +385,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -414,7 +414,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -483,7 +483,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -542,7 +542,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -553,7 +553,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -584,7 +584,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -622,7 +622,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -639,7 +639,7 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -664,13 +664,13 @@ addi $sp $sp -92 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -100($fp) li $t0 3 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -96($fp) lw $t0 0($fp) @@ -680,7 +680,7 @@ sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -92($fp) lw $t0 -92($fp) @@ -746,16 +746,16 @@ sw $v0 -72($fp) li $t0 4 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -68($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -64($fp) -jal __init_at_Object +jal __ctor_Object sw $v0 -60($fp) lw $t0 -60($fp) li $t1 0 @@ -882,7 +882,7 @@ sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -20($fp) lw $t0 0($fp) @@ -923,7 +923,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -946,7 +946,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index 4900336d5..c18c540cf 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -26,71 +26,71 @@ data_11: .asciiz "" .word 0 data_12: .asciiz "Abort called from class " .word 0 -data_13: .asciiz "Substring out of range" +data_13: .asciiz "Index out of range exception" .word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" +data_14: .asciiz "Function call in a void instance" .word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" +data_15: .asciiz "Function call in a void instance" .word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" +data_16: .asciiz "Function call in a void instance" .word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" +data_17: .asciiz "Function call in a void instance" .word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" +data_18: .asciiz "Function call in a void instance" .word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" +data_19: .asciiz "Function call in a void instance" .word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" +data_20: .asciiz "Function call in a void instance" .word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" +data_21: .asciiz "Function call in a void instance" .word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" +data_22: .asciiz "Function call in a void instance" .word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" +data_23: .asciiz "Function call in a void instance" .word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" +data_24: .asciiz "Function call in a void instance" .word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" +data_25: .asciiz "Function call in a void instance" .word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" +data_26: .asciiz "Function call in a void instance" .word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" +data_27: .asciiz "Function call in a void instance" .word 0 -data_28: .asciiz "RuntimeError: Function call in a void instance" +data_28: .asciiz "Function call in a void instance" .word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" +data_29: .asciiz "Function call in a void instance" .word 0 -data_30: .asciiz "RuntimeError: Function call in a void instance" +data_30: .asciiz "Function call in a void instance" .word 0 -data_31: .asciiz "RuntimeError: Function call in a void instance" +data_31: .asciiz "Function call in a void instance" .word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" +data_32: .asciiz "Function call in a void instance" .word 0 data_33: .asciiz "\n" .word 0 -data_34: .asciiz "RuntimeError: Function call in a void instance" +data_34: .asciiz "Function call in a void instance" .word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" +data_35: .asciiz "Function call in a void instance" .word 0 -data_36: .asciiz "RuntimeError: Function call in a void instance" +data_36: .asciiz "Function call in a void instance" .word 0 -data_37: .asciiz "RuntimeError: Function call in a void instance" +data_37: .asciiz "Function call in a void instance" .word 0 -data_38: .asciiz "RuntimeError: Function call in a void instance" +data_38: .asciiz "Function call in a void instance" .word 0 data_39: .asciiz "How many numbers to sort? " .word 0 -data_40: .asciiz "RuntimeError: Function call in a void instance" +data_40: .asciiz "Function call in a void instance" .word 0 -data_41: .asciiz "RuntimeError: Function call in a void instance" +data_41: .asciiz "Function call in a void instance" .word 0 -data_42: .asciiz "RuntimeError: Function call in a void instance" +data_42: .asciiz "Function call in a void instance" .word 0 -data_43: .asciiz "RuntimeError: Function call in a void instance" +data_43: .asciiz "Function call in a void instance" .word 0 -data_44: .asciiz "RuntimeError: Function call in a void instance" +data_44: .asciiz "Function call in a void instance" .word 0 -data_45: .asciiz "RuntimeError: Function call in a void instance" +data_45: .asciiz "Function call in a void instance" types_table: @@ -119,7 +119,7 @@ type_1_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Object +.word __ctor_Object type_1_prototype: .word 0 @@ -136,7 +136,7 @@ type_2_dispatch: .word function_out_int_at_IO .word function_in_string_at_IO .word function_in_int_at_IO -.word __init_at_IO +.word __ctor_IO type_2_prototype: .word 1 @@ -152,7 +152,7 @@ type_3_dispatch: .word function_length_at_String .word function_concat_at_String .word function_substr_at_String -.word __init_at_String +.word __ctor_String type_3_prototype: .word 2 @@ -167,7 +167,7 @@ type_4_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Int +.word __ctor_Int type_4_prototype: .word 3 @@ -181,7 +181,7 @@ type_5_dispatch: .word function_abort_at_Object .word function_type_name_at_Object .word function_copy_at_Object -.word __init_at_Bool +.word __ctor_Bool type_5_prototype: .word 4 @@ -208,8 +208,8 @@ type_6_dispatch: .word function_rcons_at_List .word function_rev_at_List .word function_sort_at_List -.word __init_attr_at_List -.word __init_at_List +.word __attributes_ctor_List +.word __ctor_List type_6_prototype: .word 5 @@ -236,8 +236,8 @@ type_7_dispatch: .word function_rev_at_Cons .word function_sort_at_Cons .word function_init_at_Cons -.word __init_attr_at_Cons -.word __init_at_Cons +.word __attributes_ctor_Cons +.word __ctor_Cons type_7_prototype: .word 6 @@ -265,8 +265,8 @@ type_8_dispatch: .word function_rcons_at_Nil .word function_rev_at_Nil .word function_sort_at_Nil -.word __init_attr_at_Nil -.word __init_at_Nil +.word __attributes_ctor_Nil +.word __ctor_Nil type_8_prototype: .word 7 @@ -285,8 +285,8 @@ type_9_dispatch: .word function_out_string_at_IO .word function_iota_at_Main .word function_main_at_Main -.word __init_attr_at_Main -.word __init_at_Main +.word __attributes_ctor_Main +.word __ctor_Main type_9_prototype: .word 8 @@ -298,7 +298,7 @@ type_9_prototype: .text .globl main -__init_at_Object: +__ctor_Object: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -379,7 +379,7 @@ sw $t1 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -414,7 +414,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_IO: +__ctor_IO: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -496,7 +496,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -520,7 +520,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -531,7 +531,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_String: +__ctor_String: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -560,7 +560,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -20($fp) @@ -629,7 +629,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -688,7 +688,7 @@ sw $v0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -699,7 +699,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Int: +__ctor_Int: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -730,7 +730,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Bool: +__ctor_Bool: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -768,7 +768,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -4 -jal __init_at_Main +jal __ctor_Main sw $v0 -12($fp) lw $t0 -12($fp) addi $sp $sp -4 @@ -785,7 +785,7 @@ addi $sp $sp 4 li $v0 10 syscall -__init_attr_at_List: +__attributes_ctor_List: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -837,7 +837,7 @@ sw $v0 -16($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -855,7 +855,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -16 -jal __init_at_Cons +jal __ctor_Cons sw $v0 -20($fp) lw $t0 -20($fp) sw $t0 -24($fp) @@ -937,7 +937,7 @@ sw $v0 -16($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -982,7 +982,7 @@ lw $t0 0($t0) jalr $ra $t0 addi $sp $sp 4 sw $v0 -16($fp) -jal __init_at_List +jal __ctor_List sw $v0 -12($fp) lw $v0 -12($fp) addi $sp $sp 12 @@ -1202,7 +1202,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_List: +__ctor_List: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1225,7 +1225,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_List +jal __attributes_ctor_List addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -1236,23 +1236,23 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Cons: +__attributes_ctor_Cons: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -20 +addi $sp $sp -12 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_List +jal __attributes_ctor_List addi $sp $sp 4 sw $v0 -20($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -16($fp) lw $t0 0($fp) @@ -1262,7 +1262,7 @@ lw $t0 0($fp) lw $t1 -12($fp) sw $t1 16($t0) lw $v0 0($fp) -addi $sp $sp 20 +addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1275,15 +1275,15 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -4 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1296,7 +1296,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t0 4($fp) lw $t1 8($fp) addi $t1 $t1 12 @@ -1306,7 +1306,7 @@ lw $t1 8($fp) addi $t1 $t1 16 sw $t0 0($t1) lw $v0 8($fp) -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1319,14 +1319,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1339,14 +1339,14 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp 0 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 8 +addi $sp $sp 0 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1359,7 +1359,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -16 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1438,7 +1438,7 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 24 +addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1451,7 +1451,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -24 +addi $sp $sp -16 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1530,7 +1530,7 @@ jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 24 +addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1543,7 +1543,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -64 +addi $sp $sp -56 lw $t0 0($fp) lw $t1 12($t0) sw $t1 -52($fp) @@ -1562,7 +1562,7 @@ sw $t1 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -56($fp) lw $t0 -56($fp) @@ -1615,7 +1615,7 @@ lw $t0 40($t0) jalr $ra $t0 addi $sp $sp 8 sw $v0 -36($fp) -jal __init_at_Cons +jal __ctor_Cons sw $v0 -32($fp) lw $t0 -32($fp) li $t1 0 @@ -1659,7 +1659,7 @@ lw $t0 -24($fp) sw $t0 -64($fp) j label_36 label_33: -jal __init_at_Cons +jal __ctor_Cons sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -1698,7 +1698,7 @@ lw $t0 -12($fp) sw $t0 -64($fp) label_36: lw $v0 -64($fp) -addi $sp $sp 64 +addi $sp $sp 56 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1711,7 +1711,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -28 +addi $sp $sp -20 lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1757,7 +1757,7 @@ lw $t0 52($t0) jalr $ra $t0 addi $sp $sp 8 sw $v0 -24($fp) -jal __init_at_Cons +jal __ctor_Cons sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -1798,7 +1798,7 @@ jalr $ra $t0 addi $sp $sp 12 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 28 +addi $sp $sp 20 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1811,7 +1811,7 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -40 +addi $sp $sp -32 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 @@ -1852,7 +1852,7 @@ sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -28($fp) lw $t0 0($fp) @@ -1928,20 +1928,20 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 40 +addi $sp $sp 32 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Cons: +__ctor_Cons: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -16 +addi $sp $sp -8 li $t0 6 sll $t0 $t0 2 la $t1 prototype_table @@ -1958,18 +1958,18 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Cons +jal __attributes_ctor_Cons addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 16 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Nil: +__attributes_ctor_Nil: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -1979,7 +1979,7 @@ addi $sp $sp -4 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_List +jal __attributes_ctor_List addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) @@ -2000,7 +2000,7 @@ addi $sp $sp -4 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -2093,7 +2093,7 @@ addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -12 -jal __init_at_Cons +jal __ctor_Cons sw $v0 -20($fp) lw $t0 -20($fp) li $t1 0 @@ -2146,7 +2146,7 @@ addi $sp $sp -4 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -2157,7 +2157,7 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Nil: +__ctor_Nil: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 @@ -2180,7 +2180,7 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Nil +jal __attributes_ctor_Nil addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) @@ -2191,18 +2191,18 @@ lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_attr_at_Main: +__attributes_ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -8 +addi $sp $sp -4 lw $t0 0($fp) lw $t1 -12($fp) sw $t1 12($t0) lw $v0 0($fp) -addi $sp $sp 8 +addi $sp $sp 4 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2215,8 +2215,8 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -68 -jal __init_at_Nil +addi $sp $sp -64 +jal __ctor_Nil sw $v0 -72($fp) lw $t0 -72($fp) lw $t1 4($fp) @@ -2225,7 +2225,7 @@ sw $t0 0($t1) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -64($fp) lw $t0 -64($fp) @@ -2244,7 +2244,7 @@ sw $t1 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Bool +jal __ctor_Bool addi $sp $sp 4 sw $v0 -56($fp) lw $t0 -56($fp) @@ -2254,7 +2254,7 @@ lw $t0 -60($fp) bne $t0 $zero label_52 j label_55 label_52: -jal __init_at_Cons +jal __ctor_Cons sw $v0 -40($fp) lw $t0 -40($fp) li $t1 0 @@ -2304,7 +2304,7 @@ sw $t1 -24($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) @@ -2317,7 +2317,7 @@ sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_Int +jal __ctor_Int addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) @@ -2330,7 +2330,7 @@ addi $sp $sp -4 sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 -addi $sp $sp 68 +addi $sp $sp 64 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2343,13 +2343,13 @@ sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -60 +addi $sp $sp -56 la $t0 data_39 sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_at_String +jal __ctor_String addi $sp $sp 4 sw $v0 -60($fp) lw $t0 0($fp) @@ -2521,20 +2521,20 @@ jalr $ra $t0 addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 60 +addi $sp $sp 56 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) addi $sp $sp 4 jr $ra -__init_at_Main: +__ctor_Main: addi $sp $sp -4 sw $ra 0($sp) addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 -addi $sp $sp -12 +addi $sp $sp -8 li $t0 8 sll $t0 $t0 2 la $t1 prototype_table @@ -2551,11 +2551,11 @@ sw $v0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 sw $t0 0($sp) -jal __init_attr_at_Main +jal __attributes_ctor_Main addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) -addi $sp $sp 12 +addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/lexer_test.py b/tests/lexer_test.py index effd4ede0..7cc100b22 100644 --- a/tests/lexer_test.py +++ b/tests/lexer_test.py @@ -1,16 +1,16 @@ -# import pytest -# import os -# from utils import compare_errors +import pytest +import os +from utils import compare_errors -# tests_dir = __file__.rpartition("/")[0] + "/lexer/" -# tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] -# @pytest.mark.lexer -# @pytest.mark.error -# @pytest.mark.run(order=1) -# @pytest.mark.parametrize("cool_file", tests) -# def test_lexer_errors(compiler_path, cool_file): -# print(compiler_path) -# print(cool_file) -# compare_errors( -# compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" -# ) +tests_dir = __file__.rpartition("/")[0] + "/lexer/" +tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +@pytest.mark.lexer +@pytest.mark.error +@pytest.mark.run(order=1) +@pytest.mark.parametrize("cool_file", tests) +def test_lexer_errors(compiler_path, cool_file): + print(compiler_path) + print(cool_file) + compare_errors( + compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" + ) diff --git a/tests/parser_test.py b/tests/parser_test.py index 78037b3fe..5c98fd1b2 100644 --- a/tests/parser_test.py +++ b/tests/parser_test.py @@ -1,14 +1,14 @@ -# import pytest -# import os -# from utils import compare_errors +import pytest +import os +from utils import compare_errors -# tests_dir = __file__.rpartition("/")[0] + "/parser/" -# tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] -# @pytest.mark.parser -# @pytest.mark.error -# @pytest.mark.run(order=2) -# @pytest.mark.parametrize("cool_file", tests) -# def test_parser_errors(compiler_path, cool_file): -# compare_errors( -# compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" -# ) +tests_dir = __file__.rpartition("/")[0] + "/parser/" +tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +@pytest.mark.parser +@pytest.mark.error +@pytest.mark.run(order=2) +@pytest.mark.parametrize("cool_file", tests) +def test_parser_errors(compiler_path, cool_file): + compare_errors( + compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" + ) diff --git a/tests/semantic_test.py b/tests/semantic_test.py index 8ec6fcf79..5e8fae4b7 100644 --- a/tests/semantic_test.py +++ b/tests/semantic_test.py @@ -1,15 +1,15 @@ -# import pytest -# import os -# from utils import compare_errors, first_error_only_line +import pytest +import os +from utils import compare_errors, first_error_only_line -# tests_dir = __file__.rpartition("/")[0] + "/semantic/" -# tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +tests_dir = __file__.rpartition("/")[0] + "/semantic/" +tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] -# @pytest.mark.semantic -# @pytest.mark.error -# @pytest.mark.run(order=3) -# @pytest.mark.parametrize("cool_file", tests) -# def test_semantic_errors(compiler_path, cool_file): -# compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ -# cmp=first_error_only_line) +@pytest.mark.semantic +@pytest.mark.error +@pytest.mark.run(order=3) +@pytest.mark.parametrize("cool_file", tests) +def test_semantic_errors(compiler_path, cool_file): + compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ + cmp=first_error_only_line) From e146aa852709d4a830d6fdfef9ad3321bdfb7ee0 Mon Sep 17 00:00:00 2001 From: regnod Date: Tue, 1 Mar 2022 14:45:32 -0500 Subject: [PATCH 91/93] ... --- src/visitors/Builder.py | 1 - src/visitors/CiltoMips.py | 859 +++++++++++++++++++------------------- src/visitors/CooltoCil.py | 12 - 3 files changed, 436 insertions(+), 436 deletions(-) diff --git a/src/visitors/Builder.py b/src/visitors/Builder.py index 7523d2ec1..51b076ed8 100755 --- a/src/visitors/Builder.py +++ b/src/visitors/Builder.py @@ -185,7 +185,6 @@ def BuildGraph(self, rootType): nodes = {} nodes[_root.name] = _root - # l = self.context.types.keys() types = self.context.types for t in types.values(): # no se puede heredar de int ni de bool, y object lo hice a mano if t.name in ['Object']: diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index e0659bcdc..8bf79a841 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -178,6 +178,7 @@ def visit(self, node): return mipsCode +# section nodes @visitor.when(TypeNode) def visit(self, node): name_label = self.build_data_label() @@ -241,34 +242,8 @@ def visit(self, node): new_func.register_instructions( instructions) self.end_function() - @visitor.when(AssignNode) - def visit(self, node): - instructions = [] - - if isinstance(node.source, VoidNode): - register = r.zero - elif isinstance(node.source, int): - register = r.t0 - instructions.append('{} {} {}'.format(o.li, r.t0, int(node.source))) - else: - register = r.t0 - instructions.extend(self.visit(node.source)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.source))) - if isinstance(node.source, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - if isinstance(node.dest, AttributeNode): - self_var = self._current_function.params[0] - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(self_var))) - - index = self._types_section[node.dest.type].attributes.index(node.dest.name) + 3 - instructions.append('{} {} {} {}'.format(o.addi, r.t1, r.t1, index * 4)) - instructions.append('{} {} 0({})'.format(o.sw, register, r.t1)) - else: - instructions.append('{} {} {}'.format(o.sw, register, self.find_var_loc(node.dest))) - - return instructions - +# binary + # arithmetics @visitor.when(PlusNode) def visit(self, node): instructions = [] @@ -374,6 +349,140 @@ def visit(self, node): return instructions + #logics + @visitor.when(LessNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.slt, r.t1, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(LessEqualNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {} {}'.format(o.sle, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(EqualNode) + def visit(self, node): + instructions = [] + + if type(node.left) == VoidNode: + instructions.append('{} {} {}'.format(o.li, r.t0, 0)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if type(node.right) == VoidNode: + instructions.append('{} {} {}'.format(o.li, r.t1, 0)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {} {}'.format(o.seq, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(EqualStringNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t0)) + + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.move, r.a1, r.t0)) + + instructions.append('{} {}'.format(o.jal, "equal_str")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + +# Unary + # arithmetics + @visitor.when(ComplementNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {}'.format(o.not_bw, r.t0, r.t0)) + instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, 1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + #logics + @visitor.when(NotNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.xori, r.t0, r.t0, 1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + +# basics @visitor.when(AllocateNode) def visit(self, node): instructions = [] @@ -391,6 +500,56 @@ def visit(self, node): return instructions + @visitor.when(CopyNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} 4({})'.format(o.lw, r.a0, r.t0)) + instructions.append('{} {} {} {}'.format(o.sll, r.a0, r.a0, 2)) + instructions.append('{} {}'.format(o.jal, "allocate")) + instructions.append('{} {} {}'.format(o.move, r.a2, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t0)) + instructions.append('{} {} {}'.format(o.move, r.a1, r.v0)) + instructions.append('{} {}'.format(o.jal, "copy")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(AssignNode) + def visit(self, node): + instructions = [] + + if isinstance(node.source, VoidNode): + register = r.zero + elif isinstance(node.source, int): + register = r.t0 + instructions.append('{} {} {}'.format(o.li, r.t0, int(node.source))) + else: + register = r.t0 + instructions.extend(self.visit(node.source)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.source))) + if isinstance(node.source, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if isinstance(node.dest, AttributeNode): + self_var = self._current_function.params[0] + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(self_var))) + + index = self._types_section[node.dest.type].attributes.index(node.dest.name) + 3 + instructions.append('{} {} {} {}'.format(o.addi, r.t1, r.t1, index * 4)) + instructions.append('{} {} 0({})'.format(o.sw, register, r.t1)) + else: + instructions.append('{} {} {}'.format(o.sw, register, self.find_var_loc(node.dest))) + + return instructions + @visitor.when(TypeOfNode) def visit(self, node): instructions = [] @@ -411,6 +570,23 @@ def visit(self, node): return instructions + @visitor.when(NameNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.la, r.t0, 'types_table')) + + tp_number = self._types_section[node.value].index + instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, tp_number * 4)) + instructions.append('{} {} 0({})'.format(o.lw, r.t0, r.t0)) + + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + @visitor.when(StaticCallNode) def visit(self, node): instructions = [] @@ -468,6 +644,14 @@ def visit(self, node): return instructions + @visitor.when(ParamNode) + def visit(self, node): + return [] + + @visitor.when(VarNode) + def visit(self, node): + return [] + @visitor.when(ReturnNode) def visit(self, node): instructions = [] @@ -484,6 +668,16 @@ def visit(self, node): return instructions + @visitor.when(ExitNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.li, r.v0, 10)) + instructions.append('{}'.format(o.syscall)) + + return instructions + +# string @visitor.when(LoadNode) def visit(self, node): instructions = [] @@ -509,181 +703,16 @@ def visit(self, node): return instructions - @visitor.when(PrintIntNode) + @visitor.when(ReadStringNode) def visit(self, node): instructions = [] - - instructions.append('{} {} {}'.format(o.li, r.v0, 1)) - instructions.extend(self.visit(node.value)) - instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.value))) - if isinstance(node.value, AttributeNode): + + instructions.append('{} {}'.format(o.jal, "read_string")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{}'.format(o.syscall)) - - return instructions - - @visitor.when(ExitNode) - def visit(self, node): - instructions = [] - - instructions.append('{} {} {}'.format(o.li, r.v0, 10)) - instructions.append('{}'.format(o.syscall)) - - return instructions - - @visitor.when(CopyNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.value)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) - if isinstance(node.value, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} 4({})'.format(o.lw, r.a0, r.t0)) - instructions.append('{} {} {} {}'.format(o.sll, r.a0, r.a0, 2)) - instructions.append('{} {}'.format(o.jal, "allocate")) - instructions.append('{} {} {}'.format(o.move, r.a2, r.a0)) - instructions.append('{} {} {}'.format(o.move, r.a0, r.t0)) - instructions.append('{} {} {}'.format(o.move, r.a1, r.v0)) - instructions.append('{} {}'.format(o.jal, "copy")) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(GetAttribNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.obj)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) - if isinstance(node.obj, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - tp = self._types_section[node.computed_type] - offset = (tp.attributes.index(node.attr) + 3) * 4 - instructions.append('{} {} {}({})'.format(o.lw, r.t1, offset, r.t0)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(ErrorNode) - def visit(self, node): - instructions = [] - - mips_label = self._data_section[node.data.name].label - instructions.append('{} {} {}'.format(o.li, r.v0, 4)) - instructions.append('{} {} {}'.format(o.la, r.a0, mips_label)) - instructions.append('{}'.format(o.syscall)) - instructions.append('{} {} {}'.format(o.li, r.v0, 10)) - instructions.append('{}'.format(o.syscall)) - - return instructions - - @visitor.when(ReadIntNode) - def visit(self, node): - instructions = [] - - instructions.append('{} {} {}'.format(o.li, r.v0, 5)) - instructions.append('{}'.format(o.syscall)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(ReadStringNode) - def visit(self, node): - instructions = [] - - instructions.append('{} {}'.format(o.jal, "read_string")) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(SetAttribNode) - def visit(self, node): - instructions = [] - - tp = self._types_section[node.computed_type] - offset = (tp.attributes.index(node.attr) + 3) * 4 - - instructions.extend(self.visit(node.obj)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) - if isinstance(node.obj, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - if type(node.value) == int: - instructions.append('{} {} {}'.format(o.li, r.t1, node.value)) - else: - instructions.extend(self.visit(node.value)) - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.value))) - if isinstance(node.value, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - instructions.append('{} {} {}({})'.format(o.sw, r.t1, offset, r.t0)) - - return instructions - - @visitor.when(LessNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.left)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) - if isinstance(node.left, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - instructions.extend(self.visit(node.right)) - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) - if isinstance(node.right, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {} {}'.format(o.slt, r.t1, r.t0, r.t1)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(GotoIfNode) - def visit(self, node): - instructions = [] - - mips_label = self.get_label(node.label) - instructions.extend(self.visit(node.condition)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.condition))) - if isinstance(node.condition, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {} {}'.format(o.bne, r.t0, r.zero, mips_label)) - - return instructions - - @visitor.when(GotoNode) - def visit(self, node): - instructions = [] - - mips_label = self.get_label(node.label) - instructions.append('{} {}'.format(o.j, mips_label)) - - return instructions - - @visitor.when(LabelNode) - def visit(self, node): - instructions = [] - - mips_label = self.get_label(node.label) - instructions.append('{}:'.format(mips_label)) - + return instructions @visitor.when(SubstringNode) @@ -760,153 +789,180 @@ def visit(self, node): return instructions - @visitor.when(EqualNode) +# Int + @visitor.when(PrintIntNode) def visit(self, node): instructions = [] - - if type(node.left) == VoidNode: - instructions.append('{} {} {}'.format(o.li, r.t0, 0)) - else: - instructions.extend(self.visit(node.left)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) - if isinstance(node.left, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - if type(node.right) == VoidNode: - instructions.append('{} {} {}'.format(o.li, r.t1, 0)) - else: - instructions.extend(self.visit(node.right)) - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) - if isinstance(node.right, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - instructions.append('{} {} {} {}'.format(o.seq, r.t0, r.t0, r.t1)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): + + instructions.append('{} {} {}'.format(o.li, r.v0, 1)) + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - + instructions.append('{}'.format(o.syscall)) + return instructions - @visitor.when(NameNode) + @visitor.when(ReadIntNode) def visit(self, node): instructions = [] - instructions.append('{} {} {}'.format(o.la, r.t0, 'types_table')) - - tp_number = self._types_section[node.value].index - instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, tp_number * 4)) - instructions.append('{} {} 0({})'.format(o.lw, r.t0, r.t0)) - + instructions.append('{} {} {}'.format(o.li, r.v0, 5)) + instructions.append('{}'.format(o.syscall)) instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) if isinstance(node.dest, AttributeNode): instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) return instructions - @visitor.when(EqualStringNode) +# attributes + @visitor.when(AttributeNode) def visit(self, node): instructions = [] - instructions.extend(self.visit(node.left)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) - if isinstance(node.left, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {}'.format(o.move, r.a0, r.t0)) - - instructions.extend(self.visit(node.right)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.right))) - if isinstance(node.right, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {}'.format(o.move, r.a1, r.t0)) + self_var = self._current_function.params[0] + instructions.append('{} {} {}'.format(o.lw, r.t4, self.find_var_loc(self_var))) - instructions.append('{} {}'.format(o.jal, "equal_str")) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + index = self._types_section[node.type].attributes.index(node.name) + 3 + instructions.append('{} {} {}({})'.format(o.lw, r.t4, index * 4, r.t4)) + instructions.extend(self.push_register(r.t4)) return instructions - - @visitor.when(ComplementNode) + + @visitor.when(GetAttribNode) def visit(self, node): instructions = [] - instructions.extend(self.visit(node.value)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) - if isinstance(node.value, AttributeNode): + instructions.extend(self.visit(node.obj)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) + if isinstance(node.obj, AttributeNode): instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {}'.format(o.not_bw, r.t0, r.t0)) - instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, 1)) + tp = self._types_section[node.computed_type] + offset = (tp.attributes.index(node.attr) + 3) * 4 + instructions.append('{} {} {}({})'.format(o.lw, r.t1, offset, r.t0)) instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) if isinstance(node.dest, AttributeNode): instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) return instructions - @visitor.when(LessEqualNode) + @visitor.when(SetAttribNode) def visit(self, node): instructions = [] - instructions.extend(self.visit(node.left)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) - if isinstance(node.left, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + tp = self._types_section[node.computed_type] + offset = (tp.attributes.index(node.attr) + 3) * 4 - instructions.extend(self.visit(node.right)) - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) - if isinstance(node.right, AttributeNode): + instructions.extend(self.visit(node.obj)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) + if isinstance(node.obj, AttributeNode): instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {} {}'.format(o.sle, r.t0, r.t0, r.t1)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if type(node.value) == int: + instructions.append('{} {} {}'.format(o.li, r.t1, node.value)) + else: + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {}({})'.format(o.sw, r.t1, offset, r.t0)) return instructions - @visitor.when(NotNode) +# goto's + @visitor.when(GotoIfNode) def visit(self, node): instructions = [] - instructions.extend(self.visit(node.value)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) - if isinstance(node.value, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {} {}'.format(o.xori, r.t0, r.t0, 1)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): + mips_label = self.get_label(node.label) + instructions.extend(self.visit(node.condition)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.condition))) + if isinstance(node.condition, AttributeNode): instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - + instructions.append('{} {} {} {}'.format(o.bne, r.t0, r.zero, mips_label)) + return instructions - @visitor.when(VarNode) + @visitor.when(GotoNode) def visit(self, node): - return [] - - @visitor.when(ParamNode) + instructions = [] + + mips_label = self.get_label(node.label) + instructions.append('{} {}'.format(o.j, mips_label)) + + return instructions + + @visitor.when(LabelNode) def visit(self, node): - return [] + instructions = [] + + mips_label = self.get_label(node.label) + instructions.append('{}:'.format(mips_label)) + + return instructions - @visitor.when(AttributeNode) +# error + @visitor.when(ErrorNode) def visit(self, node): instructions = [] - self_var = self._current_function.params[0] - instructions.append('{} {} {}'.format(o.lw, r.t4, self.find_var_loc(self_var))) + mips_label = self._data_section[node.data.name].label + instructions.append('{} {} {}'.format(o.li, r.v0, 4)) + instructions.append('{} {} {}'.format(o.la, r.a0, mips_label)) + instructions.append('{}'.format(o.syscall)) + instructions.append('{} {} {}'.format(o.li, r.v0, 10)) + instructions.append('{}'.format(o.syscall)) - index = self._types_section[node.type].attributes.index(node.name) + 3 - instructions.append('{} {} {}({})'.format(o.lw, r.t4, index * 4, r.t4)) - instructions.extend(self.push_register(r.t4)) + return instructions +# + def string_equals(self): + instructions = [] + + instructions.append('{}:'.format('equal_str')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -24)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t3, 20, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.a1)) + instructions.append('{}:'.format('while_equal_str')) + instructions.append('{} {} {}({})'.format(o.lb, r.t2, 0, r.t0)) + instructions.append('{} {} {}({})'.format(o.lb, r.t3, 0, r.t1)) + instructions.append('{} {} {} {}'.format(o.bne, r.t2, r.t3, 'equal_str_different_strings')) + instructions.append('{} {} {} {}'.format(o.beq, r.t2, r.zero, 'first_end_equal_str')) + instructions.append('{} {} {} {}'.format(o.beq, r.t3, r.zero, 'second_end_equal_str')) + instructions.append('{} {} {} {}'.format(o.addi, r.t1, r.t1, 1)) + instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, 1)) + instructions.append('{} {}'.format(o.j, 'while_equal_str')) + instructions.append('{}:'.format('equal_str_different_strings')) + instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) + instructions.append('{} {}'.format(o.j, 'equal_str_end')) + instructions.append('{}:'.format('first_end_equal_str')) + instructions.append('{} {} {} {}'.format(o.beq, r.t3, r.zero, 'second_end_equal_str')) + instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) + instructions.append('{} {}'.format(o.j, 'equal_str_end')) + instructions.append('{}:'.format('second_end_equal_str')) + instructions.append('{} {} {}'.format(o.li, r.v0, 1)) + instructions.append('{}:'.format('equal_str_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t3, 20, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 24)) + instructions.append('{} {}'.format(o.jr, r.ra)) + return instructions - def allocate(self): instructions = [] @@ -957,25 +1013,88 @@ def copy(self): return instructions - def length(self): + def read_string(self): instructions = [] - instructions.append('{}:'.format('length')) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -8)) - instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{}:'.format('read_string')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -28)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a2, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 24, r.sp)) + instructions.append('{} {} {}'.format(o.li, r.t0, 8)) + instructions.append('{} {} {} {}'.format(o.addi, r.a0, r.t0, 4)) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.t1, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.t2, r.zero)) + instructions.append('{}:'.format('while_read_string')) + instructions.append('{} {} {} {}'.format(o.addu, r.a0, r.t1, r.t2)) + instructions.append('{} {} {} {}'.format(o.subu, r.a1, r.t0, r.t2)) + instructions.append('{} {} {} {}'.format(o.addu, r.t2, r.t2, r.a1)) + instructions.append('{} {}'.format(o.jal, 'read_string_up_to')) + instructions.append('{} {} {} {}'.format(o.beq, r.v0, r.zero, 'read_string_not_finished')) + instructions.append('{} {} {}'.format(o.move, r.v0, r.t1)) + instructions.append('{} {}'.format(o.j, 'end_read_string')) + instructions.append('{}:'.format('read_string_not_finished')) + instructions.append('{} {} {} {}'.format(o.sll, r.t0, r.t0, 1)) + instructions.append('{} {} {} {}'.format(o.addi, r.a0, r.t0, 4)) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t1)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.a1, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.a2, r.t2)) + instructions.append('{} {}'.format(o.jal, 'copy')) + instructions.append('{} {}'.format(o.j, 'while_read_string')) + instructions.append('{}:'.format('end_read_string')) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a2, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 24, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 28)) + instructions.append('{} {}'.format(o.jr, r.ra)) + instructions.append('{}:'.format('read_string_up_to')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -28)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t3, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t4, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t5, 24, r.sp)) instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) - instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) - instructions.append('{}:'.format('while_len')) + instructions.append('{} {} {}'.format(o.move, r.t1, r.zero)) + instructions.append('{} {} {}'.format(o.li, r.t2, 10)) + instructions.append('{} {} {} {}'.format(o.addu, r.t3, r.t0, r.a1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a1, r.a1, 1)) + instructions.append('{} {} {}'.format(o.li, r.v0, 8)) + instructions.append('{}'.format(o.syscall)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.a0)) + instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'eol_terminated')) + instructions.append('{} {} {}'.format(o.li, r.v0, 0)) + instructions.append('{}:'.format('eol_check')) + instructions.append('{} {} {} {}'.format(o.beq, r.t0, r.t3, 'read_loop_continue')) instructions.append('{} {} {}({})'.format(o.lb, r.t1, 0, r.t0)) - instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.zero, 'len_end')) - instructions.append('{} {} {} {}'.format(o.addi, r.v0, r.v0, 1)) + instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.t2, 'eol_terminated')) instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) - instructions.append('{} {}'.format(o.j, 'while_len')) - instructions.append('{}:'.format('len_end')) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 8)) + instructions.append('{} {}'.format(o.j, 'eol_check')) + instructions.append('{}:'.format('eol_terminated')) + instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t0)) + instructions.append('{} {} {}'.format(o.li, r.v0, 1)) + instructions.append('{}:'.format('read_loop_continue')) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t3, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t4, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t5, 24, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 28)) instructions.append('{} {}'.format(o.jr, r.ra)) return instructions @@ -1087,137 +1206,31 @@ def concat(self): return instructions - def read_string(self): - instructions = [] - - instructions.append('{}:'.format('read_string')) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -28)) - instructions.append('{} {} {}({})'.format(o.sw, r.ra, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a0, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a1, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a2, 20, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t2, 24, r.sp)) - instructions.append('{} {} {}'.format(o.li, r.t0, 8)) - instructions.append('{} {} {} {}'.format(o.addi, r.a0, r.t0, 4)) - instructions.append('{} {}'.format(o.jal, 'allocate')) - instructions.append('{} {} {}'.format(o.move, r.t1, r.v0)) - instructions.append('{} {} {}'.format(o.move, r.t2, r.zero)) - instructions.append('{}:'.format('while_read_string')) - instructions.append('{} {} {} {}'.format(o.addu, r.a0, r.t1, r.t2)) - instructions.append('{} {} {} {}'.format(o.subu, r.a1, r.t0, r.t2)) - instructions.append('{} {} {} {}'.format(o.addu, r.t2, r.t2, r.a1)) - instructions.append('{} {}'.format(o.jal, 'read_string_up_to')) - instructions.append('{} {} {} {}'.format(o.beq, r.v0, r.zero, 'read_string_not_finished')) - instructions.append('{} {} {}'.format(o.move, r.v0, r.t1)) - instructions.append('{} {}'.format(o.j, 'end_read_string')) - instructions.append('{}:'.format('read_string_not_finished')) - instructions.append('{} {} {} {}'.format(o.sll, r.t0, r.t0, 1)) - instructions.append('{} {} {} {}'.format(o.addi, r.a0, r.t0, 4)) - instructions.append('{} {}'.format(o.jal, 'allocate')) - instructions.append('{} {} {}'.format(o.move, r.a0, r.t1)) - instructions.append('{} {} {}'.format(o.move, r.t1, r.v0)) - instructions.append('{} {} {}'.format(o.move, r.a1, r.v0)) - instructions.append('{} {} {}'.format(o.move, r.a2, r.t2)) - instructions.append('{} {}'.format(o.jal, 'copy')) - instructions.append('{} {}'.format(o.j, 'while_read_string')) - instructions.append('{}:'.format('end_read_string')) - instructions.append('{} {} {}({})'.format(o.lw, r.ra, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a0, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a1, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a2, 20, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t2, 24, r.sp)) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 28)) - instructions.append('{} {}'.format(o.jr, r.ra)) - instructions.append('{}:'.format('read_string_up_to')) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -28)) - instructions.append('{} {} {}({})'.format(o.sw, r.ra, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t2, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t3, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t4, 20, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t5, 24, r.sp)) - instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) - instructions.append('{} {} {}'.format(o.move, r.t1, r.zero)) - instructions.append('{} {} {}'.format(o.li, r.t2, 10)) - instructions.append('{} {} {} {}'.format(o.addu, r.t3, r.t0, r.a1)) - instructions.append('{} {} {} {}'.format(o.addiu, r.a1, r.a1, 1)) - instructions.append('{} {} {}'.format(o.li, r.v0, 8)) - instructions.append('{}'.format(o.syscall)) - instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.a0)) - instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'eol_terminated')) - instructions.append('{} {} {}'.format(o.li, r.v0, 0)) - instructions.append('{}:'.format('eol_check')) - instructions.append('{} {} {} {}'.format(o.beq, r.t0, r.t3, 'read_loop_continue')) - instructions.append('{} {} {}({})'.format(o.lb, r.t1, 0, r.t0)) - instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.t2, 'eol_terminated')) - instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) - instructions.append('{} {}'.format(o.j, 'eol_check')) - instructions.append('{}:'.format('eol_terminated')) - instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t0)) - instructions.append('{} {} {}'.format(o.li, r.v0, 1)) - instructions.append('{}:'.format('read_loop_continue')) - instructions.append('{} {} {}({})'.format(o.lw, r.ra, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t2, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t3, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t4, 20, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t5, 24, r.sp)) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 28)) - instructions.append('{} {}'.format(o.jr, r.ra)) - - return instructions - - def string_equals(self): + def length(self): instructions = [] - instructions.append('{}:'.format('equal_str')) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -24)) + instructions.append('{}:'.format('length')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -8)) instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a0, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a1, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t2, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t3, 20, r.sp)) instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) - instructions.append('{} {} {}'.format(o.move, r.t1, r.a1)) - instructions.append('{}:'.format('while_equal_str')) - instructions.append('{} {} {}({})'.format(o.lb, r.t2, 0, r.t0)) - instructions.append('{} {} {}({})'.format(o.lb, r.t3, 0, r.t1)) - instructions.append('{} {} {} {}'.format(o.bne, r.t2, r.t3, 'equal_str_different_strings')) - instructions.append('{} {} {} {}'.format(o.beq, r.t2, r.zero, 'first_end_equal_str')) - instructions.append('{} {} {} {}'.format(o.beq, r.t3, r.zero, 'second_end_equal_str')) - instructions.append('{} {} {} {}'.format(o.addi, r.t1, r.t1, 1)) - instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, 1)) - instructions.append('{} {}'.format(o.j, 'while_equal_str')) - instructions.append('{}:'.format('equal_str_different_strings')) - instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) - instructions.append('{} {}'.format(o.j, 'equal_str_end')) - instructions.append('{}:'.format('first_end_equal_str')) - instructions.append('{} {} {} {}'.format(o.beq, r.t3, r.zero, 'second_end_equal_str')) instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) - instructions.append('{} {}'.format(o.j, 'equal_str_end')) - instructions.append('{}:'.format('second_end_equal_str')) - instructions.append('{} {} {}'.format(o.li, r.v0, 1)) - instructions.append('{}:'.format('equal_str_end')) + instructions.append('{}:'.format('while_len')) + instructions.append('{} {} {}({})'.format(o.lb, r.t1, 0, r.t0)) + instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.zero, 'len_end')) + instructions.append('{} {} {} {}'.format(o.addi, r.v0, r.v0, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {}'.format(o.j, 'while_len')) + instructions.append('{}:'.format('len_end')) instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a0, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a1, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t2, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t3, 20, r.sp)) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 24)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 8)) instructions.append('{} {}'.format(o.jr, r.ra)) return instructions def define_util_functions(self): - instructions = [self.allocate(), self.copy(), self.length(), self.concat(), self.substring(), self.string_equals(), self.read_string()] + instructions = [self.string_equals(), self.allocate(), self.copy(), self.read_string(), self.substring(), self.concat(), self.length()] code = '\n\n'.join('\n'.join(i for i in j) for j in instructions) return code diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 4fd7d49f6..df739b69a 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -997,18 +997,6 @@ def visit(self, node, scope): self.register_instruction(end_label) node.ret_expr = ret - # var = self.define_internal_local() - # self.register_instruction(cil.ParentTypeNode(var, obj_type)) - # self.register_instruction(cil.AssignNode(obj_type, var)) - - # self.register_instruction(cil.GotoNode(start_case_label)) - - # self.register_instruction(cil.LabelNode(error_label)) - # self.register_instruction(cil.ParamNode(self.instances[-1])) - # self.regster_instruction(cil.DynamicCallNode(var, self.to_function_name("abort", self.current_type.name), result)) - - # self.register_instruction(cil.GotoNode(end_case_label)) - # return result @visitor.when(TrueNode) def visit(self, node, scope): From 3791e1218fe8056ed4017460424f27e17d012f62 Mon Sep 17 00:00:00 2001 From: regnod Date: Tue, 1 Mar 2022 15:01:08 -0500 Subject: [PATCH 92/93] merge --- .vscode/settings.json | 30 +++- tests/codegen/arith.mips | 306 ++++++++++++++++----------------- tests/codegen/atoi.mips | 306 ++++++++++++++++----------------- tests/codegen/book_list.mips | 306 ++++++++++++++++----------------- tests/codegen/cells.mips | 306 ++++++++++++++++----------------- tests/codegen/complex.mips | 306 ++++++++++++++++----------------- tests/codegen/fib.mips | 306 ++++++++++++++++----------------- tests/codegen/graph.mips | 306 ++++++++++++++++----------------- tests/codegen/hairyscary.mips | 306 ++++++++++++++++----------------- tests/codegen/hello_world.mips | 306 ++++++++++++++++----------------- tests/codegen/io.mips | 306 ++++++++++++++++----------------- tests/codegen/life.mips | 306 ++++++++++++++++----------------- tests/codegen/list.mips | 306 ++++++++++++++++----------------- tests/codegen/new_complex.mips | 306 ++++++++++++++++----------------- tests/codegen/palindrome.mips | 306 ++++++++++++++++----------------- tests/codegen/primes.mips | 306 ++++++++++++++++----------------- tests/codegen/print-cool.mips | 306 ++++++++++++++++----------------- tests/codegen/sort-list.mips | 306 ++++++++++++++++----------------- 18 files changed, 2630 insertions(+), 2602 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 0a0f7d361..8c0668479 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,23 +1,34 @@ { "cSpell.words": [ + "acker", "addi", "addiu", "addu", "ademas", + "adjuntos", + "adyacente", "agregarlos", "ahora", "alloc", + "ancestros", "argumentos", "asciiz", "atributo", + "atributos", + "basicos", "beqz", "bnez", + "bools", "busca", "casos", "cattrs", "ccur", "cpar", + "ctrs", + "ctype", "cualquier", + "cval", + "deberia", "definir", "deje", "dfunc", @@ -25,28 +36,42 @@ "direccion", "dividir", "dparents", + "dtypes", + "dvars", "ehhhhhhhhhhh", "ehhhhhhhhhhhh", "encapsulada", "esac", + "esto", "estos", + "excepcion", "existe", "funciones", + "hecho", "heeerreeee", "heerrrre", + "hice", "hijo", + "idealmente", + "Infered", "Inferencer", "Inmediate", + "isntance", "isvoid", "jachtagsad", + "lanzar", "límite", "lneq", + "mano", "menos", "mismo", "mult", + "multply", + "nval", "ocur", "opar", "parentesis", + "pnode", "proto", "ptype", "pusieron", @@ -54,12 +79,15 @@ "referencia", "reservada", "reservar", + "rqueue", "sobrescribiendo", "subu", "tipe", "tipo", "toca", "trozo", - "visitar" + "typex", + "visitar", + "vtype" ] } \ No newline at end of file diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index be0106f08..9cecf1796 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -12504,6 +12504,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -12544,159 +12582,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -12776,4 +12661,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index e639ede90..14c106c30 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -5006,6 +5006,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -5046,159 +5084,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -5278,4 +5163,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index 2d3e3c02b..6f1864306 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -2482,6 +2482,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -2522,159 +2560,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -2754,4 +2639,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index 4df3ff1e9..49d04506e 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -2602,6 +2602,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -2642,159 +2680,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -2874,4 +2759,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index 04afa7792..4e2334a2d 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -2250,6 +2250,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -2290,159 +2328,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -2522,4 +2407,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index 4f3a67e39..386c6a01d 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -1067,6 +1067,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -1107,159 +1145,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -1339,4 +1224,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index e494724ec..69965826f 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -7112,6 +7112,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -7152,159 +7190,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -7384,4 +7269,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index a2fc47ef1..c36035e40 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -2048,6 +2048,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -2088,159 +2126,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -2320,4 +2205,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index db04dbea2..3ed6cec19 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -731,6 +731,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -771,159 +809,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -1003,4 +888,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index 1086ee33f..9ebe887df 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -1416,6 +1416,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -1456,159 +1494,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -1688,4 +1573,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 6f954ec6e..6896348ee 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -11143,6 +11143,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -11183,159 +11221,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -11415,4 +11300,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index 114da278b..77e2f98ec 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -1717,6 +1717,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -1757,159 +1795,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -1989,4 +1874,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index 5f6668396..0c2a8fa5e 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -2818,6 +2818,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -2858,159 +2896,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -3090,4 +2975,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index 650b2fac9..e00722070 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -1585,6 +1585,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -1625,159 +1663,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -1857,4 +1742,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index d8d0223d5..b5f5c4b12 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -1401,6 +1401,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -1441,159 +1479,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -1673,4 +1558,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index e475cd9c2..6f9b542e8 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -959,6 +959,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -999,159 +1037,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -1231,4 +1116,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index c18c540cf..2f4cf3aeb 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -2564,6 +2564,44 @@ jr $ra +equal_str: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str +equal_str_different_strings: +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 +equal_str_end: +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + allocate: addiu $sp $sp -12 sw $a0 0($sp) @@ -2604,159 +2642,6 @@ lw $t0 12($sp) addiu $sp $sp 16 jr $ra -length: -addiu $sp $sp -8 -sw $t0 0($sp) -sw $t1 4($sp) -move $t0 $a0 -move $v0 $zero -while_len: -lb $t1 0($t0) -beq $t1 $zero len_end -addi $v0 $v0 1 -addiu $t0 $t0 1 -j while_len -len_end: -lw $t0 0($sp) -lw $t1 4($sp) -addiu $sp $sp 8 -jr $ra - -concat: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $a0 12($sp) -sw $a1 16($sp) -sw $ra 20($sp) -move $t0 $a0 -move $t1 $a1 -addiu $a0 $a2 1 -li $t2 4 -div $a0 $t2 -mfhi $a0 -bne $a0 $zero concat_allign_size -addiu $a0 $a2 1 -j concat_size_allignned -concat_allign_size: -sub $t2 $t2 $a0 -add $a0 $a2 $t2 -addiu $a0 $a0 1 -concat_size_allignned: -jal allocate -move $t2 $v0 -j first_while_concat_copy -first_while_concat_copy: -lb $a0 0($t0) -beq $a0 $zero second_while_concat_copy -sb $a0 0($t2) -addiu $t0 $t0 1 -addiu $t2 $t2 1 -j first_while_concat_copy -second_while_concat_copy: -lb $a0 0($t1) -beq $a0 $zero concat_end -sb $a0 0($t2) -addiu $t1 $t1 1 -addiu $t2 $t2 1 -j second_while_concat_copy -concat_end: -sb $zero 0($t2) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $a0 12($sp) -lw $a1 16($sp) -lw $ra 20($sp) -addiu $sp $sp 24 -jr $ra - -substr: -addiu $sp $sp -32 -sw $t0 0($sp) -sw $t1 4($sp) -sw $t2 8($sp) -sw $t3 12($sp) -sw $a0 16($sp) -sw $a1 20($sp) -sw $a2 24($sp) -sw $ra 28($sp) -move $t0 $a0 -add $t0 $t0 $a1 -li $t1 4 -div $a2 $t1 -mfhi $t2 -bne $t2 $zero substr_allign_size -move $t1 $a2 -j substr_new_chunk -substr_allign_size: -sub $t1 $t1 $t2 -add $t1 $t1 $a2 -substr_new_chunk: -move $a0 $t1 -jal allocate -move $t3 $v0 -move $t1 $zero -while_substr_copy: -beq $t1 $a2 substr_end -lb $t2 0($t0) -sb $t2 0($t3) -addiu $t0 $t0 1 -addiu $t3 $t3 1 -addiu $t1 $t1 1 -j while_substr_copy -substr_end: -sb $zero 0($t3) -lw $t0 0($sp) -lw $t1 4($sp) -lw $t2 8($sp) -lw $t3 12($sp) -lw $a0 16($sp) -lw $a1 20($sp) -lw $a2 24($sp) -lw $ra 28($sp) -addiu $sp $sp 32 -jr $ra - -equal_str: -addiu $sp $sp -24 -sw $t0 0($sp) -sw $t1 4($sp) -sw $a0 8($sp) -sw $a1 12($sp) -sw $t2 16($sp) -sw $t3 20($sp) -move $t0 $a0 -move $t1 $a1 -while_equal_str: -lb $t2 0($t0) -lb $t3 0($t1) -bne $t2 $t3 equal_str_different_strings -beq $t2 $zero first_end_equal_str -beq $t3 $zero second_end_equal_str -addi $t1 $t1 1 -addi $t0 $t0 1 -j while_equal_str -equal_str_different_strings: -move $v0 $zero -j equal_str_end -first_end_equal_str: -beq $t3 $zero second_end_equal_str -move $v0 $zero -j equal_str_end -second_end_equal_str: -li $v0 1 -equal_str_end: -lw $t0 0($sp) -lw $t1 4($sp) -lw $a0 8($sp) -lw $a1 12($sp) -lw $t2 16($sp) -lw $t3 20($sp) -addiu $sp $sp 24 -jr $ra - read_string: addiu $sp $sp -28 sw $ra 0($sp) @@ -2836,4 +2721,119 @@ lw $t3 16($sp) lw $t4 20($sp) lw $t5 24($sp) addiu $sp $sp 28 +jr $ra + +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra + +concat: +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned +concat_allign_size: +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy +concat_end: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra + +length: +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len +len_end: +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 jr $ra \ No newline at end of file From 63ee120c9d92e79c92c085c636483df1d02da82b Mon Sep 17 00:00:00 2001 From: Yumenio Date: Tue, 1 Mar 2022 15:02:30 -0500 Subject: [PATCH 93/93] last commit before pull and subsequent pr --- src/visitors/CooltoCil.py | 168 +++++++++++++++++--------------------- 1 file changed, 76 insertions(+), 92 deletions(-) diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 917508e9f..fe3000573 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -30,7 +30,7 @@ def transform_to_keys(self, xtype, keys): return xtype.attrs # def build_type(self, node): - # type = self.register_type(node.id) + # type = self.createClass(node.id) # self.dtypes[node.id.lex] = type # ctype = self.context.get_type(node.id.lex) @@ -106,19 +106,19 @@ def register_function(self, function_name): self.dotcode.append(function_node) return function_node - def register_type(self, name): - type_node = cil.TypeNode(name) - self.dtypes[name] = type_node - self.dottypes.append(type_node) - return type_node - - def register_data(self, value): - vname = f'data_{len(self.dotdata)}' - data_node = cil.DataNode(vname, value) - self.dotdata.append(data_node) - return data_node - - def register_label(self, label): + def createClass(self, name): + tnod = cil.TypeNode(name) + self.dtypes[name] = tnod + self.dottypes.append(tnod) + return tnod + + def register_data(self, val): + name = f'data_{len(self.dotdata)}' + dnod = cil.DataNode(name, val) + self.dotdata.append(dnod) + return dnod + + def addLabel(self, label): lname = f'{label}_{self.current_function.labels_count}' self.current_function.labels_count += 1 return cil.LabelNode(lname) @@ -145,20 +145,17 @@ def create_ctr(self, class_node, scope): def add_runtime_exception(self, cond, msg): - error_node = self.register_label('error_label') - continue_node = self.register_label('continue_label') + error_node = self.addLabel('error_label') + continue_node = self.addLabel('end_label') self.register_instruction(cil.GotoIfNode(error_node.label, cond)) self.register_instruction(cil.GotoNode(continue_node.label)) self.register_instruction(error_node) - data_node = self.register_data(msg) - self.register_instruction(cil.ErrorNode(data_node)) + dnod = self.register_data(msg) + self.register_instruction(cil.ErrorNode(dnod)) self.register_instruction(continue_node) - def register_builtin(self): - # Object - line, column = 0, 0 - type_node = self.register_type('Object') - + def build_basic(self): + tnod = self.createClass('Object') self.current_function = self.register_function(self.ctor('Object')) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode('Object', instance)) @@ -191,18 +188,15 @@ def register_builtin(self): self.register_instruction(cil.CopyNode(result, self_ref)) self.register_instruction(cil.ReturnNode(result)) - type_node.methods = {name: self.to_function_name(name, 'Object') for name in ['abort', 'type_name', 'copy']} - type_node.methods['init'] = self.ctor('Object') + tnod.methods = {name: self.to_function_name(name, 'Object') for name in ['abort', 'type_name', 'copy']} + tnod.methods['ctor'] = self.ctor('Object') obj_methods = ['abort', 'type_name', 'copy'] - # IO - type_node = self.register_type('IO') - + tnod = self.createClass('IO') self.current_function = self.register_function(self.ctor('IO')) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode('IO', instance)) self.register_instruction(cil.ReturnNode(instance)) - self.current_function = self.register_function(self.to_function_name('out_string', 'IO')) self_ref = self.register_param(self._self) x = self.register_param(VariableInfo('x', None)) @@ -237,15 +231,14 @@ def register_builtin(self): self.register_instruction(cil.StaticCallNode(self.ctor('Int'), instance)) self.register_instruction(cil.ReturnNode(instance)) - type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} - type_node.methods.update({name: self.to_function_name(name, 'IO') for name in + tnod.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} + tnod.methods.update({name: self.to_function_name(name, 'IO') for name in ['out_string', 'out_int', 'in_string', 'in_int']}) - type_node.methods['init'] = self.ctor('IO') + tnod.methods['ctor'] = self.ctor('IO') - # String - type_node = self.register_type('String') - type_node.attributes = {name:self.register_attribute(name, 'String') for name in ['__prop', 'length']} + tnod = self.createClass('String') + tnod.attributes = {name:self.register_attribute(name, 'String') for name in ['__prop', 'length']} self.current_function = self.register_function(self.ctor('String')) val = self.register_param(VariableInfo('val', None)) instance = self.define_internal_local() @@ -292,59 +285,53 @@ def register_builtin(self): i = self.register_param(VariableInfo('i', None)) l = self.register_param(VariableInfo('l', None)) result = self.define_internal_local() - index_value = self.define_internal_local() - length_value = self.define_internal_local() + substrIndex = self.define_internal_local() + strlength = self.define_internal_local() length_wrapper = self.define_internal_local() length_attr = self.define_internal_local() length_substr = self.define_internal_local() less_value = self.define_internal_local() str_value = self.define_internal_local() self.register_instruction(cil.GetAttribNode(str_value, self_ref, '__prop', 'String')) - self.register_instruction(cil.GetAttribNode(index_value, i, '__prop', 'Int')) - self.register_instruction(cil.GetAttribNode(length_value, l, '__prop', 'Int')) - # Check Out of range error + self.register_instruction(cil.GetAttribNode(substrIndex, i, '__prop', 'Int')) + self.register_instruction(cil.GetAttribNode(strlength, l, '__prop', 'Int')) + self.register_instruction(cil.GetAttribNode(length_wrapper, self_ref, 'length', 'String')) self.register_instruction(cil.GetAttribNode(length_attr, length_wrapper, '__prop', 'Int')) - self.register_instruction(cil.PlusNode(length_substr, length_value, index_value)) + self.register_instruction(cil.PlusNode(length_substr, strlength, substrIndex)) self.register_instruction(cil.LessNode(less_value, length_attr, length_substr)) self.add_runtime_exception(less_value, 'Index out of range exception') - self.register_instruction(cil.SubstringNode(result, str_value, index_value, length_value)) + self.register_instruction(cil.SubstringNode(result, str_value, substrIndex, strlength)) instance = self.define_internal_local() self.register_instruction(cil.ArgNode(result)) self.register_instruction(cil.StaticCallNode(self.ctor('String'), instance)) self.register_instruction(cil.ReturnNode(instance)) - type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} - type_node.methods.update({name: self.to_function_name(name, 'String') for name in ['length', 'concat', 'substr']}) - type_node.methods['init'] = self.ctor('String') - - # Int - type_node = self.register_type('Int') - type_node.attributes = {name:self.register_attribute(name, 'Int') for name in ['__prop']} + tnod.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} + tnod.methods.update({name: self.to_function_name(name, 'String') for name in ['length', 'concat', 'substr']}) + tnod.methods['ctor'] = self.ctor('String') + tnod = self.createClass('Int') + tnod.attributes = {name:self.register_attribute(name, 'Int') for name in ['__prop']} self.current_function = self.register_function(self.ctor('Int')) val = self.register_param(VariableInfo('val', None)) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode('Int', instance)) self.register_instruction(cil.SetAttribNode(instance, '__prop', val, 'Int')) self.register_instruction(cil.ReturnNode(instance)) + tnod.methods = {method:self.to_function_name(method, 'Object') for method in obj_methods} + tnod.methods['ctor'] = self.ctor('Int') - type_node.methods = {method:self.to_function_name(method, 'Object') for method in obj_methods} - type_node.methods['init'] = self.ctor('Int') - - # Bool - type_node = self.register_type('Bool') - type_node.attributes = {name:self.register_attribute(name, 'Bool') for name in ['__prop']} - + tnod = self.createClass('Bool') + tnod.attributes = {name:self.register_attribute(name, 'Bool') for name in ['__prop']} self.current_function = self.register_function(self.ctor('Bool')) val = self.register_param(VariableInfo('val', None)) instance = self.define_internal_local() self.register_instruction(cil.AllocateNode('Bool', instance)) self.register_instruction(cil.SetAttribNode(instance, '__prop', val, 'Bool')) self.register_instruction(cil.ReturnNode(instance)) - - type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} - type_node.methods['init'] = self.ctor('Bool') + tnod.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} + tnod.methods['ctor'] = self.ctor('Bool') @@ -369,7 +356,7 @@ def features_from_context(self, type): def build_types(self, node): - type = self.register_type(node.id) + type = self.createClass(node.id) self.dtypes[node.id] = type ctype = self.context.get_type(node.id) @@ -394,7 +381,7 @@ def build_types(self, node): # def build_type(self, node): - # type = self.register_type(node.id) + # type = self.createClass(node.id) # self.dtypes[node.id.lex] = type # ctype = self.context.get_type(node.id.lex) @@ -420,7 +407,7 @@ def visit(self, node, scope): ###################################################### # node.declarations -> [ ClassDeclarationNode ... ] ###################################################### - self.register_builtin() + self.build_basic() self.current_function = None self.current_function = self.register_function('entry') @@ -681,7 +668,7 @@ def visit(self, node, scope): self.register_instruction(cil.ArgNode(self._self.name)) checked_t = self.current_type.name - self.register_instruction(cil.DynamicCallNode(checked_t, self.dtypes[checked_t].methods[node.method], nval)) + self.register_instruction(cil.DynamicCallNode(checked_t, self.dtypes[checked_t].methods[node.method], nval2)) node.noted_value = nval2 @@ -845,8 +832,8 @@ def visit(self, node, scope): nval = self.define_internal_local() cval = self.define_internal_local() - then_label = self.register_label('then_label') - continue_label = self.register_label('continue_label') + then_label = self.addLabel('then_label') + end_label = self.addLabel('end_label') self.visit(node.ifChunk, scope.children[0]) self.register_instruction(cil.GetAttribNode(cval, node.ifChunk.noted_value, '__prop', 'Bool')) @@ -854,13 +841,13 @@ def visit(self, node, scope): self.visit(node.elseChunk, scope.children[2]) self.register_instruction(cil.AssignNode(nval, node.elseChunk.noted_value)) - self.register_instruction(cil.GotoNode(continue_label.label)) + self.register_instruction(cil.GotoNode(end_label.label)) self.register_instruction(then_label) self.visit(node.thenChunk, scope.children[1]) self.register_instruction(cil.AssignNode(nval, node.thenChunk.noted_value)) - self.register_instruction(continue_label) + self.register_instruction(end_label) node.noted_value = nval @visitor.when(LetInNode) @@ -899,9 +886,9 @@ def visit(self, node, scope): @visitor.when(WhileNode) def visit(self, node, scope): - while_label = self.register_label('while_label') - loop_label = self.register_label('loop_label') - pool_label = self.register_label('pool_label') + while_label = self.addLabel('while_label') + loop_label = self.addLabel('loop_label') + pool_label = self.addLabel('pool_label') cval = self.define_internal_local() self.register_instruction(while_label) @@ -984,7 +971,7 @@ def visit(self, node, scope): self.register_instruction(cil.EqualNode(isvoid, node.expr.noted_value, cil.VoidNode())) self.add_runtime_exception(isvoid, 'Void isntance found in switch case') - end_label = self.register_label('case_end_label') + end_label = self.addLabel('case_end_label') branch_type = self.define_internal_local() visited = [] @@ -995,7 +982,7 @@ def visit(self, node, scope): id = case[0] type = case[1] expr = case[2] - labels.append(self.register_label(f'case_label_{p}')) + labels.append(self.addLabel(f'case_label_{p}')) st = self.context.type_offsprings(type) for t in st: @@ -1026,18 +1013,7 @@ def visit(self, node, scope): self.register_instruction(end_label) node.noted_value = nval - # var = self.define_internal_local() - # self.register_instruction(cil.AssignNode(obj_type, var)) - - # self.register_instruction(cil.GotoNode(start_case_label)) - - # self.register_instruction(cil.LabelNode(error_label)) - # self.register_instruction(cil.ParamNode(self.instances[-1])) - # self.regster_instruction(cil.DynamicCallNode(var, self.to_function_name("abort", self.current_type.name), result)) - # self.register_instruction(cil.GotoNode(end_case_label)) - # return result - @visitor.when(TrueNode) def visit(self, node, scope): nval = self.define_internal_local() @@ -1083,10 +1059,18 @@ def visit(self, node, scope): string_t = self.define_internal_local() equal = self.define_internal_local() value = self.define_internal_local() - int_comparisson = self.register_label('comparing_ints') - bool_comparisson = self.register_label('comparing_bools') - string_comparisson = self.register_label('comparing_strings') - continue_label = self.register_label('comparing_notbuiltin') + int_comparisson = self.addLabel('comparing_ints') + bool_comparisson = self.addLabel('comparing_bools') + string_comparisson = self.addLabel('comparing_strings') + end_label = self.addLabel('comparing_notbuiltin') + + # def compare_specific(self, node, scope, type : str): + # self.register_instruction(string_comparisson) + # self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', type)) + # self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', type)) + # self.register_instruction(cil.EqualStringNode(value, left, right)) + # self.register_instruction(cil.GotoNode(end_label.label)) + # pass self.visit(node.left, scope) self.visit(node.right, scope) @@ -1108,27 +1092,27 @@ def visit(self, node, scope): # __ = 0 self.register_instruction(cil.EqualNode(value, node.left.noted_value, node.right.noted_value)) - self.register_instruction(cil.GotoNode(continue_label.label)) + self.register_instruction(cil.GotoNode(end_label.label)) self.register_instruction(int_comparisson) self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Int')) self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Int')) self.register_instruction(cil.EqualNode(value, left, right)) - self.register_instruction(cil.GotoNode(continue_label.label)) + self.register_instruction(cil.GotoNode(end_label.label)) self.register_instruction(string_comparisson) self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'String')) self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'String')) self.register_instruction(cil.EqualStringNode(value, left, right)) - self.register_instruction(cil.GotoNode(continue_label.label)) + self.register_instruction(cil.GotoNode(end_label.label)) self.register_instruction(bool_comparisson) self.register_instruction(cil.GetAttribNode(left, node.left.noted_value, '__prop', 'Bool')) self.register_instruction(cil.GetAttribNode(right, node.right.noted_value, '__prop', 'Bool')) self.register_instruction(cil.EqualNode(value, left, right)) - self.register_instruction(cil.GotoNode(continue_label.label)) + self.register_instruction(cil.GotoNode(end_label.label)) - self.register_instruction(continue_label) + self.register_instruction(end_label) self.register_instruction(cil.ArgNode(value)) self.register_instruction(cil.StaticCallNode(self.ctor('Bool'), nval))
    4. MD% zBF!hUh#*Jn=a_`vCg>vmZVKwL`=;#6TrHXf=g&*WmfBWyk37%`pgNILKEmK!lQRuAj`-)is zg=z(>*ZZD@sk7^Mivg87eaM@#p8ZCuKsvldx5?i`@zjh>Ga2BqEH zo~Xn%q(d1AJGJn$mI@&oYE1ZsMpEryA+^AyXh1a7>e~Gto_`YEtiB|ghc=cE8AiZq zrV3d%3J?k_+hjUFvXKk6b%`_;H@RL*E1El@@PdO&K;VG_f-FFELcZ4I;71W+;Is$X z4Nbz1cIsl4w<8NzdQKE`EE~A>E+a!^{M`N`i@~-->FX_gpgPW+LxdPP{8_j|`CdGPO=MNgKVkZf;um?@AKU2(O*pJPiQ|>9Fp` z4&mfvF;}1|ZXFSJ(Ys{n7`eV^#f0*d7tM+grlE$!gB?r$7$mX&&)=G#0)=%1o*!-n zQof?UK>U5bbs#uxP`xJqjMqI!^3VHCSxiJhS=4)KFuF_-8+P5B>WR`YkcHs{5(1_G z0>ge@6(3Qk2E9yi`=IsHDn5^c@5K|>6bdDJp`3ai*)wF0CQ{ihn{QQHo5_lIB6b_Vyv(73HPN4dI*Y`k1UhUh|COWnhKm=KEG&=5$f+?uPSp$ zHe0*689mnN^z4Md*j!y+Rjo9=lvkO1cth4PR3ma(RY*8IX}>?Y^O%=ZRQ?bm_04AV z`f|xtnag2S3i}s}-3BYU18%&VV>gNiG;v?yKIVOig-VCfA^xvCq0evRqn}a$$O0MH=s!LpH(W%wR zCwqJ-g}`QKlg&CMJtCCMh>EfgN=~IP3T};?Nl5#5Mga3iU_nkwMuyWojB)xgA6) z*(PP`61K^aUt=;ea>M08;rL{t&49lz?o(O7QVIkBQ1!YEsQ-C!HfCTWQzNhugQb(5 zZIn`%Fu{1tc` zERXUXDx&;i`qN_<9e!I5tLspLtFGO66#YiNQlH<9$kpbpPEv5$N_#X>@ud9#0kyj5 za0Jgo-^qSvToMk_gNfMnhIK_Gh8_IxrIAobqU>K95j?)?x=uRbvL=APd7F!L>+?_F zcB&ta{N8B^qbZMV<^29>(*4uVg>@57x<;;BkWy0A$Z-uL*nY><_(C!3Q>#ZYUp6&9 zDnqG5fw@j<4Xn*v%&Zx}ZeThEIq4CZQH8-_8OB}6Hz8x!mCMP11OO<~008)J zLWa@60AvdS8yGOyyB}*m*)EA=z8EOf;^pTANk_)(dNN?Vt9f6@{F_r~`&+XNq@`FD z{p_^zI>X1qFR<=WP$&8f3XZG~LJR`iC4=u3v2o%gH%Es@M;~`hBo@e&aH$??KLlqG zU!AP9&K+X7RW3w2w3AN<-j2$|>oQ;pt)o#eesYX;h@;n_(P3dIm0h>upmOXQxGJ{j zPZsc2=o2Tzh`UJHt;M`>BiW&C_Fc2xjlhX`ybc(;PR!oXxQ!{|Ph}FWb%M8BB__|86QcN~bbGm}MTfJkAzgnYzJ>BYU@v zqce%KsL9lMdvTgPrmq`>*FV;eh5i)5U6~wa4YofUam^1@+JrfAwJV{qm5>2OkuvEZ z773*-x{APzVKT7R)*iAsP?~c1-&9a5vc60P_5m%<{8VVSQq!!0i0^K|E={ybH7^H0xzVwD*%jVqtuLo6avo}6k~j#nE+bEb}Ip~lK% zPcjb&Qp86X{_$x*_z}?IIFqp6L*EBAGg9s}J6$*i|^c39s{!iT~yNC_r|!qx0^X zb_|iolO2^7Ixvhq@(=wJ1eYiRD^PE(Ym0RG3~j&wHNDQoyus6ULVK`FHTcwXQ2=p< zoQ_<)H!_wBM;Ri(F}=kryf#UBFp`!Vm;MIlPIIj%ZXKm!lz*FJuNL8e?N?QVnnBkz zbp6a8VG{O@;TGoD*LW-%wu&cU$#?`lGqJ#<%+~{)c!srT2wXE>V>+%nY%+AHGnhy{ zGj~!vnf9FmO(Xe`6b>#RmQ5PGSHMKi?^IC?qpba5;zCA}31}t6RpcU$Km{p|2LeAn za>Eb+KipJAWPK^SOjosgWQz90PDdu&C9*C`B$tJh2HQ&m|$T zRYJw$ACtzl=PF0iEL{Yqk+t@In|76?tvt3u%jhU&F5eFCqC{XSs|)rcHIBsrMV^;@ zX)(Z3DTPlzr0o9WzcWzP=wfXdYpz;Bt~Nb%WM}{Mo@ttNh_l?Q$b=huMC75uP9R8& z$R+sRA&5jmGw*lwyF=guyf@w&WeL5Sy~gqfM)vU)<+dhP9pyB^R_w2SE8>bd>jsK= zK-GlDm5NXX;Ifl^xWKG_z=HQ@x4AE!hj_g_5eFkTgkYVm|dY?9M zNwmkp4`{SVbXZ!k&O^ePEh3sO*5Cm2A-?6t#JV9-)44PhQ`dALUHrK?*cY60z#+iE z2a@Ie=eH}YH?8g?Fw&SCqx7LKs(+B z;97CTr*qJ(Q}i>*psdIAI+dHx+FT+CtIkI^aEn6Ng@MBcZf58iO$-*JdFy2Vyorc=(mcDdO}Biu^uD$KZBBrI3m(~weo)QX`qHI?$#GW`O`uu3$E1E{ zZQUnk6q#-f7}a$yIhCW;p2u8w7ZvqIVmnpBwzBHw=%kMlkQcv$>%?;7f79!5e^o&ho=uUm2g8>G za{|rz?C;UhKA!8*EFrjdqWT`6ccnkM_Ncep9c+@jQFN?1gmrzb$lVQW;eclxH%(nJ ztXZPV&AZ6lEG34Qa-#X#AaJ?5%I}Tn+y5SCs;_h5WTa<(WhJ1G+PXX^J`*NNC_f(S zZixc9J`v|?0Nznszupwtia~i6s?R4>J4B8jeqEBoDJI|~y2av`-Rv&zC0x`x9`zr-mn5k zkbSHiPjRKGXE8E&bbf}5#KJ=g#=1n;f_KOnEAuxlt=(K7%PjUO&Q?y@@K+wNF#|oG z^;N2#_Do#8&H`hp)m-WYsP*jln_4}-vV@))?t9PlphAb@^P>^CfS>3ffv&{T=3U{H zufI<~D{#}BMyb44tyRWFxj*uoGoiatwlDXAzRI7;@#{Nr=I4TD1^{`I@zcfR=E|T3 zd&Yu0Rxz&2T1MwZTz9ze)rv-@Uj*&5`c-mPHvs(-o>skaVY#Ck`>p0FN-kDH+v1kp zQj09O1KtfbzP4c`i;fGO(fe>#+gj7TT6TTUmru7194mt#-gjFDWC-8GJdO6Fz4X!E zpZEC6W=_{}ADY(lHwN@?+yyoY1Xbram`GeJ2HAyMBeIJ)du4RWwQ`x^XUa~nb!Vy-`k?HYvSAo z{lse9jDMQ;WRy}d-HfGF51uEZi`X$xefNflUS#jxaUo#80=hUNN2cX&F&ILjU=+%P z!>R1C0gt@p#cos(^+LA11Y-$aawUh!=Ujjlp|CT2N6}I_Yvju5GgD&(G4Wy2m-!fD z11!HXBi^?|pc}_kznESTGPPUOQk&%Ueh}Bj-**f7xjA+c@nCDa}-p38K#y(Gst{hpSFxu zjU_$Hu1{Ykvvp;)DyFf0zLMYNCe*jUR$=hM`_lJwKn}AUcxrZ5cbbm?4DTy&zaI_K zm!McXu$_R<{y6mmRj^(m6urLPz8&hB@$YR}e@yycm;2A_Vl3^K&=KISn{sZk*&j1{vcVGdP0{x4D4tD0osYC8B~CL2?Q}Wi-Dr7B^TS*l0o)AvylM=VEMt@$A;g4J8f1QpzUzmlZBmwc#sXea zCO~Sf`WT?d9j7uAq-bCd6t%&Eu*78Hg^}9 z-NOYr5o*?|NZPAKbg|)DK5oM;SMik?6lEYNnF}vkK^8Pw!K>_#j)!RwK~x66%Nrin z{0?=%+6MQcyh9;x@zX()#CtR3dLfuhD$4?xw)?Of1z(|%Cjz=FfN-vdn)~#J_}xOm zWW6;);7{6qNi6cg1dpXWsr?(|wSyDA9CIB_Z4*&M9UX=zBp zG=^b4Gt|^+Q0GV}da$SR4taI7jA$N&utxnekV8UWL>8$}hO96cFH|z3s#<@^5W${( zG&|3&(|dMk4Pq%9qoF5<{m(^8Coa1tu^vr}ZMjfdY`7`z2sYyRD__E5wmV8QhBxNm zvkIca!Y=|KkkMVBJlIC1ar9R9aPX`;*Lb)WV~jRgl-$tbKDY7`9glyeK1&tOe*#I* zW=C^i@l+&9zFoh8+$Rp?J+-BG=E)7`dxOnmCkELw?vx}Xk3`T zzeohZtDJ6T70Pk_o$|Lce!08KwWa(zx_n+pWQ9LY2?S><3D%NdKCD|11d)v&9I_u7 z2cnJ8a*0)m0{;3G?A;FlXJPI*E^;3-JUkTSqTj11V1fLve>Ba@B{33|e1{GRwf>GJ ziX#)Ba7DNl!XR3#f@P-37MGK&L^cWYu5sQjrl+fJjl0TkuTW@OXAH?s)6KW;0J;zY z6T=@J8f`?PSZEz0MGD+c5Y{5E%T?H`D;6Y!=N#*L?wxe$S{Wvi40eFCoyp>iv^7TA z2sKGf2w`|H#UfA55*w#IBv|z*T>_!KO~FO%YFGT5kH25j61!>;KeUf;aa!{vs7tplm>CseZjWAT ze;e41bNanMtkqGPY*XhH@Y|J8(9(D}W`v-0PUBmv*;RG;BW>^=@twIaN~6b9O5 zldFnLP0#;y&hN`$7R*Shdo^NJ<1S;-3s=Q0Z5hZ>x2G`o3S4_ z|3lHxZWG&(rqbp|)uZxI!0EQm6Wao4j7sG3>g=@V*7P?l| zvx1Bw`e`?6k8jM7X@KQy%g-tyv8-izG4Gyc9vB?O8_KeyiK#w-9x}Cv5__G4;XW)G1D7>qtvOyP$Qe&k)ZFpacRUx@lCRt>4r5W>vz7 zft@#>R}RPN%N?MGwb`n$fBS`KTX@a5=SlK>oi$_uS%?MfVwj8{M_IdSi!)NfGM6e$ zD}&54f)VHuNEAxP>6%t=Xkom}fZyRiziRQ#eJGN%k7%K*J;t?ua4^bTKhj!VeGdAg zb>{8;*E_9GReK1lQ_zd`qqz%Cs!Vegv^X9dKV^=z(|58~|Dw$*{5T|oM+#p}vk>n!y+yLglbS@nFRYHY-Ub&6N$2~$l7(uWMW6SSsr;kOsnoZLH4^oy zwvvf@Qi@^qjLzMI%yZuNdvRB&O*k(5nj(H#3Ta=c%Au|2Yq6=@aec&}Dn33C@_osI zi^fjPX4LVQ2(2sfmd4Z<;UUs~A>xyQ6v_FBbUp@`qt_i{FP~IQcz->yCO!HMb#Rc_ zae^`kd+du0P^iTYufx9%nazv<7@1(!(@ZZj*%)<7EAik%%CmQMw_Ai&Q3EXBtT8#M z`IxYZ>k!EcBgWFQ%cOGvWZ37Hn;S`V9vgjeT;h*Fo+RSvxNE_^PMOgUlZp?g!Fj#zP~G z8d*oKwNEjbnFQ_PLTz~y$M}U_eAewA*JU%pXYL>P!>8$Hw}KoflYPs)67C2tnDZep z#_mWt;k&W@m#9N-J*L>()1o2;EPrT)3N zSH4iQV%eZ>8pUKnzM&sLLpDsYdV;d6>DDbW4SZP7U~z9)aFm;(E~)$ z7N3WZYr-o^4YOrzt&QM$xQ|sXg6`3(S9)-9)jZ(EcK9_cu*a7x;mrL#DA8*3hc91_ zUIfS|eDXf0(vy*NZhJZgqJ*)42_!_1me67zQRQQh9jlqU*L*(atuONFc(pYPqPcDk z*P)<>@mK6P|3lrtQj7M!DkFx6v2`uzIe#ijWiX0Un!b!4EhnmY< zekH;ieF>cq3XSQ9aZ*NjzcH5VBL}_yN)!s-nxSu^FvF5mHSvvwMgYPv$~*HjW1N&p@sn4Lxm3eg7U`~1dVbl zQ6>mC3K+q!ZE3+mJk{+{*g$d*+nU%-La15Y(+wk|`*$^5nXH5CGOqb+d6*s$ z?r21;8o9nQ@8!f|vL0aL+8=!_U>_e(yNP|{U_RV+wyxhK<{Y{RDOuc+MYqTBaBDrn zq7T)|dZ4J^nw&;HHVV6txQGdK?Gp(y-IZJ#@z^q@YHXT!xB-Oc-f(6ho53LEt|56# zbTd_T&s=07N2lauDPV=f?YpySjcSmQ0uQnX*==406pI7Z0%z_&Ucb{{Bp^m-ROioG zGDpn!;L7ZWYv}DRd|jHej+F=F^T&cWOKLY`?0k=ZDW$n)Z76}t+@DR5_#SPpx@sfqQQ)%Bg~E%a+i(((wD8JFoPytJ_R3tq>{hOwN#Yn!#_t)TkZuB@f}* zsXEHBgzq?*HSwtPct7S0Y~k*v99x0yA!RTMPwcuRm>pvqutaC*Rr3=)VYwwt1&3$> zPz-5e%TYglyU2;QF>As-M=a8V%DIP?9r$N*LIU?Jz4-IgNi|pt%yP8lD{HTb|6XQD z+KF`(yjrFv(E$LWx5?hkz}d;n(ZJNq9As-|`kM6%lWjbg*sw!7_cX#1;(`iEPO=M8}rMGJ@Cy-Z4A!qNK#Cr%z6zj92q^()nWc>Jj=JS4g3iiW3Ek zR#8Qp%+c7`sLRZN5xQq_5-?<{G_A3CE!R$a5NV09r|zlLnllU*OJhtj)A-upq!Xzl z22xRLTs{u)P12R)I-OTh0a-XQZ?JQiyUx8&Phc4=!D<9Mz1$|X^;Lc>FK?!3TBp}& z^yyxZQY*iHYUb(IS(|(33N+>5cYZ3qJ^E#ty2>}=zTo>*WgK(RVeAh5#alyTt$2PU z+7{chyi)T>3?wzGKR=Udtr1#&h}TE5>b+64oc1TOpu@tF?;Dr1^UpcPwv>@;mi!rz zYeZF%{N(a*ujV>Pz$tlg2H27@(cExv-1L1$@u{Tmx^?nk29%uM%B)&^tq3HNW!i{b^K^-a0M$c-At|W(jjiSZ<{StJI;1A9KQxdLWZDnHT-(a4OKJ za|&dgg*12beWX%j?#ajMy*LSBko~71G?8Y!?k9AjAp8BENjP_WS>Y0|&pqsjxmux0 zC2WX^;<=O5s=#3Bd_@p8ZIp1~1XGX$ycxVmLo8x0s!_?Oi)+MPxM51Che7jV#YxHY0Ym{qbYaiC$uL0Na*09%NF)meh$#zrj2`-&> z@rFfqO?ELZQ{20G&3pzQzqt23rro1lB3$b1s_eQBJMG>MTMQ%ZI_;tj6Q?q!2r&Da zKX-c_5MR@w>a(sfQ4JfUJ`>)HY%6>f;D0{43v?RHU{Tq%8(vE#aO%6Vo6Bf1eD1oc z)_5H|arac0U))F9jGlWR)9=wP4R)8VdF*R^ERuH(=ljXKP5lNLDAAY~dQ6Gqp=3i+ zex^vuV#;Du0^|9qL|%+2aX3Gw_rFbGUP+Bp31vfj z|HA|JAL=Wm{rqu>+!$fvV17jJf16a0ex-`f|&`(Yez-7y42sodhacYU-4Gfl`!#fW(IS zzZ*keliYt^1^)l~`Tw_xzU994`280Z04VT}dTrbOf&1T%zqi1*CZ@lDPp{SZKLG#B z()1Sh)~)gv&IJA+asTOEc}sh1FZqiGK=?=6-^?a&sc&r!e^FNv|B?DPlfzr;TVKOp zRMuCw!~cGf|J&v8mhx7){fmRY>MDYgkZ->63%)bO|008OrR(dtq;r+{A4fqdEwI7lI diff --git a/env/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl b/env/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl deleted file mode 100644 index 609a3685305194adfd4d577f690a0e3271ff16d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48886 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 Date: Thu, 24 Feb 2022 02:19:50 -0500 Subject: [PATCH 54/93] before pulling the corrections to the tests --- src/__main__.py | 1 - src/visitors/CiltoMips.py | 40 ++++++++++++++++++++++++++++++++++++ src/visitors/CooltoCil.py | 9 +++++--- tests/codegen/hello_world.cl | 14 +++---------- 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/__main__.py b/src/__main__.py index 8a2f1d3f2..1a1b177ec 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -76,7 +76,6 @@ def main(): input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] else: input_file = "./tests/codegen/hello_world.cl"#"debbuging/tests/Auto/call1.cl" - input_file = "./tests/parser/assignment1.cl"#"debbuging/tests/Auto/call1.cl" # raise Exception("Incorrect number of arguments") program_file = open(input_file) diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 3708e7eae..914bd43b4 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -30,6 +30,42 @@ def visit(self, node): self.write_data('.data') self.write_code('.text') + + inherited = "# Inherited Method\n" \ + ".inherited:\n" \ + "lw $a0, 8($sp)\n" \ + "lw $a1, 4($sp)\n" \ + "lw $a0, ($a0)\n" \ + "lw $a2, ($a0)\n" \ + "lw $a3, 4($a0)\n" \ + "lw $a0, ($a1)\n" \ + "lw $a1, 4($a1)\n" \ + "sge $t0, $a2, $a0\n" \ + "sle $t1, $a3, $a1\n" \ + "and $a0, $t0, $t1\n" \ + "sw $a0, ($sp)\n" \ + "subu $sp, $sp, 4\n" \ + "jr $ra\n" \ + "\n" + + raise_exc = "# raise exception Method\n" \ + ".raise:\n" \ + "lw $a0, 4($sp)\n" \ + "li $v0, 4\n" \ + "syscall\n" \ + "li $v0, 10\n" \ + "syscall" + + self.write_data("# Start .data segment (data!)") + self.write_data(".data") + self.write_data("zero_error: .asciiz \"Divition by zero exception\"") + self.write_data("index_error: .asciiz \"Invalid index exception\"") + self.write_data("void_error: .asciiz \"Objects must be inizializated before use exception\"") + self.write_data("case_error: .asciiz \"Case expression no match exception\"") + self.write_data("void_str: .asciiz \"\"") + + self.write_code(inherited) + self.write_code(raise_exc) self.write_code("main:") self.write_code(f'{operations.move} {registers.s7} {registers.gp}') @@ -57,6 +93,10 @@ def visit(self, node): words += ", " + "." + method[1] self.write_data(words) + for instr in self.dotcode: + a = 0 + + @visitor.when(TypeNode) def visit(self, node): pass diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index d734cc9b7..8ed8fed86 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -20,6 +20,7 @@ def __init__(self, context): self.parameters = set() self.instances = [] + self.builtin_types = ['Object', 'IO', 'Int', 'Bool', 'String'] self.ctrs = {} def transform_to_keys(self, xtype, keys): @@ -73,6 +74,8 @@ def register_data(self, value): return data_node def create_ctr(self, class_node, scope): + if self.current_type in self.builtin_types: + return attrs = [att for att in class_node.features if isinstance(att, AttrDeclarationNode)] while True: break @@ -110,8 +113,7 @@ def visit(self, node, scope): ###################################################### # class_nodes = [self.class_node_from_context(c) for c in self.context.types] - builtin_types = ['Object', 'IO', 'Int', 'Bool', 'String'] - built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types if c in builtin_types] + built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types if c in self.builtin_types] for built_in_class in built_in_classes: self.visit(built_in_class, scope) @@ -240,7 +242,8 @@ def visit(self, node, scope): # node.type -> str # node.body -> [ ExpressionNode ... ] ############################### - + if self.current_type.name in self.builtin_types: + return self.current_method = self.current_type.get_method(node.id, self.current_type, False) # Your code here!!! (Handle PARAMS) diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index 59f8ab441..67d328683 100755 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,13 +1,5 @@ -<<<<<<< HEAD -class Main { - main(): Int { - 12 - }; -}; -======= -class Main inherits IO { - main(): IO { - out_string("Hello, World.\n") +class Main { + main(): Int { + 12 }; }; ->>>>>>> bb7cafdd48b049fceeb4512fa1118cb4dcd01eb2 From 901fd88e7a4fc5677dd17bf6ca1ddb4780badf74 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Thu, 24 Feb 2022 15:18:19 -0500 Subject: [PATCH 55/93] fixed the covariance bugs --- src/cil_ast/cil_ast.py | 23 ++- src/visitors/Checker.py | 5 +- src/visitors/CiltoMips.py | 72 +------- src/visitors/CiltoMips_old.py | 317 ++++++++++++++++++++++++++++++++++ src/visitors/CooltoCil.py | 84 +++++++-- tests/codegen/hello_world.cl | 23 ++- 6 files changed, 441 insertions(+), 83 deletions(-) create mode 100644 src/visitors/CiltoMips_old.py diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 9d50609ee..3683ce43e 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -198,4 +198,25 @@ def __init__(self, dest, string, i, n): class ToStrNode(InstructionNode): def __init__(self, dest, ivalue): self.dest = dest - self.ivalue = ivalue \ No newline at end of file + self.ivalue = ivalue + +class AbortNode(InstructionNode): + def __init__(self): + pass + +class CopyNode(): + def __init__(self, dest, source): + self.dest = dest + self.source = source + +class PrintStrNode(): + def __init__(self, output): + self.output = output + +class ReadStrNode(): + def __init__(self, input): + self.input = input + +class PrintIntNode(): + def __init__(self, output): + self.output = output \ No newline at end of file diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py index 94868b68e..c7b80aa80 100755 --- a/src/visitors/Checker.py +++ b/src/visitors/Checker.py @@ -135,7 +135,6 @@ def visit(self, node, scope): # self.errors.append(f'Variable {_id} is already defined in {self.current_method.name}.') # else: # scope.define_variable(_id, var_type) - scope.define_variable(_id, var_type) if _e is not None: expr = self.visit(_e, scope.create_child()) @@ -144,6 +143,9 @@ def visit(self, node, scope): if expr is not None and not expr.conforms_to(var_type): # self.errors.append(f"Can't convert {expr.name} to {var_type.name}.") self.errors.append(_TypeError %(node.decl_list[iteration].token_list[0].lineno, node.decl_list[iteration].token_list[0].col, f"Infered type {expr.name} of initialization of {_id} does not conform to identifier's declared type {var_type.name}")) + else: + var_type = expr + scope.define_variable(_id, var_type) iteration+=1 return self.visit(node.expression, scope.create_child()) @@ -169,6 +171,7 @@ def visit(self, node, scope): if not value_t.conforms_to(attrType): # self.errors.append(f"Can't convert {value_t.name} to {attrType.name}.") self.errors.append(_TypeError %(node.value.token_list[0].lineno, node.value.token_list[0].col, f'Infered type {value_t.name} of initialization of attribute {node.id} does not conform to declared type {attrType.name}')) + attrType = value_t else: scope.create_child() diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 914bd43b4..158f9e333 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -28,74 +28,10 @@ def visit(self, node): self.dotdata = node.dotdata self.dotcode = node.dotcode - self.write_data('.data') - self.write_code('.text') - - inherited = "# Inherited Method\n" \ - ".inherited:\n" \ - "lw $a0, 8($sp)\n" \ - "lw $a1, 4($sp)\n" \ - "lw $a0, ($a0)\n" \ - "lw $a2, ($a0)\n" \ - "lw $a3, 4($a0)\n" \ - "lw $a0, ($a1)\n" \ - "lw $a1, 4($a1)\n" \ - "sge $t0, $a2, $a0\n" \ - "sle $t1, $a3, $a1\n" \ - "and $a0, $t0, $t1\n" \ - "sw $a0, ($sp)\n" \ - "subu $sp, $sp, 4\n" \ - "jr $ra\n" \ - "\n" - - raise_exc = "# raise exception Method\n" \ - ".raise:\n" \ - "lw $a0, 4($sp)\n" \ - "li $v0, 4\n" \ - "syscall\n" \ - "li $v0, 10\n" \ - "syscall" - - self.write_data("# Start .data segment (data!)") - self.write_data(".data") - self.write_data("zero_error: .asciiz \"Divition by zero exception\"") - self.write_data("index_error: .asciiz \"Invalid index exception\"") - self.write_data("void_error: .asciiz \"Objects must be inizializated before use exception\"") - self.write_data("case_error: .asciiz \"Case expression no match exception\"") - self.write_data("void_str: .asciiz \"\"") - - self.write_code(inherited) - self.write_code(raise_exc) - - self.write_code("main:") - self.write_code(f'{operations.move} {registers.s7} {registers.gp}') - self.write_code(f'{operations.addi} {registers.s7} {registers.s7} 300000') - self.write_code(f"") - - self.write_data(f"_abort: {datatype.asciiz} \"Program Aborted\"") - self.write_data(f"_zero: {datatype.asciiz} \"0 Division Error\"") - self.write_data(f"_substr: {datatype.asciiz} \"Substr Length Error\"") - self.write_data(f"_mem: {datatype.asciiz} \"Memory Error\"") - self.write_data(f"") - - for i, d in enumerate(self.dotdata): - self.write_data("msg{}: {} \"{}\"".format(i, datatype.asciiz, d)) # every one of the user defined data through the program - - self.write_data('buffer: .space 1024') # buffer for the in_string method - - for i, t in enumerate(self.dottypes): - self.write_data(f"type_str{i}: {datatype.asciiz} \"{t.name}\"") - - for i, t in enumerate(self.dottypes): - # words = f"{tipe.cType}: .word {tipe.t_in}, {tipe.t_out}, type_str{i}" - words = f"{t.name}: .word 12, 42, type_str{i}" - for method in t.methods: - words += ", " + "." + method[1] - self.write_data(words) - - for instr in self.dotcode: - a = 0 - + self.write_data('.data') # initialize the .data segment + self.write_data(f'p_error: {datatype.asciiz} "Aborting from String"') + self.write_data(f'zero_error: {datatype.asciiz} "Division by zero"') + self.write_data(f'range_error: {datatype.asciiz} "Index out of range"') @visitor.when(TypeNode) def visit(self, node): diff --git a/src/visitors/CiltoMips_old.py b/src/visitors/CiltoMips_old.py new file mode 100644 index 000000000..914bd43b4 --- /dev/null +++ b/src/visitors/CiltoMips_old.py @@ -0,0 +1,317 @@ +from utils.mip_utils import registers, operations, datatype +import visitors.visitor as visitor +from cil_ast.cil_ast import * + +class CiltoMipsVisitor: + def __init__(self, context): + self.dottypes = [] + self.dotdata =[] + self.dotcode =[] + self.context = context + self.code = [] + self.data = [] + def write_data(self, instruction): + self.data.append(instruction) + + def write_code(self, instruction): + self.code.append(instruction) + + + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + self.dottypes = node.dottypes + self.dotdata = node.dotdata + self.dotcode = node.dotcode + + self.write_data('.data') + self.write_code('.text') + + inherited = "# Inherited Method\n" \ + ".inherited:\n" \ + "lw $a0, 8($sp)\n" \ + "lw $a1, 4($sp)\n" \ + "lw $a0, ($a0)\n" \ + "lw $a2, ($a0)\n" \ + "lw $a3, 4($a0)\n" \ + "lw $a0, ($a1)\n" \ + "lw $a1, 4($a1)\n" \ + "sge $t0, $a2, $a0\n" \ + "sle $t1, $a3, $a1\n" \ + "and $a0, $t0, $t1\n" \ + "sw $a0, ($sp)\n" \ + "subu $sp, $sp, 4\n" \ + "jr $ra\n" \ + "\n" + + raise_exc = "# raise exception Method\n" \ + ".raise:\n" \ + "lw $a0, 4($sp)\n" \ + "li $v0, 4\n" \ + "syscall\n" \ + "li $v0, 10\n" \ + "syscall" + + self.write_data("# Start .data segment (data!)") + self.write_data(".data") + self.write_data("zero_error: .asciiz \"Divition by zero exception\"") + self.write_data("index_error: .asciiz \"Invalid index exception\"") + self.write_data("void_error: .asciiz \"Objects must be inizializated before use exception\"") + self.write_data("case_error: .asciiz \"Case expression no match exception\"") + self.write_data("void_str: .asciiz \"\"") + + self.write_code(inherited) + self.write_code(raise_exc) + + self.write_code("main:") + self.write_code(f'{operations.move} {registers.s7} {registers.gp}') + self.write_code(f'{operations.addi} {registers.s7} {registers.s7} 300000') + self.write_code(f"") + + self.write_data(f"_abort: {datatype.asciiz} \"Program Aborted\"") + self.write_data(f"_zero: {datatype.asciiz} \"0 Division Error\"") + self.write_data(f"_substr: {datatype.asciiz} \"Substr Length Error\"") + self.write_data(f"_mem: {datatype.asciiz} \"Memory Error\"") + self.write_data(f"") + + for i, d in enumerate(self.dotdata): + self.write_data("msg{}: {} \"{}\"".format(i, datatype.asciiz, d)) # every one of the user defined data through the program + + self.write_data('buffer: .space 1024') # buffer for the in_string method + + for i, t in enumerate(self.dottypes): + self.write_data(f"type_str{i}: {datatype.asciiz} \"{t.name}\"") + + for i, t in enumerate(self.dottypes): + # words = f"{tipe.cType}: .word {tipe.t_in}, {tipe.t_out}, type_str{i}" + words = f"{t.name}: .word 12, 42, type_str{i}" + for method in t.methods: + words += ", " + "." + method[1] + self.write_data(words) + + for instr in self.dotcode: + a = 0 + + + @visitor.when(TypeNode) + def visit(self, node): + pass + + @visitor.when(DataNode) + def visit(self, node): + pass + + @visitor.when(FunctionNode) + def visit(self, node): + methods = [ + 'Object_abort', + 'Object_type_name', + 'Object_copy', + 'String_concat', + 'String_substr', + 'String_length', + 'IO_in_int', + 'IO_out_int', + 'IO_in_string', + 'IO_out_string', + ] + if node.fname in methods: + return + pass + + @visitor.when(ParamNode) + def visit(self, node): + pass + + @visitor.when(LocalNode) + def visit(self, node): + pass + + @visitor.when(AssignNode) + def visit(self, node): + pass + + @visitor.when(PlusNode) + def visit(self, node): + pass + + @visitor.when(MinusNode) + def visit(self, node): + pass + + @visitor.when(StarNode) + def visit(self, node): + pass + + @visitor.when(DivNode) + def visit(self, node): + pass + + @visitor.when(EqualNode) + def visit(self, node): + pass + + @visitor.when(LessNode) + def visit(self, node): + pass + + @visitor.when(LeqNode) + def visit(self, node): + pass + + @visitor.when(GotoNode) + def visit(self, node): + pass + + @visitor.when(GotoIfNode) + def visit(self, node): + pass + + @visitor.when(GetAttribNode) + def visit(self, node): + pass + + @visitor.when(SetAttribNode) + def visit(self, node): + pass + + @visitor.when(AllocateNode) + def visit(self, node): + pass + + @visitor.when(TypeOfNode) + def visit(self, node): + pass + + @visitor.when(LabelNode) + def visit(self, node): + pass + + @visitor.when(IsTypeNode) + def visit(self, node): + pass + + @visitor.when(ParentTypeNode) + def visit(self, node): + pass + + @visitor.when(StaticCallNode) + def visit(self, node): + pass + + @visitor.when(DynamicCallNode) + def visit(self, node): + pass + + @visitor.when(ArgNode) + def visit(self, node): + pass + + @visitor.when(ReturnNode) + def visit(self, node): + pass + + @visitor.when(LoadNode) + def visit(self, node): + pass + + @visitor.when(LengthNode) + def visit(self, node): + pass + + @visitor.when(ConcatNode) + def visit(self, node): + pass + + @visitor.when(PrefixNode) + def visit(self, node): + pass + + @visitor.when(SubstringNode) + def visit(self, node): + pass + + @visitor.when(ToStrNode) + def visit(self, node): + pass + +# Input espacio a reservar en $a0 +# Output direccion de memoria reservada en $a0 + def mem_alloc(self): + self.write_code(f"# Declartation of the mem_alloc") + + self.write_code(f"mem_alloc:") + self.write_code(f"{operations.add} {registers.gp} {registers.gp} {registers.a0}") + self.write_code(f"{operations.blt} {registers.gp} {registers.s7} mem_alloc_end")# si se pasa del límite de memoria dar error + self.write_code(f"{operations.j} mem_error") + self.write_code(f"mem_alloc_end:") + self.write_code(f"{operations.sub} {registers.a0} {registers.gp} {registers.a0}") + self.write_code(f"{operations.jr} {registers.ra}") + self.write_code(f"") + +# en a0 tengo el la instancia + def get_parent_prot(self): + self.write_code(f"# get parent prototype") # + self.write_code(f"get_parent_prot:") + self.write_code(f"{operations.lw} {registers.t0} ({registers.a0})") + self.write_code(f"{operations.sll} {registers.t0} {registers.t0} 2")# mult por 4 pa tener el offset + self.write_code(f"{operations.lw} {registers.t0} ({registers.s4})") + self.write_code(f"{operations.move} {registers.a0} {registers.t0}") + self.write_code(f"{operations.jr} {registers.ra}") + self.write_code(f"") + +# funciones para errores en runtime + def zero_error(self): # error al dividir por 0 + self.write_code(f"# Declartation of the zero-div runtime error") + + self.write_code(f"zero_error:") + self.write_code(f"{operations.la} {registers.a0} _zero") + self.write_code(f"") + + self.write_code(f"{operations.li} {registers.v0} 4") + self.write_code(f"{operations.syscall}") + self.write_code(f"{operations.li} {registers.v0} 10") + self.write_code(f"{operations.syscall}") + self.write_code(f"") + + def substr_error(self): + self.write_code(f"# Declartation of the substr-index.out.of.range runtime error") + + self.write_code(f"substr_error:") + self.write_code(f"{operations.la} {registers.a0} _substr") + self.write_code(f"") + + self.write_code(f"{operations.li} {registers.v0} 4") + self.write_code(f"{operations.syscall}") + self.write_code(f"{operations.li} {registers.v0} 10") + self.write_code(f"{operations.syscall}") + self.write_code(f"") + + def mem_error(self): + self.write_code(f"# Declartation of the memory-overflow runtime error") + self.write_code(f"mem_error:") + self.write_code(f"{operations.la} {registers.a0} _mem") + self.write_code(f"") + + self.write_code(f"{operations.li} {registers.v0} 4") + self.write_code(f"{operations.syscall}") + self.write_code(f"{operations.li} {registers.v0} 10") + self.write_code(f"{operations.syscall}") + self.write_code(f"") + + + def utils_functs(self): + self.mem_alloc() + self.get_parent_prot() + self.object_copy() + self.str_eq() + self.str_concat() + self.str_substr() + self.length() + self.zero_error() + self.mem_error() + self.substr_error() \ No newline at end of file diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 8ed8fed86..6ae3cf472 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -46,8 +46,8 @@ def register_local(self, vinfo): self.localvars.append(local_node) return vinfo.name - def define_internal_local(self): - vinfo = VariableInfo('internal', None) + def define_internal_local(self, name='internal'): + vinfo = VariableInfo(name, None) return self.register_local(vinfo) def register_instruction(self, instruction): @@ -57,8 +57,8 @@ def register_instruction(self, instruction): def to_function_name(self, method_name, type_name): return f'function_{method_name}_at_{type_name}' - def register_function(self, function_name): - function_node = cil.FunctionNode(function_name, [], [], []) + def register_function(self, function_name, params= [], localvars= []): + function_node = cil.FunctionNode(function_name, params, localvars, []) self.dotcode.append(function_node) return function_node @@ -77,17 +77,76 @@ def create_ctr(self, class_node, scope): if self.current_type in self.builtin_types: return attrs = [att for att in class_node.features if isinstance(att, AttrDeclarationNode)] - while True: + while True: # we may need to search for te attributes of the ancestors break self.current_function = self.register_function(self.to_function_name('ctor', self.current_type.name)) - self.register_instruction(cil.ParamNode('self')) + local_self = self.define_internal_local('self') + self.register_instruction(cil.AllocateNode(self.current_type.name, 'self')) for i, attr in enumerate(attrs): set_attr_node = self.visit(attr, scope) set_attr_node.index = i self.register_instruction(set_attr_node) - self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) + self.register_instruction(cil.ReturnNode()) + def add_builtin_types(self): + def build_Object(): + type = self.register_type('Object') + self.current_type = type + + self.current_function = self.register_function(self.to_function_name('abort', self.current_type.name), ['self']) + self.register_instruction(cil.AbortNode()) + + self.current_function = self.register_function(self.to_function_name('copy', self.current_type.name), ['self']) + self.register_instruction(cil.CopyNode(1,1)) + + self.current_function = self.register_function(self.to_function_name('type_name', self.current_type.name), ['self']) + dest = self.define_internal_local() + self.register_instruction(cil.TypeOfNode('self', dest)) + str_store = self.define_internal_local() + self.register_instruction(cil.AllocateNode('String', str_store)) + self.register_instruction(cil.SetAttribNode(str_store, 0, dest)) + self.register_instruction(cil.ReturnNode(str_store)) + + def build_String(): + type = self.register_type('String') + self.current_type = type + + self.current_function = self.register_function(self.to_function_name('concat'), ['self', 'suffix']) + dest = self.define_internal_local() # variable para guardar el resultado de la concatenación + self.register_instruction(cil.ConcatNode(dest, 'self', 'suffix')) # agregar el nodo concat al ast de las instrucciones + str_store = self.define_internal_local() # nueva instancia de string donde guardar el resultado y retornarla + self.register_instruction(cil.AllocateNode('String', str_store)) + self.register_instruction(cil.SetAttribNode(str_store, 0, dest)) + self.register_instruction(cil.ReturnNode(str_store)) + + self.current_function = self.register_function(self.to_function_name('length'), ['self']) + dest = self.define_internal_local() + self.register_instruction(cil.LengthNode(dest, 'self')) + int_store = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Int', int_store)) + self.register_instruction(cil.SetAttribNode(int_store, 0, dest)) + self.register_instruction(cil.ReturnNode(int_store)) + + self.current_function = self.register_function(self.to_function_name('substr'), ['self', 'index', 'length']) + dest = self.define_internal_local() + self.register_instruction(cil.SubstringNode(dest, 'self', 'index', 'length')) + str_store = self.define_internal_local() + self.register_instruction(cil.AllocateNode('String', str_store)) + self.register_instruction(cil.SetAttribNode(str_store, 0, dest)) + self.register_instruction(cil.ReturnNode(str_store)) + + def build_IO(): + type = self.register_type('String') + self.current_type = type + + self.current_function = self.register_function(self.to_function_name('out_string'), ['self', 'str']) + # self.register_instruction(cil.) + + + build_Object() + build_String() + class COOLToCILVisitor(BaseCOOLToCILVisitor): @visitor.on('node') def visit(self, node): @@ -112,10 +171,11 @@ def visit(self, node, scope): # node.declarations -> [ ClassDeclarationNode ... ] ###################################################### + # self.add_builtin_types() # class_nodes = [self.class_node_from_context(c) for c in self.context.types] - built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types if c in self.builtin_types] - for built_in_class in built_in_classes: - self.visit(built_in_class, scope) + # built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types if c in self.builtin_types] + # for built_in_class in built_in_classes: + # self.visit(built_in_class, scope) self.current_function = self.register_function('entry') @@ -242,8 +302,8 @@ def visit(self, node, scope): # node.type -> str # node.body -> [ ExpressionNode ... ] ############################### - if self.current_type.name in self.builtin_types: - return + # if self.current_type.name in self.builtin_types: + # return self.current_method = self.current_type.get_method(node.id, self.current_type, False) # Your code here!!! (Handle PARAMS) diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index 67d328683..fbf47aae9 100755 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,5 +1,26 @@ class Main { + a : A <- new B; main(): Int { - 12 + { + a <- new B; + a.a(); + } }; }; + +class A { + aa : Int <- 101; + a() : Int { + aa + }; +}; + +class B inherits A { + bb : Int <- 102; + a() : Int { + 100 + }; + b() : Int { + bb + }; +}; \ No newline at end of file From 01fbefd257c82cc46c4b9d18a0a704d44bf3ccbc Mon Sep 17 00:00:00 2001 From: regnod Date: Thu, 24 Feb 2022 16:58:45 -0500 Subject: [PATCH 56/93] adding some mip code --- .vscode/settings.json | 16 ++++ src/__main__.py | 2 +- src/visitors/CiltoMips.py | 147 ++++++++++++++++++++++++----------- tests/codegen/basic.cl | 19 +++++ tests/codegen/hello_world.cl | 8 -- 5 files changed, 139 insertions(+), 53 deletions(-) create mode 100644 .vscode/settings.json create mode 100755 tests/codegen/basic.cl diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..9c1de035f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,16 @@ +{ + "cSpell.words": [ + "addi", + "alloc", + "asciiz", + "bnez", + "direccion", + "dividir", + "funciones", + "límite", + "mult", + "reservada", + "reservar", + "tipe" + ] +} \ No newline at end of file diff --git a/src/__main__.py b/src/__main__.py index 8a8e77ddd..42d1aa8cb 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -76,7 +76,7 @@ def main(): input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] else: input_file = "./tests/codegen/hello_world.cl"#"debbuging/tests/Auto/call1.cl" - input_file = "./tests/parser/assignment1.cl"#"debbuging/tests/Auto/call1.cl" + input_file = "./tests/codegen/basic.cl"#"debbuging/tests/Auto/call1.cl" # raise Exception("Incorrect number of arguments") try: program_file = open(input_file) diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 3708e7eae..84ca53141 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -1,4 +1,4 @@ -from utils.mip_utils import registers, operations, datatype +from utils.mip_utils import registers as r, operations as o, datatype as dt import visitors.visitor as visitor from cil_ast.cil_ast import * @@ -10,13 +10,17 @@ def __init__(self, context): self.context = context self.code = [] self.data = [] + self.current_function: FunctionNode = None + + def stack_offset(self, name): + all_ = self.current_function.params + self.current_function.localvars + return -4*all_.index(name) + def write_data(self, instruction): self.data.append(instruction) def write_code(self, instruction): self.code.append(instruction) - - @visitor.on('node') def visit(self, node): @@ -32,23 +36,23 @@ def visit(self, node): self.write_code('.text') self.write_code("main:") - self.write_code(f'{operations.move} {registers.s7} {registers.gp}') - self.write_code(f'{operations.addi} {registers.s7} {registers.s7} 300000') + self.write_code(f'{o.move} {r.s7} {r.gp}') + self.write_code(f'{o.addi} {r.s7} {r.s7} 300000') self.write_code(f"") - self.write_data(f"_abort: {datatype.asciiz} \"Program Aborted\"") - self.write_data(f"_zero: {datatype.asciiz} \"0 Division Error\"") - self.write_data(f"_substr: {datatype.asciiz} \"Substr Length Error\"") - self.write_data(f"_mem: {datatype.asciiz} \"Memory Error\"") + self.write_data(f"_abort: {dt.asciiz} \"Program Aborted\"") + self.write_data(f"_zero: {dt.asciiz} \"0 Division Error\"") + self.write_data(f"_substr: {dt.asciiz} \"Substr Length Error\"") + self.write_data(f"_mem: {dt.asciiz} \"Memory Error\"") self.write_data(f"") for i, d in enumerate(self.dotdata): - self.write_data("msg{}: {} \"{}\"".format(i, datatype.asciiz, d)) # every one of the user defined data through the program + self.write_data("msg{}: {} \"{}\"".format(i, dt.asciiz, d)) # every one of the user defined data through the program self.write_data('buffer: .space 1024') # buffer for the in_string method for i, t in enumerate(self.dottypes): - self.write_data(f"type_str{i}: {datatype.asciiz} \"{t.name}\"") + self.write_data(f"type_str{i}: {dt.asciiz} \"{t.name}\"") for i, t in enumerate(self.dottypes): # words = f"{tipe.cType}: .word {tipe.t_in}, {tipe.t_out}, type_str{i}" @@ -97,19 +101,68 @@ def visit(self, node): @visitor.when(PlusNode) def visit(self, node): - pass + left_pos = self.stack_offset(node.left) + right_pos = self.stack_offset(node.right) + dest_pos = self.stack_offset(node.dest) + self.write_code('# Plus') + self.write_code('{} {}, {}({}) # heap address of the left Int'.format(o.lw, r.t0, left_pos, r.fp)) + self.write_code('{} {}, 8({}) # left Int value'.format(o.lw, r.t1, r.t0)) + self.write_code('{} {}, {}({}) # heap address of the right Int'.format(o.lw, r.t0, right_pos, r.fp)) + self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, right_pos, r.t0)) + self.write_code('{} {}, {}, {} # saving to $t1 the result'.format(o.add, r.t1, r.t1, r.t2)) + self.write_code('{} {}, {}({}) # heap address of dest'.format(o.lw, r.t0, dest_pos, r.fp)) + self.write_code('{} {}, 8({}) # store result'.format(o.sw, r.t1, r.t0)) @visitor.when(MinusNode) def visit(self, node): - pass + left_pos = self.stack_offset(node.left) + right_pos = self.stack_offset(node.right) + dest_pos = self.stack_offset(node.dest) + self.write_code('# Plus') + self.write_code('{} {}, {}({}) # heap address of the left Int'.format(o.lw, r.t0, left_pos, r.fp)) + self.write_code('{} {}, 8({}) # left Int value'.format(o.lw, r.t1, r.t0)) + self.write_code('{} {}, {}({}) # heap address of the right Int'.format(o.lw, r.t0, right_pos, r.fp)) + self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, right_pos, r.t0)) + self.write_code('{} {}, {}, {} # saving to $t1 the result'.format(o.sub, r.t1, r.t1, r.t2)) + self.write_code('{} {}, {}({}) # heap address of dest'.format(o.lw, r.t0, dest_pos, r.fp)) + self.write_code('{} {}, 8({}) # store result'.format(o.sw, r.t1, r.t0)) @visitor.when(StarNode) def visit(self, node): - pass + left_pos = self.stack_offset(node.left) + right_pos = self.stack_offset(node.right) + dest_pos = self.stack_offset(node.dest) + self.write_code('# Plus') + self.write_code('{} {}, {}({}) # heap address of the left Int'.format(o.lw, r.t0, left_pos, r.fp)) + self.write_code('{} {}, 8({}) # left Int value'.format(o.lw, r.t1, r.t0)) + self.write_code('{} {}, {}({}) # heap address of the right Int'.format(o.lw, r.t0, right_pos, r.fp)) + self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, right_pos, r.t0)) + self.write_code('{} {}, {} # multiply'.format(o.mul, r.t1, r.t2)) + self.write_code('{} {} # get the result in lo'.format(o.mflo, r.t1, r.t2)) + self.write_code('{} {}, {}({}) # heap address of dest'.format(o.lw, r.t0, dest_pos, r.fp)) + self.write_code('{} {}, 8({}) # store result'.format(o.sw, r.t1, r.t0)) @visitor.when(DivNode) def visit(self, node): - pass + left_pos = self.stack_offset(node.left) + right_pos = self.stack_offset(node.right) + dest_pos = self.stack_offset(node.dest) + self.write_code('# Plus') + self.write_code('{} {}, {}({}) # heap address of the left Int'.format(o.lw, r.t0, left_pos, r.fp)) + self.write_code('{} {}, 8({}) # left Int value'.format(o.lw, r.t1, r.t0)) + self.write_code('{} {}, {}({}) # heap address of the right Int'.format(o.lw, r.t0, right_pos, r.fp)) + self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, right_pos, r.t0)) + # TODO: zero exception + # self.write_code("la $t0, zero_error") + # self.write_code("sw $t0, ($sp)") + # self.write_code("subu $sp, $sp, 4") + self.write_code("beqz $t2, .raise") + # self.write_code("addu $sp, $sp, 4") + # + self.write_code('{} {}, {} # divide'.format(o.div, r.t1, r.t2)) + self.write_code('{} {} # get the result in lo'.format(o.mflo, r.t1, r.t2)) + self.write_code('{} {}, {}({}) # heap address of dest'.format(o.lw, r.t0, dest_pos, r.fp)) + self.write_code('{} {}, 8({}) # store result'.format(o.sw, r.t1, r.t0)) @visitor.when(EqualNode) def visit(self, node): @@ -125,12 +178,17 @@ def visit(self, node): @visitor.when(GotoNode) def visit(self, node): - pass + self.write_code('# goto ') + self.write_code('{} {} # jump unconditionally'.format(o.j, node.label)) @visitor.when(GotoIfNode) def visit(self, node): - pass - + pos = self.stack_offset(node.condition) + self.write_code('# goto if') + self.write_code( '{} {} {}({}) # heap address'.format(o.lw, r.t0, pos, r.fp)) + self.write_code('{} {} 8({}) # value of condition'.format(o.lw, r.t1, r.t0)) + self.write_code('{} {} {} # branch on not equal to 0'.format(o.bnez, r.t1, node.label)) + @visitor.when(GetAttribNode) def visit(self, node): pass @@ -149,7 +207,8 @@ def visit(self, node): @visitor.when(LabelNode) def visit(self, node): - pass + self.write_code("# a label") + self.write_code("{}:".format(node.name)) @visitor.when(IsTypeNode) def visit(self, node): @@ -205,23 +264,23 @@ def mem_alloc(self): self.write_code(f"# Declartation of the mem_alloc") self.write_code(f"mem_alloc:") - self.write_code(f"{operations.add} {registers.gp} {registers.gp} {registers.a0}") - self.write_code(f"{operations.blt} {registers.gp} {registers.s7} mem_alloc_end")# si se pasa del límite de memoria dar error - self.write_code(f"{operations.j} mem_error") + self.write_code(f"{o.add} {r.gp} {r.gp} {r.a0}") + self.write_code(f"{o.blt} {r.gp} {r.s7} mem_alloc_end")# si se pasa del límite de memoria dar error + self.write_code(f"{o.j} mem_error") self.write_code(f"mem_alloc_end:") - self.write_code(f"{operations.sub} {registers.a0} {registers.gp} {registers.a0}") - self.write_code(f"{operations.jr} {registers.ra}") + self.write_code(f"{o.sub} {r.a0} {r.gp} {r.a0}") + self.write_code(f"{o.jr} {r.ra}") self.write_code(f"") # en a0 tengo el la instancia def get_parent_prot(self): self.write_code(f"# get parent prototype") # self.write_code(f"get_parent_prot:") - self.write_code(f"{operations.lw} {registers.t0} ({registers.a0})") - self.write_code(f"{operations.sll} {registers.t0} {registers.t0} 2")# mult por 4 pa tener el offset - self.write_code(f"{operations.lw} {registers.t0} ({registers.s4})") - self.write_code(f"{operations.move} {registers.a0} {registers.t0}") - self.write_code(f"{operations.jr} {registers.ra}") + self.write_code(f"{o.lw} {r.t0} ({r.a0})") + self.write_code(f"{o.sll} {r.t0} {r.t0} 2")# mult por 4 pa tener el offset + self.write_code(f"{o.lw} {r.t0} ({r.s4})") + self.write_code(f"{o.move} {r.a0} {r.t0}") + self.write_code(f"{o.jr} {r.ra}") self.write_code(f"") # funciones para errores en runtime @@ -229,38 +288,38 @@ def zero_error(self): # error al dividir por 0 self.write_code(f"# Declartation of the zero-div runtime error") self.write_code(f"zero_error:") - self.write_code(f"{operations.la} {registers.a0} _zero") + self.write_code(f"{o.la} {r.a0} _zero") self.write_code(f"") - self.write_code(f"{operations.li} {registers.v0} 4") - self.write_code(f"{operations.syscall}") - self.write_code(f"{operations.li} {registers.v0} 10") - self.write_code(f"{operations.syscall}") + self.write_code(f"{o.li} {r.v0} 4") + self.write_code(f"{o.syscall}") + self.write_code(f"{o.li} {r.v0} 10") + self.write_code(f"{o.syscall}") self.write_code(f"") def substr_error(self): self.write_code(f"# Declartation of the substr-index.out.of.range runtime error") self.write_code(f"substr_error:") - self.write_code(f"{operations.la} {registers.a0} _substr") + self.write_code(f"{o.la} {r.a0} _substr") self.write_code(f"") - self.write_code(f"{operations.li} {registers.v0} 4") - self.write_code(f"{operations.syscall}") - self.write_code(f"{operations.li} {registers.v0} 10") - self.write_code(f"{operations.syscall}") + self.write_code(f"{o.li} {r.v0} 4") + self.write_code(f"{o.syscall}") + self.write_code(f"{o.li} {r.v0} 10") + self.write_code(f"{o.syscall}") self.write_code(f"") def mem_error(self): self.write_code(f"# Declartation of the memory-overflow runtime error") self.write_code(f"mem_error:") - self.write_code(f"{operations.la} {registers.a0} _mem") + self.write_code(f"{o.la} {r.a0} _mem") self.write_code(f"") - self.write_code(f"{operations.li} {registers.v0} 4") - self.write_code(f"{operations.syscall}") - self.write_code(f"{operations.li} {registers.v0} 10") - self.write_code(f"{operations.syscall}") + self.write_code(f"{o.li} {r.v0} 4") + self.write_code(f"{o.syscall}") + self.write_code(f"{o.li} {r.v0} 10") + self.write_code(f"{o.syscall}") self.write_code(f"") diff --git a/tests/codegen/basic.cl b/tests/codegen/basic.cl new file mode 100755 index 000000000..4e11f7947 --- /dev/null +++ b/tests/codegen/basic.cl @@ -0,0 +1,19 @@ +class Main inherits IO { + a : A <- new B; + main(): Int { + out_string("Hello, World.\n") + }; +}; + +class A : Int{ + aa : Int <- 101; + a(): Int { + aa + }; +}; +class B : Int{ + bb : Int <- 102; + a(): Int { + bb + }; +}; diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index 59f8ab441..0c818f908 100755 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,13 +1,5 @@ -<<<<<<< HEAD -class Main { - main(): Int { - 12 - }; -}; -======= class Main inherits IO { main(): IO { out_string("Hello, World.\n") }; }; ->>>>>>> bb7cafdd48b049fceeb4512fa1118cb4dcd01eb2 From f2de556dd2b1cf873862a2cd8aabe616facc5224 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Thu, 24 Feb 2022 17:34:05 -0500 Subject: [PATCH 57/93] all builtin and constructors done, now going to rollback the semantic checker changes in order to pass al the tests again --- out | 26 ++----------- src/visitors/CooltoCil.py | 72 +++++++++++++++++++++++++++--------- tests/codegen/covariance.cl | 26 +++++++++++++ tests/codegen/hello_world.cl | 23 +----------- 4 files changed, 85 insertions(+), 62 deletions(-) create mode 100644 tests/codegen/covariance.cl diff --git a/out b/out index 4f3af3d97..c4a7f2c9c 100644 --- a/out +++ b/out @@ -1,24 +1,4 @@ .data -_abort: .asciiz "Program Aborted" -_zero: .asciiz "0 Division Error" -_substr: .asciiz "Substr Length Error" -_mem: .asciiz "Memory Error" - -buffer: .space 1024 -type_str0: .asciiz "Object" -type_str1: .asciiz "Int" -type_str2: .asciiz "Bool" -type_str3: .asciiz "String" -type_str4: .asciiz "IO" -type_str5: .asciiz "Main" -Object: .word 12, 42, type_str0, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object -Int: .word 12, 42, type_str1, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object -Bool: .word 12, 42, type_str2, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object -String: .word 12, 42, type_str3, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object, .function_length_at_String, .function_substr_at_String, .function_concat_at_String -IO: .word 12, 42, type_str4, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object, .function_in_string_at_IO, .function_out_string_at_IO, .function_in_int_at_IO, .function_out_int_at_IO -Main: .word 12, 42, type_str5, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object, .function_main_at_Main -.text -main: -move $s7 $gp -addi $s7 $s7 300000 - +p_error: .asciiz "Aborting from String" +zero_error: .asciiz "Division by zero" +range_error: .asciiz "Index out of range" diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 6ae3cf472..4b7db6d39 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -57,8 +57,8 @@ def register_instruction(self, instruction): def to_function_name(self, method_name, type_name): return f'function_{method_name}_at_{type_name}' - def register_function(self, function_name, params= [], localvars= []): - function_node = cil.FunctionNode(function_name, params, localvars, []) + def register_function(self, function_name): + function_node = cil.FunctionNode(function_name, [], [], []) self.dotcode.append(function_node) return function_node @@ -81,26 +81,29 @@ def create_ctr(self, class_node, scope): break self.current_function = self.register_function(self.to_function_name('ctor', self.current_type.name)) local_self = self.define_internal_local('self') - self.register_instruction(cil.AllocateNode(self.current_type.name, 'self')) + self.register_instruction(cil.AllocateNode(self.current_type.name, local_self)) for i, attr in enumerate(attrs): set_attr_node = self.visit(attr, scope) set_attr_node.index = i self.register_instruction(set_attr_node) - self.register_instruction(cil.ReturnNode()) + self.register_instruction(cil.ReturnNode(local_self)) def add_builtin_types(self): def build_Object(): type = self.register_type('Object') self.current_type = type - self.current_function = self.register_function(self.to_function_name('abort', self.current_type.name), ['self']) + self.current_function = self.register_function(self.to_function_name('abort', self.current_type.name)) + self.current_function.params.append(cil.ParamNode('self') ) self.register_instruction(cil.AbortNode()) - self.current_function = self.register_function(self.to_function_name('copy', self.current_type.name), ['self']) + self.current_function = self.register_function(self.to_function_name('copy', self.current_type.name)) + self.current_function.params.append(cil.ParamNode('self')) self.register_instruction(cil.CopyNode(1,1)) - self.current_function = self.register_function(self.to_function_name('type_name', self.current_type.name), ['self']) + self.current_function = self.register_function(self.to_function_name('type_name', self.current_type.name)) + self.current_function.params.append(cil.ParamNode('self')) dest = self.define_internal_local() self.register_instruction(cil.TypeOfNode('self', dest)) str_store = self.define_internal_local() @@ -112,7 +115,9 @@ def build_String(): type = self.register_type('String') self.current_type = type - self.current_function = self.register_function(self.to_function_name('concat'), ['self', 'suffix']) + self.current_function = self.register_function(self.to_function_name('concat', self.current_type.name)) + self.current_function.params.append(cil.ParamNode('self')) + self.current_function.params.append(cil.ParamNode('suffix')) dest = self.define_internal_local() # variable para guardar el resultado de la concatenación self.register_instruction(cil.ConcatNode(dest, 'self', 'suffix')) # agregar el nodo concat al ast de las instrucciones str_store = self.define_internal_local() # nueva instancia de string donde guardar el resultado y retornarla @@ -120,7 +125,8 @@ def build_String(): self.register_instruction(cil.SetAttribNode(str_store, 0, dest)) self.register_instruction(cil.ReturnNode(str_store)) - self.current_function = self.register_function(self.to_function_name('length'), ['self']) + self.current_function = self.register_function(self.to_function_name('length', self.current_type.name)) + self.current_function.params.append(cil.ParamNode('self')) dest = self.define_internal_local() self.register_instruction(cil.LengthNode(dest, 'self')) int_store = self.define_internal_local() @@ -128,7 +134,10 @@ def build_String(): self.register_instruction(cil.SetAttribNode(int_store, 0, dest)) self.register_instruction(cil.ReturnNode(int_store)) - self.current_function = self.register_function(self.to_function_name('substr'), ['self', 'index', 'length']) + self.current_function = self.register_function(self.to_function_name('substr', self.current_type.name)) + self.current_function.params.append(cil.ParamNode('self')) + self.current_function.params.append(cil.ParamNode('index')) + self.current_function.params.append(cil.ParamNode('length')) dest = self.define_internal_local() self.register_instruction(cil.SubstringNode(dest, 'self', 'index', 'length')) str_store = self.define_internal_local() @@ -137,15 +146,44 @@ def build_String(): self.register_instruction(cil.ReturnNode(str_store)) def build_IO(): - type = self.register_type('String') + type = self.register_type('IO') self.current_type = type - self.current_function = self.register_function(self.to_function_name('out_string'), ['self', 'str']) - # self.register_instruction(cil.) + self.current_function = self.register_function(self.to_function_name('out_string', self.current_type.name)) + self.current_function.params.append(cil.ParamNode('self')) + self.current_function.params.append(cil.ParamNode('str_addr')) + self.register_instruction(cil.PrintStrNode('str_addr')) + self.register_instruction(cil.ReturnNode('self')) + + self.current_function = self.register_function(self.to_function_name('in_string', self.current_type.name)) + self.current_function.params.append(cil.ParamNode('self')) + dest = self.define_internal_local() + self.register_instruction(cil.ReadStrNode(dest)) + str_store = self.define_internal_local() + self.register_instruction(cil.AllocateNode('String', str_store)) + self.register_instruction(cil.SetAttribNode(str_store, 0, dest)) + self.register_instruction(cil.ReturnNode(str_store)) + + + self.current_function = self.register_function(self.to_function_name('out_int', self.current_type.name)) + self.current_function.params.append(cil.ParamNode('self')) + self.current_function.params.append(cil.ParamNode('int_addr')) + self.register_instruction(cil.PrintIntNode('int_addr')) + self.register_instruction(cil.ReturnNode('self')) + + self.current_function = self.register_function(self.to_function_name('in_int', self.current_type.name)) + self.current_function.params.append(cil.ParamNode('self')) + dest = self.define_internal_local() + self.register_instruction(cil.ReadStrNode(dest)) + int_store = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Int', int_store)) + self.register_instruction(cil.SetAttribNode(int_store, 0, dest)) + self.register_instruction(cil.ReturnNode(int_store)) build_Object() build_String() + build_IO() class COOLToCILVisitor(BaseCOOLToCILVisitor): @visitor.on('node') @@ -171,7 +209,6 @@ def visit(self, node, scope): # node.declarations -> [ ClassDeclarationNode ... ] ###################################################### - # self.add_builtin_types() # class_nodes = [self.class_node_from_context(c) for c in self.context.types] # built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types if c in self.builtin_types] # for built_in_class in built_in_classes: @@ -188,6 +225,7 @@ def visit(self, node, scope): self.register_instruction(cil.StaticCallNode(main_method_name, result)) self.register_instruction(cil.ReturnNode(0)) self.current_function = None + self.add_builtin_types() for declaration, child_scope in zip(node.declarations, scope.children): self.visit(declaration, child_scope) @@ -304,13 +342,13 @@ def visit(self, node, scope): ############################### # if self.current_type.name in self.builtin_types: # return - self.current_method = self.current_type.get_method(node.id, self.current_type, False) + self.current_function = self.current_type.get_method(node.id, self.current_type, False) # Your code here!!! (Handle PARAMS) self.current_function = self.register_function(self.to_function_name(node.id, self.current_type.name)) self.parameters.clear() - self.params.append(cil.ParamNode('self')) + self.current_function.params.append(cil.ParamNode('self')) for arg_name, ptype in node.params: self.parameters.add((arg_name, ptype)) self.params.append(cil.ParamNode(arg_name)) @@ -326,7 +364,7 @@ def visit(self, node, scope): self.register_instruction(cil.AllocateNode("Void", result)) self.register_instruction(cil.ReturnNode(result)) - self.current_method = None + self.current_function = None @visitor.when(VarDeclarationNode) # AssignNode def visit(self, node, scope): diff --git a/tests/codegen/covariance.cl b/tests/codegen/covariance.cl new file mode 100644 index 000000000..8f5ec5e45 --- /dev/null +++ b/tests/codegen/covariance.cl @@ -0,0 +1,26 @@ +class Main { + a : A <- new B; + main(): Int { + { + a <- new B; + a.a(); + } + }; +}; + +class A { + aa : Int <- 101; + a() : Int { + aa + }; +}; + +class B inherits A { + bb : Int <- 102; + a() : Int { + 100 + }; + b() : Int { + bb + }; +}; diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index fbf47aae9..3d6ba7d36 100755 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,26 +1,5 @@ class Main { - a : A <- new B; main(): Int { - { - a <- new B; - a.a(); - } + 12 }; -}; - -class A { - aa : Int <- 101; - a() : Int { - aa - }; -}; - -class B inherits A { - bb : Int <- 102; - a() : Int { - 100 - }; - b() : Int { - bb - }; }; \ No newline at end of file From d17c67b7b2dfc274ee907b7dae41daaf0ed57716 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Thu, 24 Feb 2022 17:37:17 -0500 Subject: [PATCH 58/93] rolled back the semantic checker changes, now it should pass 3/4 of the tests --- src/visitors/Checker.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py index c7b80aa80..7764e4e63 100755 --- a/src/visitors/Checker.py +++ b/src/visitors/Checker.py @@ -143,8 +143,10 @@ def visit(self, node, scope): if expr is not None and not expr.conforms_to(var_type): # self.errors.append(f"Can't convert {expr.name} to {var_type.name}.") self.errors.append(_TypeError %(node.decl_list[iteration].token_list[0].lineno, node.decl_list[iteration].token_list[0].col, f"Infered type {expr.name} of initialization of {_id} does not conform to identifier's declared type {var_type.name}")) - else: - var_type = expr + + ## this else is to assign to the variable the type of the right-side expression, but it doesnt pass the semantic tests this way, f + # else: + # var_type = expr scope.define_variable(_id, var_type) iteration+=1 return self.visit(node.expression, scope.create_child()) @@ -171,7 +173,9 @@ def visit(self, node, scope): if not value_t.conforms_to(attrType): # self.errors.append(f"Can't convert {value_t.name} to {attrType.name}.") self.errors.append(_TypeError %(node.value.token_list[0].lineno, node.value.token_list[0].col, f'Infered type {value_t.name} of initialization of attribute {node.id} does not conform to declared type {attrType.name}')) - attrType = value_t + + ## this is to assign to the variable the type of the right-side expression, but it doesnt pass the semantic tests this way, f + # attrType = value_t else: scope.create_child() From f6b71ced574fa6fae95af351a8ddafa7a65decce Mon Sep 17 00:00:00 2001 From: Yumenio Date: Thu, 24 Feb 2022 21:21:07 -0500 Subject: [PATCH 59/93] IO builtin functions done --- src/__main__.py | 2 +- src/cil_ast/cil_ast.py | 6 +++- src/visitors/CiltoMips.py | 64 +++++++++++++++++++++++++++++++++++++++ src/visitors/CooltoCil.py | 2 +- 4 files changed, 71 insertions(+), 3 deletions(-) diff --git a/src/__main__.py b/src/__main__.py index 4c49258ff..0edff1fe3 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -75,7 +75,7 @@ def main(): if len(sys.argv) > 1: input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] else: - input_file = "./tests/codegen/basic.cl"#"debbuging/tests/Auto/call1.cl" + input_file = "./tests/codegen/hello_world.cl"#"debbuging/tests/Auto/call1.cl" # raise Exception("Incorrect number of arguments") try: program_file = open(input_file) diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 3683ce43e..737516d70 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -219,4 +219,8 @@ def __init__(self, input): class PrintIntNode(): def __init__(self, output): - self.output = output \ No newline at end of file + self.output = output + +class ReadIntNode(): + def __init__(self, input): + self.input = input \ No newline at end of file diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index f6f9ec147..e5932a46a 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -234,6 +234,70 @@ def visit(self, node): def visit(self, node): pass + @visitor.when(AbortNode) + def visit(self, node): + pass + + @visitor.when(CopyNode) + def visit(self, node): + pass + + @visitor.when(PrintStrNode) + def visit(self, node): + self.write_code('## out_string builtin') + self.write_code(f'{o.li} {r.v0}, 4') # syscall print str code, a0 = address of null-terminates string + dest_pos = self.stack_offset(node.output) + self.write_code(f'{o.lw} {r.t0}, {dest_pos}({r.fp})') + self.write_code(f'{o.lw} {r.a0}, 8({r.t0})') + self.write_code(f'{o.syscall}') # syscall with the parameters set + + @visitor.when(ReadStrNode) + def visit(self, node): + self.write_code('## in_string builtin') + self.write_code(f'{o.li} {r.v0}, 9') # syscall code for allocate mem + self.write_code(f'{o.li} {r.a0}, 1024') # buffer size in bytes to allocate + self.write_code(f'{o.syscall}') # stores in v0 address of allocated memory + + # time to set up the actual syscall for read string + self.write_code(f'{o.move} {r.a0}, {r.v0}') # a0 <- v0, a0 = address of input buffer + self.write_code(f'{o.move} {r.v0}, 8') # syscall(8) = read string + self.write_code(f'{o.la} {r.a1}, 1024') # a1 = amount to read, input should be at most n-1 bytes, since last byte is used to null-terminate the stream + self.write_code(f'{o.syscall}') # stores in a0 the data read, if any, an null terminates it + + # gotta add a null character to the input + self.write_code(f'{o.move} {r.t0}, {r.a0}') # t0 <- a0, later used for the address of the last non-null character of the stream to null-terminate it + self.write_code(f'{o.move} {r.a3}, {r.ra}') # store the return address of the current method before calling the length subroutine + self.write_code(f'{o.jal} str_len') # stores in v0 the length+1 of the string, in v1 the v0-th character of the string + self.write_code(f'{o.move} {r.ra}, {r.a3}') #restore the ra address previously saved + self.write_code(f'{o.subu} {r.v0}, {r.v0}, 1') # actual length = v0-1 + self.write_code(f'{o.addu} {r.v1}, {r.v0}, {r.t0}') # v1 = v0 + t0 = address of the last character of the input + self.write_code(f'{o.sb} $0, 0({r.v1})') # null terminate that mf + + dest_pos = self.stack_offset(node.input) + self.write_code(f'{o.move} {r.v0}, {r.t0}') # returns in v0 the address of the received string + self.write_code(f'{o.sw} {r.v0}, {dest_pos}({r.fp})') # store the result in the param variable + + + @visitor.when(PrintIntNode) + def visit(self, node): + self.write_code('## out_int builtin') + self.write_code(f'{o.li} {r.v0}, 1') # syscall print str code, a0 = address of null-terminates string + dest_pos = self.stack_offset(node.output) + self.write_code(f'{o.lw} {r.t0}, {dest_pos}({r.fp})') + self.write_code(f'{o.lw} {r.a0}, 8({r.t0})') + self.write_code(f'{o.syscall}') # syscall with the parameters set + + + @visitor.when(ReadIntNode) + def visit(self, node): + self.write_code('## out_int builtin') + self.write_code(f'{o.li} {r.v0}, 5') # syscall read int code, result stored in v0 + self.write_code(f'{o.syscall}') + + dest_pos = self.stack_offset(node.input) + self.write_code(f'{o.move} {r.t0}, {r.v0}') + self.write_code(f'{o.sw} {r.t0}, {dest_pos}({r.fp})') # stores the result to the corresponding stack value + # Input espacio a reservar en $a0 # Output direccion de memoria reservada en $a0 def mem_alloc(self): diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 4b7db6d39..467d7cc0d 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -174,7 +174,7 @@ def build_IO(): self.current_function = self.register_function(self.to_function_name('in_int', self.current_type.name)) self.current_function.params.append(cil.ParamNode('self')) dest = self.define_internal_local() - self.register_instruction(cil.ReadStrNode(dest)) + self.register_instruction(cil.ReadIntNode(dest)) int_store = self.define_internal_local() self.register_instruction(cil.AllocateNode('Int', int_store)) self.register_instruction(cil.SetAttribNode(int_store, 0, dest)) From 408ec0bc50118008c84b64de4995db5d7cc1c5de Mon Sep 17 00:00:00 2001 From: regnod Date: Thu, 24 Feb 2022 22:14:19 -0500 Subject: [PATCH 60/93] some mip coded --- src/__main__.py | 2 +- src/out | 24 ++-------- src/visitors/CiltoMips.py | 96 ++++++++++++++++++++++++++++++++++++--- tests/codegen/basic.cl | 8 ++-- 4 files changed, 97 insertions(+), 33 deletions(-) diff --git a/src/__main__.py b/src/__main__.py index 4c49258ff..26c422fc9 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -75,7 +75,7 @@ def main(): if len(sys.argv) > 1: input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] else: - input_file = "./tests/codegen/basic.cl"#"debbuging/tests/Auto/call1.cl" + input_file = "./tests/semantic/dispatch6.cl"#"debbuging/tests/Auto/call1.cl" # raise Exception("Incorrect number of arguments") try: program_file = open(input_file) diff --git a/src/out b/src/out index 8fdf2a2b4..c4a7f2c9c 100644 --- a/src/out +++ b/src/out @@ -1,22 +1,4 @@ .data -_abort: .asciiz "Program Aborted" -_zero: .asciiz "0 Division Error" -_substr: .asciiz "Substr Length Error" -_mem: .asciiz "Memory Error" - -buffer: .space 1024 -type_str0: .asciiz "Object" -type_str1: .asciiz "Int" -type_str2: .asciiz "Bool" -type_str3: .asciiz "String" -type_str4: .asciiz "IO" -Object: .word 12, 42, type_str0, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object -Int: .word 12, 42, type_str1, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object -Bool: .word 12, 42, type_str2, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object -String: .word 12, 42, type_str3, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object, .function_length_at_String, .function_substr_at_String, .function_concat_at_String -IO: .word 12, 42, type_str4, .function_abort_at_Object, .function_type_name_at_Object, .function_copy_at_Object, .function_in_string_at_IO, .function_out_string_at_IO, .function_in_int_at_IO, .function_out_int_at_IO -.text -main: -move $s7 $gp -addi $s7 $s7 300000 - +p_error: .asciiz "Aborting from String" +zero_error: .asciiz "Division by zero" +range_error: .asciiz "Index out of range" diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index f6f9ec147..61d378db1 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -3,13 +3,16 @@ from cil_ast.cil_ast import * class CiltoMipsVisitor: - def __init__(self, context): + def __init__(self, context, class_function_lists, class_attributes_lists, class_parents_lists): self.dottypes = [] self.dotdata =[] self.dotcode =[] self.context = context + self.attrs = class_attributes_lists + self.class_functions_list = class_function_lists self.code = [] self.data = [] + self.label_id = 0 self.current_function: FunctionNode = None def stack_offset(self, name): @@ -142,15 +145,69 @@ def visit(self, node): @visitor.when(EqualNode) def visit(self, node): - pass + pos_dest = self.stack_offset(node.dest) + pos_left = self.stack_offset(node.left) + pos_right = self.stack_offset(node.right) + + self.write_code('# equal ') + self.write_code('{} {}, {}({})'.format(o.lw, r.t2, pos_left, r.fp)) + self.write_code('{} {}, {}({})'.format(o.lw, r.t3, pos_right, r.fp)) + + self.write_code('{} {}, 8({})'.format(o.lw, r.a0, r.t2)) + self.write_code('{} {}, 8({})'.format(o.lw, r.a1, r.t3)) + + self.write_code('{} {}, 0 # initialize with 0 '.format(o.li, r.t1)) + label = 'not_equal_label_{}'.format(self.label_id) + self.label_id+=1 + self.write_code('{} {}, {} {} # branch if not equal to label'.format(o.bne, r.a0, r.a1, label)) + self.write_code('{} {}, 1 # change value to 1 if equal'. format(o.li, r.t1)) + self.write_code('{}:'.format(label)) + self.write_code('{} {}, {}({})'.format(o.lw, r.t0, pos_dest, r.fp)) + self.write_code('{} {}, 8({})'.format(o.sw, r.t1, r.t0)) - @visitor.when(LessNode) + @visitor.when(LeqNode) def visit(self, node): - pass + pos_dest = self.stack_offset(node.dest) + pos_left = self.stack_offset(node.left) + pos_right = self.stack_offset(node.right) + + self.write_code('# less than or equal ') + self.write_code('{} {}, {}({})'.format(o.lw, r.t2, pos_left, r.fp)) + self.write_code('{} {}, {}({})'.format(o.lw, r.t3, pos_right, r.fp)) + + self.write_code('{} {}, 8({})'.format(o.lw, r.a0, r.t2)) + self.write_code('{} {}, 8({})'.format(o.lw, r.a1, r.t3)) + + self.write_code('{} {}, 0 # initialize with 0 '.format(o.li, r.t1)) + label = 'not_less_than_ or_equal_label_{}'.format(self.label_id) + self.label_id+=1 + self.write_code('{} {}, {} {} # branch if not less than or equal to label'.format(o.bgt, r.a0, r.a1, label)) + self.write_code('{} {}, 1 # change value to 1 if equal'. format(o.li, r.t1)) + self.write_code('{}:'.format(label)) + self.write_code('{} {}, {}({})'.format(o.lw, r.t0, pos_dest, r.fp)) + self.write_code('{} {}, 8({})'.format(o.sw, r.t1, r.t0)) - @visitor.when(LeqNode) + @visitor.when(LessNode) def visit(self, node): - pass + pos_dest = self.stack_offset(node.dest) + pos_left = self.stack_offset(node.left) + pos_right = self.stack_offset(node.right) + + self.write_code('# less than ') + self.write_code('{} {}, {}({})'.format(o.lw, r.t2, pos_left, r.fp)) + self.write_code('{} {}, {}({})'.format(o.lw, r.t3, pos_right, r.fp)) + + self.write_code('{} {}, 8({})'.format(o.lw, r.a0, r.t2)) + self.write_code('{} {}, 8({})'.format(o.lw, r.a1, r.t3)) + + self.write_code('{} {}, 0 # initialize with 0 '.format(o.li, r.t1)) + label = 'not_less_than_label_{}'.format(self.label_id) + self.label_id+=1 + self.write_code('{} {}, {} {} # branch if not less than to label'.format(o.bge, r.a0, r.a1, label)) + self.write_code('{} {}, 1 # change value to 1 if equal'. format(o.li, r.t1)) + self.write_code('{}:'.format(label)) + self.write_code('{} {}, {}({})'.format(o.lw, r.t0, pos_dest, r.fp)) + self.write_code('{} {}, 8({})'.format(o.sw, r.t1, r.t0)) @visitor.when(GotoNode) def visit(self, node): @@ -175,7 +232,32 @@ def visit(self, node): @visitor.when(AllocateNode) def visit(self, node): - pass + self.write_code('# Allocate ') + sizeof = self.attrs[node.type]*4 + 8 + self.write_code('{} {}, {}, {}'.format(o.addiu, r.a0, r.zero, sizeof)) + self.write_code('{} {}, 9'.format(o.li, r.v0)) + self.write_code('{}'.format(o.syscall)) + + self.write_code('{} {}, {}, {}'.format(o.addi, r.s1, r.zero, r.v0)) + + count = len(self.class_functions_list[node.type]) + sizeof_dispatch = count*4 + self.write_code('{} {}, {}, {}'.format(o.addiu, r.a0, r.zero, sizeof_dispatch)) + self.write_code('{} {}, 9'. format(o.li, r.v0)) + self.write_code('{}'.format(o.syscall)) + + self.write_code('{} {}, {}, {}'.format(o.addu, r.s0, r.zero, r.v0)) + for i in range(count): + self.write_code('{} {}, {}'.format(o.la, r.a0, self.class_functions_list[node.type][i])) + self.write_code('{} {}, {}({})'.format(o.sw, r.a0, 4*i, r.s0)) + self.add('{} {}, 4({})'.format(o.sw, r.s0, r.s1)) + + #class tag + self.add('{} {}, {}'.format(o.la, r.a0, node.type + '_conforms_to')) + self.add('{} {}, 0({})'.format(o.sw, r.a0, r.s1)) + + index = self.stack_pos(node.dest) + self.add('{} {}, {}({})'.format(o.sw, r.s1, index, r.fp)) @visitor.when(TypeOfNode) def visit(self, node): diff --git a/tests/codegen/basic.cl b/tests/codegen/basic.cl index 4e11f7947..53012ef14 100755 --- a/tests/codegen/basic.cl +++ b/tests/codegen/basic.cl @@ -9,11 +9,11 @@ class A : Int{ aa : Int <- 101; a(): Int { aa - }; -}; + } +} class B : Int{ bb : Int <- 102; a(): Int { bb - }; -}; + } +} From 42b18220a8b2237b63b8419d77b0109f927e1a96 Mon Sep 17 00:00:00 2001 From: regnod Date: Thu, 24 Feb 2022 22:36:11 -0500 Subject: [PATCH 61/93] setattrb and getattrb --- src/visitors/CiltoMips.py | 105 ++++++++++++++++++++++---------------- 1 file changed, 61 insertions(+), 44 deletions(-) diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 4e1bd146f..6f7238650 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -224,11 +224,28 @@ def visit(self, node): @visitor.when(GetAttribNode) def visit(self, node): - pass + inst = self.stack_pos(node.inst) + dest = self.stack_pos(node.dest) + self.add('# GetAttrib') + self.add('{} {}, {}({})'.format(o.lw, r.s1, inst, r.fp)) + self.add('{} {}, {}({})'.format(o.lw, r.s0, 4*node.attr + 8, r.s1)) + self.add('{} {}, {}({})'.format(o.sw, r.s0, dest, r.fp)) @visitor.when(SetAttribNode) def visit(self, node): - pass + inst = self.stack_offset(node.inst) + src = self.stack_offset(node.source) + + self.write_code('# SetAttrib') + self.write_code('{} {}, {}({})'.format(o.lw, r.s1, inst, r.fp)) + + if isinstance(node.source, int): + self.write_code('{} {}, {}'.format(o.li, r.s0, node.source)) + + else: + self.write_code('{} {}, {}({})'.format(o.lw, r.s0, src, r.fp)) + + self.add('{} {}, {}({})'.format(o.sw, r.s0, 4*node.attr + 8, r.s1)) @visitor.when(AllocateNode) def visit(self, node): @@ -318,67 +335,67 @@ def visit(self, node): @visitor.when(AbortNode) def visit(self, node): - pass + pass @visitor.when(CopyNode) def visit(self, node): - pass + pass @visitor.when(PrintStrNode) def visit(self, node): - self.write_code('## out_string builtin') - self.write_code(f'{o.li} {r.v0}, 4') # syscall print str code, a0 = address of null-terminates string - dest_pos = self.stack_offset(node.output) - self.write_code(f'{o.lw} {r.t0}, {dest_pos}({r.fp})') - self.write_code(f'{o.lw} {r.a0}, 8({r.t0})') - self.write_code(f'{o.syscall}') # syscall with the parameters set + self.write_code('## out_string builtin') + self.write_code(f'{o.li} {r.v0}, 4') # syscall print str code, a0 = address of null-terminates string + dest_pos = self.stack_offset(node.output) + self.write_code(f'{o.lw} {r.t0}, {dest_pos}({r.fp})') + self.write_code(f'{o.lw} {r.a0}, 8({r.t0})') + self.write_code(f'{o.syscall}') # syscall with the parameters set @visitor.when(ReadStrNode) def visit(self, node): - self.write_code('## in_string builtin') - self.write_code(f'{o.li} {r.v0}, 9') # syscall code for allocate mem - self.write_code(f'{o.li} {r.a0}, 1024') # buffer size in bytes to allocate - self.write_code(f'{o.syscall}') # stores in v0 address of allocated memory + self.write_code('## in_string builtin') + self.write_code(f'{o.li} {r.v0}, 9') # syscall code for allocate mem + self.write_code(f'{o.li} {r.a0}, 1024') # buffer size in bytes to allocate + self.write_code(f'{o.syscall}') # stores in v0 address of allocated memory - # time to set up the actual syscall for read string - self.write_code(f'{o.move} {r.a0}, {r.v0}') # a0 <- v0, a0 = address of input buffer - self.write_code(f'{o.move} {r.v0}, 8') # syscall(8) = read string - self.write_code(f'{o.la} {r.a1}, 1024') # a1 = amount to read, input should be at most n-1 bytes, since last byte is used to null-terminate the stream - self.write_code(f'{o.syscall}') # stores in a0 the data read, if any, an null terminates it + # time to set up the actual syscall for read string + self.write_code(f'{o.move} {r.a0}, {r.v0}') # a0 <- v0, a0 = address of input buffer + self.write_code(f'{o.move} {r.v0}, 8') # syscall(8) = read string + self.write_code(f'{o.la} {r.a1}, 1024') # a1 = amount to read, input should be at most n-1 bytes, since last byte is used to null-terminate the stream + self.write_code(f'{o.syscall}') # stores in a0 the data read, if any, an null terminates it - # gotta add a null character to the input - self.write_code(f'{o.move} {r.t0}, {r.a0}') # t0 <- a0, later used for the address of the last non-null character of the stream to null-terminate it - self.write_code(f'{o.move} {r.a3}, {r.ra}') # store the return address of the current method before calling the length subroutine - self.write_code(f'{o.jal} str_len') # stores in v0 the length+1 of the string, in v1 the v0-th character of the string - self.write_code(f'{o.move} {r.ra}, {r.a3}') #restore the ra address previously saved - self.write_code(f'{o.subu} {r.v0}, {r.v0}, 1') # actual length = v0-1 - self.write_code(f'{o.addu} {r.v1}, {r.v0}, {r.t0}') # v1 = v0 + t0 = address of the last character of the input - self.write_code(f'{o.sb} $0, 0({r.v1})') # null terminate that mf + # gotta add a null character to the input + self.write_code(f'{o.move} {r.t0}, {r.a0}') # t0 <- a0, later used for the address of the last non-null character of the stream to null-terminate it + self.write_code(f'{o.move} {r.a3}, {r.ra}') # store the return address of the current method before calling the length subroutine + self.write_code(f'{o.jal} str_len') # stores in v0 the length+1 of the string, in v1 the v0-th character of the string + self.write_code(f'{o.move} {r.ra}, {r.a3}') #restore the ra address previously saved + self.write_code(f'{o.subu} {r.v0}, {r.v0}, 1') # actual length = v0-1 + self.write_code(f'{o.addu} {r.v1}, {r.v0}, {r.t0}') # v1 = v0 + t0 = address of the last character of the input + self.write_code(f'{o.sb} $0, 0({r.v1})') # null terminate that mf - dest_pos = self.stack_offset(node.input) - self.write_code(f'{o.move} {r.v0}, {r.t0}') # returns in v0 the address of the received string - self.write_code(f'{o.sw} {r.v0}, {dest_pos}({r.fp})') # store the result in the param variable + dest_pos = self.stack_offset(node.input) + self.write_code(f'{o.move} {r.v0}, {r.t0}') # returns in v0 the address of the received string + self.write_code(f'{o.sw} {r.v0}, {dest_pos}({r.fp})') # store the result in the param variable @visitor.when(PrintIntNode) def visit(self, node): - self.write_code('## out_int builtin') - self.write_code(f'{o.li} {r.v0}, 1') # syscall print str code, a0 = address of null-terminates string - dest_pos = self.stack_offset(node.output) - self.write_code(f'{o.lw} {r.t0}, {dest_pos}({r.fp})') - self.write_code(f'{o.lw} {r.a0}, 8({r.t0})') - self.write_code(f'{o.syscall}') # syscall with the parameters set - + self.write_code('## out_int builtin') + self.write_code(f'{o.li} {r.v0}, 1') # syscall print str code, a0 = address of null-terminates string + dest_pos = self.stack_offset(node.output) + self.write_code(f'{o.lw} {r.t0}, {dest_pos}({r.fp})') + self.write_code(f'{o.lw} {r.a0}, 8({r.t0})') + self.write_code(f'{o.syscall}') # syscall with the parameters set + @visitor.when(ReadIntNode) def visit(self, node): - self.write_code('## out_int builtin') - self.write_code(f'{o.li} {r.v0}, 5') # syscall read int code, result stored in v0 - self.write_code(f'{o.syscall}') - - dest_pos = self.stack_offset(node.input) - self.write_code(f'{o.move} {r.t0}, {r.v0}') - self.write_code(f'{o.sw} {r.t0}, {dest_pos}({r.fp})') # stores the result to the corresponding stack value + self.write_code('## out_int builtin') + self.write_code(f'{o.li} {r.v0}, 5') # syscall read int code, result stored in v0 + self.write_code(f'{o.syscall}') + + dest_pos = self.stack_offset(node.input) + self.write_code(f'{o.move} {r.t0}, {r.v0}') + self.write_code(f'{o.sw} {r.t0}, {dest_pos}({r.fp})') # stores the result to the corresponding stack value # Input espacio a reservar en $a0 # Output direccion de memoria reservada en $a0 From 76fc15013e68189d749d351b7aeb73d4867cabf7 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Thu, 24 Feb 2022 22:45:06 -0500 Subject: [PATCH 62/93] added some more info to be retrieved from cil ast --- src/visitors/CiltoMips.py | 14 ++++++++-- src/visitors/CooltoCil.py | 51 ++++++++++++++++++++++++++++++++++-- tests/codegen/hello_world.cl | 12 +++++++-- 3 files changed, 71 insertions(+), 6 deletions(-) diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index e5932a46a..07804f789 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -208,7 +208,10 @@ def visit(self, node): @visitor.when(ReturnNode) def visit(self, node): - pass + stack_ptr = self.stack_offset(node.value) + self.write_code('# ReturnNode') + self.write_code(f'{o.lw} {r.t0}, {stack_ptr}({r.fp})') # t0 <- stack pointer to the value + self.write_code(f'{o.move} {r.v0}, {r.t0}') # return the node value @visitor.when(LoadNode) def visit(self, node): @@ -216,7 +219,14 @@ def visit(self, node): @visitor.when(LengthNode) def visit(self, node): - pass + self.write_code('# LengthNode') + dest_addr = self.stack_offset(node.dest) + string_addr = self.stack_offset(node.string) + self.write_code(f'{o.lw} {r.s0}, {string_addr}({r.fp})') # loads to s0(to keep it through calls) the string address + self.write_code(f'{o.lw} {r.a0}, 8({r.s0})') + self.write_code(f'jal str_len') # jumps to str_len multi-use function, length is stores at v0 + self.write_code(f'{o.sw} {r.v0}, {dest_addr}({r.fp})') + @visitor.when(ConcatNode) def visit(self, node): diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 467d7cc0d..fa11c8c29 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -20,6 +20,10 @@ def __init__(self, context): self.parameters = set() self.instances = [] + self.dfunc = {} + self.cattrs = {} + self.dparents = {'Object': None} + self.builtin_types = ['Object', 'IO', 'Int', 'Bool', 'String'] self.ctrs = {} @@ -58,6 +62,10 @@ def to_function_name(self, method_name, type_name): return f'function_{method_name}_at_{type_name}' def register_function(self, function_name): + try: + self.dfunc[self.current_type.name].append(function_name) + except: + self.dfunc[self.current_type.name] = [function_name] function_node = cil.FunctionNode(function_name, [], [], []) self.dotcode.append(function_node) return function_node @@ -89,9 +97,18 @@ def create_ctr(self, class_node, scope): self.register_instruction(set_attr_node) self.register_instruction(cil.ReturnNode(local_self)) + + def build_prerreq(self, programNode): + functions = {} + attr_counts = {} + parents = {} + def add_builtin_types(self): def build_Object(): type = self.register_type('Object') + self.dparents['Object'] = None + self.cattrs['Object'] = 0 + self.current_type = type self.current_function = self.register_function(self.to_function_name('abort', self.current_type.name)) @@ -113,6 +130,8 @@ def build_Object(): def build_String(): type = self.register_type('String') + self.cattrs['String'] = 1 + self.dparents['String'] = 'Object' self.current_type = type self.current_function = self.register_function(self.to_function_name('concat', self.current_type.name)) @@ -147,6 +166,8 @@ def build_String(): def build_IO(): type = self.register_type('IO') + self.cattrs['IO'] = 0 + self.dparents['IO'] = 'Object' self.current_type = type self.current_function = self.register_function(self.to_function_name('out_string', self.current_type.name)) @@ -180,10 +201,20 @@ def build_IO(): self.register_instruction(cil.SetAttribNode(int_store, 0, dest)) self.register_instruction(cil.ReturnNode(int_store)) + def build_Int(): + self.cattrs['Int'] = 1 + self.dparents['Int'] = 'Object' + + def build_Bool(): + self.cattrs['Bool'] = 1 + self.dparents['Bool'] = 'Object' build_Object() build_String() build_IO() + build_Int() + build_Bool() + class COOLToCILVisitor(BaseCOOLToCILVisitor): @visitor.on('node') @@ -215,7 +246,11 @@ def visit(self, node, scope): # self.visit(built_in_class, scope) - self.current_function = self.register_function('entry') + # self.current_function = self.register_function('entry') + function_node = cil.FunctionNode('entry', [], [], []) + self.dotcode.append(function_node) + self.current_function = function_node + instance = self.define_internal_local() self.instances.append(instance) result = self.define_internal_local() @@ -231,7 +266,12 @@ def visit(self, node, scope): self.visit(declaration, child_scope) self.instances.pop() - return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) + + programNode = cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) + programNode.dfunc = self.dfunc + programNode.cattrs = self.cattrs + programNode.dparents = self.dparents + return programNode @visitor.when(ClassDeclarationNode) def visit(self, node, scope): @@ -243,6 +283,12 @@ def visit(self, node, scope): self.current_type = self.context.get_type(node.id) + if node.parent: + self.dparents[node.id] = node.parent + else: + self.dparents[node.id] = 'Object' + self.cattrs[node.id] = 0 + # Your code here!!! (Handle all the .TYPE section) type_node = self.register_type(node.id) @@ -272,6 +318,7 @@ def visit(self, node, scope): current_type = current_type.parent self.attrs = self.transform_to_keys(type_node, attributes)# type_node.attributes = attributes + self.cattrs[node.id] = len(attributes) type_node.methods = methods self.create_ctr(node, scope) diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index 67d328683..7f12be3d2 100755 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,5 +1,13 @@ class Main { - main(): Int { - 12 + main(): A { + new A }; }; + +class A{ + a: Int <- 0; +}; + +class B inherits A { + b: Int <- 1; +}; \ No newline at end of file From fc9e46327c7fb1aeee533393e00aa5bf91ec5ef0 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Thu, 24 Feb 2022 22:54:36 -0500 Subject: [PATCH 63/93] added properties to cil to mips visitor with the program node --- src/visitors/CiltoMips.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index a4be058c9..23f7902d1 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -3,13 +3,11 @@ from cil_ast.cil_ast import * class CiltoMipsVisitor: - def __init__(self, context, class_function_lists, class_attributes_lists, class_parents_lists): + def __init__(self, context): self.dottypes = [] self.dotdata =[] self.dotcode =[] self.context = context - self.attrs = class_attributes_lists - self.class_functions_list = class_function_lists self.code = [] self.data = [] self.label_id = 0 @@ -34,6 +32,9 @@ def visit(self, node): self.dottypes = node.dottypes self.dotdata = node.dotdata self.dotcode = node.dotcode + self.attrs = node.cattrs + self.functions = node.dfunc + self.parents = node.dparents self.write_data('.data') # initialize the .data segment self.write_data(f'p_error: {dt.asciiz} "Aborting from String"') @@ -240,7 +241,7 @@ def visit(self, node): self.write_code('{} {}, {}, {}'.format(o.addi, r.s1, r.zero, r.v0)) - count = len(self.class_functions_list[node.type]) + count = len(self.functions[node.type]) sizeof_dispatch = count*4 self.write_code('{} {}, {}, {}'.format(o.addiu, r.a0, r.zero, sizeof_dispatch)) self.write_code('{} {}, 9'. format(o.li, r.v0)) @@ -248,7 +249,7 @@ def visit(self, node): self.write_code('{} {}, {}, {}'.format(o.addu, r.s0, r.zero, r.v0)) for i in range(count): - self.write_code('{} {}, {}'.format(o.la, r.a0, self.class_functions_list[node.type][i])) + self.write_code('{} {}, {}'.format(o.la, r.a0, self.functions[node.type][i])) self.write_code('{} {}, {}({})'.format(o.sw, r.a0, 4*i, r.s0)) self.add('{} {}, 4({})'.format(o.sw, r.s0, r.s1)) From 01214065aaf3f95a5a599e13eff91bb5a24030f8 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Fri, 25 Feb 2022 00:57:36 -0500 Subject: [PATCH 64/93] npi --- src/visitors/CooltoCil.py | 26 ++++++++++++++++++++++---- tests/codegen/hello_world.cl | 22 ++++++++++++---------- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index fa11c8c29..66014fdfe 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -472,7 +472,7 @@ def visit(self, node, scope): ############################### error_label = self.define_internal_local() dest = self.define_internal_local() - if node.obj is not None: # dynamic + if node.obj is not None and node.obj.lex != 'self': # dynamic obj = self.visit(node.obj, scope) self.instances.append(obj) if isinstance(node.obj, InstantiateNode): @@ -493,17 +493,35 @@ def visit(self, node, scope): obj_type = obj_type if node.parent == None else node.parent self.register_instruction(cil.DynamicCallNode(local, self.to_function_name(node.method, obj_type), dest)) + self.instances.pop() + self.register_instruction(cil.LabelNode(error_label)) else: # static self.register_instruction(cil.ArgNode(self.instances[-1])) for arg in node.args: self.register_instruction(cil.ArgNode(self.visit(arg, scope))) - self.register_instruction(cil.StaticCallNode(self.to_function_name(node.method, self.current_type.type.name), dest)) + fname = self.get_function_name(self.current_type.name, node.method, self.dottypes[-1].methods, True) + self.register_instruction(cil.StaticCallNode(fname , dest)) - self.register_instruction(cil.LabelNode(error_label)) - self.instances.pop() return dest + def get_function_name(_, type_name, call_name, method_lists, static=True): + if static: + name = None + for method in method_lists: + (m, m_name) = method + if call_name == m: + name = m_name + return name # returns always the last one found, wich should be the overriden one + else: + name = None + for method in method_lists: + (m, m_name) = method + if call_name == m: + spl = m_name.split('_') + if spl[-1] == type_name: + return m_name + @visitor.when(ConstantNumNode) def visit(self, node, scope): ############################### diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index 7f12be3d2..317089a74 100755 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,13 +1,15 @@ -class Main { - main(): A { - new A +class Main inherits IO { + main(): IO { + out_int(12) }; }; -class A{ - a: Int <- 0; -}; - -class B inherits A { - b: Int <- 1; -}; \ No newline at end of file +-- class X { +-- f(a: Int) : Int{ +-- { +-- let a : Int <- 0 in a; +-- a <- 1; +-- a; +-- } +-- }; +-- }; \ No newline at end of file From ff13acbcb8614b7c533275d1e067e3d42f0eb012 Mon Sep 17 00:00:00 2001 From: regnod Date: Fri, 25 Feb 2022 01:05:21 -0500 Subject: [PATCH 65/93] some more mips ... --- .vscode/settings.json | 9 +++ src/visitors/CiltoMips.py | 151 ++++++++++++++++++++++++++++---------- 2 files changed, 123 insertions(+), 37 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 9c1de035f..2e6d987cc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,16 +1,25 @@ { "cSpell.words": [ "addi", + "addiu", + "addu", "alloc", + "argumentos", "asciiz", + "beqz", "bnez", + "cattrs", + "dfunc", "direccion", "dividir", + "dparents", "funciones", "límite", "mult", + "pusieron", "reservada", "reservar", + "subu", "tipe" ] } \ No newline at end of file diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 5ce2592ff..ecd017a80 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -51,21 +51,46 @@ def visit(self, node): @visitor.when(FunctionNode) def visit(self, node): - methods = [ - 'Object_abort', - 'Object_type_name', - 'Object_copy', - 'String_concat', - 'String_substr', - 'String_length', - 'IO_in_int', - 'IO_out_int', - 'IO_in_string', - 'IO_out_string', - ] - if node.fname in methods: - return - pass + # methods = [ + # 'Object_abort', + # 'Object_type_name', + # 'Object_copy', + # 'String_concat', + # 'String_substr', + # 'String_length', + # 'IO_in_int', + # 'IO_out_int', + # 'IO_in_string', + # 'IO_out_string', + # ] + # if node.fname in methods: + # return + + self.current_function = node + self.write_code(function.name + ':') + + #ya se guardaron los argumentos en la pila + #tenemos que guardar espacio para las variables locales + self.write_code('{} {}, {}, -{}'.format(o.addi, r.sp, r.sp, str(4*len(function.localvars)))) + + self.write_code('{} {}, {}, -8'.format(o.addi, r.sp, r.sp)) + self.write_code('{} {}, 4({}) # save $ra'.format(o.sw, r.ra, r.sp)) + self.write_code('{} {}, 0({}) # save $fp'.format(o.sw, r.fp, r.sp)) + + n = 4*(len(function.params) + len(function.localvars) + 1) + self.write_code('{} {}, {}, {}'.format(o.addi, r.fp, r.sp, n)) + + for instruction in function.instructions: + self.visit(instruction) + + + self.write_code('{} {}, 4({}) # restore $ra'.format(o.lw, r.ra, r.sp)) + self.write_code('{} {}, 0({})'.format(o.lw, r.t1, r.sp)) + self.write_code('{} {}, {}, 4'.format(o.addi, r.sp, r.fp)) + self.write_code('{} {}, {} # restore $fp'.format(o.move, r.fp, r.t1)) + + self.write_code('{} {}'.format(o.jr, r.ra)) # and return + self.current_function = None @visitor.when(ParamNode) def visit(self, node): @@ -225,12 +250,12 @@ def visit(self, node): @visitor.when(GetAttribNode) def visit(self, node): - inst = self.stack_pos(node.inst) - dest = self.stack_pos(node.dest) - self.add('# GetAttrib') - self.add('{} {}, {}({})'.format(o.lw, r.s1, inst, r.fp)) - self.add('{} {}, {}({})'.format(o.lw, r.s0, 4*node.attr + 8, r.s1)) - self.add('{} {}, {}({})'.format(o.sw, r.s0, dest, r.fp)) + inst = self.stack_offset(node.inst) + dest = self.stack_offset(node.dest) + self.write_code('# GetAttrib') + self.write_code('{} {}, {}({})'.format(o.lw, r.s1, inst, r.fp)) + self.write_code('{} {}, {}({})'.format(o.lw, r.s0, 4*node.attr + 8, r.s1)) + self.write_code('{} {}, {}({})'.format(o.sw, r.s0, dest, r.fp)) @visitor.when(SetAttribNode) def visit(self, node): @@ -246,7 +271,7 @@ def visit(self, node): else: self.write_code('{} {}, {}({})'.format(o.lw, r.s0, src, r.fp)) - self.add('{} {}, {}({})'.format(o.sw, r.s0, 4*node.attr + 8, r.s1)) + self.write_code('{} {}, {}({})'.format(o.sw, r.s0, 4*node.attr + 8, r.s1)) @visitor.when(AllocateNode) def visit(self, node): @@ -268,18 +293,27 @@ def visit(self, node): for i in range(count): self.write_code('{} {}, {}'.format(o.la, r.a0, self.functions[node.type][i])) self.write_code('{} {}, {}({})'.format(o.sw, r.a0, 4*i, r.s0)) - self.add('{} {}, 4({})'.format(o.sw, r.s0, r.s1)) + self.write_code('{} {}, 4({})'.format(o.sw, r.s0, r.s1)) #class tag - self.add('{} {}, {}'.format(o.la, r.a0, node.type + '_conforms_to')) - self.add('{} {}, 0({})'.format(o.sw, r.a0, r.s1)) + self.write_code('{} {}, {}'.format(o.la, r.a0, node.type + '_conforms_to')) + self.write_code('{} {}, 0({})'.format(o.sw, r.a0, r.s1)) - index = self.stack_pos(node.dest) - self.add('{} {}, {}({})'.format(o.sw, r.s1, index, r.fp)) + index = self.stack_offset(node.dest) + self.write_code('{} {}, {}({})'.format(o.sw, r.s1, index, r.fp)) @visitor.when(TypeOfNode) def visit(self, node): - pass + self.write_code('# TypeOf') + index1 = self.stack_offset(node.obj) + self.write_code('{} {}, {}({})'.format(o.lw, r.s0, index1, r.fp)) + self.write_code('{} {}, 0({})'.format(o.lw, r.t1, r.s0)) + self.write_code('{} {}, 0({})'.format(o.lw, r.t2, r.t1)) + ## $t1 = typeOf + + #el valor esta en $t1 + index = self.stack_offset(node.dest) + self.write_code('{} {}, {}({})'.format(o.sw, r.t2, index, r.fp)) @visitor.when(LabelNode) def visit(self, node): @@ -296,7 +330,10 @@ def visit(self, node): @visitor.when(StaticCallNode) def visit(self, node): - pass + self.add('# Call') + self.add('{} {}'.format(o.jal, node.function)) + pos = self.stack_pos(node.dest) + self.add('{} {}, {}({})'.format(o.sw, r.v0, pos, r.fp)) @visitor.when(DynamicCallNode) def visit(self, node): @@ -304,7 +341,13 @@ def visit(self, node): @visitor.when(ArgNode) def visit(self, node): - pass + self.write_code('# Arg') + self.write_code('{} {}, {}, -4'.format(o.addi, r.sp, r.sp)) + + pos = self.stack_offset(node.name) + + self.write_code('{} {}, {}({})'.format(o.lw, r.t1, pos, r.fp)) + self.write_code('{} {}, 0({})'.format(o.sw, r.t1, r.sp)) @visitor.when(ReturnNode) def visit(self, node): @@ -315,7 +358,11 @@ def visit(self, node): @visitor.when(LoadNode) def visit(self, node): - pass + index = self.stack_offset(node.dest) + self.write_code('# Load') + self.write_code('{} {}, {}'.format(o.la, r.t1, node.msg)) + self.write_code('{} {}, {}({})'.format(o.lw, r.t2, index, r.fp)) #direccion en el heap + self.write_code('{} {}, 8({})'.format(o.sw, r.t1, r.t2)) @visitor.when(LengthNode) def visit(self, node): @@ -324,13 +371,27 @@ def visit(self, node): string_addr = self.stack_offset(node.string) self.write_code(f'{o.lw} {r.s0}, {string_addr}({r.fp})') # loads to s0(to keep it through calls) the string address self.write_code(f'{o.lw} {r.a0}, 8({r.s0})') - self.write_code(f'jal str_len') # jumps to str_len multi-use function, length is stores at v0 + self.write_code(f'{o.jal} str_len') # jumps to str_len multi-use function, length is stores at v0 self.write_code(f'{o.sw} {r.v0}, {dest_addr}({r.fp})') @visitor.when(ConcatNode) def visit(self, node): - pass + self.write_code('# Concat') + str1 = self.stack_offset(node.prefix) + str2 = self.stack_offset(node.sufix) + dest = self.stack_offset(node.dest) + + self.write_code('{} {}, {}({})'.format(o.lw, r.so, str1, r.fp)) + self.write_code('{} {}, 8({})'. format(o.lw, r.a0, r.s0)) + + self.write_code('{} {}, {}({})'.format(o.lw, r.s0, str2, r.fp)) + self.write_code('{} {}, 8({})'.format(o.lw, r.a1, r.s0)) + + self.write_code('{} str_concat'.format(o.jal)) + + #el str esta en $v0 + self.write_code('{} {}, {}({})'.format(o.sw, r.v0, dest, r.fp)) @visitor.when(PrefixNode) def visit(self, node): @@ -338,7 +399,22 @@ def visit(self, node): @visitor.when(SubstringNode) def visit(self, node): - pass + self.write_code('# Substring') + string = self.stack_offset(node.string) + i = self.stack_offset(node.i) + n = self.stack_offset(node.n) + dest = self.stack_offset(node.dest) + self.write_code('{} {}, {}({})'.format(o.lw, r.s0, string, r.fp)) + self.write_code('{} {}, 8({})'.format(o.lw, r.a0, r.s0)) + self.write_code('{} {}, {}({})'.format(o.lw, r.s0, i, r.fp)) + self.write_code('{} {}, 8({})'.format(o.lw, r.a1, r.s0)) + self.write_code('{} {}, {}({})'.format(o.lw, r.s0, n, r.fp)) + self.write_code('{} {}, 8({})'.format(o.lw, r.a2, r.s0)) + + self.write_code('{} str_substring'.format(o.jal)) + + #el str esta en $v0 + self.write_code('{} {}, {}({})'.format(o.sw, r.v0, dest, r.fp)) @visitor.when(ToStrNode) def visit(self, node): @@ -350,7 +426,10 @@ def visit(self, node): @visitor.when(CopyNode) def visit(self, node): - pass + pos_dest = self.stack_pos(node.dest) + pos_source = self.stack_pos(node.source) + self.add('{} {}, {}({})'.format(o.lw, r.t0, pos_source, r.sp)) + self.add('{} {}, {}({})'.format(o.sw, r.t0, pos_dest, r.sp)) @visitor.when(PrintStrNode) def visit(self, node): @@ -387,7 +466,6 @@ def visit(self, node): self.write_code(f'{o.move} {r.v0}, {r.t0}') # returns in v0 the address of the received string self.write_code(f'{o.sw} {r.v0}, {dest_pos}({r.fp})') # store the result in the param variable - @visitor.when(PrintIntNode) def visit(self, node): self.write_code('## out_int builtin') @@ -397,7 +475,6 @@ def visit(self, node): self.write_code(f'{o.lw} {r.a0}, 8({r.t0})') self.write_code(f'{o.syscall}') # syscall with the parameters set - @visitor.when(ReadIntNode) def visit(self, node): self.write_code('## out_int builtin') From 882e69cf8a90a02fe5d9317154efea4ee6045272 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Fri, 25 Feb 2022 04:22:20 -0500 Subject: [PATCH 66/93] generated simple code for out_int and out_string --- out | 781 +++++++++++++++++++++++++++++++++++ src/cil_ast/cil_ast.py | 4 + src/visitors/CiltoMips.py | 353 +++++++++++++++- src/visitors/CooltoCil.py | 34 +- tests/codegen/hello_world.cl | 2 +- 5 files changed, 1144 insertions(+), 30 deletions(-) diff --git a/out b/out index c4a7f2c9c..cab118518 100644 --- a/out +++ b/out @@ -2,3 +2,784 @@ p_error: .asciiz "Aborting from String" zero_error: .asciiz "Division by zero" range_error: .asciiz "Index out of range" +Object_class_name: .asciiz "Object" +String_class_name: .asciiz "String" +IO_class_name: .asciiz "IO" +Int_class_name: .asciiz "Int" +Bool_class_name: .asciiz "Bool" +Main_class_name: .asciiz "Main" +Object_conforms_to: .word Object_class_name +String_conforms_to: .word String_class_name, Object_class_name +IO_conforms_to: .word IO_class_name, Object_class_name +Int_conforms_to: .word Int_class_name, Object_class_name +Bool_conforms_to: .word Bool_class_name, Object_class_name +Main_conforms_to: .word Main_class_name, IO_class_name, Object_class_name +local_main_at_Main_internal_2: .asciiz "Hello world" +.text +.globl main + + str_len: + li $v0,0 + move $v1, $a0 + __lenLoop: + lbu $t1, 0($v1) + beq $t1,$0,__lenExit + addu $v0,$v0,1 + addu $v1,$v1,1 + b __lenLoop + __lenExit: + jr $ra + + str_copy: + lw $a0, -4($fp) + lw $a1, -8($fp) + lw $a2, -12($fp) + + move $v0, $a0 + + str__while_copy: + beqz $a2, str__end_copy + + xor $t0, $t0, $t0 + lb $t0, 0($a1) + sb $t0, 0($a0) + + subu $a2, $a2,1 + addu $a0, $a0,1 + addu $a1, $a1,1 + j str__while_copy + + str__end_copy: + jr $ra + + str_index_error: + li $v0, 4 + la $a0, range_error + syscall + li $v0, 10 + syscall + jr $ra + + str_substring: + # load arguments + move $t5, $a0 + move $t3, $a1 + li $t4, 0 + move $t2, $a2 + + # check for index out of range + move $a3, $ra + jal str_len + move $ra, $a3 + + addu $t6, $t3, $t2 + bgt $t6, $v0, str_index_error + + # create substring + move $a0, $t2 #length + addu $a0, $a0, 1 + li $v0, 9 #make space + syscall + # tenemos en $v0 la direccion del nuevo string + + addu $t5, $t5, $t3 + + subu $sp, $sp, 4 + sw $ra, 0($sp) + subu $sp, $sp, 4 + sw $fp, 0($sp) + move $fp,$sp + subu $sp, $sp, 4 + sw $v0, 0($sp) + subu $sp, $sp, 4 + sw $t5, 0($sp) + subu $sp, $sp, 4 + sw $t2, 0($sp) + + jal str_copy + move $sp,$fp + + lw $fp, 0($sp) + addi $sp,$sp, 4 + + lw $ra, 0($sp) + addi $sp,$sp, 4 + + addu $t9, $v0, $t2 #null terminated + sb $0, 0($t9) + jr $ra + + + #$a0 el prefijo, y en $a1, el str. + + str1_prefix_of_str2: + lb $t0, 0($a0) + lb $t1, 0($a1) + beqz $t0, prefixTrue + bne $t0, $t1, prefixFalse + addu $a0,$a0,1 + addu $a1,$a1,1 + b str1_prefix_of_str2 + prefixFalse: + li $v0, 0 + jr $ra + prefixTrue: + li $v0, 1 + jr $ra + + str_comparer: + move $a0, $a2 + move $a1, $ra + jal str_len #$v0=len(message1) + move $ra, $a1 + + move $s1, $v0 + + move $a0, $a3 + + move $a1, $ra + jal str_len #$v0=len(message2) + move $ra, $a1 + + beq $v0, $s1, string_length_comparer_end + li $v0, 0 + j string_comparer_end + + string_length_comparer_end: + move $a0, $a2 + move $a1, $a3 + move $s1, $ra + jal str1_prefix_of_str2 + move $ra, $s1 + string_comparer_end: + jr $ra + + case_conform: + move $s0, $a0 + move $s1, $a1 + START_CASE_LOOP: + + lw $a1, 0($s0) + + addi $s0, $s0, 4 + + move $t0, $s1 # Address of 1st element in array. + li $v0, 4 # System call code 4 (print_string). + li $t1, 0 # Initialize array offset. + + loop_INTERNAL: + + # Use the address mode label(register). + + lw $a0, 0($t0) # Load value at address str_array + $t1 (offset). + + beq $a0, $a1, END_CASE_LOOP + + addi $t0, $t0, 4 # Next element, i.e., increment offset by 4. + addi $t1, $t1, 4 # Next element, i.e., increment offset by 4. + + # Done or loop once more? + + ble $t1, $a2, loop_INTERNAL + b START_CASE_LOOP + END_CASE_LOOP: + move $v0, $a0 + jr $ra + + str_concat: + move $a3, $ra + jal str_len + move $ra, $a3 + + # guardamos en $t4, la longitud de str1 + move $t4, $v0 + # el str1 + move $t5, $a0 + move $a0, $a1 + move $t8, $a1 + + move $a3, $ra + jal str_len + move $ra, $a3 + + # reservamos espacio para el nuevo string + # guardamos en $t7 la longitud de str2 + move $t7, $v0 + addu $v0, $t4, $v0 + addu $v0, $v0, 1 + move $a0, $v0 + li $v0, 9 + syscall + + # en $t5 esta str1, y en $t8, str2------------------------- + + # save str1 part------------------------------------------ + # push $ra + subu $sp, $sp, 4 + sw $ra, 0($sp) + # push $fp + subu $sp, $sp, 4 + sw $fp, 0($sp) + + move $fp, $sp + + # push dest to copy pointer + subu $sp, $sp, 4 + sw $v0, 0($sp) + + # push copy from + subu $sp, $sp, 4 + sw $t5, 0($sp) + + # push how much to copy + subu $sp, $sp, 4 + sw $t4, 0($sp) + + jal str_copy + + move $sp, $fp + + lw $fp, 0($sp) + addu $sp, $sp, 4 + + lw $ra, 0($sp) + addu $sp, $sp, 4 + + # save str2 part------------- + # push $ra + subu $sp, $sp, 4 + sw $ra, 0($sp) + + # push $fp + subu $sp, $sp, 4 + sw $fp, 0($sp) + + move $fp, $sp + + # push where to copy + move $t9, $v0 + addu $t0, $v0, $t4 + subu $sp, $sp, 4 + sw $t0, 0($sp) + + # push copy from + subu $sp, $sp, 4 + sw $t8, 0($sp) + + subu $sp, $sp, 4 + sw $t7, 0($sp) + + jal str_copy + + move $sp, $fp + + lw $fp, 0($sp) + addu $sp, $sp, 4 + + lw $ra, 0($sp) + addu $sp, $sp, 4 + + addu $v0, $t7, $v0 + sb $0, 0($v0) + + move $v0, $t9 + jr $ra + +main: +addi $sp, $sp, -8 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 12 +# Allocate +addiu $a0, $zero, 8 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 32 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +la $a0, function_in_string_at_IO +sw $a0, 12($s0) +la $a0, function_out_string_at_IO +sw $a0, 16($s0) +la $a0, function_in_int_at_IO +sw $a0, 20($s0) +la $a0, function_out_int_at_IO +sw $a0, 24($s0) +la $a0, function_main_at_Main +sw $a0, 28($s0) +sw $s0, 4($s1) +la $a0, Main_conforms_to +sw $a0, 0($s1) +sw $s1, 0($fp) +# Arg +addi $sp, $sp, -4 +lw $t1, 0($fp) +sw $t1, 0($sp) +# Call +jal function_main_at_Main +sw $v0, -4($fp) +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_abort_at_Object: +addi $sp, $sp, -0 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 8 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_copy_at_Object: +addi $sp, $sp, -0 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 8 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_type_name_at_Object: +addi $sp, $sp, -8 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 16 +# TypeOf +lw $s0, 0($fp) +lw $t1, 0($s0) +lw $t2, 0($t1) +sw $t2, -4($fp) +# Allocate +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 24 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +la $a0, function_length_at_String +sw $a0, 12($s0) +la $a0, function_substr_at_String +sw $a0, 16($s0) +la $a0, function_concat_at_String +sw $a0, 20($s0) +sw $s0, 4($s1) +la $a0, String_conforms_to +sw $a0, 0($s1) +sw $s1, -8($fp) +# SetAttrib +lw $s1, -8($fp) +lw $s0, -4($fp) +sw $s0, 8($s1) +# ReturnNode +lw $t0, -8($fp) +move $v0, $t0 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_concat_at_String: +addi $sp, $sp, -8 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 20 +# Concat +lw $s0, 0($fp) +lw $a0, 8($s0) +lw $s0, -4($fp) +lw $a1, 8($s0) +jal str_concat +sw $v0, -8($fp) +# Allocate +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 24 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +la $a0, function_length_at_String +sw $a0, 12($s0) +la $a0, function_substr_at_String +sw $a0, 16($s0) +la $a0, function_concat_at_String +sw $a0, 20($s0) +sw $s0, 4($s1) +la $a0, String_conforms_to +sw $a0, 0($s1) +sw $s1, -12($fp) +# SetAttrib +lw $s1, -12($fp) +lw $s0, -8($fp) +sw $s0, 8($s1) +# ReturnNode +lw $t0, -12($fp) +move $v0, $t0 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_length_at_String: +addi $sp, $sp, -8 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 16 +# LengthNode +lw $s0, 0($fp) +lw $a0, 8($s0) +jal str_len +sw $v0, -4($fp) +# Allocate +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +sw $s0, 4($s1) +la $a0, Int_conforms_to +sw $a0, 0($s1) +sw $s1, -8($fp) +# SetAttrib +lw $s1, -8($fp) +lw $s0, -4($fp) +sw $s0, 8($s1) +# ReturnNode +lw $t0, -8($fp) +move $v0, $t0 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_substr_at_String: +addi $sp, $sp, -8 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 24 +# Substring +lw $s0, 0($fp) +lw $a0, 8($s0) +lw $s0, -4($fp) +lw $a1, 8($s0) +lw $s0, -8($fp) +lw $a2, 8($s0) +jal str_substring +sw $v0, -12($fp) +# Allocate +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 24 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +la $a0, function_length_at_String +sw $a0, 12($s0) +la $a0, function_substr_at_String +sw $a0, 16($s0) +la $a0, function_concat_at_String +sw $a0, 20($s0) +sw $s0, 4($s1) +la $a0, String_conforms_to +sw $a0, 0($s1) +sw $s1, -16($fp) +# SetAttrib +lw $s1, -16($fp) +lw $s0, -12($fp) +sw $s0, 8($s1) +# ReturnNode +lw $t0, -16($fp) +move $v0, $t0 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_out_string_at_IO: +addi $sp, $sp, -0 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 12 +## out_string builtin +li $v0, 4 +lw $t0, -4($fp) +lw $a0, 8($t0) +syscall +# ReturnNode +lw $t0, 0($fp) +move $v0, $t0 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_in_string_at_IO: +addi $sp, $sp, -8 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 16 +## in_string builtin +li $v0, 9 +li $a0, 1024 +syscall +move $a0, $v0 +li $v0, 8 +la $a1, 1024 +syscall +move $t0, $a0 +move $a3, $ra +jal str_len +move $ra, $a3 +subu $v0, $v0, 1 +addu $v1, $v0, $t0 +sb $0, 0($v1) +move $v0, $t0 +sw $v0, -4($fp) +# Allocate +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 24 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +la $a0, function_length_at_String +sw $a0, 12($s0) +la $a0, function_substr_at_String +sw $a0, 16($s0) +la $a0, function_concat_at_String +sw $a0, 20($s0) +sw $s0, 4($s1) +la $a0, String_conforms_to +sw $a0, 0($s1) +sw $s1, -8($fp) +# SetAttrib +lw $s1, -8($fp) +lw $s0, -4($fp) +sw $s0, 8($s1) +# ReturnNode +lw $t0, -8($fp) +move $v0, $t0 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_out_int_at_IO: +addi $sp, $sp, -0 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 12 +## out_int builtin +li $v0, 1 +lw $t0, -4($fp) +lw $a0, 8($t0) +syscall +# ReturnNode +lw $t0, 0($fp) +move $v0, $t0 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_in_int_at_IO: +addi $sp, $sp, -8 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 16 +## out_int builtin +li $v0, 5 +syscall +move $t0, $v0 +sw $t0, -4($fp) +# Allocate +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +sw $s0, 4($s1) +la $a0, Int_conforms_to +sw $a0, 0($s1) +sw $s1, -8($fp) +# SetAttrib +lw $s1, -8($fp) +lw $s0, -4($fp) +sw $s0, 8($s1) +# ReturnNode +lw $t0, -8($fp) +move $v0, $t0 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_ctor_at_Main: +addi $sp, $sp, -4 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 8 +# Allocate +addiu $a0, $zero, 8 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 32 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +la $a0, function_in_string_at_IO +sw $a0, 12($s0) +la $a0, function_out_string_at_IO +sw $a0, 16($s0) +la $a0, function_in_int_at_IO +sw $a0, 20($s0) +la $a0, function_out_int_at_IO +sw $a0, 24($s0) +la $a0, function_main_at_Main +sw $a0, 28($s0) +sw $s0, 4($s1) +la $a0, Main_conforms_to +sw $a0, 0($s1) +sw $s1, 0($fp) +# ReturnNode +lw $t0, 0($fp) +move $v0, $t0 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_main_at_Main: +addi $sp, $sp, -12 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 20 +# Arg +addi $sp, $sp, -4 +lw $t1, 0($fp) +sw $t1, 0($sp) +# Allocate +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 24 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +la $a0, function_length_at_String +sw $a0, 12($s0) +la $a0, function_substr_at_String +sw $a0, 16($s0) +la $a0, function_concat_at_String +sw $a0, 20($s0) +sw $s0, 4($s1) +la $a0, String_conforms_to +sw $a0, 0($s1) +sw $s1, -12($fp) +# Load +la $t1, local_main_at_Main_internal_2 +lw $t2, -12($fp) +sw $t1, 8($t2) +# Arg +addi $sp, $sp, -4 +lw $t1, -12($fp) +sw $t1, 0($sp) +# Call +jal function_out_string_at_IO +sw $v0, -8($fp) +# ReturnNode +lw $t0, -8($fp) +move $v0, $t0 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 737516d70..941dd1ca5 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -166,6 +166,10 @@ class ReturnNode(InstructionNode): def __init__(self, value=None): self.value = value +class ExitNode(InstructionNode): + def __init__(self): + pass + class LoadNode(InstructionNode): def __init__(self, dest, msg): self.dest = dest diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index ecd017a80..d9db3aa79 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -12,17 +12,42 @@ def __init__(self, context): self.data = [] self.label_id = 0 self.current_function: FunctionNode = None - + self.conform = {} def stack_offset(self, name): - all_ = self.current_function.params + self.current_function.localvars - return -4*all_.index(name) - + try: + all_ = [] + for i in self.current_function.params: + if isinstance(i, ParamNode): + all_.append(i.name) + else: + all_.append(i) + for i in self.current_function.localvars: + if isinstance(i, LocalNode): + all_.append(i.name) + else: + all_.append(i) + return -4*all_.index(name) + except: + a = 0 + return 0 def write_data(self, instruction): self.data.append(instruction) def write_code(self, instruction): self.code.append(instruction) + def compute_parents(self, inherit): + self.conform['Object'] = ['Object'] + class_list = [] + for c, _ in inherit.items(): + self.conform[c] = [c] + class_list.append(c) + for c in class_list: + current = c + while not current == 'Object': + self.conform[c].append(inherit[current]) + current = inherit[current] + @visitor.on('node') def visit(self, node): pass @@ -35,12 +60,302 @@ def visit(self, node): self.attrs = node.cattrs self.functions = node.dfunc self.parents = node.dparents + self.compute_parents(self.parents) self.write_data('.data') # initialize the .data segment self.write_data(f'p_error: {dt.asciiz} "Aborting from String"') self.write_data(f'zero_error: {dt.asciiz} "Division by zero"') self.write_data(f'range_error: {dt.asciiz} "Index out of range"') + for c in self.attrs: + self.write_data(c + '_class_name' + ': .asciiz "' + c + '"') + + for c, conform_list in self.conform.items(): + line = c + '_conforms_to: .word '+ conform_list[0] + '_class_name' + n = len(conform_list) + for i in range(1, n): line += ', ' + conform_list[i] + '_class_name' + self.write_data(line) + + for usr_data in self.dotdata: + data_addr = usr_data.name + data_value = usr_data.value + self.write_data('{}: {} {}'.format(usr_data.name, dt.asciiz, usr_data.value)) + + self.write_code('.text') + self.write_code('.globl main') + self.write_code(''' + str_len: + li $v0,0 + move $v1, $a0 + __lenLoop: + lbu $t1, 0($v1) + beq $t1,$0,__lenExit + addu $v0,$v0,1 + addu $v1,$v1,1 + b __lenLoop + __lenExit: + jr $ra + + str_copy: + lw $a0, -4($fp) + lw $a1, -8($fp) + lw $a2, -12($fp) + + move $v0, $a0 + + str__while_copy: + beqz $a2, str__end_copy + + xor $t0, $t0, $t0 + lb $t0, 0($a1) + sb $t0, 0($a0) + + subu $a2, $a2,1 + addu $a0, $a0,1 + addu $a1, $a1,1 + j str__while_copy + + str__end_copy: + jr $ra + + str_index_error: + li $v0, 4 + la $a0, range_error + syscall + li $v0, 10 + syscall + jr $ra + + str_substring: + # load arguments + move $t5, $a0 + move $t3, $a1 + li $t4, 0 + move $t2, $a2 + + # check for index out of range + move $a3, $ra + jal str_len + move $ra, $a3 + + addu $t6, $t3, $t2 + bgt $t6, $v0, str_index_error + + # create substring + move $a0, $t2 #length + addu $a0, $a0, 1 + li $v0, 9 #make space + syscall + # tenemos en $v0 la direccion del nuevo string + + addu $t5, $t5, $t3 + + subu $sp, $sp, 4 + sw $ra, 0($sp) + subu $sp, $sp, 4 + sw $fp, 0($sp) + move $fp,$sp + subu $sp, $sp, 4 + sw $v0, 0($sp) + subu $sp, $sp, 4 + sw $t5, 0($sp) + subu $sp, $sp, 4 + sw $t2, 0($sp) + + jal str_copy + move $sp,$fp + + lw $fp, 0($sp) + addi $sp,$sp, 4 + + lw $ra, 0($sp) + addi $sp,$sp, 4 + + addu $t9, $v0, $t2 #null terminated + sb $0, 0($t9) + jr $ra + + + #$a0 el prefijo, y en $a1, el str. + + str1_prefix_of_str2: + lb $t0, 0($a0) + lb $t1, 0($a1) + beqz $t0, prefixTrue + bne $t0, $t1, prefixFalse + addu $a0,$a0,1 + addu $a1,$a1,1 + b str1_prefix_of_str2 + prefixFalse: + li $v0, 0 + jr $ra + prefixTrue: + li $v0, 1 + jr $ra + + str_comparer: + move $a0, $a2 + move $a1, $ra + jal str_len #$v0=len(message1) + move $ra, $a1 + + move $s1, $v0 + + move $a0, $a3 + + move $a1, $ra + jal str_len #$v0=len(message2) + move $ra, $a1 + + beq $v0, $s1, string_length_comparer_end + li $v0, 0 + j string_comparer_end + + string_length_comparer_end: + move $a0, $a2 + move $a1, $a3 + move $s1, $ra + jal str1_prefix_of_str2 + move $ra, $s1 + string_comparer_end: + jr $ra + + case_conform: + move $s0, $a0 + move $s1, $a1 + START_CASE_LOOP: + + lw $a1, 0($s0) + + addi $s0, $s0, 4 + + move $t0, $s1 # Address of 1st element in array. + li $v0, 4 # System call code 4 (print_string). + li $t1, 0 # Initialize array offset. + + loop_INTERNAL: + + # Use the address mode label(register). + + lw $a0, 0($t0) # Load value at address str_array + $t1 (offset). + + beq $a0, $a1, END_CASE_LOOP + + addi $t0, $t0, 4 # Next element, i.e., increment offset by 4. + addi $t1, $t1, 4 # Next element, i.e., increment offset by 4. + + # Done or loop once more? + + ble $t1, $a2, loop_INTERNAL + b START_CASE_LOOP + END_CASE_LOOP: + move $v0, $a0 + jr $ra + + str_concat: + move $a3, $ra + jal str_len + move $ra, $a3 + + # guardamos en $t4, la longitud de str1 + move $t4, $v0 + # el str1 + move $t5, $a0 + move $a0, $a1 + move $t8, $a1 + + move $a3, $ra + jal str_len + move $ra, $a3 + + # reservamos espacio para el nuevo string + # guardamos en $t7 la longitud de str2 + move $t7, $v0 + addu $v0, $t4, $v0 + addu $v0, $v0, 1 + move $a0, $v0 + li $v0, 9 + syscall + + # en $t5 esta str1, y en $t8, str2------------------------- + + # save str1 part------------------------------------------ + # push $ra + subu $sp, $sp, 4 + sw $ra, 0($sp) + # push $fp + subu $sp, $sp, 4 + sw $fp, 0($sp) + + move $fp, $sp + + # push dest to copy pointer + subu $sp, $sp, 4 + sw $v0, 0($sp) + + # push copy from + subu $sp, $sp, 4 + sw $t5, 0($sp) + + # push how much to copy + subu $sp, $sp, 4 + sw $t4, 0($sp) + + jal str_copy + + move $sp, $fp + + lw $fp, 0($sp) + addu $sp, $sp, 4 + + lw $ra, 0($sp) + addu $sp, $sp, 4 + + # save str2 part------------- + # push $ra + subu $sp, $sp, 4 + sw $ra, 0($sp) + + # push $fp + subu $sp, $sp, 4 + sw $fp, 0($sp) + + move $fp, $sp + + # push where to copy + move $t9, $v0 + addu $t0, $v0, $t4 + subu $sp, $sp, 4 + sw $t0, 0($sp) + + # push copy from + subu $sp, $sp, 4 + sw $t8, 0($sp) + + subu $sp, $sp, 4 + sw $t7, 0($sp) + + jal str_copy + + move $sp, $fp + + lw $fp, 0($sp) + addu $sp, $sp, 4 + + lw $ra, 0($sp) + addu $sp, $sp, 4 + + addu $v0, $t7, $v0 + sb $0, 0($v0) + + move $v0, $t9 + jr $ra + ''') + + for c in self.dotcode: + self.visit(c) + + @visitor.when(TypeNode) def visit(self, node): pass @@ -67,20 +382,20 @@ def visit(self, node): # return self.current_function = node - self.write_code(function.name + ':') + self.write_code(node.name + ':') #ya se guardaron los argumentos en la pila #tenemos que guardar espacio para las variables locales - self.write_code('{} {}, {}, -{}'.format(o.addi, r.sp, r.sp, str(4*len(function.localvars)))) + self.write_code('{} {}, {}, -{}'.format(o.addi, r.sp, r.sp, str(4*len(node.localvars)))) self.write_code('{} {}, {}, -8'.format(o.addi, r.sp, r.sp)) self.write_code('{} {}, 4({}) # save $ra'.format(o.sw, r.ra, r.sp)) self.write_code('{} {}, 0({}) # save $fp'.format(o.sw, r.fp, r.sp)) - n = 4*(len(function.params) + len(function.localvars) + 1) + n = 4*(len(node.params) + len(node.localvars) + 1) self.write_code('{} {}, {}, {}'.format(o.addi, r.fp, r.sp, n)) - for instruction in function.instructions: + for instruction in node.instructions: self.visit(instruction) @@ -260,7 +575,6 @@ def visit(self, node): @visitor.when(SetAttribNode) def visit(self, node): inst = self.stack_offset(node.inst) - src = self.stack_offset(node.source) self.write_code('# SetAttrib') self.write_code('{} {}, {}({})'.format(o.lw, r.s1, inst, r.fp)) @@ -269,6 +583,7 @@ def visit(self, node): self.write_code('{} {}, {}'.format(o.li, r.s0, node.source)) else: + src = self.stack_offset(node.source) self.write_code('{} {}, {}({})'.format(o.lw, r.s0, src, r.fp)) self.write_code('{} {}, {}({})'.format(o.sw, r.s0, 4*node.attr + 8, r.s1)) @@ -281,7 +596,7 @@ def visit(self, node): self.write_code('{} {}, 9'.format(o.li, r.v0)) self.write_code('{}'.format(o.syscall)) - self.write_code('{} {}, {}, {}'.format(o.addi, r.s1, r.zero, r.v0)) + self.write_code('{} {}, {}, {}'.format(o.addu, r.s1, r.zero, r.v0)) count = len(self.functions[node.type]) sizeof_dispatch = count*4 @@ -330,10 +645,10 @@ def visit(self, node): @visitor.when(StaticCallNode) def visit(self, node): - self.add('# Call') - self.add('{} {}'.format(o.jal, node.function)) - pos = self.stack_pos(node.dest) - self.add('{} {}, {}({})'.format(o.sw, r.v0, pos, r.fp)) + self.write_code('# Call') + self.write_code('{} {}'.format(o.jal, node.function)) + pos = self.stack_offset(node.dest) + self.write_code('{} {}, {}({})'.format(o.sw, r.v0, pos, r.fp)) @visitor.when(DynamicCallNode) def visit(self, node): @@ -360,7 +675,7 @@ def visit(self, node): def visit(self, node): index = self.stack_offset(node.dest) self.write_code('# Load') - self.write_code('{} {}, {}'.format(o.la, r.t1, node.msg)) + self.write_code('{} {}, {}'.format(o.la, r.t1, node.msg.name)) self.write_code('{} {}, {}({})'.format(o.lw, r.t2, index, r.fp)) #direccion en el heap self.write_code('{} {}, 8({})'.format(o.sw, r.t1, r.t2)) @@ -382,7 +697,7 @@ def visit(self, node): str2 = self.stack_offset(node.sufix) dest = self.stack_offset(node.dest) - self.write_code('{} {}, {}({})'.format(o.lw, r.so, str1, r.fp)) + self.write_code('{} {}, {}({})'.format(o.lw, r.s0, str1, r.fp)) self.write_code('{} {}, 8({})'. format(o.lw, r.a0, r.s0)) self.write_code('{} {}, {}({})'.format(o.lw, r.s0, str2, r.fp)) @@ -426,8 +741,8 @@ def visit(self, node): @visitor.when(CopyNode) def visit(self, node): - pos_dest = self.stack_pos(node.dest) - pos_source = self.stack_pos(node.source) + pos_dest = self.stack_offset(node.dest) + pos_source = self.stack_offset(node.source) self.add('{} {}, {}({})'.format(o.lw, r.t0, pos_source, r.sp)) self.add('{} {}, {}({})'.format(o.sw, r.t0, pos_dest, r.sp)) @@ -449,7 +764,7 @@ def visit(self, node): # time to set up the actual syscall for read string self.write_code(f'{o.move} {r.a0}, {r.v0}') # a0 <- v0, a0 = address of input buffer - self.write_code(f'{o.move} {r.v0}, 8') # syscall(8) = read string + self.write_code(f'{o.li} {r.v0}, 8') # syscall(8) = read string self.write_code(f'{o.la} {r.a1}, 1024') # a1 = amount to read, input should be at most n-1 bytes, since last byte is used to null-terminate the stream self.write_code(f'{o.syscall}') # stores in a0 the data read, if any, an null terminates it diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 66014fdfe..cefb57c7d 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -62,10 +62,10 @@ def to_function_name(self, method_name, type_name): return f'function_{method_name}_at_{type_name}' def register_function(self, function_name): - try: - self.dfunc[self.current_type.name].append(function_name) - except: - self.dfunc[self.current_type.name] = [function_name] + # try: + # self.dfunc[self.current_type.name].append(function_name) + # except: + # self.dfunc[self.current_type.name] = [function_name] function_node = cil.FunctionNode(function_name, [], [], []) self.dotcode.append(function_node) return function_node @@ -108,8 +108,8 @@ def build_Object(): type = self.register_type('Object') self.dparents['Object'] = None self.cattrs['Object'] = 0 - self.current_type = type + self.dfunc['Object'] = ['function_abort_at_Object', 'function_type_name_at_Object', 'function_copy_at_Object'] self.current_function = self.register_function(self.to_function_name('abort', self.current_type.name)) self.current_function.params.append(cil.ParamNode('self') ) @@ -117,7 +117,8 @@ def build_Object(): self.current_function = self.register_function(self.to_function_name('copy', self.current_type.name)) self.current_function.params.append(cil.ParamNode('self')) - self.register_instruction(cil.CopyNode(1,1)) + self.register_instruction(cil.AbortNode()) + # self.register_instruction(cil.CopyNode(1,1)) self.current_function = self.register_function(self.to_function_name('type_name', self.current_type.name)) self.current_function.params.append(cil.ParamNode('self')) @@ -133,6 +134,7 @@ def build_String(): self.cattrs['String'] = 1 self.dparents['String'] = 'Object' self.current_type = type + self.dfunc['String'] = ['function_abort_at_Object', 'function_type_name_at_Object', 'function_copy_at_Object', 'function_length_at_String', 'function_substr_at_String', 'function_concat_at_String' ] self.current_function = self.register_function(self.to_function_name('concat', self.current_type.name)) self.current_function.params.append(cil.ParamNode('self')) @@ -169,6 +171,7 @@ def build_IO(): self.cattrs['IO'] = 0 self.dparents['IO'] = 'Object' self.current_type = type + self.dfunc['IO'] = ['function_abort_at_Object', 'function_type_name_at_Object', 'function_copy_at_Object', 'function_in_string_at_IO', 'function_out_string_at_IO', 'function_in_int_at_IO', 'function_out_int_at_IO'] self.current_function = self.register_function(self.to_function_name('out_string', self.current_type.name)) self.current_function.params.append(cil.ParamNode('self')) @@ -202,12 +205,16 @@ def build_IO(): self.register_instruction(cil.ReturnNode(int_store)) def build_Int(): + type = self.register_type('Int') self.cattrs['Int'] = 1 self.dparents['Int'] = 'Object' + self.dfunc['Int'] = ['function_abort_at_Object', 'function_type_name_at_Object', 'function_copy_at_Object'] def build_Bool(): + type = self.register_type('Bool') self.cattrs['Bool'] = 1 self.dparents['Bool'] = 'Object' + self.dfunc['Bool'] = ['function_abort_at_Object', 'function_type_name_at_Object', 'function_copy_at_Object'] build_Object() build_String() @@ -247,18 +254,22 @@ def visit(self, node, scope): # self.current_function = self.register_function('entry') - function_node = cil.FunctionNode('entry', [], [], []) + function_node = cil.FunctionNode('main', [], [], []) self.dotcode.append(function_node) self.current_function = function_node - instance = self.define_internal_local() + vinfo = VariableInfo(f'local_main_internal_{len(self.localvars)}',None) + local_node = cil.LocalNode(vinfo.name) + self.localvars.append(local_node) + + instance = vinfo.name self.instances.append(instance) result = self.define_internal_local() main_method_name = self.to_function_name('main', 'Main') self.register_instruction(cil.AllocateNode('Main', instance)) self.register_instruction(cil.ArgNode(instance)) self.register_instruction(cil.StaticCallNode(main_method_name, result)) - self.register_instruction(cil.ReturnNode(0)) + self.register_instruction(cil.ExitNode()) self.current_function = None self.add_builtin_types() @@ -320,6 +331,7 @@ def visit(self, node, scope): self.attrs = self.transform_to_keys(type_node, attributes)# type_node.attributes = attributes self.cattrs[node.id] = len(attributes) type_node.methods = methods + self.dfunc[node.id] = [i[1] for i in methods] self.create_ctr(node, scope) # attributes @@ -395,7 +407,7 @@ def visit(self, node, scope): self.current_function = self.register_function(self.to_function_name(node.id, self.current_type.name)) self.parameters.clear() - self.current_function.params.append(cil.ParamNode('self')) + self.current_function.params.append(cil.ParamNode(self.instances[-1])) for arg_name, ptype in node.params: self.parameters.add((arg_name, ptype)) self.params.append(cil.ParamNode(arg_name)) @@ -801,6 +813,8 @@ def visit(self, node, scope): def visit(self, node, scope): data_node = self.register_data(node.lex) var = self.define_internal_local() + data_node.name = var + self.register_instruction(cil.AllocateNode('String', var)) self.register_instruction(cil.LoadNode(var, data_node)) return data_node.name diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index 317089a74..28b2be96b 100755 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,6 +1,6 @@ class Main inherits IO { main(): IO { - out_int(12) + out_string("Hello world") }; }; From c3a2ad8e0c5b959f8ecedcec4191d4b39932df32 Mon Sep 17 00:00:00 2001 From: regnod Date: Fri, 25 Feb 2022 04:23:36 -0500 Subject: [PATCH 67/93] more of mips --- src/visitors/CiltoMips.py | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index ecd017a80..567bdcc1c 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -102,7 +102,17 @@ def visit(self, node): @visitor.when(AssignNode) def visit(self, node): - pass + src = self.stack_pos(node.source) + dest = self.stack_pos(node.dest) + + self.write_code('# Assign ') + self.write_code('{} {}, {}({})'.format(o.lw, r.t0, src, r.fp)) + self.write_code('{} {}, {}({})'.format(o.lw, r.t1, dest, r.fp)) + + n = self.attributes[node.type] + for i in range(n): + self.write_code('{} {}, {}({})'.format(o.lw, r.s0, 4*(i+2), r.t0)) + self.write_code('{} {}, {}({})'.format(o.sw, r.s0, 4*(i+2), r.t1)) @visitor.when(PlusNode) def visit(self, node): @@ -281,7 +291,7 @@ def visit(self, node): self.write_code('{} {}, 9'.format(o.li, r.v0)) self.write_code('{}'.format(o.syscall)) - self.write_code('{} {}, {}, {}'.format(o.addi, r.s1, r.zero, r.v0)) + self.write_code('{} {}, {}, {}'.format(o.addu, r.s1, r.zero, r.v0)) count = len(self.functions[node.type]) sizeof_dispatch = count*4 @@ -329,15 +339,27 @@ def visit(self, node): pass @visitor.when(StaticCallNode) - def visit(self, node): - self.add('# Call') - self.add('{} {}'.format(o.jal, node.function)) - pos = self.stack_pos(node.dest) - self.add('{} {}, {}({})'.format(o.sw, r.v0, pos, r.fp)) + def visit(self, node): + self.write_code('# Static Call') + self.write_code('{} {}'.format(o.jal, node.function)) + pos = self.stack_offset(node.dest) + self.write_code('{} {}, {}({})'.format(o.sw, r.v0, pos, r.fp)) @visitor.when(DynamicCallNode) def visit(self, node): - pass + self.add('# Dynamic_Call') + + _type = self.stack_offset(node.type) + method = self.functions[node.type].index(node.method) + dest = self.stack_offset(node.dest) + + self.write_code('{} {}, {}({})'.format(o.lw, r.t0, _type, r.fp)) # Dir en el heap + self.write_code('{} {}, 4({})'.format(o.lw, r.a0, r.t0)) # Dispatch pointer + self.write_code('{} {}, {}({})'.format(o.lw, r.a1, 4*method, r.a0)) # Load function + + self.write_code('{} {}'.format(o.jalr, r.a1)) + + self.write_code('{} {}, {}({})'.format(o.sw, r.v0, dest, r.fp)) @visitor.when(ArgNode) def visit(self, node): From 98e4eb6da1e814926207ddf11bdbcf6eb0acbe1d Mon Sep 17 00:00:00 2001 From: Yumenio Date: Fri, 25 Feb 2022 21:19:25 -0500 Subject: [PATCH 68/93] last commit before failin the tests :D --- src/cil_ast/cil_ast.py | 6 +- src/pipeline.py | 3 +- src/visitors/CiltoMips.py | 50 +- src/visitors/CooltoCil.py | 52 +- src/visitors/{CooltoCil2.py => CooltoCilA.py} | 37 +- src/visitors/CooltoCilM.py | 900 ++++++++++++++++++ 6 files changed, 1002 insertions(+), 46 deletions(-) rename src/visitors/{CooltoCil2.py => CooltoCilA.py} (95%) create mode 100644 src/visitors/CooltoCilM.py diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 941dd1ca5..8bfae3dd0 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -76,6 +76,10 @@ class EqualNode(BinaryOperatorNode): def __init__(self, dest, left, right): super().__init__(dest, left, right) +class StringEqualNode(BinaryOperatorNode): + def __init__(self, dest, left, right): + super().__init__(dest, left, right) + class LessNode(BinaryOperatorNode): def __init__(self, dest, left, right): super().__init__(dest, left, right) @@ -166,7 +170,7 @@ class ReturnNode(InstructionNode): def __init__(self, value=None): self.value = value -class ExitNode(InstructionNode): +class EndNode(InstructionNode): def __init__(self): pass diff --git a/src/pipeline.py b/src/pipeline.py index c3f0d3061..9eb657968 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -5,6 +5,7 @@ from visitors.Checker import TypeChecker from visitors.Inferencer import Inferencer from visitors.Executor import Executor, RuntimeException +# from visitors.CooltoCil import COOLToCILVisitor from visitors.CooltoCil import COOLToCILVisitor from visitors.CilDepicter import get_formatter from visitors.CiltoMips import CiltoMipsVisitor @@ -50,7 +51,7 @@ def __init__(self, program, lexer, parser, verbose=False): self.typeChecker = TypeChecker(self.context, self.errors) self.typeChecker.visit( self.ast, scope) if len(self.errors) == 0: - self.coolToCil = COOLToCILVisitor(self.context) + self.coolToCil = COOLToCILVisitor(self.ast, self.context) cil_ast = self.coolToCil.visit(self.ast, scope) # print(get_formatter(cil_ast)) self.cilToMips = CiltoMipsVisitor(self.context) diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index d9db3aa79..cee6ab643 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -57,6 +57,21 @@ def visit(self, node): self.dottypes = node.dottypes self.dotdata = node.dotdata self.dotcode = node.dotcode + # self.dotcode[13].instructions = [ + # self.dotcode[13].instructions[8], + # self.dotcode[13].instructions[9], + # self.dotcode[13].instructions[3], + # self.dotcode[13].instructions[4], + # self.dotcode[13].instructions[0], + # self.dotcode[13].instructions[1], + # self.dotcode[13].instructions[2], + # self.dotcode[13].instructions[5], + # self.dotcode[13].instructions[6], + # self.dotcode[13].instructions[7], + # self.dotcode[13].instructions[10], + # self.dotcode[13].instructions[11], + # self.dotcode[13].instructions[12] + # ] self.attrs = node.cattrs self.functions = node.dfunc self.parents = node.dparents @@ -77,9 +92,7 @@ def visit(self, node): self.write_data(line) for usr_data in self.dotdata: - data_addr = usr_data.name - data_value = usr_data.value - self.write_data('{}: {} {}'.format(usr_data.name, dt.asciiz, usr_data.value)) + self.visit(usr_data) self.write_code('.text') self.write_code('.globl main') @@ -362,7 +375,7 @@ def visit(self, node): @visitor.when(DataNode) def visit(self, node): - pass + self.write_data('{}: {} {}'.format(node.name, dt.asciiz, node.value)) @visitor.when(FunctionNode) def visit(self, node): @@ -428,7 +441,7 @@ def visit(self, node): self.write_code('{} {}, {}({}) # heap address of the left Int'.format(o.lw, r.t0, left_pos, r.fp)) self.write_code('{} {}, 8({}) # left Int value'.format(o.lw, r.t1, r.t0)) self.write_code('{} {}, {}({}) # heap address of the right Int'.format(o.lw, r.t0, right_pos, r.fp)) - self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, right_pos, r.t0)) + self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, r.t0)) self.write_code('{} {}, {}, {} # saving to $t1 the result'.format(o.add, r.t1, r.t1, r.t2)) self.write_code('{} {}, {}({}) # heap address of dest'.format(o.lw, r.t0, dest_pos, r.fp)) self.write_code('{} {}, 8({}) # store result'.format(o.sw, r.t1, r.t0)) @@ -442,7 +455,7 @@ def visit(self, node): self.write_code('{} {}, {}({}) # heap address of the left Int'.format(o.lw, r.t0, left_pos, r.fp)) self.write_code('{} {}, 8({}) # left Int value'.format(o.lw, r.t1, r.t0)) self.write_code('{} {}, {}({}) # heap address of the right Int'.format(o.lw, r.t0, right_pos, r.fp)) - self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, right_pos, r.t0)) + self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, r.t0)) self.write_code('{} {}, {}, {} # saving to $t1 the result'.format(o.sub, r.t1, r.t1, r.t2)) self.write_code('{} {}, {}({}) # heap address of dest'.format(o.lw, r.t0, dest_pos, r.fp)) self.write_code('{} {}, 8({}) # store result'.format(o.sw, r.t1, r.t0)) @@ -456,7 +469,7 @@ def visit(self, node): self.write_code('{} {}, {}({}) # heap address of the left Int'.format(o.lw, r.t0, left_pos, r.fp)) self.write_code('{} {}, 8({}) # left Int value'.format(o.lw, r.t1, r.t0)) self.write_code('{} {}, {}({}) # heap address of the right Int'.format(o.lw, r.t0, right_pos, r.fp)) - self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, right_pos, r.t0)) + self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, r.t0)) self.write_code('{} {}, {} # multiply'.format(o.mul, r.t1, r.t2)) self.write_code('{} {} # get the result in lo'.format(o.mflo, r.t1, r.t2)) self.write_code('{} {}, {}({}) # heap address of dest'.format(o.lw, r.t0, dest_pos, r.fp)) @@ -471,7 +484,7 @@ def visit(self, node): self.write_code('{} {}, {}({}) # heap address of the left Int'.format(o.lw, r.t0, left_pos, r.fp)) self.write_code('{} {}, 8({}) # left Int value'.format(o.lw, r.t1, r.t0)) self.write_code('{} {}, {}({}) # heap address of the right Int'.format(o.lw, r.t0, right_pos, r.fp)) - self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, right_pos, r.t0)) + self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, r.t0)) # zero exception # self.write_code("la $t0, zero_error") # self.write_code("sw $t0, ($sp)") @@ -506,6 +519,23 @@ def visit(self, node): self.write_code('{} {}, {}({})'.format(o.lw, r.t0, pos_dest, r.fp)) self.write_code('{} {}, 8({})'.format(o.sw, r.t1, r.t0)) + @visitor.when(StringEqualNode) + def visit(self, node): + left_addr = self.stack_offset(node.left) + right_addr = self.stack_offset(node.right) + dest_addr = self.stack_offset(node.dest) + + self.write_code('{} {}, {}($fp)'.format( o.lw, r.s0, left_addr)) # dir en el heap + self.write_code('{} {}, 8({})'.format( o.lw, r.a2, r.s0)) + self.write_code('{} {}, {}($fp)'.format( o.lw, r.s0, right_addr)) # dir en el heap + self.write_code('{} {}, 8({})'.format( o.lw, r.a3, r.s0)) + + self.write_code('jal str_comparer') + + self.write_code('{} {}, {}($fp)'.format( o.lw, r.s0, dest_addr)) # dir en el heap + self.write_code('{} {}, 8({})'.format( o.sw, r.v0, r.s0)) # store bool result + + @visitor.when(LeqNode) def visit(self, node): pos_dest = self.stack_offset(node.dest) @@ -743,8 +773,8 @@ def visit(self, node): def visit(self, node): pos_dest = self.stack_offset(node.dest) pos_source = self.stack_offset(node.source) - self.add('{} {}, {}({})'.format(o.lw, r.t0, pos_source, r.sp)) - self.add('{} {}, {}({})'.format(o.sw, r.t0, pos_dest, r.sp)) + self.write_code('{} {}, {}({})'.format(o.lw, r.t0, pos_source, r.sp)) + self.write_code('{} {}, {}({})'.format(o.sw, r.t0, pos_dest, r.sp)) @visitor.when(PrintStrNode) def visit(self, node): diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index cefb57c7d..31886704b 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -14,6 +14,7 @@ def __init__(self, context): self.current_method = None self.current_function = None self.context = context + self.id = 0 self.locals = {} self.attrs = {}#set() @@ -50,8 +51,15 @@ def register_local(self, vinfo): self.localvars.append(local_node) return vinfo.name + def register_label(self): + label = 'label' + str(self.id) + self.id += 1 + return label + + def define_internal_local(self, name='internal'): vinfo = VariableInfo(name, None) + self.id += 1 return self.register_local(vinfo) def register_instruction(self, instruction): @@ -88,7 +96,7 @@ def create_ctr(self, class_node, scope): while True: # we may need to search for te attributes of the ancestors break self.current_function = self.register_function(self.to_function_name('ctor', self.current_type.name)) - local_self = self.define_internal_local('self') + local_self = self.define_internal_local(self.instances[-1]) self.register_instruction(cil.AllocateNode(self.current_type.name, local_self)) for i, attr in enumerate(attrs): @@ -269,7 +277,7 @@ def visit(self, node, scope): self.register_instruction(cil.AllocateNode('Main', instance)) self.register_instruction(cil.ArgNode(instance)) self.register_instruction(cil.StaticCallNode(main_method_name, result)) - self.register_instruction(cil.ExitNode()) + self.register_instruction(cil.EndNode()) self.current_function = None self.add_builtin_types() @@ -375,7 +383,7 @@ def default_value_init(type): value = 'void' else: value = self.visit(default_value, scope) - self_ref = VariableInfo('self', self.current_type) + self_ref = VariableInfo(self.instances[-1], self.current_type) self_ref.index = 0 return cil.SetAttribNode(self_ref, node.id, value) @@ -482,8 +490,10 @@ def visit(self, node, scope): # node.method -> str # node.args -> [ ExpressionNode ... ] ############################### - error_label = self.define_internal_local() dest = self.define_internal_local() + args = [] + for arg in node.args: + args.append(cil.ArgNode(self.visit(arg,scope))) if node.obj is not None and node.obj.lex != 'self': # dynamic obj = self.visit(node.obj, scope) self.instances.append(obj) @@ -495,13 +505,14 @@ def visit(self, node, scope): local = self.define_internal_local() self.register_instruction(cil.TypeOfNode(obj, local)) + error_label = self.define_internal_local() condition = self.define_internal_local() self.register_instruction(cil.IsTypeNode(condition, local, "Void")) self.register_instruction(cil.GotoIfNode(error_label, condition)) self.register_instruction(cil.ArgNode(obj)) - for arg in node.args: - self.register_instruction(cil.ArgNode(self.visit(arg, scope))) + for arg in args: + self.register_instruction(arg) obj_type = obj_type if node.parent == None else node.parent self.register_instruction(cil.DynamicCallNode(local, self.to_function_name(node.method, obj_type), dest)) @@ -509,8 +520,8 @@ def visit(self, node, scope): self.register_instruction(cil.LabelNode(error_label)) else: # static self.register_instruction(cil.ArgNode(self.instances[-1])) - for arg in node.args: - self.register_instruction(cil.ArgNode(self.visit(arg, scope))) + for arg in args: + self.register_instruction(arg) fname = self.get_function_name(self.current_type.name, node.method, self.dottypes[-1].methods, True) self.register_instruction(cil.StaticCallNode(fname , dest)) @@ -631,23 +642,26 @@ def visit(self, node, scope): # node.thenChunk -> ExpressionNode # node.elseChunk -> ExpressionNode ############################### - var = self.define_internal_local() - then_label = self.define_internal_local() - else_label = self.define_internal_local() + # then_label = self.define_internal_local() + # else_label = self.define_internal_local() + then_label = self.register_label() + else_label = self.register_label() ifexpr = self.visit(node.ifChunk, scope.children[0]) self.register_instruction(cil.GotoIfNode(then_label, ifexpr)) # else elseexpr = self.visit(node.elseChunk, scope.children[2]) - self.register_instruction(cil.AssignNode(var, elseexpr)) + self.register_instruction(cil.CopyNode(var, elseexpr)) + # self.register_instruction(cil.AssignNode(var, elseexpr)) self.register_instruction(cil.GotoNode(else_label)) # then self.register_instruction(cil.LabelNode(then_label)) thenexpr = self.visit(node.thenChunk, scope.children[1]) - self.register_instruction(cil.AssignNode(var, thenexpr)) + self.register_instruction(cil.CopyNode(var, thenexpr)) + # self.register_instruction(cil.AssignNode(var, thenexpr)) self.register_instruction(cil.LabelNode(else_label)) return var @@ -848,8 +862,18 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### + # bool_inst = self.define_internal_local() + dest = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Bool', dest)) left = self.visit(node.left, scope) right = self.visit(node.right, scope) - self.register_instruction(cil.EqualNode(dest, left, right)) + + self.register_instruction(cil.StringEqualNode(dest, left, right) if isinstance(node.right, StringNode) and isinstance(node.left, StringNode) else cil.EqualNode(dest, left, right)) + ## equivalent to: + # if isinstance(node.right, StringNode) and isinstance(node.left, StringNode): + # self.register_instruction(cil.StringEqualNode(dest, left, right)) + # else: + # self.register_instruction(cil.EqualNode(dest, left, right)) + return dest \ No newline at end of file diff --git a/src/visitors/CooltoCil2.py b/src/visitors/CooltoCilA.py similarity index 95% rename from src/visitors/CooltoCil2.py rename to src/visitors/CooltoCilA.py index fb1501c8a..c7a73793a 100644 --- a/src/visitors/CooltoCil2.py +++ b/src/visitors/CooltoCilA.py @@ -109,29 +109,26 @@ def visit(self, node, scope): # node.declarations -> [ ClassDeclarationNode ... ] ###################################################### - # class_nodes = [self.class_node_from_context(c) for c in self.context.types] - builtin_types = ['Object', 'IO', 'Int', 'Bool', 'String'] - built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types if c in builtin_types] - for built_in_class in built_in_classes: - self.visit(built_in_class, scope) + basic_classes.Build(self.astCIL.code_section, self.astCIL.type_section) + func = 'main' + f = AST_CIL.Function(func) - self.current_function = self.register_function('entry') - instance = self.define_internal_local() - self.instances.append(instance) - result = self.define_internal_local() - main_method_name = self.to_function_name('main', 'Main') - self.register_instruction(cil.AllocateNode('Main', instance)) - self.register_instruction(cil.ArgNode(instance)) - self.register_instruction(cil.StaticCallNode(main_method_name, result)) - self.register_instruction(cil.ReturnNode(0)) - self.current_function = None - - for declaration, child_scope in zip(node.declarations, scope.children): - self.visit(declaration, child_scope) + self_instance = 'self' #crear instancia de un valor entero + false_local = 'false' - self.instances.pop() - return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) + intr = AST_CIL.Call(self_instance, 'function_Main___init__') + + intr2 = AST_CIL.Arg(self_instance) + intr3 = AST_CIL.Call(false_local, 'function_Main_main') + intr4 = AST_CIL.Exit() + + f.instructions += [intr, intr2, intr3, intr4] + f.localvars += [false_local, self_instance] + self.astCIL.code_section.insert(0, f) + + for c in program.classes: + self.visit(c, programCIL) @visitor.when(ClassDeclarationNode) def visit(self, node, scope): diff --git a/src/visitors/CooltoCilM.py b/src/visitors/CooltoCilM.py new file mode 100644 index 000000000..82bec35d1 --- /dev/null +++ b/src/visitors/CooltoCilM.py @@ -0,0 +1,900 @@ +from distutils.log import error +from cool_ast.cool_ast import * +import cil_ast.cil_ast as cil +from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo +import visitors.visitor as visitor +# from utils.errors import _TypeError, _NameError, _SemanticError, _AtributeError + +class BaseCOOLToCILVisitor: + 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.locals = {} + self.attrs = {}#set() + self.parameters = set() + self.instances = [] + + self.ctrs = {} + self.types = {} + + def transform_to_keys(self, xtype, keys): + for i, key in enumerate(keys): + xtype.attrs[key] = i + return xtype.attrs + + def build_type(self, node): + self.types_map[node.id.lex] = type = self.register_type(node.id.lex, node.id.line, node.id.column) + iter_type = self.context.get_type(node.id.lex) + + generation = [] + while iter_type is not None: + generation.append(iter_type) + iter_type = iter_type.parent + + generation.reverse() + for i in generation: + methods = sorted(i.methods) + attributes = sorted(i.attributes) + for meth in methods: + type.methods[meth] = self.to_function_name(meth, i.name) + for attr in attributes: + type.attributes[attr.name] = cil.AttributeNode(attr.name, i.name, i.line, i.column) + + + @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 register_local(self, vinfo): + vinfo.name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' + local_node = cil.LocalNode(vinfo.name) + self.localvars.append(local_node) + return vinfo.name + + def define_internal_local(self): + vinfo = VariableInfo('internal', None) + return self.register_local(vinfo) + + def register_instruction(self, instruction): + self.instructions.append(instruction) + return instruction + + def to_function_name(self, method_name, type_name): + return f'function_{method_name}_at_{type_name}' + + def register_function(self, function_name): + function_node = cil.FunctionNode(function_name, [], [], []) + self.dotcode.append(function_node) + return function_node + + def register_type(self, name): + type_node = cil.TypeNode(name) + self.dottypes.append(type_node) + return type_node + + def register_data(self, value): + vname = f'data_{len(self.dotdata)}' + data_node = cil.DataNode(vname, value) + self.dotdata.append(data_node) + return data_node + + def create_ctr(self, class_node, scope): + attrs = [att for att in class_node.features if isinstance(att, AttrDeclarationNode)] + while True: + break + self.current_function = self.register_function(self.to_function_name('ctor', self.current_type.name)) + self.register_instruction(cil.ParamNode('self')) + + for i, attr in enumerate(attrs): + set_attr_node = self.visit(attr, scope) + set_attr_node.index = i + self.register_instruction(set_attr_node) + self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) + +class COOLToCILVisitor(BaseCOOLToCILVisitor): + @visitor.on('node') + def visit(self, node): + pass + + def class_node_from_context(self, type): + idx = type.name + features = self.features_from_context(type) + parent = 'Object' if idx not in ['Object', 'Void'] else None + return ClassDeclarationNode(idx, features, parent) + + def features_from_context(self, type): + feats = [AttrDeclarationNode(feat.name, feat.type) for feat in type.attributes] + for func in type.methods: + feats.append(FuncDeclarationNode(func.name, func.param_names, func.return_type, None)) + + return feats + + @visitor.when(ProgramNode) + def visit(self, node, scope): + ###################################################### + # node.declarations -> [ ClassDeclarationNode ... ] + ###################################################### + self.current_function = self.register_function('entry', line=0, column=0) + main_instance = self.define_internal_local(line=0, column=0) + self.register_instruction(cil.StaticCallNode(self.init_name('Main'), main_instance, line=0, column=0)) + self.register_instruction(cil.ArgNode(main_instance, line=0, column=0)) + self.register_instruction(cil.StaticCallNode(self.to_function_name('main', 'Main'), + main_instance, line=0, column=0)) + self.register_instruction(cil.ReturnNode(line=0, column=0, value=0)) + + self.register_builtin() + self.current_function = None + for x in node.declarations: + self.collect_types(x) + + for x, y in zip(node.declarations, scope.childs): + self.visit(x, y) + + return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode, line=0, column=0) + + + @visitor.when(ClassDeclarationNode) + def visit(self, node, scope): + #################################################################### + # node.id -> str + # node.parent -> str + # node.features -> [ FuncDeclarationNode/AttrDeclarationNode ... ] + #################################################################### + + self.current_type = self.context.get_type(node.id.lex) + type = self.types_map[node.id.lex] + + self.current_function = self.register_function(self.init_attr_name(node.id.lex), + line=node.line, column=node.column) + type.methods['__init_attr'] = self.current_function.name + self_param = self.register_param(self.vself, line=node.line, column=node.column) + self.localvars.extend(type.attributes.values()) + self.var_names.update({i:cil.AttributeNode(j.name, type.name, node.line, node.column) + for i,j in type.attributes.items()}) + + self.vself.name = self_param + # Inicializando los atributos de la clase y llamando al constructor del padre + if self.current_type.parent.name not in ('Object', 'IO'): + variable = self.define_internal_local(line=node.line, column=node.column) + self.register_instruction(cil.ArgNode(self_param, line=node.line, column=node.column)) + self.register_instruction(cil.StaticCallNode( + self.init_attr_name(self.current_type.parent.name), variable, line=node.line, column=node.column)) + + # Inicializando los atributos de la clase + for feat, child in zip(node.features, scope.childs): + if isinstance(feat, cool.AttrDeclarationNode): + self.visit(feat, child) + self.register_instruction(cil.SetAttribNode(self_param, feat.id.lex, feat.ret_expr, node.id.lex, + line=node.line, column=node.column)) + self.register_instruction(cil.ReturnNode(node.line, node.column, self_param)) + + # TypeNode de la clase + # type = self.types_map[node.id.lex] + # type.attributes = [i.name for i in self.current_type.attributes] + + # Visitar funciones dentro de la clase + for feat, child in zip(node.features, scope.childs): + if isinstance(feat, cool.FuncDeclarationNode): + self.visit(feat, child) + self.vself.name = 'self' + + # Allocate de la clase + self.current_function = self.register_function(self.init_name(node.id.lex), line=node.line, column=node.column) + type.methods['__init'] = self.current_function.name + self.localvars.extend(type.attributes.values()) + instance = self.define_internal_local(line=node.line, column=node.column) + self.register_instruction(cil.AllocateNode(node.id.lex, instance, line=node.line, column=node.column)) + + variable = self.define_internal_local(line=node.line, column=node.column) + self.register_instruction(cil.ArgNode(instance, line=node.line, column=node.column)) + self.register_instruction(cil.StaticCallNode(self.init_attr_name(node.id.lex), variable, + line=node.line, column=node.column)) + + self.register_instruction(cil.ReturnNode(value=variable, line=node.line, column=node.column)) + + self.current_function = None + self.current_type = None + + @visitor.when(AttrDeclarationNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.type -> str + # node.value = ExpressionNode + ############################### + # local function to determine the default value of an attribute given its type + def default_value_init(type): + if type == 'Int': + return ConstantNumNode(0) + elif type == 'Bool': + return FalseNode() + elif type == 'String': + return StringNode("") + else: + return VoidNode('void') + + variable = self.define_internal_local(line=node.line, column=node.column) + if node.expression: + self.visit(node.expression, scope.childs[0]) + self.register_instruction(cil.AssignNode(variable, node.expression.ret_expr, + line=node.expression.line, column=node.expression.column)) + elif node.type.lex in self.value_types: + if node.type.lex == 'SELF_TYPE': + stype = self.current_type.name + else: + stype = node.type.lex + + if stype == 'Int': + self.register_instruction(cil.ArgNode(0, line=node.type.line, column=node.type.column)) + elif stype == 'Bool': + self.register_instruction(cil.ArgNode(0, line=node.type.line, column=node.type.column)) + elif stype == 'String': + data = self.emptystring_data + self.register_instruction(cil.LoadNode(variable, data, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(variable, line=node.line, column=node.column)) + self.register_instruction(cil.StaticCallNode(self.init_name(stype), variable, + line=node.line, column=node.column)) + node.ret_expr = variable + + @visitor.when(FuncDeclarationNode) + def visit(self, node, scope): + ############################### + # node.id -> str + # node.params -> [ (str, str) ... ] + # node.type -> str + # node.body -> [ ExpressionNode ... ] + ############################### + + self.current_method = self.current_type.get_method(node.id.lex) + type = self.types_map[self.current_type.name] + self.current_function = self.register_function(self.to_function_name(self.current_method.name, + self.current_type.name), + line=node.line, column=node.column) + self.localvars.extend(type.attributes.values()) + + self_param = self.register_param(self.vself, line=node.line, column=node.column) + self.vself.name = self_param + for param, type in node.params: + self.register_param(VariableInfo(param.lex, type.lex), line=param.line, column=param.column) + + self.visit(node.body, scope.childs[0]) + self.register_instruction(cil.ReturnNode(value=node.body.ret_expr, + line=node.body.line, column=node.body.column)) + self.current_method = None + self.vself.name = 'self' + + @visitor.when(VarDeclarationNode) # AssignNode + def visit(self, node, scope): + ############################### + # node.id -> str + # node.type -> str + # node.expr -> ExpressionNode + ############################### + var = scope.find_variable(node.id) + dest = self.locals[var.name] = self.register_local(var) + + if node.expr is not None: + source = self.visit(node.expr, scope) + else: + # asignar valor por default + if node.type.lower() == 'int': + source = 0 + elif node.type.lower() == 'string': + source = '' + elif node.type.lower() == 'bool': + source = False + else: + source = None + self.register_instruction(cil.AssignNode(dest, source)) + return dest + + @visitor.when(AssignNode) # + def visit(self, node, scope): + ############################### + # node.id -> str + # node.expr -> ExpressionNode + ############################### + var = self.var_names[node.id.lex] + self.visit(node.expression, scope.childs[0]) + self.register_instruction(cil.AssignNode(var, node.expression.ret_expr, + line=node.expression.line, column=node.expression.column)) + node.ret_expr = var + + @visitor.when(CallNode) + def visit(self, node, scope): + ############################### + # node.obj -> AtomicNode + # node.method -> str + # node.args -> [ ExpressionNode ... ] + ############################### + if node.obj: + args = [] + for arg, child in zip(node.args, scope.childs[1:]): + self.visit(arg, child) + args.append(cil.ArgNode(arg.ret_expr, line=arg.line, column=arg.column)) + + self.visit(node.obj, scope.childs[0]) + + void = cil.VoidNode() + isvoid = self.define_internal_local(line=node.line, column=node.column) + self.register_instruction(cil.EqualNode(isvoid, node.obj.ret_expr, void, + line=node.obj.line, column=node.obj.column)) + self.register_runtime_error(isvoid, f'{node.id.line, node.id.column} - RuntimeError: Dispatch on void', + line=node.id.line, column=node.id.column) + + self.register_instruction(cil.ArgNode(node.obj.ret_expr, line=node.obj.line, column=node.obj.column)) + for arg in args: self.register_instruction(arg) + ret = self.define_internal_local(line=node.line, column=node.column) + if node.type is not None: + stype = node.type.lex + self.register_instruction(cil.StaticCallNode(self.types_map[stype].methods[node.id.lex], + ret, line=node.id.line, column=node.id.column)) + else: + stype = node.obj.static_type.name + self.register_instruction(cil.ArgNode(node.obj.ret_expr, line=node.obj.line, column=node.obj.column)) + self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.id.lex], + ret, line=node.id.line, column=node.id.column)) + + + node.ret_expr = ret + + else: + ret = self.define_internal_local(line=node.line, column=node.column) + + args = [] + for arg, child in zip(node.args, scope.childs): + self.visit(arg, child) + args.append(cil.ArgNode(arg.ret_expr, line=arg.line, column=arg.column)) + + self.register_instruction(cil.ArgNode(self.vself.name, line=node.line, column=node.column)) + for arg in args: self.register_instruction(arg) + self.register_instruction(cil.ArgNode(self.vself.name, line=node.line, column=node.column)) + + stype = self.current_type.name + self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.id.lex], ret, line=node.id.line, column=node.id.column)) + node.ret_expr = ret + + + @visitor.when(ConstantNumNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + + self.register_instruction(cil.ArgNode(node.token.lex, line=node.token.line, column=node.token.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret, line=node.line, column=node.column)) + node.ret_expr = ret + + @visitor.when(VariableNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + if node.token.lex == 'self': + node.ret_expr = self.vself.name + else: + node.ret_expr = self.var_names[node.token.lex] + + @visitor.when(InstantiateNode) + def visit(self, node, scope): + ############################### + # node.lex -> str + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + + if node.type.lex == 'SELF_TYPE': + stype = self.current_type.name + else: + stype = node.type.lex + + if stype == 'Int': + self.register_instruction(cil.ArgNode(0, line=node.type.line, column=node.type.column)) + elif stype == 'Bool': + self.register_instruction(cil.ArgNode(0, line=node.type.line, column=node.type.column)) + elif stype == 'String': + data = self.emptystring_data + variable = self.define_internal_local(line=node.line, column=node.column) + self.register_instruction(cil.LoadNode(variable, data, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(variable, line=node.line, column=node.column)) + self.register_instruction(cil.StaticCallNode(self.init_name(stype), ret, + line=node.type.line, column=node.type.column)) + node.ret_expr = ret + + @visitor.when(PlusNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + left = self.define_internal_local(line=node.line, column=node.column) + right = self.define_internal_local(line=node.line, column=node.column) + value = self.define_internal_local(line=node.line, column=node.column) + + self.visit(node.left, scope.childs[0]) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', + line=node.left.line, column=node.left.line)) + self.visit(node.right, scope.childs[1]) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', + line=node.right.line, column=node.right.line)) + self.register_instruction(cil.PlusNode(value, left, right, line=node.line, column=node.column)) + + self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret,line=node.line, column=node.column)) + + node.ret_expr = ret + + @visitor.when(MinusNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + left = self.define_internal_local(line=node.line, column=node.column) + right = self.define_internal_local(line=node.line, column=node.column) + value = self.define_internal_local(line=node.line, column=node.column) + + self.visit(node.left, scope.childs[0]) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', + line=node.left.line, column=node.left.line)) + self.visit(node.right, scope.childs[1]) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', + line=node.right.line, column=node.right.line)) + self.register_instruction(cil.MinusNode(value, left, right, line=node.line, column=node.column)) + + self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret, line=node.line, column=node.column)) + + node.ret_expr = ret + + @visitor.when(StarNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + left = self.define_internal_local(line=node.line, column=node.column) + right = self.define_internal_local(line=node.line, column=node.column) + value = self.define_internal_local(line=node.line, column=node.column) + + self.visit(node.left, scope.childs[0]) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', + line=node.left.line, column=node.left.line)) + self.visit(node.right, scope.childs[1]) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', + line=node.right.line, column=node.right.line)) + self.register_instruction(cil.StarNode(value, left, right, line=node.line, column=node.column)) + + self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) + self.register_instruction(ci + + @visitor.when(DivNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + dest = self.define_internal_local() + left = self.visit(node.left, scope) + right = self.visit(node.right, scope) + self.register_instruction(cil.DivNode(dest, left, right)) + return dest + + @visitor.when(ChunkNode) + def visit(self, node, scope): + ############################### + # node.chunk -> [ ExpressionNode... ] + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + left = self.define_internal_local(line=node.line, column=node.column) + right = self.define_internal_local(line=node.line, column=node.column) + value = self.define_internal_local(line=node.line, column=node.column) + zero = self.define_internal_local(line=node.line, column=node.column) + + self.visit(node.left, scope.childs[0]) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', + line=node.left.line, column=node.left.line)) + self.visit(node.right, scope.childs[1]) + + self.register_instruction(cil.ArgNode(0, line=node.line, column=node.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), zero, line=node.line, column=node.column)) + self.register_instruction(cil.GetAttribNode(zero, zero, 'value', 'Int', + line=node.right.line, column=node.right.line)) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', + line=node.right.line, column=node.right.line)) + self.register_instruction(cil.EqualNode(zero, zero, right, + line=node.line, column=node.column)) + self.register_runtime_error(zero, f'{node.right.line, node.right.column} - ' + f'RuntimeError: Division by zero', + line=node.right.line, column=node.right.column) + + self.register_instruction(cil.DivNode(value, left, right, line=node.line, column=node.column)) + + self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret, line=node.line, column=node.column)) + node.ret_expr = ret + + @visitor.when(ConditionalNode) + def visit(self, node, scope): + ############################### + # node.ifChunk -> ExpressionNode + # node.thenChunk -> ExpressionNode + # node.elseChunk -> ExpressionNode + ############################### + + ret = self.define_internal_local(line=node.line, column=node.column) + condition = self.define_internal_local(line=node.line, column=node.column) + + then_label = self.register_label('then_label', line=node.line, column=node.column) + continue_label = self.register_label('continue_label', line=node.line, column=node.column) + + # IF + self.visit(node.condition, scope.childs[0]) + self.register_instruction(cil.GetAttribNode(condition, node.condition.ret_expr, 'value', 'Bool', + line=node.condition.line, column=node.condition.column)) + self.register_instruction(cil.GotoIfNode(condition, then_label.label, line=node.condition.line, + column=node.condition.column)) + + # ELSE + self.visit(node.else_body, scope.childs[2]) + self.register_instruction(cil.AssignNode(ret, node.else_body.ret_expr, line=node.else_body.line, + column=node.else_body.column)) + self.register_instruction(cil.GotoNode(continue_label.label, line=node.else_body.line, + column=node.else_body.column)) + + # THEN + self.register_instruction(then_label) + self.visit(node.if_body, scope.childs[1]) + self.register_instruction(cil.AssignNode(ret, node.if_body.ret_expr, line=node.if_body.line, + column=node.if_body.column)) + + self.register_instruction(continue_label) + node.ret_expr = ret + + @visitor.when(LetInNode) + def visit(self, node, scope): + ############################### + # node.decl_list -> [ DeclarationNode... ] + # node.expression -> ExpressionNode + ############################### + + for (id, type, expr), child in zip(node.let_body, scope.childs[:-1]): + variable = self.register_local(VariableInfo(id.lex, type.lex), line=id.line, column=id.column) + if expr: + self.visit(expr, child) + self.register_instruction(cil.AssignNode(variable, expr.ret_expr, line=expr.line, column=expr.column)) + elif type.lex in self.value_types: + if type.lex == 'SELF_TYPE': + stype = self.current_type.name + else: + stype = type.lex + if stype == 'Int': + self.register_instruction(cil.ArgNode(0, line=node.line, column=node.column)) + elif stype == 'Bool': + self.register_instruction(cil.ArgNode(0, line=node.line, column=node.column)) + elif stype == 'String': + data = self.emptystring_data + self.register_instruction(cil.LoadNode(variable, data, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(variable, line=node.line, column=node.column)) + self.register_instruction(cil.StaticCallNode(self.init_name(stype), variable, + line=node.line, column=node.column)) + + self.visit(node.in_body, scope.childs[-1]) + node.ret_expr = node.in_body.ret_expr + + @visitor.when(WhileNode) + def visit(self, node, scope): + while_label = self.register_label('while_label', line=node.line, column=node.column) + loop_label = self.register_label('loop_label', line=node.line, column=node.column) + pool_label = self.register_label('pool_label', line=node.line, column=node.column) + condition = self.define_internal_local(line=node.line, column=node.column) + + self.register_instruction(while_label) + self.visit(node.condition, scope.childs[0]) + self.register_instruction(cil.GetAttribNode(condition, node.condition.ret_expr, 'value', 'Bool', + line=node.condition.line, column=node.condition.column)) + self.register_instruction(cil.GotoIfNode(condition, loop_label.label, line=node.condition.line, + column=node.condition.column)) + self.register_instruction(cil.GotoNode(pool_label.label, line=node.condition.line, + column=node.condition.column)) + + self.register_instruction(loop_label) + self.visit(node.body, scope.childs[1]) + self.register_instruction( + cil.GotoNode(while_label.label, line=node.condition.line, column=node.condition.column)) + + self.register_instruction(pool_label) + node.ret_expr = cil.VoidNode() + + @visitor.when(NotNode) + def visit(self, node, scope): + ############################### + # node.expression -> ExpressionNode + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + value = self.define_internal_local(line=node.line, column=node.column) + neg_value = self.define_internal_local(line=node.line, column=node.column) + + self.visit(node.expression, scope.childs[0]) + self.register_instruction(cil.GetAttribNode(value, node.expression.ret_expr, 'value', 'Bool', + line=node.expression.line, column=node.expression.column)) + self.register_instruction(cil.NotNode(neg_value, value, + line=node.expression.line, column=node.expression.column)) + self.register_instruction(cil.ArgNode(neg_value, line=node.expression.line, column=node.expression.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + + node.ret_expr = ret + + @visitor.when(IsVoidNode) + def visit(self, node, scope): + ############################### + # node.method -> ExpressionNode + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + answer = self.define_internal_local(line=node.line, column=node.column) + + void = cil.VoidNode() + self.visit(node.expression, scope.childs[0]) + self.register_instruction(cil.EqualNode(answer, node.expression.ret_expr, void, + line=node.expression.line, column=node.expression.column)) + + self.register_instruction(cil.ArgNode(answer, line=node.expression.line, column=node.expression.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + node.ret_expr = ret + + @visitor.when(ComplementNode) + def visit(self, node, scope): + ############################### + # node.expr -> ExpressionNode + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + value = self.define_internal_local(line=node.line, column=node.column) + answer = self.define_internal_local(line=node.line, column=node.column) + + self.visit(node.expression, scope.childs[0]) + self.register_instruction(cil.GetAttribNode(value, node.expression.ret_expr, 'value', 'Int', + line=node.expression.line, column=node.expression.column)) + self.register_instruction(cil.ComplementNode(answer, value, + line=node.expression.line, column=node.expression.column)) + + self.register_instruction(cil.ArgNode(answer,line=node.expression.line, column=node.expression.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret, line=node.line, column=node.column)) + node.ret_expr = ret + + @visitor.when(SwitchCaseNode) + def visit(self, node, scope): + ############################### + # node.expr -> ExpressionNode + # node.case_list = [ (id, type, expr)... ] + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + vtype = self.define_internal_local(line=node.line, column=node.column) + cond = self.define_internal_local(line=node.line, column=node.column) + + self.visit(node.expression, scope.childs[0]) + self.register_instruction(cil.TypeOfNode(vtype, node.expression.ret_expr, line=node.expression.line, + column=node.expression.column)) + + isvoid = self.define_internal_local(line=node.line, column=node.column) + self.register_instruction(cil.EqualNode(isvoid, node.expression.ret_expr, cil.VoidNode(), + line=node.expression.line, column=node.expression.column)) + self.register_runtime_error(isvoid, f'{node.expression.line, node.expression.column} - ' + f'RuntimeError: Case on void', + line=node.expression.line, column=node.expression.column) + + end_label = self.register_label('case_end_label', line=node.line, column=node.column) + + branch_type = self.define_internal_local(line=node.line, column=node.column) + seen = [] + labels = [] + branches = sorted(node.branches, key=lambda x: self.context.get_type(x[1].lex).depth, reverse=True) + for p, (id, type, expr) in enumerate(branches): + labels.append(self.register_label(f'case_label_{p}', line=id.line, column=id.column)) + + for t in self.context.subtree(type.lex): + if t not in seen: + seen.append(t) + self.register_instruction(cil.NameNode(branch_type, t.name, line=id.line, column=id.column)) + self.register_instruction(cil.EqualNode(cond, branch_type, vtype, line=id.line, column=id.column)) + self.register_instruction(cil.GotoIfNode(cond, labels[-1].label, line=id.line, column=id.column)) + + data = self.register_data(f'{node.expression.line, node.expression.column} - ' + f'RuntimeError: Case statement without a match branch', + line=node.expression.line, column=node.expression.column) + self.register_instruction(cil.ErrorNode(data, line=node.expression.line, column=node.expression.column)) + + for p, label in enumerate(labels): + id, type, expr = branches[p] + sc = scope.childs[p + 1] + + self.register_instruction(label) + var = self.register_local(VariableInfo(id.lex, vtype), line=id.line, column=id.column) + self.register_instruction(cil.AssignNode(var, node.expression.ret_expr, line=node.expression.line, + column=node.expression.column)) + self.visit(expr, sc) + self.register_instruction(cil.AssignNode(ret, expr.ret_expr, line=expr.line, column=expr.column)) + self.register_instruction(cil.GotoNode(end_label.label, line=expr.line, column=expr.column)) + + self.register_instruction(end_label) + node.ret_expr = ret + + var = self.define_internal_local() + self.register_instruction(cil.ParentTypeNode(var, obj_type)) + self.register_instruction(cil.AssignNode(obj_type, var)) + + self.register_instruction(cil.GotoNode(start_case_label)) + + self.register_instruction(cil.LabelNode(error_label)) + self.register_instruction(cil.ParamNode(self.instances[-1])) + self.regster_instruction(cil.DynamicCallNode(var, self.to_function_name("abort", self.current_type.name), result)) + + self.register_instruction(cil.GotoNode(end_case_label)) + return result + + @visitor.when(TrueNode) + def visit(self, node, scope): + ret = self.define_internal_local(line=node.line, column=node.column) + + self.register_instruction(cil.ArgNode(1 if node.token.lex else 0, line=node.token.line, column=node.token.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + node.ret_expr = ret + + @visitor.when(FalseNode) + def visit(self, node, scope): + ret = self.define_internal_local(line=node.line, column=node.column) + + self.register_instruction(cil.ArgNode(1 if node.token.lex else 0, line=node.token.line, column=node.token.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + node.ret_expr = ret + + @visitor.when(StringNode) + def visit(self, node, scope): + data_node = self.register_data(node.lex) + var = self.define_internal_local() + self.register_instruction(cil.LoadNode(var, data_node)) + return data_node.name + + @visitor.when(LessNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + left = self.define_internal_local(line=node.line, column=node.column) + right = self.define_internal_local(line=node.line, column=node.column) + value = self.define_internal_local(line=node.line, column=node.column) + + self.visit(node.left, scope.childs[0]) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', + line=node.left.line, column=node.left.line)) + self.visit(node.right, scope.childs[1]) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', + line=node.right.line, column=node.right.line)) + self.register_instruction(cil.LessNode(value, left, right, line=node.line, column=node.column)) + + self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + + node.ret_expr = ret + + @visitor.when(LeqNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + left = self.define_internal_local(line=node.line, column=node.column) + right = self.define_internal_local(line=node.line, column=node.column) + value = self.define_internal_local(line=node.line, column=node.column) + + self.visit(node.left, scope.childs[0]) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', + line=node.left.line, column=node.left.line)) + self.visit(node.right, scope.childs[1]) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', + line=node.right.line, column=node.right.line)) + self.register_instruction(cil.LessEqualNode(value, left, right, line=node.line, column=node.column)) + + self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + + node.ret_expr = ret + + @visitor.when(EqualNode) + def visit(self, node, scope): + ############################### + # node.left -> ExpressionNode + # node.right -> ExpressionNode + ############################### + ret = self.define_internal_local(line=node.line, column=node.column) + left = self.define_internal_local(line=node.line, column=node.column) + right = self.define_internal_local(line=node.line, column=node.column) + type_left = self.define_internal_local(line=node.line, column=node.column) + type_int = self.define_internal_local(line=node.line, column=node.column) + type_string = self.define_internal_local(line=node.line, column=node.column) + type_bool = self.define_internal_local(line=node.line, column=node.column) + equal = self.define_internal_local(line=node.line, column=node.column) + value = self.define_internal_local(line=node.line, column=node.column) + + int_comparisson = self.register_label('int_comparisson', line=node.line, column=node.column) + string_comparisson = self.register_label('string_comparisson', line=node.line, column=node.column) + bool_comparisson = self.register_label('bool_comparisson', line=node.line, column=node.column) + continue_label = self.register_label('continue_label', line=node.line, column=node.column) + + self.visit(node.left, scope.childs[0]) + self.visit(node.right, scope.childs[1]) + + self.register_instruction(cil.TypeOfNode(type_left, node.left.ret_expr, + line=node.left.line, column=node.left.column)) + self.register_instruction(cil.NameNode(type_int, 'Int', line=node.line, column=node.column)) + self.register_instruction(cil.NameNode(type_string, 'String', line=node.line, column=node.column)) + self.register_instruction(cil.NameNode(type_bool, 'Bool', line=node.line, column=node.column)) + + self.register_instruction(cil.EqualNode(equal, type_left, type_int, + line=node.left.line, column=node.left.column)) + self.register_instruction(cil.GotoIfNode(equal, int_comparisson.label, + line=node.left.line, column=node.left.column)) + self.register_instruction(cil.EqualNode(equal, type_left, type_string, + line=node.left.line, column=node.left.column)) + self.register_instruction(cil.GotoIfNode(equal, string_comparisson.label, + line=node.left.line, column=node.left.column)) + self.register_instruction(cil.EqualNode(equal, type_left, type_bool, + line=node.left.line, column=node.left.column)) + self.register_instruction(cil.GotoIfNode(equal, bool_comparisson.label, + line=node.left.line, column=node.left.column)) + + self.register_instruction(cil.EqualNode(value, node.left.ret_expr, node.right.ret_expr, + line=node.left.line, column=node.left.column)) + self.register_instruction(cil.GotoNode(continue_label.label, + line=node.left.line, column=node.left.column)) + + self.register_instruction(int_comparisson) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', + line=node.right.line, column=node.right.column)) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', + line=node.right.line, column=node.right.column)) + self.register_instruction(cil.EqualNode(value, left, right, line=node.line, column=node.column)) + self.register_instruction(cil.GotoNode(continue_label.label, line=node.line, column=node.column)) + + self.register_instruction(string_comparisson) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'String', + line=node.left.line, column=node.left.column)) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'String', + line=node.right.line, column=node.right.column)) + self.register_instruction(cil.EqualStringNode(value, left, right, + line=node.right.line, column=node.right.column)) + self.register_instruction(cil.GotoNode(continue_label.label, line=node.line, column=node.column)) + + self.register_instruction(bool_comparisson) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Bool', + line=node.left.line, column=node.left.column)) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Bool', + line=node.right.line, column=node.right.column)) + self.register_instruction(cil.EqualNode(value, left, right, + line=node.right.line, column=node.right.column)) + self.register_instruction(cil.GotoNode(continue_label.label, line=node.line, column=node.column)) + + self.register_instruction(continue_label) + + self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + node.ret_expr = ret \ No newline at end of file From c772d97055385f4a0a3e7e75e07723c99ab02e26 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Sat, 26 Feb 2022 00:32:59 -0500 Subject: [PATCH 69/93] removed all lines and columns, i think --- .gitignore | 3 +- out | 175 ++++++- src/__main__.py | 2 +- src/cil_ast/cil_ast.py | 297 +++++++----- src/cil_ast/cil_ast_d.py | 234 +++++++++ src/pipeline.py | 19 +- src/utils/semantic.py | 12 +- src/visitors/CooltoCilM.py | 896 +++++++++++++++++++++-------------- tests/codegen/basic.cl | 29 +- tests/codegen/hello_world.cl | 12 +- 10 files changed, 1149 insertions(+), 530 deletions(-) create mode 100644 src/cil_ast/cil_ast_d.py diff --git a/.gitignore b/.gitignore index 4acafde18..81f4a248a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,8 @@ # Created by https://www.gitignore.io/api/visualstudiocode,linux,latex,python # Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python - +CooltoCilM +#CooltoCilA ### LaTeX ### ## Core latex/pdflatex auxiliary files: *.aux diff --git a/out b/out index cab118518..65854557d 100644 --- a/out +++ b/out @@ -14,7 +14,6 @@ IO_conforms_to: .word IO_class_name, Object_class_name Int_conforms_to: .word Int_class_name, Object_class_name Bool_conforms_to: .word Bool_class_name, Object_class_name Main_conforms_to: .word Main_class_name, IO_class_name, Object_class_name -local_main_at_Main_internal_2: .asciiz "Hello world" .text .globl main @@ -296,7 +295,7 @@ addiu $a0, $zero, 8 li $v0, 9 syscall addu $s1, $zero, $v0 -addiu $a0, $zero, 32 +addiu $a0, $zero, 36 li $v0, 9 syscall addu $s0, $zero, $v0 @@ -316,6 +315,8 @@ la $a0, function_out_int_at_IO sw $a0, 24($s0) la $a0, function_main_at_Main sw $a0, 28($s0) +la $a0, function_f_at_Main +sw $a0, 32($s0) sw $s0, 4($s1) la $a0, Main_conforms_to sw $a0, 0($s1) @@ -697,7 +698,7 @@ addiu $a0, $zero, 8 li $v0, 9 syscall addu $s1, $zero, $v0 -addiu $a0, $zero, 32 +addiu $a0, $zero, 36 li $v0, 9 syscall addu $s0, $zero, $v0 @@ -717,6 +718,8 @@ la $a0, function_out_int_at_IO sw $a0, 24($s0) la $a0, function_main_at_Main sw $a0, 28($s0) +la $a0, function_f_at_Main +sw $a0, 32($s0) sw $s0, 4($s1) la $a0, Main_conforms_to sw $a0, 0($s1) @@ -730,21 +733,17 @@ addi $sp, $fp, 4 move $fp, $t1 # restore $fp jr $ra function_main_at_Main: -addi $sp, $sp, -12 +addi $sp, $sp, -16 addi $sp, $sp, -8 sw $ra, 4($sp) # save $ra sw $fp, 0($sp) # save $fp -addi $fp, $sp, 20 -# Arg -addi $sp, $sp, -4 -lw $t1, 0($fp) -sw $t1, 0($sp) +addi $fp, $sp, 24 # Allocate addiu $a0, $zero, 12 li $v0, 9 syscall addu $s1, $zero, $v0 -addiu $a0, $zero, 24 +addiu $a0, $zero, 12 li $v0, 9 syscall addu $s0, $zero, $v0 @@ -754,29 +753,155 @@ la $a0, function_type_name_at_Object sw $a0, 4($s0) la $a0, function_copy_at_Object sw $a0, 8($s0) -la $a0, function_length_at_String -sw $a0, 12($s0) -la $a0, function_substr_at_String -sw $a0, 16($s0) -la $a0, function_concat_at_String -sw $a0, 20($s0) sw $s0, 4($s1) -la $a0, String_conforms_to +la $a0, Int_conforms_to sw $a0, 0($s1) sw $s1, -12($fp) -# Load -la $t1, local_main_at_Main_internal_2 -lw $t2, -12($fp) -sw $t1, 8($t2) +# SetAttrib +lw $s1, -12($fp) +li $s0, 12 +sw $s0, 8($s1) +# Allocate +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +sw $s0, 4($s1) +la $a0, Int_conforms_to +sw $a0, 0($s1) +sw $s1, -16($fp) +# SetAttrib +lw $s1, -16($fp) +li $s0, 3 +sw $s0, 8($s1) +# Plus +lw $t0, -12($fp) # heap address of the left Int +lw $t1, 8($t0) # left Int value +lw $t0, -16($fp) # heap address of the right Int +lw $t2, 8($t0) # right Int value +add $t1, $t1, $t2 # saving to $t1 the result +lw $t0, -8($fp) # heap address of dest +sw $t1, 8($t0) # store result +# Arg +addi $sp, $sp, -4 +lw $t1, 0($fp) +sw $t1, 0($sp) # Arg addi $sp, $sp, -4 -lw $t1, -12($fp) +lw $t1, -8($fp) sw $t1, 0($sp) # Call -jal function_out_string_at_IO -sw $v0, -8($fp) +jal function_out_int_at_IO +sw $v0, -4($fp) # ReturnNode -lw $t0, -8($fp) +lw $t0, -4($fp) +move $v0, $t0 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_f_at_Main: +addi $sp, $sp, -16 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 24 +# Allocate +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +sw $s0, 4($s1) +la $a0, Bool_conforms_to +sw $a0, 0($s1) +sw $s1, -8($fp) +# SetAttrib +lw $s1, -8($fp) +li $s0, 1 +sw $s0, 8($s1) +# goto if +lw $t0 -8($fp) # heap address +lw $t1 8($t0) # value of condition +bnez $t1 label19 # branch on not equal to 0 +# Allocate +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +sw $s0, 4($s1) +la $a0, Int_conforms_to +sw $a0, 0($s1) +sw $s1, -12($fp) +# SetAttrib +lw $s1, -12($fp) +li $s0, 2 +sw $s0, 8($s1) +lw $t0, -12($sp) +sw $t0, -4($sp) +# goto +j label20 # jump unconditionally +# a label +label19: +# Allocate +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s1, $zero, $v0 +addiu $a0, $zero, 12 +li $v0, 9 +syscall +addu $s0, $zero, $v0 +la $a0, function_abort_at_Object +sw $a0, 0($s0) +la $a0, function_type_name_at_Object +sw $a0, 4($s0) +la $a0, function_copy_at_Object +sw $a0, 8($s0) +sw $s0, 4($s1) +la $a0, Int_conforms_to +sw $a0, 0($s1) +sw $s1, -16($fp) +# SetAttrib +lw $s1, -16($fp) +li $s0, 1 +sw $s0, 8($s1) +lw $t0, -16($sp) +sw $t0, -4($sp) +# a label +label20: +# ReturnNode +lw $t0, -4($fp) move $v0, $t0 lw $ra, 4($sp) # restore $ra lw $t1, 0($sp) diff --git a/src/__main__.py b/src/__main__.py index 0edff1fe3..4c49258ff 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -75,7 +75,7 @@ def main(): if len(sys.argv) > 1: input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] else: - input_file = "./tests/codegen/hello_world.cl"#"debbuging/tests/Auto/call1.cl" + input_file = "./tests/codegen/basic.cl"#"debbuging/tests/Auto/call1.cl" # raise Exception("Incorrect number of arguments") try: program_file = open(input_file) diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index 8bfae3dd0..f30aab522 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -1,234 +1,297 @@ class Node: - pass + def __init__(self): + pass + class ProgramNode(Node): def __init__(self, dottypes, dotdata, dotcode): + super().__init__() self.dottypes = dottypes self.dotdata = dotdata self.dotcode = dotcode class TypeNode(Node): def __init__(self, name): + super().__init__() self.name = name - self.attrs = {} - self.methods = [] - - @property - def attributes(self): - return self.attrs.keys() + self.attributes = {} + self.methods = {} class DataNode(Node): def __init__(self, vname, value): + super().__init__() self.name = vname self.value = value class FunctionNode(Node): - def __init__(self, fname, params, localvars, instructions, ctor= False): + def __init__(self, fname, params, localvars, instructions): + super().__init__() self.name = fname self.params = params self.localvars = localvars self.instructions = instructions - self.ctor = ctor - -class ParamNode(Node): - def __init__(self, name): - self.name = name + self.labels_count = 0 class LocalNode(Node): def __init__(self, name): + super().__init__() self.name = name class InstructionNode(Node): - def __init__(self, dest, op, second_op): - self.dest = dest - self.op = op - self.second_op = second_op - + pass class AssignNode(InstructionNode): def __init__(self, dest, source): + super().__init__() self.dest = dest self.source = source -class BinaryOperatorNode(InstructionNode): +class ArithmeticNode(InstructionNode): def __init__(self, dest, left, right): + super().__init__() self.dest = dest self.left = left self.right = right -class PlusNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) +class PlusNode(ArithmeticNode): + pass -class MinusNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) +class MinusNode(ArithmeticNode): + pass -class StarNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) +class StarNode(ArithmeticNode): + pass -class DivNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) +class DivNode(ArithmeticNode): + pass -class EqualNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) +class LessNode(ArithmeticNode): + pass -class StringEqualNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) +class EqualNode(ArithmeticNode): + pass -class LessNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) +class EqualStringNode(ArithmeticNode): + pass -class LeqNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) +class LessEqualNode(ArithmeticNode): + pass class GetAttribNode(InstructionNode): - def __init__(self, dest, inst, attr): - self. dest = dest - self.inst = inst + def __init__(self, dest, obj, attr, computed_type): + super().__init__() + self.dest = dest + self.obj = obj self.attr = attr + self.computed_type = computed_type -class SetAttribNode(InstructionNode): - def __init__(self, inst, attr, source): - self.inst = inst - self.attr = attr - self.source = source + def __repr__(self): + return f"{self.dest} = GETATTR {self.obj} {self.attr}" -class GetIndexNode(InstructionNode): - def __init__(self, dest, array, index): - self.dest = dest - self.array = array - self.index = index -class SetIndexNode(InstructionNode): - def __init__(self, array, index, source): - self.array = array - self.index = index - self.source = source +class SetAttribNode(InstructionNode): + def __init__(self, obj, attr, value, computed_type): + super().__init__() + self.obj = obj + self.attr = attr + self.value = value + self.computed_type = computed_type class AllocateNode(InstructionNode): def __init__(self, itype, dest): + super().__init__() self.type = itype self.dest = dest -class ArrayNode(InstructionNode): - def __init__(self, dest, length): - self.dest = dest - self.length = length - class TypeOfNode(InstructionNode): - def __init__(self, obj, dest): + def __init__(self, dest, obj): + super().__init__() self.obj = obj self.dest = dest -class IsTypeNode(InstructionNode): - def __init(self, dest, type_obj, type_name): - self.dest = dest - self.type_obj = type_obj - self.type_name = type_name + def __repr__(self): + return f"{self.dest} = TYPEOF {self.obj}" -class ParentTypeNode(InstructionNode): - def __init__(self, dest, type_obj): - self.dest = dest - self.type_obj = type_obj class LabelNode(InstructionNode): - def __init__(self, name): - self.name = name + def __init__(self, label): + super().__init__() + self.label = label + + def __repr__(self): + return f"LABEL {self.label}:" + class GotoNode(InstructionNode): def __init__(self, label): + super().__init__() self.label = label + def __repr__(self): + return f"GOTO {self.label}" + + class GotoIfNode(InstructionNode): - def __init__(self, label, condition): - self.label = label + def __init__(self, condition, label): + super().__init__() self.condition = condition + self.label = label + + def __repr__(self): + return f"GOTO {self.label} if {self.condition}" class StaticCallNode(InstructionNode): def __init__(self, function, dest): + super().__init__() self.function = function self.dest = dest + def __repr__(self): + return f"{self.dest} = CALL {self.function}" + class DynamicCallNode(InstructionNode): - def __init__(self, xtype, method, dest): - self.type = xtype + def __init__(self, type, method, dest): + super().__init__() + self.type = type self.method = method self.dest = dest + def __repr__(self): + return f"{self.dest} = VCALL {self.type} {self.method}" + class ArgNode(InstructionNode): def __init__(self, name): + super().__init__() self.name = name + def __repr__(self): + return f"ARG {self.name}" + + class ReturnNode(InstructionNode): def __init__(self, value=None): + super().__init__() self.value = value -class EndNode(InstructionNode): - def __init__(self): - pass + def __repr__(self): + return f"RETURN {self.value}" + class LoadNode(InstructionNode): def __init__(self, dest, msg): + super().__init__() self.dest = dest self.msg = msg + def __repr__(self): + return f"{self.dest} LOAD {self.msg}" + class LengthNode(InstructionNode): - def __init__(self, dest, string): + def __init__(self, dest, source): + super().__init__() self.dest = dest - self.string = string + self.source = source class ConcatNode(InstructionNode): - def __init__(self, dest, prefix, sufix): + def __init__(self, dest, prefix, suffix, length): + super().__init__() self.dest = dest self.prefix = prefix - self.sufix = sufix + self.suffix = suffix + self.length = length class PrefixNode(InstructionNode): - def __init__(self, dest, string, n): - self.dest = dest - self.string = string - self.n = n + pass class SubstringNode(InstructionNode): - def __init__(self, dest, string, i, n): + def __init__(self, dest, str_value, index, length): + super().__init__() self.dest = dest - self.string = string - self.i = i - self.n = n + self.str_value = str_value + self.index = index + self.length = length class ToStrNode(InstructionNode): - def __init__(self, dest, ivalue): + def __init__(self, dest, value): + super().__init__() self.dest = dest - self.ivalue = ivalue + self.value = value -class AbortNode(InstructionNode): - def __init__(self): - pass +class ReadStringNode(InstructionNode): + def __init__(self, dest): + super().__init__() + self.dest = dest -class CopyNode(): - def __init__(self, dest, source): +class ReadIntNode(InstructionNode): + def __init__(self, dest): + super().__init__() self.dest = dest - self.source = source -class PrintStrNode(): - def __init__(self, output): - self.output = output +class PrintStringNode(InstructionNode): + def __init__(self, str_addr): + super().__init__() + self.str_addr = str_addr -class ReadStrNode(): - def __init__(self, input): - self.input = input +class PrintIntNode(InstructionNode): + def __init__(self, value): + super().__init__() + self.value = value + +class ExitNode(InstructionNode): + pass + +class CopyNode(InstructionNode): + def __init__(self, dest, value): + super().__init__() + self.dest = dest + self.value = value + +class ErrorNode(InstructionNode): + def __init__(self, data): + super().__init__() + self.data = data + +class VoidNode(InstructionNode): + def __str__(self): + return 'VOID' + +class NameNode(InstructionNode): + def __init__(self, dest, value): + super().__init__() + self.dest = dest + self.value = value + +class NotNode(InstructionNode): + def __init__(self, dest, value): + super().__init__() + self.dest = dest + self.value = value + +class ComplementNode(InstructionNode): + def __init__(self, dest, value): + super().__init__() + self.dest = dest + self.value = value + +class VarNode(InstructionNode): + def __init__(self, name): + super().__init__() + self.name = name + + def __str__(self): + return f'{self.name}' -class PrintIntNode(): - def __init__(self, output): - self.output = output +class AttributeNode(VarNode): + def __init__(self, name, type): + super().__init__(name) + self.type = type + + def __str__(self): + return f'{self.type}.{self.name}' + +class ParamNode(VarNode): + def __init__(self, name): + super().__init__(name) -class ReadIntNode(): - def __init__(self, input): - self.input = input \ No newline at end of file + def __str__(self): + return f'PARAM {self.name}' diff --git a/src/cil_ast/cil_ast_d.py b/src/cil_ast/cil_ast_d.py new file mode 100644 index 000000000..8bfae3dd0 --- /dev/null +++ b/src/cil_ast/cil_ast_d.py @@ -0,0 +1,234 @@ +class Node: + pass + +class ProgramNode(Node): + def __init__(self, dottypes, dotdata, dotcode): + self.dottypes = dottypes + self.dotdata = dotdata + self.dotcode = dotcode + +class TypeNode(Node): + def __init__(self, name): + self.name = name + self.attrs = {} + self.methods = [] + + @property + def attributes(self): + return self.attrs.keys() + +class DataNode(Node): + def __init__(self, vname, value): + self.name = vname + self.value = value + +class FunctionNode(Node): + def __init__(self, fname, params, localvars, instructions, ctor= False): + self.name = fname + self.params = params + self.localvars = localvars + self.instructions = instructions + self.ctor = ctor + +class ParamNode(Node): + def __init__(self, name): + self.name = name + +class LocalNode(Node): + def __init__(self, name): + self.name = name + +class InstructionNode(Node): + def __init__(self, dest, op, second_op): + self.dest = dest + self.op = op + self.second_op = second_op + + +class AssignNode(InstructionNode): + def __init__(self, dest, source): + self.dest = dest + self.source = source + +class BinaryOperatorNode(InstructionNode): + def __init__(self, dest, left, right): + self.dest = dest + self.left = left + self.right = right + +class PlusNode(BinaryOperatorNode): + def __init__(self, dest, left, right): + super().__init__(dest, left, right) + +class MinusNode(BinaryOperatorNode): + def __init__(self, dest, left, right): + super().__init__(dest, left, right) + +class StarNode(BinaryOperatorNode): + def __init__(self, dest, left, right): + super().__init__(dest, left, right) + +class DivNode(BinaryOperatorNode): + def __init__(self, dest, left, right): + super().__init__(dest, left, right) + +class EqualNode(BinaryOperatorNode): + def __init__(self, dest, left, right): + super().__init__(dest, left, right) + +class StringEqualNode(BinaryOperatorNode): + def __init__(self, dest, left, right): + super().__init__(dest, left, right) + +class LessNode(BinaryOperatorNode): + def __init__(self, dest, left, right): + super().__init__(dest, left, right) + +class LeqNode(BinaryOperatorNode): + def __init__(self, dest, left, right): + super().__init__(dest, left, right) + +class GetAttribNode(InstructionNode): + def __init__(self, dest, inst, attr): + self. dest = dest + self.inst = inst + self.attr = attr + +class SetAttribNode(InstructionNode): + def __init__(self, inst, attr, source): + self.inst = inst + self.attr = attr + self.source = source + +class GetIndexNode(InstructionNode): + def __init__(self, dest, array, index): + self.dest = dest + self.array = array + self.index = index + +class SetIndexNode(InstructionNode): + def __init__(self, array, index, source): + self.array = array + self.index = index + self.source = source + +class AllocateNode(InstructionNode): + def __init__(self, itype, dest): + self.type = itype + self.dest = dest + +class ArrayNode(InstructionNode): + def __init__(self, dest, length): + self.dest = dest + self.length = length + +class TypeOfNode(InstructionNode): + def __init__(self, obj, dest): + self.obj = obj + self.dest = dest + +class IsTypeNode(InstructionNode): + def __init(self, dest, type_obj, type_name): + self.dest = dest + self.type_obj = type_obj + self.type_name = type_name + +class ParentTypeNode(InstructionNode): + def __init__(self, dest, type_obj): + self.dest = dest + self.type_obj = type_obj + +class LabelNode(InstructionNode): + def __init__(self, name): + self.name = name + +class GotoNode(InstructionNode): + def __init__(self, label): + self.label = label + +class GotoIfNode(InstructionNode): + def __init__(self, label, condition): + self.label = label + self.condition = condition + +class StaticCallNode(InstructionNode): + def __init__(self, function, dest): + self.function = function + self.dest = dest + +class DynamicCallNode(InstructionNode): + def __init__(self, xtype, method, dest): + self.type = xtype + self.method = method + self.dest = dest + +class ArgNode(InstructionNode): + def __init__(self, name): + self.name = name + +class ReturnNode(InstructionNode): + def __init__(self, value=None): + self.value = value + +class EndNode(InstructionNode): + def __init__(self): + pass + +class LoadNode(InstructionNode): + def __init__(self, dest, msg): + self.dest = dest + self.msg = msg + +class LengthNode(InstructionNode): + def __init__(self, dest, string): + self.dest = dest + self.string = string + +class ConcatNode(InstructionNode): + def __init__(self, dest, prefix, sufix): + self.dest = dest + self.prefix = prefix + self.sufix = sufix + +class PrefixNode(InstructionNode): + def __init__(self, dest, string, n): + self.dest = dest + self.string = string + self.n = n + +class SubstringNode(InstructionNode): + def __init__(self, dest, string, i, n): + self.dest = dest + self.string = string + self.i = i + self.n = n + +class ToStrNode(InstructionNode): + def __init__(self, dest, ivalue): + self.dest = dest + self.ivalue = ivalue + +class AbortNode(InstructionNode): + def __init__(self): + pass + +class CopyNode(): + def __init__(self, dest, source): + self.dest = dest + self.source = source + +class PrintStrNode(): + def __init__(self, output): + self.output = output + +class ReadStrNode(): + def __init__(self, input): + self.input = input + +class PrintIntNode(): + def __init__(self, output): + self.output = output + +class ReadIntNode(): + def __init__(self, input): + self.input = input \ No newline at end of file diff --git a/src/pipeline.py b/src/pipeline.py index 9eb657968..6c086653b 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -6,9 +6,9 @@ from visitors.Inferencer import Inferencer from visitors.Executor import Executor, RuntimeException # from visitors.CooltoCil import COOLToCILVisitor -from visitors.CooltoCil import COOLToCILVisitor +from visitors.CooltoCilM import COOLToCILVisitor from visitors.CilDepicter import get_formatter -from visitors.CiltoMips import CiltoMipsVisitor +# from visitors.CiltoMips import CiltoMipsVisitor class Pipeline(): def __init__(self, program, lexer, parser, verbose=False): @@ -51,15 +51,16 @@ def __init__(self, program, lexer, parser, verbose=False): self.typeChecker = TypeChecker(self.context, self.errors) self.typeChecker.visit( self.ast, scope) if len(self.errors) == 0: - self.coolToCil = COOLToCILVisitor(self.ast, self.context) + self.coolToCil = COOLToCILVisitor(self.context) cil_ast = self.coolToCil.visit(self.ast, scope) + __a = 0 # print(get_formatter(cil_ast)) - self.cilToMips = CiltoMipsVisitor(self.context) - self.cilToMips.visit(cil_ast) - with open('out', 'w') as f: - mips_code = self.cilToMips.data + self.cilToMips.code - for line in mips_code: - f.write(line+'\n') + # self.cilToMips = CiltoMipsVisitor(self.context) + # self.cilToMips.visit(cil_ast) + # with open('out', 'w') as f: + # mips_code = self.cilToMips.data + self.cilToMips.code + # for line in mips_code: + # f.write(line+'\n') if verbose: print('This is after infering types:') print() diff --git a/src/utils/semantic.py b/src/utils/semantic.py index c1ae0af74..2d3c6a44a 100755 --- a/src/utils/semantic.py +++ b/src/utils/semantic.py @@ -29,10 +29,16 @@ 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 - tuple(other.param_types) == tuple(self.param_types)) + return other.name == self.name and \ + other.return_type == self.return_type and \ + other.param_types == self.param_types + + # def __eq__(self, other): + # return (other.name == self.name and + # other.return_type == self.return_type and + # tuple(other.param_types) == tuple(self.param_types)) class Type: def __init__(self, name: str): diff --git a/src/visitors/CooltoCilM.py b/src/visitors/CooltoCilM.py index 82bec35d1..139b04fa6 100644 --- a/src/visitors/CooltoCilM.py +++ b/src/visitors/CooltoCilM.py @@ -13,15 +13,20 @@ def __init__(self, context): self.current_type = None self.current_method = None self.current_function = None + self.context = context + self.vself = VariableInfo('self', None) + self.value_types = ['String', 'Int', 'Bool'] + + self.var_names = {} + self.ctrs = {} + self.types_map = {} + + self.breakline_data = self.register_data('\n') + self.emptystring_data = self.register_data('') self.locals = {} - self.attrs = {}#set() - self.parameters = set() - self.instances = [] - self.ctrs = {} - self.types = {} def transform_to_keys(self, xtype, keys): for i, key in enumerate(keys): @@ -29,7 +34,7 @@ def transform_to_keys(self, xtype, keys): return xtype.attrs def build_type(self, node): - self.types_map[node.id.lex] = type = self.register_type(node.id.lex, node.id.line, node.id.column) + self.types_map[node.id.lex] = type = self.register_type(node.id) iter_type = self.context.get_type(node.id.lex) generation = [] @@ -44,7 +49,7 @@ def build_type(self, node): for meth in methods: type.methods[meth] = self.to_function_name(meth, i.name) for attr in attributes: - type.attributes[attr.name] = cil.AttributeNode(attr.name, i.name, i.line, i.column) + type.attributes[attr.name] = cil.AttributeNode(attr.name, i.name) @property @@ -59,11 +64,25 @@ def localvars(self): def instructions(self): return self.current_function.instructions + + def register_param(self, vinfo): + name = f'local_param_{self.current_function.name}_{vinfo.name}_{len(self.params)}' + param_node = cil.ParamNode(name) + self.params.append(param_node) + self.var_names[vinfo.name] = cil.VarNode(name) + return self.var_names[vinfo.name] + def register_local(self, vinfo): + name = vinfo.name vinfo.name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' local_node = cil.LocalNode(vinfo.name) self.localvars.append(local_node) - return vinfo.name + self.var_names[name] = cil.VarNode(vinfo.name) + return self.var_names[name] # indexar en vinfo.name y quitar la 1ra linea + + def register_attribute(self, name, type): + name = f'attr_{type}_{name}' + return cil.AttributeNode(name, type) def define_internal_local(self): vinfo = VariableInfo('internal', None) @@ -83,6 +102,7 @@ def register_function(self, function_name): def register_type(self, name): type_node = cil.TypeNode(name) + self.types_map[name] = type_node self.dottypes.append(type_node) return type_node @@ -92,6 +112,18 @@ def register_data(self, value): self.dotdata.append(data_node) return data_node + def register_label(self, label): + lname = f'{label}_{self.current_function.labels_count}' + self.current_function.labels_count += 1 + return cil.LabelNode(lname) + + def init_name(self, name): + return f'__init_at_{name}' + + def init_attr_name(self, name): + return f'__init_attr_at_{name}' + + def create_ctr(self, class_node, scope): attrs = [att for att in class_node.features if isinstance(att, AttrDeclarationNode)] while True: @@ -105,6 +137,212 @@ def create_ctr(self, class_node, scope): self.register_instruction(set_attr_node) self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) + + def register_runtime_error(self, condition, msg): + error_node = self.register_label('error_label') + continue_node = self.register_label('continue_label') + self.register_instruction(cil.GotoIfNode(condition, error_node.label)) + self.register_instruction(cil.GotoNode(continue_node.label)) + self.register_instruction(error_node) + data_node = self.register_data(msg) + self.register_instruction(cil.ErrorNode(data_node)) + self.register_instruction(continue_node) + + def register_builtin(self): + # Object + line, column = 0, 0 + type_node = self.register_type('Object') + + self.current_function = self.register_function(self.init_name('Object')) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Object', instance)) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('abort', 'Object')) + self_param = self.register_param(self.vself) + vname = self.define_internal_local() + abort_data = self.register_data('Abort called from class ') + self.register_instruction(cil.LoadNode(vname, abort_data)) + self.register_instruction(cil.PrintStringNode(vname)) + self.register_instruction(cil.TypeOfNode(vname, self_param)) + self.register_instruction(cil.PrintStringNode(vname)) + self.register_instruction(cil.LoadNode(vname, self.breakline_data)) + self.register_instruction(cil.PrintStringNode(vname)) + self.register_instruction(cil.ExitNode()) + + self.current_function = self.register_function(self.to_function_name('type_name', 'Object')) + self_param = self.register_param(self.vself) + result = self.define_internal_local() + self.register_instruction(cil.TypeOfNode(result, self_param)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('copy', 'Object')) + self_param = self.register_param(self.vself) + result = self.define_internal_local() + self.register_instruction(cil.CopyNode(result, self_param)) + self.register_instruction(cil.ReturnNode(result)) + + type_node.methods = {name: self.to_function_name(name, 'Object') for name in ['abort', 'type_name', 'copy']} + type_node.methods['init'] = self.init_name('Object') + obj_methods = ['abort', 'type_name', 'copy'] + + # IO + type_node = self.register_type('IO') + + self.current_function = self.register_function(self.init_name('IO')) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('IO', instance)) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('out_string', 'IO')) + self_param = self.register_param(self.vself) + x = self.register_param(VariableInfo('x', None)) + vname = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(vname, x, 'value', 'String')) + self.register_instruction(cil.PrintStringNode(vname)) + self.register_instruction(cil.ReturnNode(self_param)) + + self.current_function = self.register_function(self.to_function_name('out_int', 'IO')) + self_param = self.register_param(self.vself) + x = self.register_param(VariableInfo('x', None)) + vname = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(vname, x, 'value', 'Int')) + self.register_instruction(cil.PrintIntNode(vname)) + self.register_instruction(cil.ReturnNode(self_param)) + + self.current_function = self.register_function(self.to_function_name('in_string', 'IO')) + self_param = self.register_param(self.vself) + result = self.define_internal_local() + self.register_instruction(cil.ReadStringNode(result)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) + self.register_instruction(cil.ReturnNode(value=instance)) + + self.current_function = self.register_function(self.to_function_name('in_int', 'IO')) + self_param = self.register_param(self.vself) + result = self.define_internal_local() + self.register_instruction(cil.ReadIntNode(result)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} + type_node.methods.update({name: self.to_function_name(name, 'IO') for name in + ['out_string', 'out_int', 'in_string', 'in_int']}) + type_node.methods['init'] = self.init_name('IO') + + # String + type_node = self.register_type('String') + type_node.attributes = {name:self.register_attribute(name, 'String') for name in ['value', 'length']} + + self.current_function = self.register_function(self.init_name('String')) + val = self.register_param(VariableInfo('val', None)) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('String', instance)) + self.register_instruction(cil.SetAttribNode(instance, 'value', val, 'String')) + result = self.define_internal_local() + self.register_instruction(cil.LengthNode(result, val)) + attr = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), attr)) + self.register_instruction(cil.SetAttribNode(instance, 'length', attr, 'String')) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('length', 'String')) + self_param = self.register_param(self.vself) + result = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(result, self_param, 'length', 'String')) + self.register_instruction(cil.ReturnNode(result)) + + self.current_function = self.register_function(self.to_function_name('concat', 'String')) + self_param = self.register_param(self.vself) + s = self.register_param(VariableInfo('s', None)) + str_1 = self.define_internal_local() + str_2 = self.define_internal_local() + length_1 = self.define_internal_local() + length_2 = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(str_1, self_param, 'value', 'String')) + self.register_instruction(cil.GetAttribNode(str_2, s, 'value', 'String')) + self.register_instruction(cil.GetAttribNode(length_1, self_param, 'length', 'String')) + self.register_instruction(cil.GetAttribNode(length_2, s, 'length', 'String')) + self.register_instruction(cil.GetAttribNode(length_1, length_1, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(length_2, length_2, 'value', 'Int')) + self.register_instruction(cil.PlusNode(length_1, length_1, length_2)) + + result = self.define_internal_local() + self.register_instruction(cil.ConcatNode(result, str_1, str_2, length_1)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('substr', 'String')) + self_param = self.register_param(self.vself) + i = self.register_param(VariableInfo('i', None)) + l = self.register_param(VariableInfo('l', None)) + result = self.define_internal_local() + index_value = self.define_internal_local() + length_value = self.define_internal_local() + length_wrapper = self.define_internal_local() + length_attr = self.define_internal_local() + length_substr = self.define_internal_local() + less_value = self.define_internal_local() + str_value = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(str_value, self_param, 'value', 'String')) + self.register_instruction(cil.GetAttribNode(index_value, i, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(length_value, l, 'value', 'Int')) + # Check Out of range error + self.register_instruction(cil.GetAttribNode(length_wrapper, self_param, 'length', 'String')) + self.register_instruction(cil.GetAttribNode(length_attr, length_wrapper, 'value', 'Int')) + self.register_instruction(cil.PlusNode(length_substr, length_value, index_value)) + self.register_instruction(cil.LessNode(less_value, length_attr, length_substr)) + self.register_runtime_error(less_value, 'Substring out of range') + self.register_instruction(cil.SubstringNode(result, str_value, index_value, length_value)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} + type_node.methods.update({name: self.to_function_name(name, 'String') for name in ['length', 'concat', 'substr']}) + type_node.methods['init'] = self.init_name('String') + + # Int + type_node = self.register_type('Int') + type_node.attributes = {name:self.register_attribute(name, 'Int') for name in ['value']} + + self.current_function = self.register_function(self.init_name('Int')) + val = self.register_param(VariableInfo('val', None)) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Int', instance)) + self.register_instruction(cil.SetAttribNode(instance, 'value', val, 'Int')) + self.register_instruction(cil.ReturnNode(instance)) + + type_node.methods = {method:self.to_function_name(method, 'Object') for method in obj_methods} + type_node.methods['init'] = self.init_name('Int') + + # Bool + type_node = self.register_type('Bool') + type_node.attributes = {name:self.register_attribute(name, 'Bool') for name in ['value']} + + self.current_function = self.register_function(self.init_name('Bool')) + val = self.register_param(VariableInfo('val', None)) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Bool', instance)) + self.register_instruction(cil.SetAttribNode(instance, 'value', val, 'Bool')) + self.register_instruction(cil.ReturnNode(instance)) + + type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} + type_node.methods['init'] = self.init_name('Bool') + + + + class COOLToCILVisitor(BaseCOOLToCILVisitor): @visitor.on('node') def visit(self, node): @@ -123,28 +361,50 @@ def features_from_context(self, type): return feats + + def collect_types(self, node): + self.types_map[node.id] = type = self.register_type(node.id) + # Guardar métodos de las clases padres + iter_type = self.context.get_type(node.id) + + generation = [] + while iter_type is not None: + generation.append(iter_type) + iter_type = iter_type.parent + + generation.reverse() + for i in generation: + methods = [m.name for m in i.methods] + attributes = [a.name for m in i.attributes] + methods.sort() + attributes.sort() + for meth in methods: + type.methods[meth] = self.to_function_name(meth, i.name) + for attr in attributes: + type.attributes[attr.name] = cil.AttributeNode(attr.name, i.name) + + @visitor.when(ProgramNode) def visit(self, node, scope): ###################################################### # node.declarations -> [ ClassDeclarationNode ... ] ###################################################### - self.current_function = self.register_function('entry', line=0, column=0) - main_instance = self.define_internal_local(line=0, column=0) - self.register_instruction(cil.StaticCallNode(self.init_name('Main'), main_instance, line=0, column=0)) - self.register_instruction(cil.ArgNode(main_instance, line=0, column=0)) - self.register_instruction(cil.StaticCallNode(self.to_function_name('main', 'Main'), - main_instance, line=0, column=0)) - self.register_instruction(cil.ReturnNode(line=0, column=0, value=0)) + self.current_function = self.register_function('entry') + main_instance = self.define_internal_local() + self.register_instruction(cil.StaticCallNode(self.init_name('Main'), main_instance)) + self.register_instruction(cil.ArgNode(main_instance)) + self.register_instruction(cil.StaticCallNode(self.to_function_name('main', 'Main'),main_instance)) + self.register_instruction(cil.ReturnNode(value=0)) self.register_builtin() self.current_function = None for x in node.declarations: self.collect_types(x) - for x, y in zip(node.declarations, scope.childs): + for x, y in zip(node.declarations, scope.children): self.visit(x, y) - return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode, line=0, column=0) + return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) @visitor.when(ClassDeclarationNode) @@ -155,56 +415,53 @@ def visit(self, node, scope): # node.features -> [ FuncDeclarationNode/AttrDeclarationNode ... ] #################################################################### - self.current_type = self.context.get_type(node.id.lex) - type = self.types_map[node.id.lex] + self.current_type = self.context.get_type(node.id) + type = self.types_map[node.id] - self.current_function = self.register_function(self.init_attr_name(node.id.lex), - line=node.line, column=node.column) + self.current_function = self.register_function(self.init_attr_name(node.id)) type.methods['__init_attr'] = self.current_function.name - self_param = self.register_param(self.vself, line=node.line, column=node.column) + self_param = self.register_param(self.vself) self.localvars.extend(type.attributes.values()) - self.var_names.update({i:cil.AttributeNode(j.name, type.name, node.line, node.column) + self.var_names.update({i:cil.AttributeNode(j.name, type.name) for i,j in type.attributes.items()}) self.vself.name = self_param # Inicializando los atributos de la clase y llamando al constructor del padre if self.current_type.parent.name not in ('Object', 'IO'): - variable = self.define_internal_local(line=node.line, column=node.column) - self.register_instruction(cil.ArgNode(self_param, line=node.line, column=node.column)) + variable = self.define_internal_local() + self.register_instruction(cil.ArgNode(self_param)) self.register_instruction(cil.StaticCallNode( - self.init_attr_name(self.current_type.parent.name), variable, line=node.line, column=node.column)) + self.init_attr_name(self.current_type.parent.name), variable)) # Inicializando los atributos de la clase - for feat, child in zip(node.features, scope.childs): - if isinstance(feat, cool.AttrDeclarationNode): + for feat, child in zip(node.features, scope.children): + if isinstance(feat, AttrDeclarationNode): self.visit(feat, child) - self.register_instruction(cil.SetAttribNode(self_param, feat.id.lex, feat.ret_expr, node.id.lex, - line=node.line, column=node.column)) - self.register_instruction(cil.ReturnNode(node.line, node.column, self_param)) + self.register_instruction(cil.SetAttribNode(self_param, feat.id, feat.ret_expr, node.id,)) + self.register_instruction(cil.ReturnNode(self_param)) # TypeNode de la clase # type = self.types_map[node.id.lex] # type.attributes = [i.name for i in self.current_type.attributes] # Visitar funciones dentro de la clase - for feat, child in zip(node.features, scope.childs): - if isinstance(feat, cool.FuncDeclarationNode): + for feat, child in zip(node.features, scope.children): + if isinstance(feat, FuncDeclarationNode): self.visit(feat, child) self.vself.name = 'self' # Allocate de la clase - self.current_function = self.register_function(self.init_name(node.id.lex), line=node.line, column=node.column) + self.current_function = self.register_function(self.init_name(node.id)) type.methods['__init'] = self.current_function.name self.localvars.extend(type.attributes.values()) - instance = self.define_internal_local(line=node.line, column=node.column) - self.register_instruction(cil.AllocateNode(node.id.lex, instance, line=node.line, column=node.column)) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode(node.id, instance)) - variable = self.define_internal_local(line=node.line, column=node.column) - self.register_instruction(cil.ArgNode(instance, line=node.line, column=node.column)) - self.register_instruction(cil.StaticCallNode(self.init_attr_name(node.id.lex), variable, - line=node.line, column=node.column)) + variable = self.define_internal_local() + self.register_instruction(cil.ArgNode(instance)) + self.register_instruction(cil.StaticCallNode(self.init_attr_name(node.id), variable)) - self.register_instruction(cil.ReturnNode(value=variable, line=node.line, column=node.column)) + self.register_instruction(cil.ReturnNode(value=variable)) self.current_function = None self.current_type = None @@ -227,11 +484,10 @@ def default_value_init(type): else: return VoidNode('void') - variable = self.define_internal_local(line=node.line, column=node.column) + variable = self.define_internal_local() if node.expression: - self.visit(node.expression, scope.childs[0]) - self.register_instruction(cil.AssignNode(variable, node.expression.ret_expr, - line=node.expression.line, column=node.expression.column)) + self.visit(node.expression, scope.children[0]) + self.register_instruction(cil.AssignNode(variable, node.expression.ret_expr)) elif node.type.lex in self.value_types: if node.type.lex == 'SELF_TYPE': stype = self.current_type.name @@ -239,15 +495,15 @@ def default_value_init(type): stype = node.type.lex if stype == 'Int': - self.register_instruction(cil.ArgNode(0, line=node.type.line, column=node.type.column)) + self.register_instruction(cil.ArgNode(0)) elif stype == 'Bool': - self.register_instruction(cil.ArgNode(0, line=node.type.line, column=node.type.column)) + self.register_instruction(cil.ArgNode(0)) elif stype == 'String': data = self.emptystring_data - self.register_instruction(cil.LoadNode(variable, data, line=node.line, column=node.column)) - self.register_instruction(cil.ArgNode(variable, line=node.line, column=node.column)) + self.register_instruction(cil.LoadNode(variable, data)) + self.register_instruction(cil.ArgNode(variable)) self.register_instruction(cil.StaticCallNode(self.init_name(stype), variable, - line=node.line, column=node.column)) + )) node.ret_expr = variable @visitor.when(FuncDeclarationNode) @@ -259,21 +515,20 @@ def visit(self, node, scope): # node.body -> [ ExpressionNode ... ] ############################### - self.current_method = self.current_type.get_method(node.id.lex) + self.current_method = self.current_type.get_method(node.id, self.current_type, False) type = self.types_map[self.current_type.name] self.current_function = self.register_function(self.to_function_name(self.current_method.name, self.current_type.name), - line=node.line, column=node.column) + ) self.localvars.extend(type.attributes.values()) - self_param = self.register_param(self.vself, line=node.line, column=node.column) + self_param = self.register_param(self.vself) self.vself.name = self_param for param, type in node.params: - self.register_param(VariableInfo(param.lex, type.lex), line=param.line, column=param.column) + self.register_param(VariableInfo(param.lex, type.lex)) - self.visit(node.body, scope.childs[0]) - self.register_instruction(cil.ReturnNode(value=node.body.ret_expr, - line=node.body.line, column=node.body.column)) + self.visit(node.body, scope) + self.register_instruction(cil.ReturnNode(value=node.body.ret_expr)) self.current_method = None self.vself.name = 'self' @@ -309,9 +564,8 @@ def visit(self, node, scope): # node.expr -> ExpressionNode ############################### var = self.var_names[node.id.lex] - self.visit(node.expression, scope.childs[0]) - self.register_instruction(cil.AssignNode(var, node.expression.ret_expr, - line=node.expression.line, column=node.expression.column)) + self.visit(node.expression, scope.children[0]) + self.register_instruction(cil.AssignNode(var, node.expression.ret_expr)) node.ret_expr = var @visitor.when(CallNode) @@ -321,51 +575,49 @@ def visit(self, node, scope): # node.method -> str # node.args -> [ ExpressionNode ... ] ############################### - if node.obj: + if node.obj and node.obj.lex != 'self': args = [] - for arg, child in zip(node.args, scope.childs[1:]): + # for arg, child in zip(node.args, scope.children[1:]): + for arg, child in zip(node.args, scope): self.visit(arg, child) - args.append(cil.ArgNode(arg.ret_expr, line=arg.line, column=arg.column)) + args.append(cil.ArgNode(arg.ret_expr)) - self.visit(node.obj, scope.childs[0]) + self.visit(node.obj, scope.children[0]) void = cil.VoidNode() - isvoid = self.define_internal_local(line=node.line, column=node.column) - self.register_instruction(cil.EqualNode(isvoid, node.obj.ret_expr, void, - line=node.obj.line, column=node.obj.column)) - self.register_runtime_error(isvoid, f'{node.id.line, node.id.column} - RuntimeError: Dispatch on void', - line=node.id.line, column=node.id.column) + isvoid = self.define_internal_local() + self.register_instruction(cil.EqualNode(isvoid, node.obj.ret_expr, void)) + self.register_runtime_error(isvoid, 'RuntimeError: Function call in a void instance') - self.register_instruction(cil.ArgNode(node.obj.ret_expr, line=node.obj.line, column=node.obj.column)) + self.register_instruction(cil.ArgNode(node.obj.ret_expr)) for arg in args: self.register_instruction(arg) - ret = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() if node.type is not None: stype = node.type.lex - self.register_instruction(cil.StaticCallNode(self.types_map[stype].methods[node.id.lex], - ret, line=node.id.line, column=node.id.column)) + self.register_instruction(cil.StaticCallNode(self.types_map[stype].methods[node.id], ret)) else: stype = node.obj.static_type.name - self.register_instruction(cil.ArgNode(node.obj.ret_expr, line=node.obj.line, column=node.obj.column)) - self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.id.lex], - ret, line=node.id.line, column=node.id.column)) + self.register_instruction(cil.ArgNode(node.obj.ret_expr)) + self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.id.lex], ret)) node.ret_expr = ret else: - ret = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() args = [] - for arg, child in zip(node.args, scope.childs): - self.visit(arg, child) - args.append(cil.ArgNode(arg.ret_expr, line=arg.line, column=arg.column)) + # for arg, child in zip(node.args, scope.children): + for arg in node.args: + self.visit(arg, scope) + args.append(cil.ArgNode(arg.ret_expr)) - self.register_instruction(cil.ArgNode(self.vself.name, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(self.vself.name)) for arg in args: self.register_instruction(arg) - self.register_instruction(cil.ArgNode(self.vself.name, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(self.vself.name)) stype = self.current_type.name - self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.id.lex], ret, line=node.id.line, column=node.id.column)) + self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.id.lex], ret)) node.ret_expr = ret @@ -374,10 +626,10 @@ def visit(self, node, scope): ############################### # node.lex -> str ############################### - ret = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() - self.register_instruction(cil.ArgNode(node.token.lex, line=node.token.line, column=node.token.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(node.lex)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) node.ret_expr = ret @visitor.when(VariableNode) @@ -395,7 +647,7 @@ def visit(self, node, scope): ############################### # node.lex -> str ############################### - ret = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() if node.type.lex == 'SELF_TYPE': stype = self.current_type.name @@ -403,16 +655,15 @@ def visit(self, node, scope): stype = node.type.lex if stype == 'Int': - self.register_instruction(cil.ArgNode(0, line=node.type.line, column=node.type.column)) + self.register_instruction(cil.ArgNode(0)) elif stype == 'Bool': - self.register_instruction(cil.ArgNode(0, line=node.type.line, column=node.type.column)) + self.register_instruction(cil.ArgNode(0)) elif stype == 'String': data = self.emptystring_data - variable = self.define_internal_local(line=node.line, column=node.column) - self.register_instruction(cil.LoadNode(variable, data, line=node.line, column=node.column)) - self.register_instruction(cil.ArgNode(variable, line=node.line, column=node.column)) - self.register_instruction(cil.StaticCallNode(self.init_name(stype), ret, - line=node.type.line, column=node.type.column)) + variable = self.define_internal_local() + self.register_instruction(cil.LoadNode(variable, data)) + self.register_instruction(cil.ArgNode(variable)) + self.register_instruction(cil.StaticCallNode(self.init_name(stype), ret)) node.ret_expr = ret @visitor.when(PlusNode) @@ -421,21 +672,19 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local(line=node.line, column=node.column) - left = self.define_internal_local(line=node.line, column=node.column) - right = self.define_internal_local(line=node.line, column=node.column) - value = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() - self.visit(node.left, scope.childs[0]) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', - line=node.left.line, column=node.left.line)) - self.visit(node.right, scope.childs[1]) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', - line=node.right.line, column=node.right.line)) - self.register_instruction(cil.PlusNode(value, left, right, line=node.line, column=node.column)) + self.visit(node.left, scope.children[0]) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.visit(node.right, scope.children[1]) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.PlusNode(value, left, right)) - self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret,line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret,)) node.ret_expr = ret @@ -445,21 +694,19 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local(line=node.line, column=node.column) - left = self.define_internal_local(line=node.line, column=node.column) - right = self.define_internal_local(line=node.line, column=node.column) - value = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() - self.visit(node.left, scope.childs[0]) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', - line=node.left.line, column=node.left.line)) - self.visit(node.right, scope.childs[1]) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', - line=node.right.line, column=node.right.line)) - self.register_instruction(cil.MinusNode(value, left, right, line=node.line, column=node.column)) + self.visit(node.left, scope.children[0]) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.visit(node.right, scope.children[1]) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.MinusNode(value, left, right)) - self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) node.ret_expr = ret @@ -469,21 +716,20 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local(line=node.line, column=node.column) - left = self.define_internal_local(line=node.line, column=node.column) - right = self.define_internal_local(line=node.line, column=node.column) - value = self.define_internal_local(line=node.line, column=node.column) - - self.visit(node.left, scope.childs[0]) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', - line=node.left.line, column=node.left.line)) - self.visit(node.right, scope.childs[1]) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', - line=node.right.line, column=node.right.line)) - self.register_instruction(cil.StarNode(value, left, right, line=node.line, column=node.column)) - - self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) - self.register_instruction(ci + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + + self.visit(node.left, scope.children[0]) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.visit(node.right, scope.children[1]) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.StarNode(value, left, right)) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) + node.ret_expr = ret @visitor.when(DivNode) def visit(self, node, scope): @@ -502,33 +748,28 @@ def visit(self, node, scope): ############################### # node.chunk -> [ ExpressionNode... ] ############################### - ret = self.define_internal_local(line=node.line, column=node.column) - left = self.define_internal_local(line=node.line, column=node.column) - right = self.define_internal_local(line=node.line, column=node.column) - value = self.define_internal_local(line=node.line, column=node.column) - zero = self.define_internal_local(line=node.line, column=node.column) - - self.visit(node.left, scope.childs[0]) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', - line=node.left.line, column=node.left.line)) - self.visit(node.right, scope.childs[1]) - - self.register_instruction(cil.ArgNode(0, line=node.line, column=node.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), zero, line=node.line, column=node.column)) - self.register_instruction(cil.GetAttribNode(zero, zero, 'value', 'Int', - line=node.right.line, column=node.right.line)) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', - line=node.right.line, column=node.right.line)) + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + zero = self.define_internal_local() + + self.visit(node.left, scope.children[0]) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.visit(node.right, scope.children[1]) + + self.register_instruction(cil.ArgNode(0)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), zero)) + self.register_instruction(cil.GetAttribNode(zero, zero, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) self.register_instruction(cil.EqualNode(zero, zero, right, - line=node.line, column=node.column)) - self.register_runtime_error(zero, f'{node.right.line, node.right.column} - ' - f'RuntimeError: Division by zero', - line=node.right.line, column=node.right.column) + )) + self.register_runtime_error(zero, 'RuntimeError: Division by zero') - self.register_instruction(cil.DivNode(value, left, right, line=node.line, column=node.column)) + self.register_instruction(cil.DivNode(value, left, right)) - self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) node.ret_expr = ret @visitor.when(ConditionalNode) @@ -539,31 +780,26 @@ def visit(self, node, scope): # node.elseChunk -> ExpressionNode ############################### - ret = self.define_internal_local(line=node.line, column=node.column) - condition = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() + condition = self.define_internal_local() - then_label = self.register_label('then_label', line=node.line, column=node.column) - continue_label = self.register_label('continue_label', line=node.line, column=node.column) + then_label = self.register_label('then_label') + continue_label = self.register_label('continue_label') # IF - self.visit(node.condition, scope.childs[0]) - self.register_instruction(cil.GetAttribNode(condition, node.condition.ret_expr, 'value', 'Bool', - line=node.condition.line, column=node.condition.column)) - self.register_instruction(cil.GotoIfNode(condition, then_label.label, line=node.condition.line, - column=node.condition.column)) + self.visit(node.condition, scope.children[0]) + self.register_instruction(cil.GetAttribNode(condition, node.condition.ret_expr, 'value', 'Bool')) + self.register_instruction(cil.GotoIfNode(condition, then_label.label)) # ELSE - self.visit(node.else_body, scope.childs[2]) - self.register_instruction(cil.AssignNode(ret, node.else_body.ret_expr, line=node.else_body.line, - column=node.else_body.column)) - self.register_instruction(cil.GotoNode(continue_label.label, line=node.else_body.line, - column=node.else_body.column)) + self.visit(node.else_body, scope.children[2]) + self.register_instruction(cil.AssignNode(ret, node.else_body.ret_expr)) + self.register_instruction(cil.GotoNode(continue_label.label)) # THEN self.register_instruction(then_label) - self.visit(node.if_body, scope.childs[1]) - self.register_instruction(cil.AssignNode(ret, node.if_body.ret_expr, line=node.if_body.line, - column=node.if_body.column)) + self.visit(node.if_body, scope.children[1]) + self.register_instruction(cil.AssignNode(ret, node.if_body.ret_expr)) self.register_instruction(continue_label) node.ret_expr = ret @@ -575,50 +811,47 @@ def visit(self, node, scope): # node.expression -> ExpressionNode ############################### - for (id, type, expr), child in zip(node.let_body, scope.childs[:-1]): - variable = self.register_local(VariableInfo(id.lex, type.lex), line=id.line, column=id.column) + for (id, type, expr), child in zip(node.let_body, scope.children[:-1]): + variable = self.register_local(VariableInfo(id.lex, type.lex)) if expr: self.visit(expr, child) - self.register_instruction(cil.AssignNode(variable, expr.ret_expr, line=expr.line, column=expr.column)) + self.register_instruction(cil.AssignNode(variable, expr.ret_expr)) elif type.lex in self.value_types: if type.lex == 'SELF_TYPE': stype = self.current_type.name else: stype = type.lex if stype == 'Int': - self.register_instruction(cil.ArgNode(0, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(0)) elif stype == 'Bool': - self.register_instruction(cil.ArgNode(0, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(0)) elif stype == 'String': data = self.emptystring_data - self.register_instruction(cil.LoadNode(variable, data, line=node.line, column=node.column)) - self.register_instruction(cil.ArgNode(variable, line=node.line, column=node.column)) + self.register_instruction(cil.LoadNode(variable, data)) + self.register_instruction(cil.ArgNode(variable)) self.register_instruction(cil.StaticCallNode(self.init_name(stype), variable, - line=node.line, column=node.column)) + )) - self.visit(node.in_body, scope.childs[-1]) + self.visit(node.in_body, scope.children[-1]) node.ret_expr = node.in_body.ret_expr @visitor.when(WhileNode) def visit(self, node, scope): - while_label = self.register_label('while_label', line=node.line, column=node.column) - loop_label = self.register_label('loop_label', line=node.line, column=node.column) - pool_label = self.register_label('pool_label', line=node.line, column=node.column) - condition = self.define_internal_local(line=node.line, column=node.column) + while_label = self.register_label('while_label') + loop_label = self.register_label('loop_label') + pool_label = self.register_label('pool_label') + condition = self.define_internal_local() self.register_instruction(while_label) - self.visit(node.condition, scope.childs[0]) - self.register_instruction(cil.GetAttribNode(condition, node.condition.ret_expr, 'value', 'Bool', - line=node.condition.line, column=node.condition.column)) - self.register_instruction(cil.GotoIfNode(condition, loop_label.label, line=node.condition.line, - column=node.condition.column)) - self.register_instruction(cil.GotoNode(pool_label.label, line=node.condition.line, - column=node.condition.column)) + self.visit(node.condition, scope.children[0]) + self.register_instruction(cil.GetAttribNode(condition, node.condition.ret_expr, 'value', 'Bool')) + self.register_instruction(cil.GotoIfNode(condition, loop_label.label)) + self.register_instruction(cil.GotoNode(pool_label.label)) self.register_instruction(loop_label) - self.visit(node.body, scope.childs[1]) + self.visit(node.body, scope.children[1]) self.register_instruction( - cil.GotoNode(while_label.label, line=node.condition.line, column=node.condition.column)) + cil.GotoNode(while_label.label)) self.register_instruction(pool_label) node.ret_expr = cil.VoidNode() @@ -628,17 +861,15 @@ def visit(self, node, scope): ############################### # node.expression -> ExpressionNode ############################### - ret = self.define_internal_local(line=node.line, column=node.column) - value = self.define_internal_local(line=node.line, column=node.column) - neg_value = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() + value = self.define_internal_local() + neg_value = self.define_internal_local() - self.visit(node.expression, scope.childs[0]) - self.register_instruction(cil.GetAttribNode(value, node.expression.ret_expr, 'value', 'Bool', - line=node.expression.line, column=node.expression.column)) - self.register_instruction(cil.NotNode(neg_value, value, - line=node.expression.line, column=node.expression.column)) - self.register_instruction(cil.ArgNode(neg_value, line=node.expression.line, column=node.expression.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + self.visit(node.expression, scope.children[0]) + self.register_instruction(cil.GetAttribNode(value, node.expression.ret_expr, 'value', 'Bool')) + self.register_instruction(cil.NotNode(neg_value, value)) + self.register_instruction(cil.ArgNode(neg_value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) node.ret_expr = ret @@ -647,16 +878,15 @@ def visit(self, node, scope): ############################### # node.method -> ExpressionNode ############################### - ret = self.define_internal_local(line=node.line, column=node.column) - answer = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() + answer = self.define_internal_local() void = cil.VoidNode() - self.visit(node.expression, scope.childs[0]) - self.register_instruction(cil.EqualNode(answer, node.expression.ret_expr, void, - line=node.expression.line, column=node.expression.column)) + self.visit(node.expression, scope.children[0]) + self.register_instruction(cil.EqualNode(answer, node.expression.ret_expr, void)) - self.register_instruction(cil.ArgNode(answer, line=node.expression.line, column=node.expression.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(answer)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) node.ret_expr = ret @visitor.when(ComplementNode) @@ -664,18 +894,16 @@ def visit(self, node, scope): ############################### # node.expr -> ExpressionNode ############################### - ret = self.define_internal_local(line=node.line, column=node.column) - value = self.define_internal_local(line=node.line, column=node.column) - answer = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() + value = self.define_internal_local() + answer = self.define_internal_local() - self.visit(node.expression, scope.childs[0]) - self.register_instruction(cil.GetAttribNode(value, node.expression.ret_expr, 'value', 'Int', - line=node.expression.line, column=node.expression.column)) - self.register_instruction(cil.ComplementNode(answer, value, - line=node.expression.line, column=node.expression.column)) + self.visit(node.expression, scope.children[0]) + self.register_instruction(cil.GetAttribNode(value, node.expression.ret_expr, 'value', 'Int')) + self.register_instruction(cil.ComplementNode(answer, value)) - self.register_instruction(cil.ArgNode(answer,line=node.expression.line, column=node.expression.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(answer)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) node.ret_expr = ret @visitor.when(SwitchCaseNode) @@ -684,53 +912,46 @@ def visit(self, node, scope): # node.expr -> ExpressionNode # node.case_list = [ (id, type, expr)... ] ############################### - ret = self.define_internal_local(line=node.line, column=node.column) - vtype = self.define_internal_local(line=node.line, column=node.column) - cond = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() + vtype = self.define_internal_local() + cond = self.define_internal_local() - self.visit(node.expression, scope.childs[0]) - self.register_instruction(cil.TypeOfNode(vtype, node.expression.ret_expr, line=node.expression.line, - column=node.expression.column)) + self.visit(node.expression, scope.children[0]) + self.register_instruction(cil.TypeOfNode(vtype, node.expression.ret_expr)) - isvoid = self.define_internal_local(line=node.line, column=node.column) - self.register_instruction(cil.EqualNode(isvoid, node.expression.ret_expr, cil.VoidNode(), - line=node.expression.line, column=node.expression.column)) - self.register_runtime_error(isvoid, f'{node.expression.line, node.expression.column} - ' - f'RuntimeError: Case on void', - line=node.expression.line, column=node.expression.column) + isvoid = self.define_internal_local() + self.register_instruction(cil.EqualNode(isvoid, node.expression.ret_expr, cil.VoidNode())) + self.register_runtime_error(isvoid, 'RuntimeError: void in switch case') - end_label = self.register_label('case_end_label', line=node.line, column=node.column) + end_label = self.register_label('case_end_label') - branch_type = self.define_internal_local(line=node.line, column=node.column) + branch_type = self.define_internal_local() seen = [] labels = [] branches = sorted(node.branches, key=lambda x: self.context.get_type(x[1].lex).depth, reverse=True) for p, (id, type, expr) in enumerate(branches): - labels.append(self.register_label(f'case_label_{p}', line=id.line, column=id.column)) + labels.append(self.register_label(f'case_label_{p}')) for t in self.context.subtree(type.lex): if t not in seen: seen.append(t) - self.register_instruction(cil.NameNode(branch_type, t.name, line=id.line, column=id.column)) - self.register_instruction(cil.EqualNode(cond, branch_type, vtype, line=id.line, column=id.column)) - self.register_instruction(cil.GotoIfNode(cond, labels[-1].label, line=id.line, column=id.column)) + self.register_instruction(cil.NameNode(branch_type, t.name)) + self.register_instruction(cil.EqualNode(cond, branch_type, vtype)) + self.register_instruction(cil.GotoIfNode(cond, labels[-1].label)) - data = self.register_data(f'{node.expression.line, node.expression.column} - ' - f'RuntimeError: Case statement without a match branch', - line=node.expression.line, column=node.expression.column) - self.register_instruction(cil.ErrorNode(data, line=node.expression.line, column=node.expression.column)) + data = self.register_data('RuntimeError: Case statement without a match branch') + self.register_instruction(cil.ErrorNode(data)) for p, label in enumerate(labels): id, type, expr = branches[p] - sc = scope.childs[p + 1] + sc = scope.children[p + 1] self.register_instruction(label) - var = self.register_local(VariableInfo(id.lex, vtype), line=id.line, column=id.column) - self.register_instruction(cil.AssignNode(var, node.expression.ret_expr, line=node.expression.line, - column=node.expression.column)) + var = self.register_local(VariableInfo(id.lex, vtype)) + self.register_instruction(cil.AssignNode(var, node.expression.ret_expr)) self.visit(expr, sc) - self.register_instruction(cil.AssignNode(ret, expr.ret_expr, line=expr.line, column=expr.column)) - self.register_instruction(cil.GotoNode(end_label.label, line=expr.line, column=expr.column)) + self.register_instruction(cil.AssignNode(ret, expr.ret_expr)) + self.register_instruction(cil.GotoNode(end_label.label)) self.register_instruction(end_label) node.ret_expr = ret @@ -750,18 +971,18 @@ def visit(self, node, scope): @visitor.when(TrueNode) def visit(self, node, scope): - ret = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() - self.register_instruction(cil.ArgNode(1 if node.token.lex else 0, line=node.token.line, column=node.token.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(1 if node.token.lex else 0)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) node.ret_expr = ret @visitor.when(FalseNode) def visit(self, node, scope): - ret = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() - self.register_instruction(cil.ArgNode(1 if node.token.lex else 0, line=node.token.line, column=node.token.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(1 if node.token.lex else 0)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) node.ret_expr = ret @visitor.when(StringNode) @@ -777,21 +998,19 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local(line=node.line, column=node.column) - left = self.define_internal_local(line=node.line, column=node.column) - right = self.define_internal_local(line=node.line, column=node.column) - value = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() - self.visit(node.left, scope.childs[0]) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', - line=node.left.line, column=node.left.line)) - self.visit(node.right, scope.childs[1]) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', - line=node.right.line, column=node.right.line)) - self.register_instruction(cil.LessNode(value, left, right, line=node.line, column=node.column)) + self.visit(node.left, scope.children[0]) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.visit(node.right, scope.children[1]) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.LessNode(value, left, right)) - self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) node.ret_expr = ret @@ -801,21 +1020,19 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local(line=node.line, column=node.column) - left = self.define_internal_local(line=node.line, column=node.column) - right = self.define_internal_local(line=node.line, column=node.column) - value = self.define_internal_local(line=node.line, column=node.column) + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() - self.visit(node.left, scope.childs[0]) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', - line=node.left.line, column=node.left.line)) - self.visit(node.right, scope.childs[1]) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', - line=node.right.line, column=node.right.line)) - self.register_instruction(cil.LessEqualNode(value, left, right, line=node.line, column=node.column)) + self.visit(node.left, scope.children[0]) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.visit(node.right, scope.children[1]) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.LessEqualNode(value, left, right)) - self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) node.ret_expr = ret @@ -825,76 +1042,59 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - ret = self.define_internal_local(line=node.line, column=node.column) - left = self.define_internal_local(line=node.line, column=node.column) - right = self.define_internal_local(line=node.line, column=node.column) - type_left = self.define_internal_local(line=node.line, column=node.column) - type_int = self.define_internal_local(line=node.line, column=node.column) - type_string = self.define_internal_local(line=node.line, column=node.column) - type_bool = self.define_internal_local(line=node.line, column=node.column) - equal = self.define_internal_local(line=node.line, column=node.column) - value = self.define_internal_local(line=node.line, column=node.column) - - int_comparisson = self.register_label('int_comparisson', line=node.line, column=node.column) - string_comparisson = self.register_label('string_comparisson', line=node.line, column=node.column) - bool_comparisson = self.register_label('bool_comparisson', line=node.line, column=node.column) - continue_label = self.register_label('continue_label', line=node.line, column=node.column) - - self.visit(node.left, scope.childs[0]) - self.visit(node.right, scope.childs[1]) - - self.register_instruction(cil.TypeOfNode(type_left, node.left.ret_expr, - line=node.left.line, column=node.left.column)) - self.register_instruction(cil.NameNode(type_int, 'Int', line=node.line, column=node.column)) - self.register_instruction(cil.NameNode(type_string, 'String', line=node.line, column=node.column)) - self.register_instruction(cil.NameNode(type_bool, 'Bool', line=node.line, column=node.column)) - - self.register_instruction(cil.EqualNode(equal, type_left, type_int, - line=node.left.line, column=node.left.column)) - self.register_instruction(cil.GotoIfNode(equal, int_comparisson.label, - line=node.left.line, column=node.left.column)) - self.register_instruction(cil.EqualNode(equal, type_left, type_string, - line=node.left.line, column=node.left.column)) - self.register_instruction(cil.GotoIfNode(equal, string_comparisson.label, - line=node.left.line, column=node.left.column)) - self.register_instruction(cil.EqualNode(equal, type_left, type_bool, - line=node.left.line, column=node.left.column)) - self.register_instruction(cil.GotoIfNode(equal, bool_comparisson.label, - line=node.left.line, column=node.left.column)) - - self.register_instruction(cil.EqualNode(value, node.left.ret_expr, node.right.ret_expr, - line=node.left.line, column=node.left.column)) - self.register_instruction(cil.GotoNode(continue_label.label, - line=node.left.line, column=node.left.column)) + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + type_left = self.define_internal_local() + type_int = self.define_internal_local() + type_string = self.define_internal_local() + type_bool = self.define_internal_local() + equal = self.define_internal_local() + value = self.define_internal_local() + + int_comparisson = self.register_label('int_comparisson') + string_comparisson = self.register_label('string_comparisson') + bool_comparisson = self.register_label('bool_comparisson') + continue_label = self.register_label('continue_label') + + self.visit(node.left, scope.children[0]) + self.visit(node.right, scope.children[1]) + + self.register_instruction(cil.TypeOfNode(type_left, node.left.ret_expr)) + self.register_instruction(cil.NameNode(type_int, 'Int')) + self.register_instruction(cil.NameNode(type_string, 'String')) + self.register_instruction(cil.NameNode(type_bool, 'Bool')) + + self.register_instruction(cil.EqualNode(equal, type_left, type_int)) + self.register_instruction(cil.GotoIfNode(equal, int_comparisson.label)) + self.register_instruction(cil.EqualNode(equal, type_left, type_string)) + self.register_instruction(cil.GotoIfNode(equal, string_comparisson.label)) + self.register_instruction(cil.EqualNode(equal, type_left, type_bool)) + self.register_instruction(cil.GotoIfNode(equal, bool_comparisson.label)) + + self.register_instruction(cil.EqualNode(value, node.left.ret_expr, node.right.ret_expr)) + self.register_instruction(cil.GotoNode(continue_label.label)) self.register_instruction(int_comparisson) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int', - line=node.right.line, column=node.right.column)) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int', - line=node.right.line, column=node.right.column)) - self.register_instruction(cil.EqualNode(value, left, right, line=node.line, column=node.column)) - self.register_instruction(cil.GotoNode(continue_label.label, line=node.line, column=node.column)) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.EqualNode(value, left, right)) + self.register_instruction(cil.GotoNode(continue_label.label)) self.register_instruction(string_comparisson) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'String', - line=node.left.line, column=node.left.column)) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'String', - line=node.right.line, column=node.right.column)) - self.register_instruction(cil.EqualStringNode(value, left, right, - line=node.right.line, column=node.right.column)) - self.register_instruction(cil.GotoNode(continue_label.label, line=node.line, column=node.column)) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'String')) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'String')) + self.register_instruction(cil.EqualStringNode(value, left, right)) + self.register_instruction(cil.GotoNode(continue_label.label)) self.register_instruction(bool_comparisson) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Bool', - line=node.left.line, column=node.left.column)) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Bool', - line=node.right.line, column=node.right.column)) - self.register_instruction(cil.EqualNode(value, left, right, - line=node.right.line, column=node.right.column)) - self.register_instruction(cil.GotoNode(continue_label.label, line=node.line, column=node.column)) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Bool')) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Bool')) + self.register_instruction(cil.EqualNode(value, left, right)) + self.register_instruction(cil.GotoNode(continue_label.label)) self.register_instruction(continue_label) - self.register_instruction(cil.ArgNode(value, line=node.line, column=node.column)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret, line=node.line, column=node.column)) + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) node.ret_expr = ret \ No newline at end of file diff --git a/tests/codegen/basic.cl b/tests/codegen/basic.cl index 53012ef14..fc89ee1ed 100755 --- a/tests/codegen/basic.cl +++ b/tests/codegen/basic.cl @@ -1,19 +1,18 @@ class Main inherits IO { - a : A <- new B; - main(): Int { - out_string("Hello, World.\n") + main(): IO { + out_int(12) }; }; -class A : Int{ - aa : Int <- 101; - a(): Int { - aa - } -} -class B : Int{ - bb : Int <- 102; - a(): Int { - bb - } -} +--class Main inherits IO { +-- main(): IO { +-- out_int(f()) +-- }; +-- f() : Int { +-- if true then +-- 1 +-- else +-- 2 +-- fi +-- }; +--}; \ No newline at end of file diff --git a/tests/codegen/hello_world.cl b/tests/codegen/hello_world.cl index 28b2be96b..0c818f908 100755 --- a/tests/codegen/hello_world.cl +++ b/tests/codegen/hello_world.cl @@ -1,15 +1,5 @@ class Main inherits IO { main(): IO { - out_string("Hello world") + out_string("Hello, World.\n") }; }; - --- class X { --- f(a: Int) : Int{ --- { --- let a : Int <- 0 in a; --- a <- 1; --- a; --- } --- }; --- }; \ No newline at end of file From fa5aaa25d65ef0359d295c7b139945c9ad1d2354 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Sat, 26 Feb 2022 00:42:32 -0500 Subject: [PATCH 70/93] before adding cil2mips visitor --- src/visitors/CooltoCilM.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/visitors/CooltoCilM.py b/src/visitors/CooltoCilM.py index 139b04fa6..8d716c6a0 100644 --- a/src/visitors/CooltoCilM.py +++ b/src/visitors/CooltoCilM.py @@ -617,7 +617,7 @@ def visit(self, node, scope): self.register_instruction(cil.ArgNode(self.vself.name)) stype = self.current_type.name - self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.id.lex], ret)) + self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.method], ret)) node.ret_expr = ret From 518274a7153a9b745f3c11acf8443b29bc49e442 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Sat, 26 Feb 2022 03:42:20 -0500 Subject: [PATCH 71/93] cil being regenerated --- .gitignore | 2 + out | 910 ------------------------------------- src/cil_ast/cil_ast.py | 208 +++++++++ src/out | 4 - src/pipeline.py | 11 + src/visitors/CooltoCilM.py | 66 +-- tests/codegen/basic.cl | 3 +- 7 files changed, 263 insertions(+), 941 deletions(-) delete mode 100644 out delete mode 100644 src/out diff --git a/.gitignore b/.gitignore index 81f4a248a..077216c51 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ # Created by https://www.gitignore.io/api/visualstudiocode,linux,latex,python # Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python CooltoCilM +imm.asm +src/mmips #CooltoCilA ### LaTeX ### ## Core latex/pdflatex auxiliary files: diff --git a/out b/out deleted file mode 100644 index 65854557d..000000000 --- a/out +++ /dev/null @@ -1,910 +0,0 @@ -.data -p_error: .asciiz "Aborting from String" -zero_error: .asciiz "Division by zero" -range_error: .asciiz "Index out of range" -Object_class_name: .asciiz "Object" -String_class_name: .asciiz "String" -IO_class_name: .asciiz "IO" -Int_class_name: .asciiz "Int" -Bool_class_name: .asciiz "Bool" -Main_class_name: .asciiz "Main" -Object_conforms_to: .word Object_class_name -String_conforms_to: .word String_class_name, Object_class_name -IO_conforms_to: .word IO_class_name, Object_class_name -Int_conforms_to: .word Int_class_name, Object_class_name -Bool_conforms_to: .word Bool_class_name, Object_class_name -Main_conforms_to: .word Main_class_name, IO_class_name, Object_class_name -.text -.globl main - - str_len: - li $v0,0 - move $v1, $a0 - __lenLoop: - lbu $t1, 0($v1) - beq $t1,$0,__lenExit - addu $v0,$v0,1 - addu $v1,$v1,1 - b __lenLoop - __lenExit: - jr $ra - - str_copy: - lw $a0, -4($fp) - lw $a1, -8($fp) - lw $a2, -12($fp) - - move $v0, $a0 - - str__while_copy: - beqz $a2, str__end_copy - - xor $t0, $t0, $t0 - lb $t0, 0($a1) - sb $t0, 0($a0) - - subu $a2, $a2,1 - addu $a0, $a0,1 - addu $a1, $a1,1 - j str__while_copy - - str__end_copy: - jr $ra - - str_index_error: - li $v0, 4 - la $a0, range_error - syscall - li $v0, 10 - syscall - jr $ra - - str_substring: - # load arguments - move $t5, $a0 - move $t3, $a1 - li $t4, 0 - move $t2, $a2 - - # check for index out of range - move $a3, $ra - jal str_len - move $ra, $a3 - - addu $t6, $t3, $t2 - bgt $t6, $v0, str_index_error - - # create substring - move $a0, $t2 #length - addu $a0, $a0, 1 - li $v0, 9 #make space - syscall - # tenemos en $v0 la direccion del nuevo string - - addu $t5, $t5, $t3 - - subu $sp, $sp, 4 - sw $ra, 0($sp) - subu $sp, $sp, 4 - sw $fp, 0($sp) - move $fp,$sp - subu $sp, $sp, 4 - sw $v0, 0($sp) - subu $sp, $sp, 4 - sw $t5, 0($sp) - subu $sp, $sp, 4 - sw $t2, 0($sp) - - jal str_copy - move $sp,$fp - - lw $fp, 0($sp) - addi $sp,$sp, 4 - - lw $ra, 0($sp) - addi $sp,$sp, 4 - - addu $t9, $v0, $t2 #null terminated - sb $0, 0($t9) - jr $ra - - - #$a0 el prefijo, y en $a1, el str. - - str1_prefix_of_str2: - lb $t0, 0($a0) - lb $t1, 0($a1) - beqz $t0, prefixTrue - bne $t0, $t1, prefixFalse - addu $a0,$a0,1 - addu $a1,$a1,1 - b str1_prefix_of_str2 - prefixFalse: - li $v0, 0 - jr $ra - prefixTrue: - li $v0, 1 - jr $ra - - str_comparer: - move $a0, $a2 - move $a1, $ra - jal str_len #$v0=len(message1) - move $ra, $a1 - - move $s1, $v0 - - move $a0, $a3 - - move $a1, $ra - jal str_len #$v0=len(message2) - move $ra, $a1 - - beq $v0, $s1, string_length_comparer_end - li $v0, 0 - j string_comparer_end - - string_length_comparer_end: - move $a0, $a2 - move $a1, $a3 - move $s1, $ra - jal str1_prefix_of_str2 - move $ra, $s1 - string_comparer_end: - jr $ra - - case_conform: - move $s0, $a0 - move $s1, $a1 - START_CASE_LOOP: - - lw $a1, 0($s0) - - addi $s0, $s0, 4 - - move $t0, $s1 # Address of 1st element in array. - li $v0, 4 # System call code 4 (print_string). - li $t1, 0 # Initialize array offset. - - loop_INTERNAL: - - # Use the address mode label(register). - - lw $a0, 0($t0) # Load value at address str_array + $t1 (offset). - - beq $a0, $a1, END_CASE_LOOP - - addi $t0, $t0, 4 # Next element, i.e., increment offset by 4. - addi $t1, $t1, 4 # Next element, i.e., increment offset by 4. - - # Done or loop once more? - - ble $t1, $a2, loop_INTERNAL - b START_CASE_LOOP - END_CASE_LOOP: - move $v0, $a0 - jr $ra - - str_concat: - move $a3, $ra - jal str_len - move $ra, $a3 - - # guardamos en $t4, la longitud de str1 - move $t4, $v0 - # el str1 - move $t5, $a0 - move $a0, $a1 - move $t8, $a1 - - move $a3, $ra - jal str_len - move $ra, $a3 - - # reservamos espacio para el nuevo string - # guardamos en $t7 la longitud de str2 - move $t7, $v0 - addu $v0, $t4, $v0 - addu $v0, $v0, 1 - move $a0, $v0 - li $v0, 9 - syscall - - # en $t5 esta str1, y en $t8, str2------------------------- - - # save str1 part------------------------------------------ - # push $ra - subu $sp, $sp, 4 - sw $ra, 0($sp) - # push $fp - subu $sp, $sp, 4 - sw $fp, 0($sp) - - move $fp, $sp - - # push dest to copy pointer - subu $sp, $sp, 4 - sw $v0, 0($sp) - - # push copy from - subu $sp, $sp, 4 - sw $t5, 0($sp) - - # push how much to copy - subu $sp, $sp, 4 - sw $t4, 0($sp) - - jal str_copy - - move $sp, $fp - - lw $fp, 0($sp) - addu $sp, $sp, 4 - - lw $ra, 0($sp) - addu $sp, $sp, 4 - - # save str2 part------------- - # push $ra - subu $sp, $sp, 4 - sw $ra, 0($sp) - - # push $fp - subu $sp, $sp, 4 - sw $fp, 0($sp) - - move $fp, $sp - - # push where to copy - move $t9, $v0 - addu $t0, $v0, $t4 - subu $sp, $sp, 4 - sw $t0, 0($sp) - - # push copy from - subu $sp, $sp, 4 - sw $t8, 0($sp) - - subu $sp, $sp, 4 - sw $t7, 0($sp) - - jal str_copy - - move $sp, $fp - - lw $fp, 0($sp) - addu $sp, $sp, 4 - - lw $ra, 0($sp) - addu $sp, $sp, 4 - - addu $v0, $t7, $v0 - sb $0, 0($v0) - - move $v0, $t9 - jr $ra - -main: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 12 -# Allocate -addiu $a0, $zero, 8 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 36 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_in_string_at_IO -sw $a0, 12($s0) -la $a0, function_out_string_at_IO -sw $a0, 16($s0) -la $a0, function_in_int_at_IO -sw $a0, 20($s0) -la $a0, function_out_int_at_IO -sw $a0, 24($s0) -la $a0, function_main_at_Main -sw $a0, 28($s0) -la $a0, function_f_at_Main -sw $a0, 32($s0) -sw $s0, 4($s1) -la $a0, Main_conforms_to -sw $a0, 0($s1) -sw $s1, 0($fp) -# Arg -addi $sp, $sp, -4 -lw $t1, 0($fp) -sw $t1, 0($sp) -# Call -jal function_main_at_Main -sw $v0, -4($fp) -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_abort_at_Object: -addi $sp, $sp, -0 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 8 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_copy_at_Object: -addi $sp, $sp, -0 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 8 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_type_name_at_Object: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 16 -# TypeOf -lw $s0, 0($fp) -lw $t1, 0($s0) -lw $t2, 0($t1) -sw $t2, -4($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 24 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_length_at_String -sw $a0, 12($s0) -la $a0, function_substr_at_String -sw $a0, 16($s0) -la $a0, function_concat_at_String -sw $a0, 20($s0) -sw $s0, 4($s1) -la $a0, String_conforms_to -sw $a0, 0($s1) -sw $s1, -8($fp) -# SetAttrib -lw $s1, -8($fp) -lw $s0, -4($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, -8($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_concat_at_String: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 20 -# Concat -lw $s0, 0($fp) -lw $a0, 8($s0) -lw $s0, -4($fp) -lw $a1, 8($s0) -jal str_concat -sw $v0, -8($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 24 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_length_at_String -sw $a0, 12($s0) -la $a0, function_substr_at_String -sw $a0, 16($s0) -la $a0, function_concat_at_String -sw $a0, 20($s0) -sw $s0, 4($s1) -la $a0, String_conforms_to -sw $a0, 0($s1) -sw $s1, -12($fp) -# SetAttrib -lw $s1, -12($fp) -lw $s0, -8($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, -12($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_length_at_String: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 16 -# LengthNode -lw $s0, 0($fp) -lw $a0, 8($s0) -jal str_len -sw $v0, -4($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -sw $s0, 4($s1) -la $a0, Int_conforms_to -sw $a0, 0($s1) -sw $s1, -8($fp) -# SetAttrib -lw $s1, -8($fp) -lw $s0, -4($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, -8($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_substr_at_String: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 24 -# Substring -lw $s0, 0($fp) -lw $a0, 8($s0) -lw $s0, -4($fp) -lw $a1, 8($s0) -lw $s0, -8($fp) -lw $a2, 8($s0) -jal str_substring -sw $v0, -12($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 24 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_length_at_String -sw $a0, 12($s0) -la $a0, function_substr_at_String -sw $a0, 16($s0) -la $a0, function_concat_at_String -sw $a0, 20($s0) -sw $s0, 4($s1) -la $a0, String_conforms_to -sw $a0, 0($s1) -sw $s1, -16($fp) -# SetAttrib -lw $s1, -16($fp) -lw $s0, -12($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, -16($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_out_string_at_IO: -addi $sp, $sp, -0 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 12 -## out_string builtin -li $v0, 4 -lw $t0, -4($fp) -lw $a0, 8($t0) -syscall -# ReturnNode -lw $t0, 0($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_in_string_at_IO: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 16 -## in_string builtin -li $v0, 9 -li $a0, 1024 -syscall -move $a0, $v0 -li $v0, 8 -la $a1, 1024 -syscall -move $t0, $a0 -move $a3, $ra -jal str_len -move $ra, $a3 -subu $v0, $v0, 1 -addu $v1, $v0, $t0 -sb $0, 0($v1) -move $v0, $t0 -sw $v0, -4($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 24 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_length_at_String -sw $a0, 12($s0) -la $a0, function_substr_at_String -sw $a0, 16($s0) -la $a0, function_concat_at_String -sw $a0, 20($s0) -sw $s0, 4($s1) -la $a0, String_conforms_to -sw $a0, 0($s1) -sw $s1, -8($fp) -# SetAttrib -lw $s1, -8($fp) -lw $s0, -4($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, -8($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_out_int_at_IO: -addi $sp, $sp, -0 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 12 -## out_int builtin -li $v0, 1 -lw $t0, -4($fp) -lw $a0, 8($t0) -syscall -# ReturnNode -lw $t0, 0($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_in_int_at_IO: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 16 -## out_int builtin -li $v0, 5 -syscall -move $t0, $v0 -sw $t0, -4($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -sw $s0, 4($s1) -la $a0, Int_conforms_to -sw $a0, 0($s1) -sw $s1, -8($fp) -# SetAttrib -lw $s1, -8($fp) -lw $s0, -4($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, -8($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_ctor_at_Main: -addi $sp, $sp, -4 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 8 -# Allocate -addiu $a0, $zero, 8 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 36 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_in_string_at_IO -sw $a0, 12($s0) -la $a0, function_out_string_at_IO -sw $a0, 16($s0) -la $a0, function_in_int_at_IO -sw $a0, 20($s0) -la $a0, function_out_int_at_IO -sw $a0, 24($s0) -la $a0, function_main_at_Main -sw $a0, 28($s0) -la $a0, function_f_at_Main -sw $a0, 32($s0) -sw $s0, 4($s1) -la $a0, Main_conforms_to -sw $a0, 0($s1) -sw $s1, 0($fp) -# ReturnNode -lw $t0, 0($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_main_at_Main: -addi $sp, $sp, -16 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 24 -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -sw $s0, 4($s1) -la $a0, Int_conforms_to -sw $a0, 0($s1) -sw $s1, -12($fp) -# SetAttrib -lw $s1, -12($fp) -li $s0, 12 -sw $s0, 8($s1) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -sw $s0, 4($s1) -la $a0, Int_conforms_to -sw $a0, 0($s1) -sw $s1, -16($fp) -# SetAttrib -lw $s1, -16($fp) -li $s0, 3 -sw $s0, 8($s1) -# Plus -lw $t0, -12($fp) # heap address of the left Int -lw $t1, 8($t0) # left Int value -lw $t0, -16($fp) # heap address of the right Int -lw $t2, 8($t0) # right Int value -add $t1, $t1, $t2 # saving to $t1 the result -lw $t0, -8($fp) # heap address of dest -sw $t1, 8($t0) # store result -# Arg -addi $sp, $sp, -4 -lw $t1, 0($fp) -sw $t1, 0($sp) -# Arg -addi $sp, $sp, -4 -lw $t1, -8($fp) -sw $t1, 0($sp) -# Call -jal function_out_int_at_IO -sw $v0, -4($fp) -# ReturnNode -lw $t0, -4($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_f_at_Main: -addi $sp, $sp, -16 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 24 -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -sw $s0, 4($s1) -la $a0, Bool_conforms_to -sw $a0, 0($s1) -sw $s1, -8($fp) -# SetAttrib -lw $s1, -8($fp) -li $s0, 1 -sw $s0, 8($s1) -# goto if -lw $t0 -8($fp) # heap address -lw $t1 8($t0) # value of condition -bnez $t1 label19 # branch on not equal to 0 -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -sw $s0, 4($s1) -la $a0, Int_conforms_to -sw $a0, 0($s1) -sw $s1, -12($fp) -# SetAttrib -lw $s1, -12($fp) -li $s0, 2 -sw $s0, 8($s1) -lw $t0, -12($sp) -sw $t0, -4($sp) -# goto -j label20 # jump unconditionally -# a label -label19: -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -sw $s0, 4($s1) -la $a0, Int_conforms_to -sw $a0, 0($s1) -sw $s1, -16($fp) -# SetAttrib -lw $s1, -16($fp) -li $s0, 1 -sw $s0, 8($s1) -lw $t0, -16($sp) -sw $t0, -4($sp) -# a label -label20: -# ReturnNode -lw $t0, -4($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra diff --git a/src/cil_ast/cil_ast.py b/src/cil_ast/cil_ast.py index f30aab522..1fe4ccaf9 100644 --- a/src/cil_ast/cil_ast.py +++ b/src/cil_ast/cil_ast.py @@ -295,3 +295,211 @@ def __init__(self, name): def __str__(self): return f'PARAM {self.name}' + + + +def get_formatter(): + + class PrintVisitor(object): + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + dottypes = '\n'.join(self.visit(t) for t in node.dottypes) + dotdata = '\n'.join(self.visit(t) for t in node.dotdata) + 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(TypeNode) + def visit(self, node): + attributes = '\n\t'.join(f'attribute {x}' for x in node.attributes) + methods = '\n\t'.join(f'method {x}' for x in node.methods) + + return f'type {node.name} {{\n\t{attributes}\n\t{methods}\n}}' + + @visitor.when(DataNode) + def visit(self, node): + return f'DATA "{node.value}"' + + @visitor.when(FunctionNode) + 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\t{localvars}\n\n\t{instructions}\n}}' + + @visitor.when(ParamNode) + def visit(self, node): + return f'PARAM {node.name}' + + @visitor.when(LocalNode) + def visit(self, node): + return f'LOCAL {node.name}' + + @visitor.when(AssignNode) + def visit(self, node): + return f'{node.dest} = {node.source}' + + @visitor.when(PlusNode) + def visit(self, node): + return f'{node.dest} = {node.left} + {node.right}' + + @visitor.when(MinusNode) + def visit(self, node): + return f'{node.dest} = {node.left} - {node.right}' + + @visitor.when(StarNode) + def visit(self, node): + return f'{node.dest} = {node.left} * {node.right}' + + @visitor.when(DivNode) + def visit(self, node): + return f'{node.dest} = {node.left} / {node.right}' + + @visitor.when(AllocateNode) + def visit(self, node): + return f'{node.dest} = ALLOCATE {node.type}' + + @visitor.when(TypeOfNode) + def visit(self, node): + return f'{node.dest} = TYPEOF {node.obj}' + + @visitor.when(StaticCallNode) + def visit(self, node): + return f'{node.dest} = CALL {node.function}' + + @visitor.when(DynamicCallNode) + def visit(self, node): + return f'{node.dest} = VCALL {node.type} {node.method}' + + @visitor.when(ArgNode) + def visit(self, node): + return f'ARG {node.name}' + + @visitor.when(ReturnNode) + def visit(self, node): + return f'RETURN {node.value if node.value is not None else ""}' + + @visitor.when(LoadNode) + def visit(self, node): + return f'{node.dest} = LOAD {self.visit(node.msg)}' + + @visitor.when(PrintStringNode) + def visit(self, node: PrintStringNode): + return f'PRINTSTRING {node.str_addr}' + + @visitor.when(PrintIntNode) + def visit(self, node: PrintIntNode): + return f'PRINTINT {node.value}' + + @visitor.when(ExitNode) + def visit(self, node: ExitNode): + return f'EXIT' + + @visitor.when(CopyNode) + def visit(self, node): + return f'{node.dest} = COPY {node.value}' + + @visitor.when(GetAttribNode) + def visit(self, node: GetAttribNode): + return f'{node.dest} = GETATTRIB {node.obj}.{node.attr} {node.computed_type}' + + @visitor.when(ErrorNode) + def visit(self, node: ErrorNode): + return f'ERROR {self.visit(node.data)}' + + @visitor.when(ReadStringNode) + def visit(self, node: ReadStringNode): + return f'{node.dest} = READ' + + @visitor.when(ReadIntNode) + def visit(self, node: ReadIntNode): + return f'{node.dest} = READ' + + @visitor.when(SetAttribNode) + def visit(self, node: SetAttribNode): + return f'SETATTR {node.obj}.{node.attr}: {node.computed_type} = {node.value}' + + @visitor.when(LessNode) + def visit(self, node: LessNode): + return f'{node.dest} = {node.left} < {node.right}' + + @visitor.when(GotoIfNode) + def visit(self, node: GotoIfNode): + return f'GOTOIF {node.condition} {node.label}' + + @visitor.when(GotoNode) + def visit(self, node: GotoNode): + return f'GOTO {node.label}' + + @visitor.when(LabelNode) + def visit(self, node: LabelNode): + return f'LABEL {node.label}' + + @visitor.when(SubstringNode) + def visit(self, node: SubstringNode): + return f'{node.dest} = SUBSTRING {node.str_value}[{node.index}:{node.index} up to {node.length}]' + + @visitor.when(ConcatNode) + def visit(self, node: ConcatNode): + return f'{node.dest} = CONCAT {node.prefix} + {node.suffix}' + + @visitor.when(LengthNode) + def visit(self, node: LengthNode): + return f'{node.dest} = LENGTH {node.source}' + + @visitor.when(EqualNode) + def visit(self, node: EqualNode): + return f'{node.dest} = {node.left} == {node.right}' + + @visitor.when(NameNode) + def visit(self, node: NameNode): + return f'{node.dest} = NAME {node.value}' + + @visitor.when(EqualStringNode) + def visit(self, node: EqualStringNode): + return f'{node.dest} = {node.left} == {node.right}' + + @visitor.when(ComplementNode) + def visit(self, node: ComplementNode): + return f'{node.dest} = ~{node.value}' + + @visitor.when(LessEqualNode) + def visit(self, node: LessEqualNode): + return f'{node.dest} = {node.left} <= {node.right}' + + @visitor.when(PrefixNode) + def visit(self, node: PrefixNode): + return f'PREFFIXNODE' + + @visitor.when(ToStrNode) + def visit(self, node: ToStrNode): + return f'{node.dest} = str({node.value})' + + @visitor.when(VoidNode) + def visit(self, node: VoidNode): + return 'VOID' + + @visitor.when(NotNode) + def visit(self, node: NotNode): + return f'{node.dest} = NOT {node.value}' + + @visitor.when(VarNode) + def visit(self, node: VarNode): + return f'{node.name}' + + @visitor.when(AttributeNode) + def visit(self, node: AttributeNode): + return f'ATTRIBUTE {node.type}.{node.name}' + + @visitor.when(ParamNode) + def visit(self, node: ParamNode): + return f'{node.name}' + + + printer = PrintVisitor() + return (lambda ast: printer.visit(ast)) \ No newline at end of file diff --git a/src/out b/src/out deleted file mode 100644 index c4a7f2c9c..000000000 --- a/src/out +++ /dev/null @@ -1,4 +0,0 @@ -.data -p_error: .asciiz "Aborting from String" -zero_error: .asciiz "Division by zero" -range_error: .asciiz "Index out of range" diff --git a/src/pipeline.py b/src/pipeline.py index 6c086653b..42b144ed5 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -9,6 +9,9 @@ from visitors.CooltoCilM import COOLToCILVisitor from visitors.CilDepicter import get_formatter # from visitors.CiltoMips import CiltoMipsVisitor +from cil_ast.cil_ast import get_formatter +from mmips.CilToMipsVisitor import CILToMIPSVisitor +from mmips.MIPSAstFormatter import MIPSAstFormatter class Pipeline(): def __init__(self, program, lexer, parser, verbose=False): @@ -61,6 +64,14 @@ def __init__(self, program, lexer, parser, verbose=False): # mips_code = self.cilToMips.data + self.cilToMips.code # for line in mips_code: # f.write(line+'\n') + MIPSVisitor = CILToMIPSVisitor() + MIPSAst = MIPSVisitor.visit(cil_ast) + MIPSFormatter = MIPSAstFormatter() + mipsCode = MIPSFormatter.visit(MIPSAst) + with open('asd.mips', 'w') as f: + f.write(mipsCode) + f.close() + if verbose: print('This is after infering types:') print() diff --git a/src/visitors/CooltoCilM.py b/src/visitors/CooltoCilM.py index 8d716c6a0..8ab3fd5bb 100644 --- a/src/visitors/CooltoCilM.py +++ b/src/visitors/CooltoCilM.py @@ -374,14 +374,16 @@ def collect_types(self, node): generation.reverse() for i in generation: + a = 0 methods = [m.name for m in i.methods] - attributes = [a.name for m in i.attributes] + _attributes = i.attributes + attributes = [x.name for x in _attributes] methods.sort() attributes.sort() for meth in methods: type.methods[meth] = self.to_function_name(meth, i.name) for attr in attributes: - type.attributes[attr.name] = cil.AttributeNode(attr.name, i.name) + type.attributes[attr] = cil.AttributeNode(attr, i.name) @visitor.when(ProgramNode) @@ -485,14 +487,14 @@ def default_value_init(type): return VoidNode('void') variable = self.define_internal_local() - if node.expression: - self.visit(node.expression, scope.children[0]) - self.register_instruction(cil.AssignNode(variable, node.expression.ret_expr)) - elif node.type.lex in self.value_types: - if node.type.lex == 'SELF_TYPE': + if node.value: + self.visit(node.value, scope) + self.register_instruction(cil.AssignNode(variable, node.value.ret_expr)) + elif node.type in self.value_types: + if node.type == 'SELF_TYPE': stype = self.current_type.name else: - stype = node.type.lex + stype = node.type if stype == 'Int': self.register_instruction(cil.ArgNode(0)) @@ -637,10 +639,10 @@ def visit(self, node, scope): ############################### # node.lex -> str ############################### - if node.token.lex == 'self': + if node.lex == 'self': node.ret_expr = self.vself.name else: - node.ret_expr = self.var_names[node.token.lex] + node.ret_expr = self.var_names[node.lex] @visitor.when(InstantiateNode) def visit(self, node, scope): @@ -811,16 +813,19 @@ def visit(self, node, scope): # node.expression -> ExpressionNode ############################### - for (id, type, expr), child in zip(node.let_body, scope.children[:-1]): - variable = self.register_local(VariableInfo(id.lex, type.lex)) - if expr: - self.visit(expr, child) - self.register_instruction(cil.AssignNode(variable, expr.ret_expr)) - elif type.lex in self.value_types: - if type.lex == 'SELF_TYPE': + # for (id, type, expr), child in zip(node.let_body, scope.children[:-1]): + for decl, child in zip(node.decl_list, scope.children[:-1]): + id = decl.id + type = decl.type + variable = self.register_local(VariableInfo(id, type)) + if decl.expr: + self.visit(decl.expr, child) + self.register_instruction(cil.AssignNode(variable, decl.expr.ret_expr)) + elif type in self.value_types: + if type == 'SELF_TYPE': stype = self.current_type.name else: - stype = type.lex + stype = type if stype == 'Int': self.register_instruction(cil.ArgNode(0)) elif stype == 'Bool': @@ -832,8 +837,8 @@ def visit(self, node, scope): self.register_instruction(cil.StaticCallNode(self.init_name(stype), variable, )) - self.visit(node.in_body, scope.children[-1]) - node.ret_expr = node.in_body.ret_expr + self.visit(node.expression, scope.children[-1]) + node.ret_expr = node.expression.ret_expr @visitor.when(WhileNode) def visit(self, node, scope): @@ -973,7 +978,7 @@ def visit(self, node, scope): def visit(self, node, scope): ret = self.define_internal_local() - self.register_instruction(cil.ArgNode(1 if node.token.lex else 0)) + self.register_instruction(cil.ArgNode(1)) self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) node.ret_expr = ret @@ -981,16 +986,25 @@ def visit(self, node, scope): def visit(self, node, scope): ret = self.define_internal_local() - self.register_instruction(cil.ArgNode(1 if node.token.lex else 0)) + self.register_instruction(cil.ArgNode(0)) self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) node.ret_expr = ret @visitor.when(StringNode) def visit(self, node, scope): - data_node = self.register_data(node.lex) - var = self.define_internal_local() - self.register_instruction(cil.LoadNode(var, data_node)) - return data_node.name + try: + data = [i for i in self.dotdata if i.value == node.lex][0] + except IndexError: + data = self.register_data(node.lex[1:-1]) + + variable = self.define_internal_local() + ret = self.define_internal_local() + + self.register_instruction(cil.LoadNode(variable, data)) + self.register_instruction(cil.ArgNode(variable)) + self.register_instruction(cil.StaticCallNode(self.init_name('String'), ret)) + node.ret_expr = ret + @visitor.when(LessNode) def visit(self, node, scope): diff --git a/tests/codegen/basic.cl b/tests/codegen/basic.cl index fc89ee1ed..f08bdf32d 100755 --- a/tests/codegen/basic.cl +++ b/tests/codegen/basic.cl @@ -1,6 +1,7 @@ class Main inherits IO { + a : String <- "Hello world\n"; main(): IO { - out_int(12) + let b : Int <- 0, c : Bool <- false in out_string(a) }; }; From 67a4f84a9f7d075b8a20767ced9615bbd41a4bed Mon Sep 17 00:00:00 2001 From: Yumenio Date: Sat, 26 Feb 2022 17:23:19 -0500 Subject: [PATCH 72/93] before merging the new cil2mips --- .gitignore | 2 + src/__main__.py | 2 +- src/cool_ast/cool_ast.py | 4 +- src/visitors/CooltoCilM.py | 134 +++++++++++++++++++++++-------------- 4 files changed, 88 insertions(+), 54 deletions(-) diff --git a/.gitignore b/.gitignore index 077216c51..55f4b1716 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,9 @@ # Edit at https://www.gitignore.io/?templates=visualstudiocode,linux,latex,python CooltoCilM imm.asm +asd.mips src/mmips +src/visitors/Cil2MipsCurrent.py #CooltoCilA ### LaTeX ### ## Core latex/pdflatex auxiliary files: diff --git a/src/__main__.py b/src/__main__.py index 4c49258ff..0869c0376 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -75,7 +75,7 @@ def main(): if len(sys.argv) > 1: input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] else: - input_file = "./tests/codegen/basic.cl"#"debbuging/tests/Auto/call1.cl" + input_file = "./tests/codegen/arith.cl"#"debbuging/tests/Auto/call1.cl" # raise Exception("Incorrect number of arguments") try: program_file = open(input_file) diff --git a/src/cool_ast/cool_ast.py b/src/cool_ast/cool_ast.py index 7e52fbcc9..84b2accc7 100644 --- a/src/cool_ast/cool_ast.py +++ b/src/cool_ast/cool_ast.py @@ -107,7 +107,9 @@ class ConstantNumNode(AtomicNode): class VariableNode(AtomicNode): pass class InstantiateNode(AtomicNode): - pass + def __init__(self, lex): + super().__init__(lex) + self.type = lex #mios class TrueNode(AtomicNode): diff --git a/src/visitors/CooltoCilM.py b/src/visitors/CooltoCilM.py index 8ab3fd5bb..3a54db983 100644 --- a/src/visitors/CooltoCilM.py +++ b/src/visitors/CooltoCilM.py @@ -516,7 +516,8 @@ def visit(self, node, scope): # node.type -> str # node.body -> [ ExpressionNode ... ] ############################### - + if node.id == 'a2i': + _ = 0 self.current_method = self.current_type.get_method(node.id, self.current_type, False) type = self.types_map[self.current_type.name] self.current_function = self.register_function(self.to_function_name(self.current_method.name, @@ -527,7 +528,7 @@ def visit(self, node, scope): self_param = self.register_param(self.vself) self.vself.name = self_param for param, type in node.params: - self.register_param(VariableInfo(param.lex, type.lex)) + self.register_param(VariableInfo(param, type)) self.visit(node.body, scope) self.register_instruction(cil.ReturnNode(value=node.body.ret_expr)) @@ -565,9 +566,9 @@ def visit(self, node, scope): # node.id -> str # node.expr -> ExpressionNode ############################### - var = self.var_names[node.id.lex] - self.visit(node.expression, scope.children[0]) - self.register_instruction(cil.AssignNode(var, node.expression.ret_expr)) + var = self.var_names[node.id] + self.visit(node.expr, scope.children[0]) + self.register_instruction(cil.AssignNode(var, node.expr.ret_expr)) node.ret_expr = var @visitor.when(CallNode) @@ -577,14 +578,22 @@ def visit(self, node, scope): # node.method -> str # node.args -> [ ExpressionNode ... ] ############################### - if node.obj and node.obj.lex != 'self': + if isinstance(node.obj, CallNode) : + _ = 0 + try: + if node.obj.lex == 'self': + node.obj = None + except: + pass + if node.obj: args = [] # for arg, child in zip(node.args, scope.children[1:]): - for arg, child in zip(node.args, scope): - self.visit(arg, child) + for arg in node.args: + self.visit(arg, scope) args.append(cil.ArgNode(arg.ret_expr)) - self.visit(node.obj, scope.children[0]) + self.visit(node.obj, scope) + void = cil.VoidNode() isvoid = self.define_internal_local() @@ -594,13 +603,31 @@ def visit(self, node, scope): self.register_instruction(cil.ArgNode(node.obj.ret_expr)) for arg in args: self.register_instruction(arg) ret = self.define_internal_local() - if node.type is not None: - stype = node.type.lex - self.register_instruction(cil.StaticCallNode(self.types_map[stype].methods[node.id], ret)) + + + if isinstance(node.obj, InstantiateNode): + stype = node.obj.lex + elif isinstance(node.obj, CallNode): + for m in scope.methods: + if m.name == node.obj.method: + stype = m.return_type else: - stype = node.obj.static_type.name + stype = scope.find_variable(node.obj.lex) + if stype is None: + if isinstance(node.obj, StringNode): + stype = 'String' + else: + raise Exception("calling a function in a variable not found that is not a string wtf :D") + else: + stype = stype.type.name + + if node.parent is not None: + # stype = node.type.lex + self.register_instruction(cil.StaticCallNode(self.types_map[stype].methods[node.method], ret)) + else: + # stype = node.obj.static_type.name self.register_instruction(cil.ArgNode(node.obj.ret_expr)) - self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.id.lex], ret)) + self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.method], ret)) node.ret_expr = ret @@ -651,10 +678,10 @@ def visit(self, node, scope): ############################### ret = self.define_internal_local() - if node.type.lex == 'SELF_TYPE': + if node.type == 'SELF_TYPE': stype = self.current_type.name else: - stype = node.type.lex + stype = node.type if stype == 'Int': self.register_instruction(cil.ArgNode(0)) @@ -679,9 +706,9 @@ def visit(self, node, scope): right = self.define_internal_local() value = self.define_internal_local() - self.visit(node.left, scope.children[0]) + self.visit(node.left, scope) self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.visit(node.right, scope.children[1]) + self.visit(node.right, scope) self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) self.register_instruction(cil.PlusNode(value, left, right)) @@ -701,9 +728,9 @@ def visit(self, node, scope): right = self.define_internal_local() value = self.define_internal_local() - self.visit(node.left, scope.children[0]) + self.visit(node.left, scope) self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.visit(node.right, scope.children[1]) + self.visit(node.right, scope) self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) self.register_instruction(cil.MinusNode(value, left, right)) @@ -723,9 +750,9 @@ def visit(self, node, scope): right = self.define_internal_local() value = self.define_internal_local() - self.visit(node.left, scope.children[0]) + self.visit(node.left, scope) self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.visit(node.right, scope.children[1]) + self.visit(node.right, scope) self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) self.register_instruction(cil.StarNode(value, left, right)) @@ -739,26 +766,15 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.DivNode(dest, left, right)) - return dest - - @visitor.when(ChunkNode) - def visit(self, node, scope): - ############################### - # node.chunk -> [ ExpressionNode... ] - ############################### ret = self.define_internal_local() left = self.define_internal_local() right = self.define_internal_local() value = self.define_internal_local() zero = self.define_internal_local() - self.visit(node.left, scope.children[0]) + self.visit(node.left, scope) self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.visit(node.right, scope.children[1]) + self.visit(node.right, scope) self.register_instruction(cil.ArgNode(0)) self.register_instruction(cil.StaticCallNode(self.init_name('Int'), zero)) @@ -774,6 +790,17 @@ def visit(self, node, scope): self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) node.ret_expr = ret + @visitor.when(ChunkNode) + def visit(self, node, scope): + ############################### + # node.chunk -> [ ExpressionNode... ] + ############################### + + for expr in node.chunk: + self.visit(expr, scope) + node.ret_expr = node.chunk[-1].ret_expr + + @visitor.when(ConditionalNode) def visit(self, node, scope): ############################### @@ -789,19 +816,19 @@ def visit(self, node, scope): continue_label = self.register_label('continue_label') # IF - self.visit(node.condition, scope.children[0]) - self.register_instruction(cil.GetAttribNode(condition, node.condition.ret_expr, 'value', 'Bool')) + self.visit(node.ifChunk, scope.children[0]) + self.register_instruction(cil.GetAttribNode(condition, node.ifChunk.ret_expr, 'value', 'Bool')) self.register_instruction(cil.GotoIfNode(condition, then_label.label)) # ELSE - self.visit(node.else_body, scope.children[2]) - self.register_instruction(cil.AssignNode(ret, node.else_body.ret_expr)) + self.visit(node.elseChunk, scope.children[2]) + self.register_instruction(cil.AssignNode(ret, node.elseChunk.ret_expr)) self.register_instruction(cil.GotoNode(continue_label.label)) # THEN self.register_instruction(then_label) - self.visit(node.if_body, scope.children[1]) - self.register_instruction(cil.AssignNode(ret, node.if_body.ret_expr)) + self.visit(node.thenChunk, scope.children[1]) + self.register_instruction(cil.AssignNode(ret, node.thenChunk.ret_expr)) self.register_instruction(continue_label) node.ret_expr = ret @@ -814,13 +841,16 @@ def visit(self, node, scope): ############################### # for (id, type, expr), child in zip(node.let_body, scope.children[:-1]): - for decl, child in zip(node.decl_list, scope.children[:-1]): + # for decl, child in zip(node.decl_list, scope.children[:-1]): + i = 0 + for decl in node.decl_list: id = decl.id type = decl.type variable = self.register_local(VariableInfo(id, type)) if decl.expr: - self.visit(decl.expr, child) + self.visit(decl.expr, scope.children[i]) self.register_instruction(cil.AssignNode(variable, decl.expr.ret_expr)) + i += 1 elif type in self.value_types: if type == 'SELF_TYPE': stype = self.current_type.name @@ -854,7 +884,7 @@ def visit(self, node, scope): self.register_instruction(cil.GotoNode(pool_label.label)) self.register_instruction(loop_label) - self.visit(node.body, scope.children[1]) + self.visit(node.loopChunk, scope.children[1]) self.register_instruction( cil.GotoNode(while_label.label)) @@ -903,8 +933,8 @@ def visit(self, node, scope): value = self.define_internal_local() answer = self.define_internal_local() - self.visit(node.expression, scope.children[0]) - self.register_instruction(cil.GetAttribNode(value, node.expression.ret_expr, 'value', 'Int')) + self.visit(node.expr, scope) + self.register_instruction(cil.GetAttribNode(value, node.expr.ret_expr, 'value', 'Int')) self.register_instruction(cil.ComplementNode(answer, value)) self.register_instruction(cil.ArgNode(answer)) @@ -1017,9 +1047,9 @@ def visit(self, node, scope): right = self.define_internal_local() value = self.define_internal_local() - self.visit(node.left, scope.children[0]) + self.visit(node.left, scope) self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.visit(node.right, scope.children[1]) + self.visit(node.right, scope) self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) self.register_instruction(cil.LessNode(value, left, right)) @@ -1039,9 +1069,9 @@ def visit(self, node, scope): right = self.define_internal_local() value = self.define_internal_local() - self.visit(node.left, scope.children[0]) + self.visit(node.left, scope) self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.visit(node.right, scope.children[1]) + self.visit(node.right, scope) self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) self.register_instruction(cil.LessEqualNode(value, left, right)) @@ -1071,8 +1101,8 @@ def visit(self, node, scope): bool_comparisson = self.register_label('bool_comparisson') continue_label = self.register_label('continue_label') - self.visit(node.left, scope.children[0]) - self.visit(node.right, scope.children[1]) + self.visit(node.left, scope) + self.visit(node.right, scope) self.register_instruction(cil.TypeOfNode(type_left, node.left.ret_expr)) self.register_instruction(cil.NameNode(type_int, 'Int')) From dac71dc7563ee2a2efe4fc3b57dba883fa1632fe Mon Sep 17 00:00:00 2001 From: Yumenio Date: Sat, 26 Feb 2022 22:45:04 -0500 Subject: [PATCH 73/93] i think it works now --- src/pipeline.py | 5 +++ src/utils/semantic.py | 5 +++ src/visitors/Builder.py | 6 ++++ src/visitors/Checker.py | 17 ++++++++-- src/visitors/CooltoCilM.py | 69 ++++++++++++++++++++++---------------- 5 files changed, 72 insertions(+), 30 deletions(-) diff --git a/src/pipeline.py b/src/pipeline.py index 42b144ed5..24463ac68 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -9,10 +9,13 @@ from visitors.CooltoCilM import COOLToCILVisitor from visitors.CilDepicter import get_formatter # from visitors.CiltoMips import CiltoMipsVisitor + from cil_ast.cil_ast import get_formatter from mmips.CilToMipsVisitor import CILToMIPSVisitor from mmips.MIPSAstFormatter import MIPSAstFormatter +# from visitors.Cil2MipsCurrent import CILToMipsVisitor + class Pipeline(): def __init__(self, program, lexer, parser, verbose=False): self.context: Context = Context() @@ -68,6 +71,8 @@ def __init__(self, program, lexer, parser, verbose=False): MIPSAst = MIPSVisitor.visit(cil_ast) MIPSFormatter = MIPSAstFormatter() mipsCode = MIPSFormatter.visit(MIPSAst) + # MIPSVisitor = CILToMipsVisitor() + # mipsCode = MIPSVisitor.visit(cil_ast) with open('asd.mips', 'w') as f: f.write(mipsCode) f.close() diff --git a/src/utils/semantic.py b/src/utils/semantic.py index 2d3c6a44a..9d0dccf67 100755 --- a/src/utils/semantic.py +++ b/src/utils/semantic.py @@ -43,6 +43,7 @@ def __eq__(self, other): class Type: def __init__(self, name: str): self.name: str = name + self.depth = 0 self.attributes_dict: OrderedDict[str, Attribute] = OrderedDict() self.methods_dict: OrderedDict[str, Method] = OrderedDict() self.parent: Optional['Type'] = None @@ -205,6 +206,10 @@ def get_type(self, name: str) -> Type: except KeyError: raise SemanticError(f'Type "{name}" is not defined.') + def subtree(self, name : str): + type = self.get_type(name) + return (i for i in self.types.values() if i.conforms_to(type)) + def __str__(self): return '{\n\t' + '\n\t'.join(y for x in self.types.values() for y in str(x).split('\n')) + '\n}' diff --git a/src/visitors/Builder.py b/src/visitors/Builder.py index 826f47b68..4d3d6543e 100755 --- a/src/visitors/Builder.py +++ b/src/visitors/Builder.py @@ -33,6 +33,12 @@ def visit(self, node): _int.set_parent(_object) _bool.set_parent(_object) + _object.depth = 0 + _io.depth = 1 + _string.depth = 1 + _int.depth = 1 + _bool.depth = 1 + _io.define_method('in_string', [], [], _string) _io.define_method('out_string', ['x'], [_string], _self) _io.define_method('in_int', [], [], _int) diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py index 7764e4e63..792170dfc 100755 --- a/src/visitors/Checker.py +++ b/src/visitors/Checker.py @@ -19,6 +19,13 @@ def visit(self, node, scope = None): if scope is None: scope = Scope() + for declaration in node.declarations: + current = self.context.get_type(declaration.id) + parent = current.parent + while parent is not None: + current.depth += 1 + parent = parent.parent + for declaration in node.declarations: self.visit(declaration, scope.create_child()) @@ -117,6 +124,9 @@ def visit(self, node, scope): _t = nod.type _e = nod.expr + if _id == 'y' and _t == 'Int': + _ = 0 + if _id =='self': self.errors.append(_SemanticError %(node.decl_list[iteration].token_list[0].lineno, node.decl_list[iteration].token_list[0].col, f"'self' cannot be bound in a 'let' expression.")) continue @@ -211,11 +221,11 @@ def visit(self, node, scope): @visitor.when(ChunkNode) def visit(self, node, scope): - child_scope = scope.create_child() + # child_scope = scope.create_child() return_type = ErrorType() for expr in node.chunk: - return_type = self.visit(expr, child_scope) + return_type = self.visit(expr, scope.create_child()) return return_type @visitor.when(SwitchCaseNode) @@ -324,6 +334,7 @@ def visit(self, node, scope): # self.errors.append(e.text) for arg in node.args: self.visit(arg, scope) + node.type = ErrorType() return ErrorType() # if len(node.args) != len(method.param_names): @@ -339,8 +350,10 @@ def visit(self, node, scope): self.errors.append(_TypeError %(node.args[i].token_list[0].lineno, node.args[i].token_list[0].col, f"In call of {method.name}, type {arg_type.name} of parameter {method.param_names[i]} does not conform to declare type {method.param_types[i].name}")) if method.return_type.name != 'SELF_TYPE': + node.type = method.return_type return method.return_type else: + node.type = ancestor_type return ancestor_type @visitor.when(ConstantNumNode) diff --git a/src/visitors/CooltoCilM.py b/src/visitors/CooltoCilM.py index 3a54db983..b7a1e26a2 100644 --- a/src/visitors/CooltoCilM.py +++ b/src/visitors/CooltoCilM.py @@ -449,7 +449,10 @@ def visit(self, node, scope): # Visitar funciones dentro de la clase for feat, child in zip(node.features, scope.children): if isinstance(feat, FuncDeclarationNode): - self.visit(feat, child) + try: + self.visit(feat, child) + except Exception as e: + _ = 0 self.vself.name = 'self' # Allocate de la clase @@ -516,7 +519,7 @@ def visit(self, node, scope): # node.type -> str # node.body -> [ ExpressionNode ... ] ############################### - if node.id == 'a2i': + if node.id == 'main': _ = 0 self.current_method = self.current_type.get_method(node.id, self.current_type, False) type = self.types_map[self.current_type.name] @@ -608,9 +611,7 @@ def visit(self, node, scope): if isinstance(node.obj, InstantiateNode): stype = node.obj.lex elif isinstance(node.obj, CallNode): - for m in scope.methods: - if m.name == node.obj.method: - stype = m.return_type + stype = node.type.name else: stype = scope.find_variable(node.obj.lex) if stype is None: @@ -796,8 +797,8 @@ def visit(self, node, scope): # node.chunk -> [ ExpressionNode... ] ############################### - for expr in node.chunk: - self.visit(expr, scope) + for i, expr in enumerate(node.chunk): + self.visit(expr, scope.children[i]) node.ret_expr = node.chunk[-1].ret_expr @@ -872,19 +873,24 @@ def visit(self, node, scope): @visitor.when(WhileNode) def visit(self, node, scope): + try: + if node.condition.lex == 'flag': + _ = 0 + except: + pass while_label = self.register_label('while_label') loop_label = self.register_label('loop_label') pool_label = self.register_label('pool_label') condition = self.define_internal_local() self.register_instruction(while_label) - self.visit(node.condition, scope.children[0]) + self.visit(node.condition, scope) self.register_instruction(cil.GetAttribNode(condition, node.condition.ret_expr, 'value', 'Bool')) self.register_instruction(cil.GotoIfNode(condition, loop_label.label)) self.register_instruction(cil.GotoNode(pool_label.label)) self.register_instruction(loop_label) - self.visit(node.loopChunk, scope.children[1]) + self.visit(node.loopChunk, scope.children[0]) self.register_instruction( cil.GotoNode(while_label.label)) @@ -951,11 +957,11 @@ def visit(self, node, scope): vtype = self.define_internal_local() cond = self.define_internal_local() - self.visit(node.expression, scope.children[0]) - self.register_instruction(cil.TypeOfNode(vtype, node.expression.ret_expr)) + self.visit(node.expr, scope) + self.register_instruction(cil.TypeOfNode(vtype, node.expr.ret_expr)) isvoid = self.define_internal_local() - self.register_instruction(cil.EqualNode(isvoid, node.expression.ret_expr, cil.VoidNode())) + self.register_instruction(cil.EqualNode(isvoid, node.expr.ret_expr, cil.VoidNode())) self.register_runtime_error(isvoid, 'RuntimeError: void in switch case') end_label = self.register_label('case_end_label') @@ -963,11 +969,15 @@ def visit(self, node, scope): branch_type = self.define_internal_local() seen = [] labels = [] - branches = sorted(node.branches, key=lambda x: self.context.get_type(x[1].lex).depth, reverse=True) - for p, (id, type, expr) in enumerate(branches): + branches = sorted(node.case_list, key=lambda x: self.context.get_type(x[1]).depth, reverse=True) + # for p, (id, type, expr) in enumerate(branches): + for p, case in enumerate(branches): + id = case[0] + type = case[1] + expr = case[2] labels.append(self.register_label(f'case_label_{p}')) - for t in self.context.subtree(type.lex): + for t in self.context.subtree(type): if t not in seen: seen.append(t) self.register_instruction(cil.NameNode(branch_type, t.name)) @@ -978,12 +988,15 @@ def visit(self, node, scope): self.register_instruction(cil.ErrorNode(data)) for p, label in enumerate(labels): - id, type, expr = branches[p] - sc = scope.children[p + 1] + id = branches[p][0] + type = branches[p][1] + expr = branches[p][2] + # id, type, expr = branches[p] + sc = scope.children[p] self.register_instruction(label) - var = self.register_local(VariableInfo(id.lex, vtype)) - self.register_instruction(cil.AssignNode(var, node.expression.ret_expr)) + var = self.register_local(VariableInfo(id, vtype)) + self.register_instruction(cil.AssignNode(var, node.expr.ret_expr)) self.visit(expr, sc) self.register_instruction(cil.AssignNode(ret, expr.ret_expr)) self.register_instruction(cil.GotoNode(end_label.label)) @@ -991,18 +1004,18 @@ def visit(self, node, scope): self.register_instruction(end_label) node.ret_expr = ret - var = self.define_internal_local() - self.register_instruction(cil.ParentTypeNode(var, obj_type)) - self.register_instruction(cil.AssignNode(obj_type, var)) + # var = self.define_internal_local() + # self.register_instruction(cil.ParentTypeNode(var, obj_type)) + # self.register_instruction(cil.AssignNode(obj_type, var)) - self.register_instruction(cil.GotoNode(start_case_label)) + # self.register_instruction(cil.GotoNode(start_case_label)) - self.register_instruction(cil.LabelNode(error_label)) - self.register_instruction(cil.ParamNode(self.instances[-1])) - self.regster_instruction(cil.DynamicCallNode(var, self.to_function_name("abort", self.current_type.name), result)) + # self.register_instruction(cil.LabelNode(error_label)) + # self.register_instruction(cil.ParamNode(self.instances[-1])) + # self.regster_instruction(cil.DynamicCallNode(var, self.to_function_name("abort", self.current_type.name), result)) - self.register_instruction(cil.GotoNode(end_case_label)) - return result + # self.register_instruction(cil.GotoNode(end_case_label)) + # return result @visitor.when(TrueNode) def visit(self, node, scope): From e6e923a72e4e4cdc08969e1abd2c5558f0967038 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Sat, 26 Feb 2022 23:31:19 -0500 Subject: [PATCH 74/93] before creating moar scopes --- src/__main__.py | 9 +- src/pipeline.py | 7 +- src/visitors/CooltoCilM.py | 16 +- tests/codegen/atoi.mips | 5164 +++++++++++++++++++++++++++++++++ tests/codegen/hairyscary.mips | 2302 +++++++++++++++ tests/codegen/sort-list.mips | 2714 +++++++++++++++++ tests/codegen_test.py | 30 +- tests/lexer_test.py | 30 +- tests/parser_test.py | 26 +- tests/semantic_test.py | 24 +- tests/utils/utils.py | 1 + 11 files changed, 10259 insertions(+), 64 deletions(-) create mode 100644 tests/codegen/atoi.mips create mode 100644 tests/codegen/hairyscary.mips create mode 100644 tests/codegen/sort-list.mips diff --git a/src/__main__.py b/src/__main__.py index 0869c0376..e00acd618 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -75,7 +75,7 @@ def main(): if len(sys.argv) > 1: input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] else: - input_file = "./tests/codegen/arith.cl"#"debbuging/tests/Auto/call1.cl" + input_file = "./tests/codegen/primes.cl"#"debbuging/tests/Auto/call1.cl" # raise Exception("Incorrect number of arguments") try: program_file = open(input_file) @@ -95,6 +95,13 @@ def main(): for error in pipe.errors: print(error) exit(1) + else: + out_file = input_file.split(".") + out_file[-1] = "mips" + out_file = ".".join(out_file) + + with open(out_file, 'w') as f: + f.write(pipe.mipsCode) except Exception as e: print(e) exit(1) diff --git a/src/pipeline.py b/src/pipeline.py index 24463ac68..1ac38fd94 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -73,9 +73,10 @@ def __init__(self, program, lexer, parser, verbose=False): mipsCode = MIPSFormatter.visit(MIPSAst) # MIPSVisitor = CILToMipsVisitor() # mipsCode = MIPSVisitor.visit(cil_ast) - with open('asd.mips', 'w') as f: - f.write(mipsCode) - f.close() + self.mipsCode = mipsCode + # with open('asd.mips', 'w') as f: + # f.write(mipsCode) + # f.close() if verbose: print('This is after infering types:') diff --git a/src/visitors/CooltoCilM.py b/src/visitors/CooltoCilM.py index b7a1e26a2..278ffdaf8 100644 --- a/src/visitors/CooltoCilM.py +++ b/src/visitors/CooltoCilM.py @@ -436,10 +436,15 @@ def visit(self, node, scope): self.init_attr_name(self.current_type.parent.name), variable)) # Inicializando los atributos de la clase - for feat, child in zip(node.features, scope.children): + for feat in node.features: if isinstance(feat, AttrDeclarationNode): - self.visit(feat, child) - self.register_instruction(cil.SetAttribNode(self_param, feat.id, feat.ret_expr, node.id,)) + try: + att_scope = Scope() + att_scope.locals = scope.locals + self.visit(feat, att_scope) + self.register_instruction(cil.SetAttribNode(self_param, feat.id, feat.ret_expr, node.id,)) + except Exception as e: + _ = 0 self.register_instruction(cil.ReturnNode(self_param)) # TypeNode de la clase @@ -488,7 +493,8 @@ def default_value_init(type): return StringNode("") else: return VoidNode('void') - + if node.id == 'm': + _ = 0 variable = self.define_internal_local() if node.value: self.visit(node.value, scope) @@ -519,7 +525,7 @@ def visit(self, node, scope): # node.type -> str # node.body -> [ ExpressionNode ... ] ############################### - if node.id == 'main': + if node.id == 'm': _ = 0 self.current_method = self.current_type.get_method(node.id, self.current_type, False) type = self.types_map[self.current_type.name] diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips new file mode 100644 index 000000000..bfd69420b --- /dev/null +++ b/tests/codegen/atoi.mips @@ -0,0 +1,5164 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "A2I" +.word 0 +data_7: .asciiz "Main" +.word 0 +data_8: .asciiz " +" +.word 0 +data_9: .asciiz "" +.word 0 +data_10: .asciiz "Abort called from class " +.word 0 +data_11: .asciiz "Substring out of range" +.word 0 +data_12: .asciiz "0" +.word 0 +data_13: .asciiz "1" +.word 0 +data_14: .asciiz "2" +.word 0 +data_15: .asciiz "3" +.word 0 +data_16: .asciiz "4" +.word 0 +data_17: .asciiz "5" +.word 0 +data_18: .asciiz "6" +.word 0 +data_19: .asciiz "7" +.word 0 +data_20: .asciiz "8" +.word 0 +data_21: .asciiz "9" +.word 0 +data_22: .asciiz "" +.word 0 +data_23: .asciiz "9" +.word 0 +data_24: .asciiz "8" +.word 0 +data_25: .asciiz "7" +.word 0 +data_26: .asciiz "6" +.word 0 +data_27: .asciiz "5" +.word 0 +data_28: .asciiz "4" +.word 0 +data_29: .asciiz "3" +.word 0 +data_30: .asciiz "2" +.word 0 +data_31: .asciiz "1" +.word 0 +data_32: .asciiz "0" +.word 0 +data_33: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_34: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_35: .asciiz "-" +.word 0 +data_36: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_37: .asciiz "+" +.word 0 +data_38: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_39: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_40: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_41: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_42: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_43: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_44: .asciiz "-" +.word 0 +data_45: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_46: .asciiz "0" +.word 0 +data_47: .asciiz "RuntimeError: Division by zero" +.word 0 +data_48: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_49: .asciiz "" +.word 0 +data_50: .asciiz "678987" +.word 0 +data_51: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_52: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_53: .asciiz " == " +.word 0 +data_54: .asciiz "\n" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_a2i_at_A2I + .word function_a2i_aux_at_A2I + .word function_c2i_at_A2I + .word function_i2a_at_A2I + .word function_i2a_aux_at_A2I + .word function_i2c_at_A2I + .word __init_attr_at_A2I + .word __init_at_A2I + +type_6_prototype: + .word 5 + .word 4 + .word type_6_dispatch + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_7_prototype: + .word 6 + .word 4 + .word type_7_dispatch + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_10 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_8 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_11 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_c2i_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -568 + la $t0 data_12 + sw $t0 -532($fp) + lw $t0 -532($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -528($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -556($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -552($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -548($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -544($fp) + lw $t0 -556($fp) + lw $t1 -552($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + bne $t0 $zero label_3 + lw $t0 -556($fp) + lw $t1 -548($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + bne $t0 $zero label_4 + lw $t0 -556($fp) + lw $t1 -544($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + bne $t0 $zero label_5 + lw $t0 0($fp) + lw $t1 -528($fp) + seq $t0 $t0 $t1 + sw $t0 -536($fp) + j label_6 + label_3: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -528($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + lw $t1 -560($fp) + seq $t0 $t0 $t1 + sw $t0 -536($fp) + j label_6 + label_4: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -528($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + move $a0 $t0 + lw $t0 -560($fp) + move $a1 $t0 + jal equal_str + sw $v0 -536($fp) + j label_6 + label_5: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -528($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + lw $t1 -560($fp) + seq $t0 $t0 $t1 + sw $t0 -536($fp) + j label_6 + label_6: + lw $t0 -536($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -568($fp) + lw $t0 -568($fp) + lw $t1 12($t0) + sw $t1 -572($fp) + lw $t0 -572($fp) + bne $t0 $zero label_61 + la $t0 data_13 + sw $t0 -480($fp) + lw $t0 -480($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -476($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -504($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -500($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -496($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -492($fp) + lw $t0 -504($fp) + lw $t1 -500($fp) + seq $t0 $t0 $t1 + sw $t0 -488($fp) + lw $t0 -488($fp) + bne $t0 $zero label_7 + lw $t0 -504($fp) + lw $t1 -496($fp) + seq $t0 $t0 $t1 + sw $t0 -488($fp) + lw $t0 -488($fp) + bne $t0 $zero label_8 + lw $t0 -504($fp) + lw $t1 -492($fp) + seq $t0 $t0 $t1 + sw $t0 -488($fp) + lw $t0 -488($fp) + bne $t0 $zero label_9 + lw $t0 0($fp) + lw $t1 -476($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + j label_10 + label_7: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -512($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -512($fp) + lw $t1 -508($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + j label_10 + label_8: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -512($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -512($fp) + move $a0 $t0 + lw $t0 -508($fp) + move $a1 $t0 + jal equal_str + sw $v0 -484($fp) + j label_10 + label_9: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -512($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -512($fp) + lw $t1 -508($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + j label_10 + label_10: + lw $t0 -484($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -516($fp) + lw $t0 -516($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -520($fp) + bne $t0 $zero label_59 + la $t0 data_14 + sw $t0 -428($fp) + lw $t0 -428($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -424($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -452($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -448($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -444($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -440($fp) + lw $t0 -452($fp) + lw $t1 -448($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_11 + lw $t0 -452($fp) + lw $t1 -444($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_12 + lw $t0 -452($fp) + lw $t1 -440($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_13 + lw $t0 0($fp) + lw $t1 -424($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_14 + label_11: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -424($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_14 + label_12: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -424($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + move $a0 $t0 + lw $t0 -456($fp) + move $a1 $t0 + jal equal_str + sw $v0 -432($fp) + j label_14 + label_13: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -424($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_14 + label_14: + lw $t0 -432($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -464($fp) + lw $t0 -464($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -468($fp) + bne $t0 $zero label_57 + la $t0 data_15 + sw $t0 -376($fp) + lw $t0 -376($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -372($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -400($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -396($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -392($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -388($fp) + lw $t0 -400($fp) + lw $t1 -396($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_15 + lw $t0 -400($fp) + lw $t1 -392($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_16 + lw $t0 -400($fp) + lw $t1 -388($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_17 + lw $t0 0($fp) + lw $t1 -372($fp) + seq $t0 $t0 $t1 + sw $t0 -380($fp) + j label_18 + label_15: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -372($fp) + lw $t1 12($t0) + sw $t1 -404($fp) + lw $t0 -408($fp) + lw $t1 -404($fp) + seq $t0 $t0 $t1 + sw $t0 -380($fp) + j label_18 + label_16: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -372($fp) + lw $t1 12($t0) + sw $t1 -404($fp) + lw $t0 -408($fp) + move $a0 $t0 + lw $t0 -404($fp) + move $a1 $t0 + jal equal_str + sw $v0 -380($fp) + j label_18 + label_17: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -372($fp) + lw $t1 12($t0) + sw $t1 -404($fp) + lw $t0 -408($fp) + lw $t1 -404($fp) + seq $t0 $t0 $t1 + sw $t0 -380($fp) + j label_18 + label_18: + lw $t0 -380($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -412($fp) + lw $t0 -412($fp) + lw $t1 12($t0) + sw $t1 -416($fp) + lw $t0 -416($fp) + bne $t0 $zero label_55 + la $t0 data_16 + sw $t0 -324($fp) + lw $t0 -324($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -320($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -348($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -344($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -340($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -336($fp) + lw $t0 -348($fp) + lw $t1 -344($fp) + seq $t0 $t0 $t1 + sw $t0 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_19 + lw $t0 -348($fp) + lw $t1 -340($fp) + seq $t0 $t0 $t1 + sw $t0 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_20 + lw $t0 -348($fp) + lw $t1 -336($fp) + seq $t0 $t0 $t1 + sw $t0 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_21 + lw $t0 0($fp) + lw $t1 -320($fp) + seq $t0 $t0 $t1 + sw $t0 -328($fp) + j label_22 + label_19: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -356($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -352($fp) + lw $t0 -356($fp) + lw $t1 -352($fp) + seq $t0 $t0 $t1 + sw $t0 -328($fp) + j label_22 + label_20: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -356($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -352($fp) + lw $t0 -356($fp) + move $a0 $t0 + lw $t0 -352($fp) + move $a1 $t0 + jal equal_str + sw $v0 -328($fp) + j label_22 + label_21: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -356($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -352($fp) + lw $t0 -356($fp) + lw $t1 -352($fp) + seq $t0 $t0 $t1 + sw $t0 -328($fp) + j label_22 + label_22: + lw $t0 -328($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -360($fp) + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -364($fp) + lw $t0 -364($fp) + bne $t0 $zero label_53 + la $t0 data_17 + sw $t0 -272($fp) + lw $t0 -272($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -268($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -296($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -292($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -288($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -284($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_23 + lw $t0 -296($fp) + lw $t1 -288($fp) + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_24 + lw $t0 -296($fp) + lw $t1 -284($fp) + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_25 + lw $t0 0($fp) + lw $t1 -268($fp) + seq $t0 $t0 $t1 + sw $t0 -276($fp) + j label_26 + label_23: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -304($fp) + lw $t1 -300($fp) + seq $t0 $t0 $t1 + sw $t0 -276($fp) + j label_26 + label_24: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -304($fp) + move $a0 $t0 + lw $t0 -300($fp) + move $a1 $t0 + jal equal_str + sw $v0 -276($fp) + j label_26 + label_25: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -304($fp) + lw $t1 -300($fp) + seq $t0 $t0 $t1 + sw $t0 -276($fp) + j label_26 + label_26: + lw $t0 -276($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -308($fp) + lw $t0 -308($fp) + lw $t1 12($t0) + sw $t1 -312($fp) + lw $t0 -312($fp) + bne $t0 $zero label_51 + la $t0 data_18 + sw $t0 -220($fp) + lw $t0 -220($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -216($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -244($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -240($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -236($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -232($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_27 + lw $t0 -244($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_28 + lw $t0 -244($fp) + lw $t1 -232($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_29 + lw $t0 0($fp) + lw $t1 -216($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_30 + label_27: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_30 + label_28: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + move $a0 $t0 + lw $t0 -248($fp) + move $a1 $t0 + jal equal_str + sw $v0 -224($fp) + j label_30 + label_29: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_30 + label_30: + lw $t0 -224($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -256($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_49 + la $t0 data_19 + sw $t0 -168($fp) + lw $t0 -168($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -164($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -192($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -188($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -184($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -180($fp) + lw $t0 -192($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_31 + lw $t0 -192($fp) + lw $t1 -184($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_32 + lw $t0 -192($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_33 + lw $t0 0($fp) + lw $t1 -164($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_34 + label_31: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_34 + label_32: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + move $a0 $t0 + lw $t0 -196($fp) + move $a1 $t0 + jal equal_str + sw $v0 -172($fp) + j label_34 + label_33: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_34 + label_34: + lw $t0 -172($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -204($fp) + lw $t0 -204($fp) + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_47 + la $t0 data_20 + sw $t0 -116($fp) + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -112($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -140($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -136($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -132($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -128($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_35 + lw $t0 -140($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_36 + lw $t0 -140($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_37 + lw $t0 0($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_38 + label_35: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_38 + label_36: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + move $a0 $t0 + lw $t0 -144($fp) + move $a1 $t0 + jal equal_str + sw $v0 -120($fp) + j label_38 + label_37: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_38 + label_38: + lw $t0 -120($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -156($fp) + bne $t0 $zero label_45 + la $t0 data_21 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -88($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -84($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -80($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -76($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_39 + lw $t0 -88($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_40 + lw $t0 -88($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_41 + lw $t0 0($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_42 + label_39: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_42 + label_40: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + move $a0 $t0 + lw $t0 -92($fp) + move $a1 $t0 + jal equal_str + sw $v0 -68($fp) + j label_42 + label_41: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_42 + label_42: + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_43 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -56($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + sw $t0 -108($fp) + j label_44 + label_43: + li $t0 9 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + sw $t0 -108($fp) + label_44: + lw $t0 -108($fp) + sw $t0 -160($fp) + j label_46 + label_45: + li $t0 8 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -160($fp) + label_46: + lw $t0 -160($fp) + sw $t0 -212($fp) + j label_48 + label_47: + li $t0 7 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -212($fp) + label_48: + lw $t0 -212($fp) + sw $t0 -264($fp) + j label_50 + label_49: + li $t0 6 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -264($fp) + label_50: + lw $t0 -264($fp) + sw $t0 -316($fp) + j label_52 + label_51: + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -316($fp) + label_52: + lw $t0 -316($fp) + sw $t0 -368($fp) + j label_54 + label_53: + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -368($fp) + label_54: + lw $t0 -368($fp) + sw $t0 -420($fp) + j label_56 + label_55: + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -420($fp) + label_56: + lw $t0 -420($fp) + sw $t0 -472($fp) + j label_58 + label_57: + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -472($fp) + label_58: + lw $t0 -472($fp) + sw $t0 -524($fp) + j label_60 + label_59: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -524($fp) + label_60: + lw $t0 -524($fp) + sw $t0 -576($fp) + j label_62 + label_61: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -576($fp) + label_62: + lw $v0 -576($fp) + addi $sp $sp 568 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_i2c_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -572 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -536($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -560($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -556($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -552($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -548($fp) + lw $t0 -560($fp) + lw $t1 -556($fp) + seq $t0 $t0 $t1 + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_63 + lw $t0 -560($fp) + lw $t1 -552($fp) + seq $t0 $t0 $t1 + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_64 + lw $t0 -560($fp) + lw $t1 -548($fp) + seq $t0 $t0 $t1 + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_65 + lw $t0 0($fp) + lw $t1 -536($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + j label_66 + label_63: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -568($fp) + lw $t0 -536($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -568($fp) + lw $t1 -564($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + j label_66 + label_64: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -568($fp) + lw $t0 -536($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -568($fp) + move $a0 $t0 + lw $t0 -564($fp) + move $a1 $t0 + jal equal_str + sw $v0 -540($fp) + j label_66 + label_65: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -568($fp) + lw $t0 -536($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -568($fp) + lw $t1 -564($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + j label_66 + label_66: + lw $t0 -540($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -572($fp) + lw $t0 -572($fp) + lw $t1 12($t0) + sw $t1 -576($fp) + lw $t0 -576($fp) + bne $t0 $zero label_121 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -488($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -512($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -508($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -504($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -500($fp) + lw $t0 -512($fp) + lw $t1 -508($fp) + seq $t0 $t0 $t1 + sw $t0 -496($fp) + lw $t0 -496($fp) + bne $t0 $zero label_67 + lw $t0 -512($fp) + lw $t1 -504($fp) + seq $t0 $t0 $t1 + sw $t0 -496($fp) + lw $t0 -496($fp) + bne $t0 $zero label_68 + lw $t0 -512($fp) + lw $t1 -500($fp) + seq $t0 $t0 $t1 + sw $t0 -496($fp) + lw $t0 -496($fp) + bne $t0 $zero label_69 + lw $t0 0($fp) + lw $t1 -488($fp) + seq $t0 $t0 $t1 + sw $t0 -492($fp) + j label_70 + label_67: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -488($fp) + lw $t1 12($t0) + sw $t1 -516($fp) + lw $t0 -520($fp) + lw $t1 -516($fp) + seq $t0 $t0 $t1 + sw $t0 -492($fp) + j label_70 + label_68: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -488($fp) + lw $t1 12($t0) + sw $t1 -516($fp) + lw $t0 -520($fp) + move $a0 $t0 + lw $t0 -516($fp) + move $a1 $t0 + jal equal_str + sw $v0 -492($fp) + j label_70 + label_69: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -488($fp) + lw $t1 12($t0) + sw $t1 -516($fp) + lw $t0 -520($fp) + lw $t1 -516($fp) + seq $t0 $t0 $t1 + sw $t0 -492($fp) + j label_70 + label_70: + lw $t0 -492($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -524($fp) + lw $t0 -524($fp) + lw $t1 12($t0) + sw $t1 -528($fp) + lw $t0 -528($fp) + bne $t0 $zero label_119 + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -440($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -464($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -460($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -456($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -452($fp) + lw $t0 -464($fp) + lw $t1 -460($fp) + seq $t0 $t0 $t1 + sw $t0 -448($fp) + lw $t0 -448($fp) + bne $t0 $zero label_71 + lw $t0 -464($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -448($fp) + lw $t0 -448($fp) + bne $t0 $zero label_72 + lw $t0 -464($fp) + lw $t1 -452($fp) + seq $t0 $t0 $t1 + sw $t0 -448($fp) + lw $t0 -448($fp) + bne $t0 $zero label_73 + lw $t0 0($fp) + lw $t1 -440($fp) + seq $t0 $t0 $t1 + sw $t0 -444($fp) + j label_74 + label_71: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -472($fp) + lw $t0 -440($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -472($fp) + lw $t1 -468($fp) + seq $t0 $t0 $t1 + sw $t0 -444($fp) + j label_74 + label_72: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -472($fp) + lw $t0 -440($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -472($fp) + move $a0 $t0 + lw $t0 -468($fp) + move $a1 $t0 + jal equal_str + sw $v0 -444($fp) + j label_74 + label_73: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -472($fp) + lw $t0 -440($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -472($fp) + lw $t1 -468($fp) + seq $t0 $t0 $t1 + sw $t0 -444($fp) + j label_74 + label_74: + lw $t0 -444($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -476($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -480($fp) + lw $t0 -480($fp) + bne $t0 $zero label_117 + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -392($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -416($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -412($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -408($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -404($fp) + lw $t0 -416($fp) + lw $t1 -412($fp) + seq $t0 $t0 $t1 + sw $t0 -400($fp) + lw $t0 -400($fp) + bne $t0 $zero label_75 + lw $t0 -416($fp) + lw $t1 -408($fp) + seq $t0 $t0 $t1 + sw $t0 -400($fp) + lw $t0 -400($fp) + bne $t0 $zero label_76 + lw $t0 -416($fp) + lw $t1 -404($fp) + seq $t0 $t0 $t1 + sw $t0 -400($fp) + lw $t0 -400($fp) + bne $t0 $zero label_77 + lw $t0 0($fp) + lw $t1 -392($fp) + seq $t0 $t0 $t1 + sw $t0 -396($fp) + j label_78 + label_75: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -424($fp) + lw $t0 -392($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -424($fp) + lw $t1 -420($fp) + seq $t0 $t0 $t1 + sw $t0 -396($fp) + j label_78 + label_76: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -424($fp) + lw $t0 -392($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -424($fp) + move $a0 $t0 + lw $t0 -420($fp) + move $a1 $t0 + jal equal_str + sw $v0 -396($fp) + j label_78 + label_77: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -424($fp) + lw $t0 -392($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -424($fp) + lw $t1 -420($fp) + seq $t0 $t0 $t1 + sw $t0 -396($fp) + j label_78 + label_78: + lw $t0 -396($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -428($fp) + lw $t0 -428($fp) + lw $t1 12($t0) + sw $t1 -432($fp) + lw $t0 -432($fp) + bne $t0 $zero label_115 + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -344($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -368($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -364($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -360($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -356($fp) + lw $t0 -368($fp) + lw $t1 -364($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_79 + lw $t0 -368($fp) + lw $t1 -360($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_80 + lw $t0 -368($fp) + lw $t1 -356($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_81 + lw $t0 0($fp) + lw $t1 -344($fp) + seq $t0 $t0 $t1 + sw $t0 -348($fp) + j label_82 + label_79: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -344($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -376($fp) + lw $t1 -372($fp) + seq $t0 $t0 $t1 + sw $t0 -348($fp) + j label_82 + label_80: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -344($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -376($fp) + move $a0 $t0 + lw $t0 -372($fp) + move $a1 $t0 + jal equal_str + sw $v0 -348($fp) + j label_82 + label_81: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -344($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -376($fp) + lw $t1 -372($fp) + seq $t0 $t0 $t1 + sw $t0 -348($fp) + j label_82 + label_82: + lw $t0 -348($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -380($fp) + lw $t0 -380($fp) + lw $t1 12($t0) + sw $t1 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_113 + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -296($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -320($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -316($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -312($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -308($fp) + lw $t0 -320($fp) + lw $t1 -316($fp) + seq $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_83 + lw $t0 -320($fp) + lw $t1 -312($fp) + seq $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_84 + lw $t0 -320($fp) + lw $t1 -308($fp) + seq $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_85 + lw $t0 0($fp) + lw $t1 -296($fp) + seq $t0 $t0 $t1 + sw $t0 -300($fp) + j label_86 + label_83: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -328($fp) + lw $t0 -296($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -328($fp) + lw $t1 -324($fp) + seq $t0 $t0 $t1 + sw $t0 -300($fp) + j label_86 + label_84: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -328($fp) + lw $t0 -296($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -328($fp) + move $a0 $t0 + lw $t0 -324($fp) + move $a1 $t0 + jal equal_str + sw $v0 -300($fp) + j label_86 + label_85: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -328($fp) + lw $t0 -296($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -328($fp) + lw $t1 -324($fp) + seq $t0 $t0 $t1 + sw $t0 -300($fp) + j label_86 + label_86: + lw $t0 -300($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -332($fp) + lw $t0 -332($fp) + lw $t1 12($t0) + sw $t1 -336($fp) + lw $t0 -336($fp) + bne $t0 $zero label_111 + li $t0 6 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -248($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -272($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -268($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -264($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -260($fp) + lw $t0 -272($fp) + lw $t1 -268($fp) + seq $t0 $t0 $t1 + sw $t0 -256($fp) + lw $t0 -256($fp) + bne $t0 $zero label_87 + lw $t0 -272($fp) + lw $t1 -264($fp) + seq $t0 $t0 $t1 + sw $t0 -256($fp) + lw $t0 -256($fp) + bne $t0 $zero label_88 + lw $t0 -272($fp) + lw $t1 -260($fp) + seq $t0 $t0 $t1 + sw $t0 -256($fp) + lw $t0 -256($fp) + bne $t0 $zero label_89 + lw $t0 0($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -252($fp) + j label_90 + label_87: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + lw $t0 -248($fp) + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t0 -280($fp) + lw $t1 -276($fp) + seq $t0 $t0 $t1 + sw $t0 -252($fp) + j label_90 + label_88: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + lw $t0 -248($fp) + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t0 -280($fp) + move $a0 $t0 + lw $t0 -276($fp) + move $a1 $t0 + jal equal_str + sw $v0 -252($fp) + j label_90 + label_89: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + lw $t0 -248($fp) + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t0 -280($fp) + lw $t1 -276($fp) + seq $t0 $t0 $t1 + sw $t0 -252($fp) + j label_90 + label_90: + lw $t0 -252($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -284($fp) + lw $t0 -284($fp) + lw $t1 12($t0) + sw $t1 -288($fp) + lw $t0 -288($fp) + bne $t0 $zero label_109 + li $t0 7 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -200($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -224($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -220($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -216($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -212($fp) + lw $t0 -224($fp) + lw $t1 -220($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_91 + lw $t0 -224($fp) + lw $t1 -216($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_92 + lw $t0 -224($fp) + lw $t1 -212($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_93 + lw $t0 0($fp) + lw $t1 -200($fp) + seq $t0 $t0 $t1 + sw $t0 -204($fp) + j label_94 + label_91: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -200($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + lw $t0 -232($fp) + lw $t1 -228($fp) + seq $t0 $t0 $t1 + sw $t0 -204($fp) + j label_94 + label_92: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -200($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + lw $t0 -232($fp) + move $a0 $t0 + lw $t0 -228($fp) + move $a1 $t0 + jal equal_str + sw $v0 -204($fp) + j label_94 + label_93: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -200($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + lw $t0 -232($fp) + lw $t1 -228($fp) + seq $t0 $t0 $t1 + sw $t0 -204($fp) + j label_94 + label_94: + lw $t0 -204($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -236($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -240($fp) + bne $t0 $zero label_107 + li $t0 8 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -176($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -172($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -168($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -164($fp) + lw $t0 -176($fp) + lw $t1 -172($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_95 + lw $t0 -176($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_96 + lw $t0 -176($fp) + lw $t1 -164($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_97 + lw $t0 0($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -156($fp) + j label_98 + label_95: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -156($fp) + j label_98 + label_96: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -184($fp) + move $a0 $t0 + lw $t0 -180($fp) + move $a1 $t0 + jal equal_str + sw $v0 -156($fp) + j label_98 + label_97: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -156($fp) + j label_98 + label_98: + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -188($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -192($fp) + lw $t0 -192($fp) + bne $t0 $zero label_105 + li $t0 9 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -128($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -124($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -120($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -116($fp) + lw $t0 -128($fp) + lw $t1 -124($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_99 + lw $t0 -128($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_100 + lw $t0 -128($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_101 + lw $t0 0($fp) + lw $t1 -104($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_102 + label_99: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_102 + label_100: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + move $a0 $t0 + lw $t0 -132($fp) + move $a1 $t0 + jal equal_str + sw $v0 -108($fp) + j label_102 + label_101: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_102 + label_102: + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -140($fp) + lw $t0 -140($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_103 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -100($fp) + la $t0 data_22 + sw $t0 -96($fp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + sw $t0 -148($fp) + j label_104 + label_103: + la $t0 data_23 + sw $t0 -88($fp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + sw $t0 -148($fp) + label_104: + lw $t0 -148($fp) + sw $t0 -196($fp) + j label_106 + label_105: + la $t0 data_24 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + sw $t0 -196($fp) + label_106: + lw $t0 -196($fp) + sw $t0 -244($fp) + j label_108 + label_107: + la $t0 data_25 + sw $t0 -72($fp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -244($fp) + label_108: + lw $t0 -244($fp) + sw $t0 -292($fp) + j label_110 + label_109: + la $t0 data_26 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 -60($fp) + sw $t0 -292($fp) + label_110: + lw $t0 -292($fp) + sw $t0 -340($fp) + j label_112 + label_111: + la $t0 data_27 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + sw $t0 -340($fp) + label_112: + lw $t0 -340($fp) + sw $t0 -388($fp) + j label_114 + label_113: + la $t0 data_28 + sw $t0 -48($fp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -388($fp) + label_114: + lw $t0 -388($fp) + sw $t0 -436($fp) + j label_116 + label_115: + la $t0 data_29 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -436($fp) + label_116: + lw $t0 -436($fp) + sw $t0 -484($fp) + j label_118 + label_117: + la $t0 data_30 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -484($fp) + label_118: + lw $t0 -484($fp) + sw $t0 -532($fp) + j label_120 + label_119: + la $t0 data_31 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -532($fp) + label_120: + lw $t0 -532($fp) + sw $t0 -580($fp) + j label_122 + label_121: + la $t0 data_32 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -580($fp) + label_122: + lw $v0 -580($fp) + addi $sp $sp 572 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_a2i_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -300 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -264($fp) + lw $t0 -264($fp) + bne $t0 $zero label_123 + j label_124 + label_123: + li $v0 4 + la $a0 data_33 + syscall + li $v0 10 + syscall + label_124: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -260($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -256($fp) + lw $t0 -260($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -288($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -284($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -280($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -276($fp) + lw $t0 -288($fp) + lw $t1 -284($fp) + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_125 + lw $t0 -288($fp) + lw $t1 -280($fp) + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_126 + lw $t0 -288($fp) + lw $t1 -276($fp) + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_127 + lw $t0 -260($fp) + lw $t1 -256($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + j label_128 + label_125: + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -296($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + j label_128 + label_126: + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -296($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -296($fp) + move $a0 $t0 + lw $t0 -292($fp) + move $a1 $t0 + jal equal_str + sw $v0 -268($fp) + j label_128 + label_127: + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -296($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + j label_128 + label_128: + lw $t0 -268($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -300($fp) + lw $t0 -300($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_153 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -208($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -204($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -200($fp) + lw $t0 -200($fp) + bne $t0 $zero label_129 + j label_130 + label_129: + li $v0 4 + la $a0 data_34 + syscall + li $v0 10 + syscall + label_130: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -208($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -204($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -196($fp) + la $t0 data_35 + sw $t0 -192($fp) + lw $t0 -192($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -188($fp) + lw $t0 -196($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -232($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -228($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -224($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -220($fp) + lw $t0 -232($fp) + lw $t1 -228($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_131 + lw $t0 -232($fp) + lw $t1 -224($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_132 + lw $t0 -232($fp) + lw $t1 -220($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_133 + lw $t0 -196($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + j label_134 + label_131: + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -240($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + j label_134 + label_132: + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -240($fp) + move $a0 $t0 + lw $t0 -236($fp) + move $a1 $t0 + jal equal_str + sw $v0 -212($fp) + j label_134 + label_133: + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -240($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + j label_134 + label_134: + lw $t0 -212($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -244($fp) + lw $t0 -244($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -248($fp) + bne $t0 $zero label_147 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -140($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -136($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_135 + j label_136 + label_135: + li $v0 4 + la $a0 data_36 + syscall + li $v0 10 + syscall + label_136: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -140($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -136($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -128($fp) + la $t0 data_37 + sw $t0 -124($fp) + lw $t0 -124($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -120($fp) + lw $t0 -128($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -164($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -160($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -156($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -152($fp) + lw $t0 -164($fp) + lw $t1 -160($fp) + seq $t0 $t0 $t1 + sw $t0 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_137 + lw $t0 -164($fp) + lw $t1 -156($fp) + seq $t0 $t0 $t1 + sw $t0 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_138 + lw $t0 -164($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_139 + lw $t0 -128($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -144($fp) + j label_140 + label_137: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -172($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -144($fp) + j label_140 + label_138: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -172($fp) + move $a0 $t0 + lw $t0 -168($fp) + move $a1 $t0 + jal equal_str + sw $v0 -144($fp) + j label_140 + label_139: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -172($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -144($fp) + j label_140 + label_140: + lw $t0 -144($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -176($fp) + lw $t0 -176($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -180($fp) + bne $t0 $zero label_141 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -116($fp) + lw $t0 -116($fp) + sw $t0 -184($fp) + j label_146 + label_141: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -108($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_142 + j label_143 + label_142: + li $v0 4 + la $a0 data_38 + syscall + li $v0 10 + syscall + label_143: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + sub $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_144 + j label_145 + label_144: + li $v0 4 + la $a0 data_39 + syscall + li $v0 10 + syscall + label_145: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -72($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -184($fp) + label_146: + lw $t0 -184($fp) + sw $t0 -252($fp) + j label_152 + label_147: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_148 + j label_149 + label_148: + li $v0 4 + la $a0 data_40 + syscall + li $v0 10 + syscall + label_149: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + sub $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_150 + j label_151 + label_150: + li $v0 4 + la $a0 data_41 + syscall + li $v0 10 + syscall + label_151: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -16($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -64($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -60($fp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -252($fp) + label_152: + lw $t0 -252($fp) + sw $t0 -308($fp) + j label_154 + label_153: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -308($fp) + label_154: + lw $v0 -308($fp) + addi $sp $sp 300 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_a2i_aux_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -120 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -124($fp) + lw $t0 -124($fp) + sw $t0 -128($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_155 + j label_156 + label_155: + li $v0 4 + la $a0 data_42 + syscall + li $v0 10 + syscall + label_156: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -120($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 -104($fp) + sw $t0 -108($fp) + label_157: + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + slt $t1 $t0 $t1 + sw $t1 -84($fp) + lw $t0 -84($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -96($fp) + lw $t0 -96($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_158 + j label_161 + label_158: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + li $t0 10 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + mul $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_159 + j label_160 + label_159: + li $v0 4 + la $a0 data_43 + syscall + li $v0 10 + syscall + label_160: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -32($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -44($fp) + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + add $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + sw $t0 -128($fp) + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -108($fp) + j label_157 + label_161: + lw $v0 -128($fp) + addi $sp $sp 120 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_i2a_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -140 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -128($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -124($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -120($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -116($fp) + lw $t0 -128($fp) + lw $t1 -124($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_162 + lw $t0 -128($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_163 + lw $t0 -128($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_164 + lw $t0 0($fp) + lw $t1 -104($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_165 + label_162: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_165 + label_163: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + move $a0 $t0 + lw $t0 -132($fp) + move $a1 $t0 + jal equal_str + sw $v0 -108($fp) + j label_165 + label_164: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_165 + label_165: + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -140($fp) + lw $t0 -140($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_170 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + slt $t1 $t0 $t1 + sw $t1 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_168 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -48($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) + mul $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -72($fp) + la $t0 data_44 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_166 + j label_167 + label_166: + li $v0 4 + la $a0 data_45 + syscall + li $v0 10 + syscall + label_167: + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -100($fp) + j label_169 + label_168: + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -100($fp) + label_169: + lw $t0 -100($fp) + sw $t0 -148($fp) + j label_171 + label_170: + la $t0 data_46 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -148($fp) + label_171: + lw $v0 -148($fp) + addi $sp $sp 140 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_i2a_aux_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -136 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -124($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -120($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -116($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -112($fp) + lw $t0 -124($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_172 + lw $t0 -124($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_173 + lw $t0 -124($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_174 + lw $t0 0($fp) + lw $t1 -100($fp) + seq $t0 $t0 $t1 + sw $t0 -104($fp) + j label_175 + label_172: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -104($fp) + j label_175 + label_173: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -132($fp) + move $a0 $t0 + lw $t0 -128($fp) + move $a1 $t0 + jal equal_str + sw $v0 -104($fp) + j label_175 + label_174: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -104($fp) + j label_175 + label_175: + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -136($fp) + lw $t0 -136($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_180 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + li $t0 10 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -72($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -72($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 -76($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_176 + j label_177 + label_176: + li $v0 4 + la $a0 data_47 + syscall + li $v0 10 + syscall + label_177: + lw $t0 -88($fp) + lw $t1 -84($fp) + div $t0 $t1 + mflo $t0 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + sw $t0 -96($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -96($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + li $t0 10 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + mul $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + sub $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -68($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + lw $t0 -28($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_178 + j label_179 + label_178: + li $v0 4 + la $a0 data_48 + syscall + li $v0 10 + syscall + label_179: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -144($fp) + j label_181 + label_180: + la $t0 data_49 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -144($fp) + label_181: + lw $v0 -144($fp) + addi $sp $sp 136 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_A2I + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -76 + la $t0 data_50 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -76($fp) + jal __init_at_A2I + sw $v0 -72($fp) + lw $t0 -72($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_182 + j label_183 + label_182: + li $v0 4 + la $a0 data_51 + syscall + li $v0 10 + syscall + label_183: + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -64($fp) + lw $t0 -64($fp) + sw $t0 -84($fp) + li $t0 678987 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + jal __init_at_A2I + sw $v0 -52($fp) + lw $t0 -52($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_184 + j label_185 + label_184: + li $v0 4 + la $a0 data_52 + syscall + li $v0 10 + syscall + label_185: + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -60($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -84($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + la $t0 data_53 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + la $t0 data_54 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $v0 -20($fp) + addi $sp $sp 76 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + 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 000000000..c547c7a06 --- /dev/null +++ b/tests/codegen/hairyscary.mips @@ -0,0 +1,2302 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Foo" +.word 0 +data_7: .asciiz "Bar" +.word 0 +data_8: .asciiz "Razz" +.word 0 +data_9: .asciiz "Bazz" +.word 0 +data_10: .asciiz "Main" +.word 0 +data_11: .asciiz " +" +.word 0 +data_12: .asciiz "" +.word 0 +data_13: .asciiz "Abort called from class " +.word 0 +data_14: .asciiz "Substring out of range" +.word 0 +data_15: .asciiz "RuntimeError: void in switch case" +.word 0 +data_16: .asciiz "RuntimeError: Case statement without a match branch" +.word 0 +data_17: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_18: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_19: .asciiz "RuntimeError: void in switch case" +.word 0 +data_20: .asciiz "RuntimeError: Case statement without a match branch" +.word 0 +data_21: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_22: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_23: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_24: .asciiz "RuntimeError: void in switch case" +.word 0 +data_25: .asciiz "RuntimeError: Case statement without a match branch" +.word 0 +data_26: .asciiz "do nothing" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + .word data_8 + .word data_9 + .word data_10 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_doh_at_Foo + .word function_printh_at_Bazz + .word __init_attr_at_Foo + .word __init_at_Foo + +type_6_prototype: + .word 5 + .word 9 + .word type_6_dispatch + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_doh_at_Foo + .word function_printh_at_Bazz + .word __init_attr_at_Bar + .word __init_at_Bar + +type_7_prototype: + .word 6 + .word 13 + .word type_7_dispatch + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word -1 + + +type_8_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_doh_at_Foo + .word function_printh_at_Bazz + .word __init_attr_at_Razz + .word __init_at_Razz + +type_8_prototype: + .word 7 + .word 11 + .word type_8_dispatch + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word -1 + + +type_9_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_doh_at_Bazz + .word function_printh_at_Bazz + .word __init_attr_at_Bazz + .word __init_at_Bazz + +type_9_prototype: + .word 8 + .word 7 + .word type_9_dispatch + .word 0 + .word 0 + .word 0 + .word -1 + + +type_10_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_10_prototype: + .word 9 + .word 8 + .word type_10_dispatch + .word 0 + .word 0 + .word 0 + .word 0 + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_13 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_11 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Foo: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -144 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Bazz + addi $sp $sp 4 + sw $v0 -132($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -120($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_15 + syscall + li $v0 10 + syscall + label_4: + la $t0 types_table + addi $t0 $t0 24 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_5 + la $t0 types_table + addi $t0 $t0 28 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_6 + la $t0 types_table + addi $t0 $t0 20 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_7 + li $v0 4 + la $a0 data_16 + syscall + li $v0 10 + syscall + label_5: + lw $t0 0($fp) + sw $t0 -104($fp) + lw $t0 -104($fp) + sw $t0 -124($fp) + j label_8 + label_6: + lw $t0 0($fp) + sw $t0 -100($fp) + jal __init_at_Bar + sw $v0 -96($fp) + lw $t0 -96($fp) + sw $t0 -124($fp) + j label_8 + label_7: + lw $t0 0($fp) + sw $t0 -92($fp) + jal __init_at_Razz + sw $v0 -88($fp) + lw $t0 -88($fp) + sw $t0 -124($fp) + j label_8 + label_8: + lw $t0 -124($fp) + sw $t0 -128($fp) + lw $t0 0($fp) + lw $t1 -128($fp) + sw $t1 24($t0) + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_17 + syscall + li $v0 10 + syscall + label_10: + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_11 + j label_12 + label_11: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_12: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + add $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + add $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + sw $t0 -84($fp) + lw $t0 0($fp) + lw $t1 -84($fp) + sw $t1 28($t0) + lw $v0 0($fp) + addi $sp $sp 144 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_doh_at_Foo: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -44 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -32($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $v0 -32($fp) + addi $sp $sp 44 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Foo: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -28 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Foo + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 28 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Bar: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -56 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Razz + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -24($fp) + lw $t0 0($fp) + lw $t1 -24($fp) + sw $t1 40($t0) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 44($t0) + lw $v0 0($fp) + addi $sp $sp 56 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bar: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -44 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Bar + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 44 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Razz: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -168 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Foo + addi $sp $sp 4 + sw $v0 -148($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -136($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_14: + la $t0 types_table + addi $t0 $t0 24 + lw $t0 0($t0) + sw $t0 -124($fp) + lw $t0 -124($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_15 + la $t0 types_table + addi $t0 $t0 28 + lw $t0 0($t0) + sw $t0 -124($fp) + lw $t0 -124($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_16 + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_15: + lw $t0 0($fp) + sw $t0 -120($fp) + lw $t0 -120($fp) + sw $t0 -140($fp) + j label_17 + label_16: + lw $t0 0($fp) + sw $t0 -116($fp) + jal __init_at_Bar + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -140($fp) + j label_17 + label_17: + lw $t0 -140($fp) + sw $t0 -144($fp) + lw $t0 0($fp) + lw $t1 -144($fp) + sw $t1 32($t0) + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_18 + j label_19 + label_18: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_19: + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal function_doh_at_Foo + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_20 + j label_21 + label_20: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_21: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + add $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t4 0($fp) + lw $t4 32($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_22 + j label_23 + label_22: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_23: + lw $t4 0($fp) + lw $t4 32($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 32($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -68($fp) + lw $t1 -64($fp) + add $t0 $t0 $t1 + sw $t0 -60($fp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) + add $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -88($fp) + lw $t0 -88($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + add $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 -104($fp) + sw $t0 -108($fp) + lw $t0 0($fp) + lw $t1 -108($fp) + sw $t1 36($t0) + lw $v0 0($fp) + addi $sp $sp 168 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Razz: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + li $t0 7 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Razz + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Bazz: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -80 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -76($fp) + lw $t0 0($fp) + lw $t1 -76($fp) + sw $t1 16($t0) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -60($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_24 + j label_25 + label_24: + li $v0 4 + la $a0 data_24 + syscall + li $v0 10 + syscall + label_25: + la $t0 types_table + addi $t0 $t0 24 + lw $t0 0($t0) + sw $t0 -48($fp) + lw $t0 -48($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_26 + la $t0 types_table + addi $t0 $t0 28 + lw $t0 0($t0) + sw $t0 -48($fp) + lw $t0 -48($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_27 + la $t0 types_table + addi $t0 $t0 20 + lw $t0 0($t0) + sw $t0 -48($fp) + lw $t0 -48($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_28 + la $t0 types_table + addi $t0 $t0 32 + lw $t0 0($t0) + sw $t0 -48($fp) + lw $t0 -48($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_29 + li $v0 4 + la $a0 data_25 + syscall + li $v0 10 + syscall + label_26: + lw $t0 0($fp) + sw $t0 -44($fp) + lw $t0 -44($fp) + sw $t0 -64($fp) + j label_30 + label_27: + lw $t0 0($fp) + sw $t0 -40($fp) + jal __init_at_Bar + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -64($fp) + j label_30 + label_28: + lw $t0 0($fp) + sw $t0 -32($fp) + jal __init_at_Razz + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -64($fp) + j label_30 + label_29: + lw $t0 0($fp) + sw $t0 -24($fp) + jal __init_at_Foo + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -64($fp) + j label_30 + label_30: + lw $t0 -64($fp) + sw $t0 -68($fp) + lw $t0 0($fp) + lw $t1 -68($fp) + sw $t1 12($t0) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 20($t0) + lw $v0 0($fp) + addi $sp $sp 80 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_printh_at_Bazz: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -16($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_doh_at_Bazz: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -32($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $v0 -32($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bazz: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + li $t0 8 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Bazz + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -48 + jal __init_at_Bazz + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -40($fp) + lw $t0 0($fp) + lw $t1 -40($fp) + sw $t1 12($t0) + jal __init_at_Foo + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -32($fp) + lw $t0 0($fp) + lw $t1 -32($fp) + sw $t1 16($t0) + jal __init_at_Razz + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -24($fp) + lw $t0 0($fp) + lw $t1 -24($fp) + sw $t1 20($t0) + jal __init_at_Bar + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 24($t0) + lw $v0 0($fp) + addi $sp $sp 48 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + la $t0 data_26 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + li $t0 9 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + 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 000000000..bc6bc022d --- /dev/null +++ b/tests/codegen/sort-list.mips @@ -0,0 +1,2714 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "List" +.word 0 +data_7: .asciiz "Cons" +.word 0 +data_8: .asciiz "Nil" +.word 0 +data_9: .asciiz "Main" +.word 0 +data_10: .asciiz " +" +.word 0 +data_11: .asciiz "" +.word 0 +data_12: .asciiz "Abort called from class " +.word 0 +data_13: .asciiz "Substring out of range" +.word 0 +data_14: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_15: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_16: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_17: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_18: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_19: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_20: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_21: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_22: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_23: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_24: .asciiz "\n" +.word 0 +data_25: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_26: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_27: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_28: .asciiz "How many numbers to sort? " +.word 0 +data_29: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_30: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_31: .asciiz "RuntimeError: Function call in a void instance" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + .word data_8 + .word data_9 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_car_at_List + .word function_cdr_at_List + .word function_cons_at_List + .word function_insert_at_List + .word function_isNil_at_List + .word function_print_list_at_List + .word function_rcons_at_List + .word function_rev_at_List + .word function_sort_at_List + .word __init_attr_at_List + .word __init_at_List + +type_6_prototype: + .word 5 + .word 4 + .word type_6_dispatch + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_car_at_Cons + .word function_cdr_at_Cons + .word function_cons_at_List + .word function_insert_at_Cons + .word function_isNil_at_Cons + .word function_print_list_at_Cons + .word function_rcons_at_Cons + .word function_rev_at_Cons + .word function_sort_at_Cons + .word function_init_at_Cons + .word __init_attr_at_Cons + .word __init_at_Cons + +type_7_prototype: + .word 6 + .word 6 + .word type_7_dispatch + .word 0 + .word 0 + .word -1 + + +type_8_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_car_at_List + .word function_cdr_at_List + .word function_cons_at_List + .word function_insert_at_Nil + .word function_isNil_at_Nil + .word function_print_list_at_Nil + .word function_rcons_at_Nil + .word function_rev_at_Nil + .word function_sort_at_Nil + .word __init_attr_at_Nil + .word __init_at_Nil + +type_8_prototype: + .word 7 + .word 4 + .word type_8_dispatch + .word -1 + + +type_9_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_iota_at_Main + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_9_prototype: + .word 8 + .word 5 + .word type_9_dispatch + .word 0 + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_12 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_10 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_13 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cons_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + jal __init_at_Cons + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -24($fp) + lw $t0 -24($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_4: + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_car_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cdr_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + jal __init_at_List + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_rev_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_sort_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_insert_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_rcons_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_list_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_List + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_List + addi $sp $sp 4 + sw $v0 -20($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 12($t0) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 0($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_init_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 4($fp) + lw $t1 8($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t0 0($fp) + lw $t1 8($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $v0 8($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_car_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cdr_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_rev_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_15 + syscall + li $v0 10 + syscall + label_6: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 56($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_16 + syscall + li $v0 10 + syscall + label_8: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_sort_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_17 + syscall + li $v0 10 + syscall + label_10: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 60($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_11 + j label_12 + label_11: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_12: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_insert_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -64 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + slt $t1 $t0 $t1 + sw $t1 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_17 + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_14: + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + jal __init_at_Cons + sw $v0 -32($fp) + lw $t0 -32($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_16: + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -64($fp) + j label_20 + label_17: + jal __init_at_Cons + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_18 + j label_19 + label_18: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_19: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -64($fp) + label_20: + lw $v0 -64($fp) + addi $sp $sp 64 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_rcons_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -28 + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_21 + j label_22 + label_21: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_22: + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + jal __init_at_Cons + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_23 + j label_24 + label_23: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_24: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 28 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_list_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -32 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -32($fp) + la $t0 data_24 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_25 + j label_26 + label_25: + li $v0 4 + la $a0 data_25 + syscall + li $v0 10 + syscall + label_26: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 32 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Cons + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_List + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_rev_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_sort_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_insert_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_rcons_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + jal __init_at_Cons + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_27 + j label_28 + label_27: + li $v0 4 + la $a0 data_26 + syscall + li $v0 10 + syscall + label_28: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_list_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 7 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Nil + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_iota_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -68 + jal __init_at_Nil + sw $v0 -72($fp) + lw $t0 -72($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + sw $t0 -68($fp) + label_29: + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + slt $t1 $t0 $t1 + sw $t1 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_30 + j label_33 + label_30: + jal __init_at_Cons + sw $v0 -40($fp) + lw $t0 -40($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_31 + j label_32 + label_31: + li $v0 4 + la $a0 data_27 + syscall + li $v0 10 + syscall + label_32: + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -32($fp) + lw $t0 -32($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -68($fp) + j label_29 + label_33: + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 68 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -48 + la $t0 data_28 + sw $t0 -48($fp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -52($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + lw $t0 -40($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_34 + j label_35 + label_34: + li $v0 4 + la $a0 data_29 + syscall + li $v0 10 + syscall + label_35: + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 56($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_36 + j label_37 + label_36: + li $v0 4 + la $a0 data_30 + syscall + li $v0 10 + syscall + label_37: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 60($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_38 + j label_39 + label_38: + li $v0 4 + la $a0 data_31 + syscall + li $v0 10 + syscall + label_39: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + addi $sp $sp 48 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 8 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + jr $ra + \ No newline at end of file diff --git a/tests/codegen_test.py b/tests/codegen_test.py index 598d7da01..48df768ff 100644 --- a/tests/codegen_test.py +++ b/tests/codegen_test.py @@ -1,17 +1,17 @@ -# import pytest -# import os -# from utils import compare_outputs +import pytest +import os +from utils import compare_outputs -# tests_dir = __file__.rpartition('/')[0] + '/codegen/' -# tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] +tests_dir = __file__.rpartition('/')[0] + '/codegen/' +tests = [(file) for file in os.listdir(tests_dir) if file.endswith('.cl')] -# # @pytest.mark.lexer -# # @pytest.mark.parser -# # @pytest.mark.semantic -# @pytest.mark.codegen -# @pytest.mark.ok -# @pytest.mark.run(order=4) -# @pytest.mark.parametrize("cool_file", tests) -# def test_codegen(compiler_path, cool_file): -# compare_outputs(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_input.txt',\ -# tests_dir + cool_file[:-3] + '_output.txt') \ No newline at end of file +# @pytest.mark.lexer +# @pytest.mark.parser +# @pytest.mark.semantic +@pytest.mark.codegen +@pytest.mark.ok +@pytest.mark.run(order=4) +@pytest.mark.parametrize("cool_file", tests) +def test_codegen(compiler_path, cool_file): + compare_outputs(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_input.txt',\ + tests_dir + cool_file[:-3] + '_output.txt') \ No newline at end of file diff --git a/tests/lexer_test.py b/tests/lexer_test.py index 7cc100b22..effd4ede0 100644 --- a/tests/lexer_test.py +++ b/tests/lexer_test.py @@ -1,16 +1,16 @@ -import pytest -import os -from utils import compare_errors +# import pytest +# import os +# from utils import compare_errors -tests_dir = __file__.rpartition("/")[0] + "/lexer/" -tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] -@pytest.mark.lexer -@pytest.mark.error -@pytest.mark.run(order=1) -@pytest.mark.parametrize("cool_file", tests) -def test_lexer_errors(compiler_path, cool_file): - print(compiler_path) - print(cool_file) - compare_errors( - compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" - ) +# tests_dir = __file__.rpartition("/")[0] + "/lexer/" +# tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +# @pytest.mark.lexer +# @pytest.mark.error +# @pytest.mark.run(order=1) +# @pytest.mark.parametrize("cool_file", tests) +# def test_lexer_errors(compiler_path, cool_file): +# print(compiler_path) +# print(cool_file) +# compare_errors( +# compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" +# ) diff --git a/tests/parser_test.py b/tests/parser_test.py index 5c98fd1b2..78037b3fe 100644 --- a/tests/parser_test.py +++ b/tests/parser_test.py @@ -1,14 +1,14 @@ -import pytest -import os -from utils import compare_errors +# import pytest +# import os +# from utils import compare_errors -tests_dir = __file__.rpartition("/")[0] + "/parser/" -tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] -@pytest.mark.parser -@pytest.mark.error -@pytest.mark.run(order=2) -@pytest.mark.parametrize("cool_file", tests) -def test_parser_errors(compiler_path, cool_file): - compare_errors( - compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" - ) +# tests_dir = __file__.rpartition("/")[0] + "/parser/" +# tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +# @pytest.mark.parser +# @pytest.mark.error +# @pytest.mark.run(order=2) +# @pytest.mark.parametrize("cool_file", tests) +# def test_parser_errors(compiler_path, cool_file): +# compare_errors( +# compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" +# ) diff --git a/tests/semantic_test.py b/tests/semantic_test.py index 5e8fae4b7..8ec6fcf79 100644 --- a/tests/semantic_test.py +++ b/tests/semantic_test.py @@ -1,15 +1,15 @@ -import pytest -import os -from utils import compare_errors, first_error_only_line +# import pytest +# import os +# from utils import compare_errors, first_error_only_line -tests_dir = __file__.rpartition("/")[0] + "/semantic/" -tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +# tests_dir = __file__.rpartition("/")[0] + "/semantic/" +# tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] -@pytest.mark.semantic -@pytest.mark.error -@pytest.mark.run(order=3) -@pytest.mark.parametrize("cool_file", tests) -def test_semantic_errors(compiler_path, cool_file): - compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ - cmp=first_error_only_line) +# @pytest.mark.semantic +# @pytest.mark.error +# @pytest.mark.run(order=3) +# @pytest.mark.parametrize("cool_file", tests) +# def test_semantic_errors(compiler_path, cool_file): +# compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ +# cmp=first_error_only_line) diff --git a/tests/utils/utils.py b/tests/utils/utils.py index 765425d48..7d15c63e5 100644 --- a/tests/utils/utils.py +++ b/tests/utils/utils.py @@ -74,6 +74,7 @@ def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str def compare_outputs(compiler_path: str, cool_file_path: str, input_file_path: str, output_file_path: str, timeout=100): try: sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) + print(sp) assert sp.returncode == 0, TEST_MUST_COMPILE % get_file_name(cool_file_path) except subprocess.TimeoutExpired: assert False, COMPILER_TIMEOUT From 6a648aa213830662d8da8cae5fce315b45c7d7d5 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Sun, 27 Feb 2022 12:21:48 -0500 Subject: [PATCH 75/93] before noting all types in semantics --- src/__main__.py | 89 +- src/utils/semantic.py | 15 +- src/visitors/Checker.py | 33 +- src/visitors/CooltoCilM.py | 32 +- tests/codegen/arith.mips | 11654 +++++++++++++++++++ tests/codegen/atoi.mips | 8734 +++++++------- tests/codegen/basic.cl | 19 - tests/codegen/book_list.mips | 2695 +++++ tests/codegen/cells.mips | 2792 +++++ tests/codegen/complex.mips | 2568 ++++ tests/codegen/covariance.cl | 26 - tests/codegen/{ => d}/sort-list.cl | 0 tests/codegen/d/sort-list.mips | 2714 +++++ tests/codegen/{ => d}/sort-list_input.txt | 0 tests/codegen/{ => d}/sort-list_output.txt | 0 tests/codegen/fib.mips | 1369 +++ tests/codegen/graph.mips | 7046 +++++++++++ tests/codegen/hairyscary.mips | 3110 ++--- tests/codegen/hello_world.mips | 1097 ++ tests/codegen/io.mips | 1750 +++ tests/codegen/life.mips | 10485 +++++++++++++++++ tests/codegen/list.mips | 1987 ++++ tests/codegen/new_complex.mips | 3032 +++++ tests/codegen/palindrome.mips | 1871 +++ tests/codegen/primes.mips | 1735 +++ tests/codegen/print-cool.mips | 1082 ++ tests/codegen/sort-list.mips | 2714 ----- 27 files changed, 59891 insertions(+), 8758 deletions(-) create mode 100644 tests/codegen/arith.mips delete mode 100755 tests/codegen/basic.cl create mode 100644 tests/codegen/book_list.mips create mode 100644 tests/codegen/cells.mips create mode 100644 tests/codegen/complex.mips delete mode 100644 tests/codegen/covariance.cl rename tests/codegen/{ => d}/sort-list.cl (100%) create mode 100644 tests/codegen/d/sort-list.mips rename tests/codegen/{ => d}/sort-list_input.txt (100%) rename tests/codegen/{ => d}/sort-list_output.txt (100%) create mode 100644 tests/codegen/fib.mips create mode 100644 tests/codegen/graph.mips create mode 100644 tests/codegen/hello_world.mips create mode 100644 tests/codegen/io.mips create mode 100644 tests/codegen/life.mips create mode 100644 tests/codegen/list.mips create mode 100644 tests/codegen/new_complex.mips create mode 100644 tests/codegen/palindrome.mips create mode 100644 tests/codegen/primes.mips create mode 100644 tests/codegen/print-cool.mips delete mode 100644 tests/codegen/sort-list.mips diff --git a/src/__main__.py b/src/__main__.py index e00acd618..7999ecb6d 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -75,55 +75,58 @@ def main(): if len(sys.argv) > 1: input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] else: - input_file = "./tests/codegen/primes.cl"#"debbuging/tests/Auto/call1.cl" + input_file = "./tests/codegen/print-cool.cl"#"debbuging/tests/Auto/call1.cl" # raise Exception("Incorrect number of arguments") - try: - program_file = open(input_file) - program = program_file.read() - program_file.close() + # try: + # program_file = open(input_file) + # program = program_file.read() + # program_file.close() - # coolLexer = lexer.CoolLexer() - # coolLexer.build() - # tokens = coolLexer.input(program) - # if coolLexer.errors: - # for error in coolLexer.errors: - # print(error.__str__()) - # exit(1) + # # coolLexer = lexer.CoolLexer() + # # coolLexer.build() + # # tokens = coolLexer.input(program) + # # if coolLexer.errors: + # # for error in coolLexer.errors: + # # print(error.__str__()) + # # exit(1) - pipe = Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) - if pipe.errors: - for error in pipe.errors: - print(error) - exit(1) - else: - out_file = input_file.split(".") - out_file[-1] = "mips" - out_file = ".".join(out_file) + # pipe = Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) + # if pipe.errors: + # for error in pipe.errors: + # print(error) + # exit(1) + # else: + # out_file = input_file.split(".") + # out_file[-1] = "mips" + # out_file = ".".join(out_file) - with open(out_file, 'w') as f: - f.write(pipe.mipsCode) - except Exception as e: - print(e) - exit(1) - # coolParser = parser.CoolParser() - - # ast = coolParser.parse(lexer.CoolLexer(), program) - # if coolParser.lexer.errors: - # for lexing_error in coolParser.lexer.errors: - # print(lexing_error.__str__()) - # exit(1) - # if coolParser.errors: - # for parsing_error in coolParser.errors: - # print(parsing_error) - # exit(1) - # parser = Parser(Lexer()) - # ast = parser.parse(program) - # if parser.errors: - # for error in parser.errors: - # print(error) + # with open(out_file, 'w') as f: + # f.write(pipe.mipsCode) + # except Exception as e: + # print(e) # exit(1) - # run_pipeline(ast) + program_file = open(input_file) + program = program_file.read() + program_file.close() + # coolLexer = lexer.CoolLexer() + # coolLexer.build() + # tokens = coolLexer.input(program) + # if coolLexer.errors: + # for error in coolLexer.errors: + # print(error.__str__()) + # exit(1) + pipe = Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) + if pipe.errors: + for error in pipe.errors: + print(error) + exit(1) + else: + out_file = input_file.split(".") + out_file[-1] = "mips" + out_file = ".".join(out_file) + with open(out_file, 'w') as f: + f.write(pipe.mipsCode) main() diff --git a/src/utils/semantic.py b/src/utils/semantic.py index 9d0dccf67..7b3ff65ac 100755 --- a/src/utils/semantic.py +++ b/src/utils/semantic.py @@ -229,11 +229,17 @@ def __init__(self, name, params): self.name = name self.params = params +from random import randint +count = 0 class Scope: def __init__(self, parent: Optional['Scope'] = None): + global count self.locals: Dict[str, VariableInfo] = {} self.parent: Optional['Scope'] = parent self.children: List[Scope] = [] + # self.id = randint(1,1000) + self.id = count + count+=1 def create_child(self) -> 'Scope': child = Scope(self) @@ -245,12 +251,19 @@ def define_variable(self, vname: str, vtype: Type) -> VariableInfo: self.locals[vname] = info return info - def find_variable(self, vname: str) -> Optional[VariableInfo]: + # def find_variable(self, vname: str) -> Optional[VariableInfo]: + # try: + # return self.locals[vname] + # except KeyError: + # return self.parent.find_variable(vname) if self.parent is not None else None + + def find_variable(self, vname : str): try: return self.locals[vname] except KeyError: return self.parent.find_variable(vname) if self.parent is not None else None + def is_defined(self, vname) -> bool: return self.find_variable(vname) is not None diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py index 792170dfc..6c5815806 100755 --- a/src/visitors/Checker.py +++ b/src/visitors/Checker.py @@ -2,6 +2,7 @@ from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo import visitors.visitor as visitor from utils.errors import _TypeError, _NameError, _SemanticError, _AtributeError +count = 0 class TypeChecker: def __init__(self, context, errors, c_m = None, c_t = None): self.context = context @@ -47,8 +48,11 @@ def visit(self, node, scope): # methods.append(feature) for attr, owner in self.current_type.all_attributes(): #definir atributos de los ancestros - if owner != self.current_type: - scope.define_variable(attr.name, attr.type) + # if owner != self.current_type: + # scope.define_variable(attr.name, attr.type) + scope.define_variable(attr.name, attr.type) + + # for attr in attrs: # self.visit(attr, scope) @@ -57,10 +61,13 @@ def visit(self, node, scope): for feature in node.features: if isinstance(feature, AttrDeclarationNode): - self.visit(feature, scope) + cscope = scope.create_child() + self.visit(feature, cscope) else: self.visit(feature, scope.create_child()) + + @visitor.when(FuncDeclarationNode) def visit(self, node, scope): self.current_method = self.current_type.get_method(node.id, self.current_type, False) @@ -124,9 +131,6 @@ def visit(self, node, scope): _t = nod.type _e = nod.expr - if _id == 'y' and _t == 'Int': - _ = 0 - if _id =='self': self.errors.append(_SemanticError %(node.decl_list[iteration].token_list[0].lineno, node.decl_list[iteration].token_list[0].col, f"'self' cannot be bound in a 'let' expression.")) continue @@ -186,10 +190,10 @@ def visit(self, node, scope): ## this is to assign to the variable the type of the right-side expression, but it doesnt pass the semantic tests this way, f # attrType = value_t - else: - scope.create_child() + # else: + # scope.create_child() - scope.define_variable(node.id, attrType) + # scope.define_variable(node.id, attrType) @visitor.when(AssignNode) def visit(self, node, scope): @@ -202,6 +206,7 @@ def visit(self, node, scope): return ErrorType() if var_info is None: + raise Exception('var not found in scope') self.errors.append(f'Undefined variable {node.id} in {self.current_method.name}.') else: if not exprType.conforms_to(var_info.type): @@ -211,7 +216,9 @@ def visit(self, node, scope): @visitor.when(WhileNode) def visit(self, node, scope): - condition = self.visit(node.condition, scope) + # if node.condition.lex == 'true': + # _ = 0 + condition = self.visit(node.condition, scope.create_child()) if condition != self.context.get_type('Bool'): # self.errors.append(f"Can't convert {condition.name} to Bool.") self.errors.append(_TypeError %(node.condition.token_list[0].lineno, node.condition.token_list[0].col, f'Loop condition does not have type Bool.')) @@ -394,8 +401,10 @@ def visit(self, node, scope): def visit(self, node, scope): try: if node.lex != 'SELF_TYPE': - return self.context.get_type(node.lex) + node.type = self.context.get_type(node.lex) + return node.type else: + node.type = self.current_type return self.current_type except SemanticError as e: self.errors.append(_TypeError % (node.token_list[1].lineno, node.token_list[1].col, f"'new' used with undefined class {node.lex}.")) @@ -404,7 +413,7 @@ def visit(self, node, scope): @visitor.when(NotNode) def visit(self, node, scope): - tp = self.visit(node.expression, scope) + tp = self.visit(node.expression, scope.create_child()) if tp == self.context.get_type('Bool'): return tp self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f"Argument of 'not' has type {tp.name} instead of Bool.")) diff --git a/src/visitors/CooltoCilM.py b/src/visitors/CooltoCilM.py index 278ffdaf8..bb8d1fbc8 100644 --- a/src/visitors/CooltoCilM.py +++ b/src/visitors/CooltoCilM.py @@ -436,15 +436,13 @@ def visit(self, node, scope): self.init_attr_name(self.current_type.parent.name), variable)) # Inicializando los atributos de la clase - for feat in node.features: + for i, feat in enumerate(node.features): if isinstance(feat, AttrDeclarationNode): - try: - att_scope = Scope() - att_scope.locals = scope.locals - self.visit(feat, att_scope) - self.register_instruction(cil.SetAttribNode(self_param, feat.id, feat.ret_expr, node.id,)) - except Exception as e: - _ = 0 + # try: + self.visit(feat, scope.children[i]) + self.register_instruction(cil.SetAttribNode(self_param, feat.id, feat.ret_expr, node.id,)) + # except Exception as e: + # _ = 0 self.register_instruction(cil.ReturnNode(self_param)) # TypeNode de la clase @@ -493,11 +491,10 @@ def default_value_init(type): return StringNode("") else: return VoidNode('void') - if node.id == 'm': - _ = 0 + variable = self.define_internal_local() if node.value: - self.visit(node.value, scope) + self.visit(node.value, scope.children[0]) self.register_instruction(cil.AssignNode(variable, node.value.ret_expr)) elif node.type in self.value_types: if node.type == 'SELF_TYPE': @@ -525,8 +522,6 @@ def visit(self, node, scope): # node.type -> str # node.body -> [ ExpressionNode ... ] ############################### - if node.id == 'm': - _ = 0 self.current_method = self.current_type.get_method(node.id, self.current_type, False) type = self.types_map[self.current_type.name] self.current_function = self.register_function(self.to_function_name(self.current_method.name, @@ -630,7 +625,7 @@ def visit(self, node, scope): if node.parent is not None: # stype = node.type.lex - self.register_instruction(cil.StaticCallNode(self.types_map[stype].methods[node.method], ret)) + self.register_instruction(cil.StaticCallNode(self.types_map[node.parent].methods[node.method], ret)) else: # stype = node.obj.static_type.name self.register_instruction(cil.ArgNode(node.obj.ret_expr)) @@ -879,24 +874,19 @@ def visit(self, node, scope): @visitor.when(WhileNode) def visit(self, node, scope): - try: - if node.condition.lex == 'flag': - _ = 0 - except: - pass while_label = self.register_label('while_label') loop_label = self.register_label('loop_label') pool_label = self.register_label('pool_label') condition = self.define_internal_local() self.register_instruction(while_label) - self.visit(node.condition, scope) + self.visit(node.condition, scope.children[0]) self.register_instruction(cil.GetAttribNode(condition, node.condition.ret_expr, 'value', 'Bool')) self.register_instruction(cil.GotoIfNode(condition, loop_label.label)) self.register_instruction(cil.GotoNode(pool_label.label)) self.register_instruction(loop_label) - self.visit(node.loopChunk, scope.children[0]) + self.visit(node.loopChunk, scope.children[1]) self.register_instruction( cil.GotoNode(while_label.label)) diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips new file mode 100644 index 000000000..87cc00aec --- /dev/null +++ b/tests/codegen/arith.mips @@ -0,0 +1,11654 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "A" +.word 0 +data_7: .asciiz "B" +.word 0 +data_8: .asciiz "C" +.word 0 +data_9: .asciiz "D" +.word 0 +data_10: .asciiz "E" +.word 0 +data_11: .asciiz "A2I" +.word 0 +data_12: .asciiz "Main" +.word 0 +data_13: .asciiz " +" +.word 0 +data_14: .asciiz "" +.word 0 +data_15: .asciiz "Abort called from class " +.word 0 +data_16: .asciiz "Substring out of range" +.word 0 +data_17: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_18: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_19: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_20: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_21: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_22: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_23: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_24: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_25: .asciiz "RuntimeError: Division by zero" +.word 0 +data_26: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_27: .asciiz "0" +.word 0 +data_28: .asciiz "1" +.word 0 +data_29: .asciiz "2" +.word 0 +data_30: .asciiz "3" +.word 0 +data_31: .asciiz "4" +.word 0 +data_32: .asciiz "5" +.word 0 +data_33: .asciiz "6" +.word 0 +data_34: .asciiz "7" +.word 0 +data_35: .asciiz "8" +.word 0 +data_36: .asciiz "9" +.word 0 +data_37: .asciiz "" +.word 0 +data_38: .asciiz "9" +.word 0 +data_39: .asciiz "8" +.word 0 +data_40: .asciiz "7" +.word 0 +data_41: .asciiz "6" +.word 0 +data_42: .asciiz "5" +.word 0 +data_43: .asciiz "4" +.word 0 +data_44: .asciiz "3" +.word 0 +data_45: .asciiz "2" +.word 0 +data_46: .asciiz "1" +.word 0 +data_47: .asciiz "0" +.word 0 +data_48: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_49: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_50: .asciiz "-" +.word 0 +data_51: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_52: .asciiz "+" +.word 0 +data_53: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_54: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_55: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_56: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_57: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_58: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_59: .asciiz "-" +.word 0 +data_60: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_61: .asciiz "0" +.word 0 +data_62: .asciiz "RuntimeError: Division by zero" +.word 0 +data_63: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_64: .asciiz "" +.word 0 +data_65: .asciiz "\n\tTo add a number to " +.word 0 +data_66: .asciiz "...enter a:\n" +.word 0 +data_67: .asciiz "\tTo negate " +.word 0 +data_68: .asciiz "...enter b:\n" +.word 0 +data_69: .asciiz "\tTo find the difference between " +.word 0 +data_70: .asciiz "and another number...enter c:\n" +.word 0 +data_71: .asciiz "\tTo find the factorial of " +.word 0 +data_72: .asciiz "...enter d:\n" +.word 0 +data_73: .asciiz "\tTo square " +.word 0 +data_74: .asciiz "...enter e:\n" +.word 0 +data_75: .asciiz "\tTo cube " +.word 0 +data_76: .asciiz "...enter f:\n" +.word 0 +data_77: .asciiz "\tTo find out if " +.word 0 +data_78: .asciiz "is a multiple of 3...enter g:\n" +.word 0 +data_79: .asciiz "\tTo divide " +.word 0 +data_80: .asciiz "by 8...enter h:\n" +.word 0 +data_81: .asciiz "\tTo get a new number...enter j:\n" +.word 0 +data_82: .asciiz "\tTo quit...enter q:\n\n" +.word 0 +data_83: .asciiz "\n" +.word 0 +data_84: .asciiz "Please enter a number... " +.word 0 +data_85: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_86: .asciiz "RuntimeError: void in switch case" +.word 0 +data_87: .asciiz "RuntimeError: Case statement without a match branch" +.word 0 +data_88: .asciiz "Class type is now E\n" +.word 0 +data_89: .asciiz "Class type is now C\n" +.word 0 +data_90: .asciiz "Class type is now D\n" +.word 0 +data_91: .asciiz "Class type is now B\n" +.word 0 +data_92: .asciiz "Class type is now A\n" +.word 0 +data_93: .asciiz "Oooops\n" +.word 0 +data_94: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_95: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_96: .asciiz " " +.word 0 +data_97: .asciiz "number " +.word 0 +data_98: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_99: .asciiz "is odd!\n" +.word 0 +data_100: .asciiz "is even!\n" +.word 0 +data_101: .asciiz "a" +.word 0 +data_102: .asciiz "b" +.word 0 +data_103: .asciiz "c" +.word 0 +data_104: .asciiz "d" +.word 0 +data_105: .asciiz "e" +.word 0 +data_106: .asciiz "f" +.word 0 +data_107: .asciiz "g" +.word 0 +data_108: .asciiz "h" +.word 0 +data_109: .asciiz "j" +.word 0 +data_110: .asciiz "q" +.word 0 +data_111: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_112: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_113: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_114: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_115: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_116: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_117: .asciiz "number " +.word 0 +data_118: .asciiz "is equal to " +.word 0 +data_119: .asciiz "times 8 with a remainder of " +.word 0 +data_120: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_121: .asciiz "\n" +.word 0 +data_122: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_123: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_124: .asciiz "number " +.word 0 +data_125: .asciiz "is not divisible by 3.\n" +.word 0 +data_126: .asciiz "number " +.word 0 +data_127: .asciiz "is divisible by 3.\n" +.word 0 +data_128: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_129: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_130: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_131: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_132: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_133: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_134: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_135: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_136: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_137: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_138: .asciiz "RuntimeError: void in switch case" +.word 0 +data_139: .asciiz "RuntimeError: Case statement without a match branch" +.word 0 +data_140: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_141: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_142: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_143: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_144: .asciiz "Oooops\n" +.word 0 +data_145: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_146: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_147: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_148: .asciiz "RuntimeError: Function call in a void instance" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + .word data_8 + .word data_9 + .word data_10 + .word data_11 + .word data_12 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + .word type_11_prototype + .word type_12_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_method1_at_A + .word function_method2_at_A + .word function_method3_at_A + .word function_method4_at_A + .word function_method5_at_A + .word function_set_var_at_A + .word function_value_at_A + .word __init_attr_at_A + .word __init_at_A + +type_6_prototype: + .word 5 + .word 5 + .word type_6_dispatch + .word 0 + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_method1_at_A + .word function_method2_at_A + .word function_method3_at_A + .word function_method4_at_A + .word function_method5_at_B + .word function_set_var_at_A + .word function_value_at_A + .word __init_attr_at_B + .word __init_at_B + +type_7_prototype: + .word 6 + .word 5 + .word type_7_dispatch + .word 0 + .word -1 + + +type_8_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_method1_at_A + .word function_method2_at_A + .word function_method3_at_A + .word function_method4_at_A + .word function_method5_at_C + .word function_set_var_at_A + .word function_value_at_A + .word function_method6_at_C + .word __init_attr_at_C + .word __init_at_C + +type_8_prototype: + .word 7 + .word 5 + .word type_8_dispatch + .word 0 + .word -1 + + +type_9_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_method1_at_A + .word function_method2_at_A + .word function_method3_at_A + .word function_method4_at_A + .word function_method5_at_B + .word function_set_var_at_A + .word function_value_at_A + .word function_method7_at_D + .word __init_attr_at_D + .word __init_at_D + +type_9_prototype: + .word 8 + .word 5 + .word type_9_dispatch + .word 0 + .word -1 + + +type_10_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_method1_at_A + .word function_method2_at_A + .word function_method3_at_A + .word function_method4_at_A + .word function_method5_at_B + .word function_set_var_at_A + .word function_value_at_A + .word function_method7_at_D + .word function_method6_at_E + .word __init_attr_at_E + .word __init_at_E + +type_10_prototype: + .word 9 + .word 5 + .word type_10_dispatch + .word 0 + .word -1 + + +type_11_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_a2i_at_A2I + .word function_a2i_aux_at_A2I + .word function_c2i_at_A2I + .word function_i2a_at_A2I + .word function_i2a_aux_at_A2I + .word function_i2c_at_A2I + .word __init_attr_at_A2I + .word __init_at_A2I + +type_11_prototype: + .word 10 + .word 4 + .word type_11_dispatch + .word -1 + + +type_12_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_class_type_at_Main + .word function_get_int_at_Main + .word function_is_even_at_Main + .word function_main_at_Main + .word function_menu_at_Main + .word function_print_at_Main + .word function_prompt_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_12_prototype: + .word 11 + .word 8 + .word type_12_dispatch + .word 0 + .word 0 + .word 0 + .word 0 + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_15 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_13 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_16 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_A: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_value_at_A: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_set_var_at_A: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_method1_at_A: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_method2_at_A: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -32($fp) + lw $t1 -28($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -40($fp) + jal __init_at_B + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_17 + syscall + li $v0 10 + syscall + label_4: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_method3_at_A: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -32 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -28($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -36($fp) + jal __init_at_C + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_6: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 32 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_method4_at_A: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -92 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) + slt $t1 $t0 $t1 + sw $t1 -76($fp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -88($fp) + lw $t0 -88($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_9 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) + sub $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -72($fp) + jal __init_at_D + sw $v0 -52($fp) + lw $t0 -52($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_8: + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -96($fp) + j label_12 + label_9: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -32($fp) + lw $t1 -28($fp) + sub $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -40($fp) + jal __init_at_D + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_10 + j label_11 + label_10: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_11: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -96($fp) + label_12: + lw $v0 -96($fp) + addi $sp $sp 92 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_method5_at_A: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -88 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -88($fp) + lw $t0 -88($fp) + sw $t0 -92($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + sw $t0 -84($fp) + label_13: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -68($fp) + lw $t1 -64($fp) + sle $t0 $t0 $t1 + sw $t0 -60($fp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_14 + j label_15 + label_14: + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + mul $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -56($fp) + sw $t0 -92($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 -36($fp) + lw $t1 -32($fp) + add $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -84($fp) + j label_13 + label_15: + jal __init_at_E + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_16 + j label_17 + label_16: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_17: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 88 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_A: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_A + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_B: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_A + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_method5_at_B: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -32($fp) + lw $t1 -28($fp) + mul $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -40($fp) + jal __init_at_E + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_18 + j label_19 + label_18: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_19: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_B: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_B + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_C: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_B + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_method6_at_C: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -32 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -28($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -36($fp) + jal __init_at_A + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_20 + j label_21 + label_20: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_21: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 32 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_method5_at_C: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -52 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -32($fp) + lw $t1 -28($fp) + mul $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + lw $t0 -48($fp) + lw $t1 -44($fp) + mul $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + sw $t0 -56($fp) + jal __init_at_E + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_22 + j label_23 + label_22: + li $v0 4 + la $a0 data_24 + syscall + li $v0 10 + syscall + label_23: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 52 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_C: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 7 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_C + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_D: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_B + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_method7_at_D: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -232 + lw $t0 0($fp) + sw $t0 -236($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -220($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -208($fp) + lw $t0 -208($fp) + lw $t1 12($t0) + sw $t1 -216($fp) + lw $t0 -220($fp) + lw $t1 -216($fp) + slt $t1 $t0 $t1 + sw $t1 -212($fp) + lw $t0 -212($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -224($fp) + lw $t0 -224($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_42 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -160($fp) + lw $t0 -160($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -184($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -180($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -176($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -172($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -168($fp) + lw $t0 -168($fp) + bne $t0 $zero label_24 + lw $t0 -184($fp) + lw $t1 -176($fp) + seq $t0 $t0 $t1 + sw $t0 -168($fp) + lw $t0 -168($fp) + bne $t0 $zero label_25 + lw $t0 -184($fp) + lw $t1 -172($fp) + seq $t0 $t0 $t1 + sw $t0 -168($fp) + lw $t0 -168($fp) + bne $t0 $zero label_26 + lw $t0 -160($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -164($fp) + j label_27 + label_24: + lw $t0 -160($fp) + lw $t1 12($t0) + sw $t1 -192($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -188($fp) + lw $t0 -192($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -164($fp) + j label_27 + label_25: + lw $t0 -160($fp) + lw $t1 12($t0) + sw $t1 -192($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -188($fp) + lw $t0 -192($fp) + move $a0 $t0 + lw $t0 -188($fp) + move $a1 $t0 + jal equal_str + sw $v0 -164($fp) + j label_27 + label_26: + lw $t0 -160($fp) + lw $t1 12($t0) + sw $t1 -192($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -188($fp) + lw $t0 -192($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -164($fp) + j label_27 + label_27: + lw $t0 -164($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -196($fp) + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -200($fp) + bne $t0 $zero label_40 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -112($fp) + lw $t0 -112($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -136($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -132($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -128($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -124($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_28 + lw $t0 -136($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_29 + lw $t0 -136($fp) + lw $t1 -124($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_30 + lw $t0 -112($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + j label_31 + label_28: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + j label_31 + label_29: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -144($fp) + move $a0 $t0 + lw $t0 -140($fp) + move $a1 $t0 + jal equal_str + sw $v0 -116($fp) + j label_31 + label_30: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + j label_31 + label_31: + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -148($fp) + lw $t0 -148($fp) + lw $t1 12($t0) + sw $t1 -152($fp) + lw $t0 -152($fp) + bne $t0 $zero label_38 + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -88($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -84($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -80($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -76($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_32 + lw $t0 -88($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_33 + lw $t0 -88($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_34 + lw $t0 -64($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_35 + label_32: + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_35 + label_33: + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + move $a0 $t0 + lw $t0 -92($fp) + move $a1 $t0 + jal equal_str + sw $v0 -68($fp) + j label_35 + label_34: + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_35 + label_35: + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_36 + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + sub $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -60($fp) + lw $t0 -60($fp) + sw $t0 -108($fp) + j label_37 + label_36: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -108($fp) + label_37: + lw $t0 -108($fp) + sw $t0 -156($fp) + j label_39 + label_38: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -156($fp) + label_39: + lw $t0 -156($fp) + sw $t0 -204($fp) + j label_41 + label_40: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -204($fp) + label_41: + lw $t0 -204($fp) + sw $t0 -232($fp) + j label_43 + label_42: + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -232($fp) + label_43: + lw $v0 -232($fp) + addi $sp $sp 232 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_D: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 8 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_D + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_E: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_D + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_method6_at_E: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -44 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + li $t0 8 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -24($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -28($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_44 + j label_45 + label_44: + li $v0 4 + la $a0 data_25 + syscall + li $v0 10 + syscall + label_45: + lw $t0 -40($fp) + lw $t1 -36($fp) + div $t0 $t1 + mflo $t0 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -48($fp) + jal __init_at_A + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_46 + j label_47 + label_46: + li $v0 4 + la $a0 data_26 + syscall + li $v0 10 + syscall + label_47: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 44 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_E: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 9 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_E + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_c2i_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -568 + la $t0 data_27 + sw $t0 -532($fp) + lw $t0 -532($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -528($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -556($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -552($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -548($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -544($fp) + lw $t0 -556($fp) + lw $t1 -552($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + bne $t0 $zero label_48 + lw $t0 -556($fp) + lw $t1 -548($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + bne $t0 $zero label_49 + lw $t0 -556($fp) + lw $t1 -544($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + bne $t0 $zero label_50 + lw $t0 0($fp) + lw $t1 -528($fp) + seq $t0 $t0 $t1 + sw $t0 -536($fp) + j label_51 + label_48: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -528($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + lw $t1 -560($fp) + seq $t0 $t0 $t1 + sw $t0 -536($fp) + j label_51 + label_49: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -528($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + move $a0 $t0 + lw $t0 -560($fp) + move $a1 $t0 + jal equal_str + sw $v0 -536($fp) + j label_51 + label_50: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -528($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + lw $t1 -560($fp) + seq $t0 $t0 $t1 + sw $t0 -536($fp) + j label_51 + label_51: + lw $t0 -536($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -568($fp) + lw $t0 -568($fp) + lw $t1 12($t0) + sw $t1 -572($fp) + lw $t0 -572($fp) + bne $t0 $zero label_106 + la $t0 data_28 + sw $t0 -480($fp) + lw $t0 -480($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -476($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -504($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -500($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -496($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -492($fp) + lw $t0 -504($fp) + lw $t1 -500($fp) + seq $t0 $t0 $t1 + sw $t0 -488($fp) + lw $t0 -488($fp) + bne $t0 $zero label_52 + lw $t0 -504($fp) + lw $t1 -496($fp) + seq $t0 $t0 $t1 + sw $t0 -488($fp) + lw $t0 -488($fp) + bne $t0 $zero label_53 + lw $t0 -504($fp) + lw $t1 -492($fp) + seq $t0 $t0 $t1 + sw $t0 -488($fp) + lw $t0 -488($fp) + bne $t0 $zero label_54 + lw $t0 0($fp) + lw $t1 -476($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + j label_55 + label_52: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -512($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -512($fp) + lw $t1 -508($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + j label_55 + label_53: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -512($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -512($fp) + move $a0 $t0 + lw $t0 -508($fp) + move $a1 $t0 + jal equal_str + sw $v0 -484($fp) + j label_55 + label_54: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -512($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -512($fp) + lw $t1 -508($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + j label_55 + label_55: + lw $t0 -484($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -516($fp) + lw $t0 -516($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -520($fp) + bne $t0 $zero label_104 + la $t0 data_29 + sw $t0 -428($fp) + lw $t0 -428($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -424($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -452($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -448($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -444($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -440($fp) + lw $t0 -452($fp) + lw $t1 -448($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_56 + lw $t0 -452($fp) + lw $t1 -444($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_57 + lw $t0 -452($fp) + lw $t1 -440($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_58 + lw $t0 0($fp) + lw $t1 -424($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_59 + label_56: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -424($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_59 + label_57: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -424($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + move $a0 $t0 + lw $t0 -456($fp) + move $a1 $t0 + jal equal_str + sw $v0 -432($fp) + j label_59 + label_58: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -424($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_59 + label_59: + lw $t0 -432($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -464($fp) + lw $t0 -464($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -468($fp) + bne $t0 $zero label_102 + la $t0 data_30 + sw $t0 -376($fp) + lw $t0 -376($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -372($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -400($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -396($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -392($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -388($fp) + lw $t0 -400($fp) + lw $t1 -396($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_60 + lw $t0 -400($fp) + lw $t1 -392($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_61 + lw $t0 -400($fp) + lw $t1 -388($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_62 + lw $t0 0($fp) + lw $t1 -372($fp) + seq $t0 $t0 $t1 + sw $t0 -380($fp) + j label_63 + label_60: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -372($fp) + lw $t1 12($t0) + sw $t1 -404($fp) + lw $t0 -408($fp) + lw $t1 -404($fp) + seq $t0 $t0 $t1 + sw $t0 -380($fp) + j label_63 + label_61: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -372($fp) + lw $t1 12($t0) + sw $t1 -404($fp) + lw $t0 -408($fp) + move $a0 $t0 + lw $t0 -404($fp) + move $a1 $t0 + jal equal_str + sw $v0 -380($fp) + j label_63 + label_62: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -372($fp) + lw $t1 12($t0) + sw $t1 -404($fp) + lw $t0 -408($fp) + lw $t1 -404($fp) + seq $t0 $t0 $t1 + sw $t0 -380($fp) + j label_63 + label_63: + lw $t0 -380($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -412($fp) + lw $t0 -412($fp) + lw $t1 12($t0) + sw $t1 -416($fp) + lw $t0 -416($fp) + bne $t0 $zero label_100 + la $t0 data_31 + sw $t0 -324($fp) + lw $t0 -324($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -320($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -348($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -344($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -340($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -336($fp) + lw $t0 -348($fp) + lw $t1 -344($fp) + seq $t0 $t0 $t1 + sw $t0 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_64 + lw $t0 -348($fp) + lw $t1 -340($fp) + seq $t0 $t0 $t1 + sw $t0 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_65 + lw $t0 -348($fp) + lw $t1 -336($fp) + seq $t0 $t0 $t1 + sw $t0 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_66 + lw $t0 0($fp) + lw $t1 -320($fp) + seq $t0 $t0 $t1 + sw $t0 -328($fp) + j label_67 + label_64: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -356($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -352($fp) + lw $t0 -356($fp) + lw $t1 -352($fp) + seq $t0 $t0 $t1 + sw $t0 -328($fp) + j label_67 + label_65: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -356($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -352($fp) + lw $t0 -356($fp) + move $a0 $t0 + lw $t0 -352($fp) + move $a1 $t0 + jal equal_str + sw $v0 -328($fp) + j label_67 + label_66: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -356($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -352($fp) + lw $t0 -356($fp) + lw $t1 -352($fp) + seq $t0 $t0 $t1 + sw $t0 -328($fp) + j label_67 + label_67: + lw $t0 -328($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -360($fp) + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -364($fp) + lw $t0 -364($fp) + bne $t0 $zero label_98 + la $t0 data_32 + sw $t0 -272($fp) + lw $t0 -272($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -268($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -296($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -292($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -288($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -284($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_68 + lw $t0 -296($fp) + lw $t1 -288($fp) + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_69 + lw $t0 -296($fp) + lw $t1 -284($fp) + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_70 + lw $t0 0($fp) + lw $t1 -268($fp) + seq $t0 $t0 $t1 + sw $t0 -276($fp) + j label_71 + label_68: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -304($fp) + lw $t1 -300($fp) + seq $t0 $t0 $t1 + sw $t0 -276($fp) + j label_71 + label_69: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -304($fp) + move $a0 $t0 + lw $t0 -300($fp) + move $a1 $t0 + jal equal_str + sw $v0 -276($fp) + j label_71 + label_70: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -304($fp) + lw $t1 -300($fp) + seq $t0 $t0 $t1 + sw $t0 -276($fp) + j label_71 + label_71: + lw $t0 -276($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -308($fp) + lw $t0 -308($fp) + lw $t1 12($t0) + sw $t1 -312($fp) + lw $t0 -312($fp) + bne $t0 $zero label_96 + la $t0 data_33 + sw $t0 -220($fp) + lw $t0 -220($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -216($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -244($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -240($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -236($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -232($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_72 + lw $t0 -244($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_73 + lw $t0 -244($fp) + lw $t1 -232($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_74 + lw $t0 0($fp) + lw $t1 -216($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_75 + label_72: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_75 + label_73: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + move $a0 $t0 + lw $t0 -248($fp) + move $a1 $t0 + jal equal_str + sw $v0 -224($fp) + j label_75 + label_74: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_75 + label_75: + lw $t0 -224($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -256($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_94 + la $t0 data_34 + sw $t0 -168($fp) + lw $t0 -168($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -164($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -192($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -188($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -184($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -180($fp) + lw $t0 -192($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_76 + lw $t0 -192($fp) + lw $t1 -184($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_77 + lw $t0 -192($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_78 + lw $t0 0($fp) + lw $t1 -164($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_79 + label_76: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_79 + label_77: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + move $a0 $t0 + lw $t0 -196($fp) + move $a1 $t0 + jal equal_str + sw $v0 -172($fp) + j label_79 + label_78: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_79 + label_79: + lw $t0 -172($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -204($fp) + lw $t0 -204($fp) + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_92 + la $t0 data_35 + sw $t0 -116($fp) + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -112($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -140($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -136($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -132($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -128($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_80 + lw $t0 -140($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_81 + lw $t0 -140($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_82 + lw $t0 0($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_83 + label_80: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_83 + label_81: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + move $a0 $t0 + lw $t0 -144($fp) + move $a1 $t0 + jal equal_str + sw $v0 -120($fp) + j label_83 + label_82: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_83 + label_83: + lw $t0 -120($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -156($fp) + bne $t0 $zero label_90 + la $t0 data_36 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -88($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -84($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -80($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -76($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_84 + lw $t0 -88($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_85 + lw $t0 -88($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_86 + lw $t0 0($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_87 + label_84: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_87 + label_85: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + move $a0 $t0 + lw $t0 -92($fp) + move $a1 $t0 + jal equal_str + sw $v0 -68($fp) + j label_87 + label_86: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_87 + label_87: + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_88 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -56($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + sw $t0 -108($fp) + j label_89 + label_88: + li $t0 9 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + sw $t0 -108($fp) + label_89: + lw $t0 -108($fp) + sw $t0 -160($fp) + j label_91 + label_90: + li $t0 8 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -160($fp) + label_91: + lw $t0 -160($fp) + sw $t0 -212($fp) + j label_93 + label_92: + li $t0 7 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -212($fp) + label_93: + lw $t0 -212($fp) + sw $t0 -264($fp) + j label_95 + label_94: + li $t0 6 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -264($fp) + label_95: + lw $t0 -264($fp) + sw $t0 -316($fp) + j label_97 + label_96: + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -316($fp) + label_97: + lw $t0 -316($fp) + sw $t0 -368($fp) + j label_99 + label_98: + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -368($fp) + label_99: + lw $t0 -368($fp) + sw $t0 -420($fp) + j label_101 + label_100: + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -420($fp) + label_101: + lw $t0 -420($fp) + sw $t0 -472($fp) + j label_103 + label_102: + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -472($fp) + label_103: + lw $t0 -472($fp) + sw $t0 -524($fp) + j label_105 + label_104: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -524($fp) + label_105: + lw $t0 -524($fp) + sw $t0 -576($fp) + j label_107 + label_106: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -576($fp) + label_107: + lw $v0 -576($fp) + addi $sp $sp 568 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_i2c_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -572 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -536($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -560($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -556($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -552($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -548($fp) + lw $t0 -560($fp) + lw $t1 -556($fp) + seq $t0 $t0 $t1 + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_108 + lw $t0 -560($fp) + lw $t1 -552($fp) + seq $t0 $t0 $t1 + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_109 + lw $t0 -560($fp) + lw $t1 -548($fp) + seq $t0 $t0 $t1 + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_110 + lw $t0 0($fp) + lw $t1 -536($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + j label_111 + label_108: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -568($fp) + lw $t0 -536($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -568($fp) + lw $t1 -564($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + j label_111 + label_109: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -568($fp) + lw $t0 -536($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -568($fp) + move $a0 $t0 + lw $t0 -564($fp) + move $a1 $t0 + jal equal_str + sw $v0 -540($fp) + j label_111 + label_110: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -568($fp) + lw $t0 -536($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -568($fp) + lw $t1 -564($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + j label_111 + label_111: + lw $t0 -540($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -572($fp) + lw $t0 -572($fp) + lw $t1 12($t0) + sw $t1 -576($fp) + lw $t0 -576($fp) + bne $t0 $zero label_166 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -488($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -512($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -508($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -504($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -500($fp) + lw $t0 -512($fp) + lw $t1 -508($fp) + seq $t0 $t0 $t1 + sw $t0 -496($fp) + lw $t0 -496($fp) + bne $t0 $zero label_112 + lw $t0 -512($fp) + lw $t1 -504($fp) + seq $t0 $t0 $t1 + sw $t0 -496($fp) + lw $t0 -496($fp) + bne $t0 $zero label_113 + lw $t0 -512($fp) + lw $t1 -500($fp) + seq $t0 $t0 $t1 + sw $t0 -496($fp) + lw $t0 -496($fp) + bne $t0 $zero label_114 + lw $t0 0($fp) + lw $t1 -488($fp) + seq $t0 $t0 $t1 + sw $t0 -492($fp) + j label_115 + label_112: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -488($fp) + lw $t1 12($t0) + sw $t1 -516($fp) + lw $t0 -520($fp) + lw $t1 -516($fp) + seq $t0 $t0 $t1 + sw $t0 -492($fp) + j label_115 + label_113: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -488($fp) + lw $t1 12($t0) + sw $t1 -516($fp) + lw $t0 -520($fp) + move $a0 $t0 + lw $t0 -516($fp) + move $a1 $t0 + jal equal_str + sw $v0 -492($fp) + j label_115 + label_114: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -488($fp) + lw $t1 12($t0) + sw $t1 -516($fp) + lw $t0 -520($fp) + lw $t1 -516($fp) + seq $t0 $t0 $t1 + sw $t0 -492($fp) + j label_115 + label_115: + lw $t0 -492($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -524($fp) + lw $t0 -524($fp) + lw $t1 12($t0) + sw $t1 -528($fp) + lw $t0 -528($fp) + bne $t0 $zero label_164 + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -440($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -464($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -460($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -456($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -452($fp) + lw $t0 -464($fp) + lw $t1 -460($fp) + seq $t0 $t0 $t1 + sw $t0 -448($fp) + lw $t0 -448($fp) + bne $t0 $zero label_116 + lw $t0 -464($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -448($fp) + lw $t0 -448($fp) + bne $t0 $zero label_117 + lw $t0 -464($fp) + lw $t1 -452($fp) + seq $t0 $t0 $t1 + sw $t0 -448($fp) + lw $t0 -448($fp) + bne $t0 $zero label_118 + lw $t0 0($fp) + lw $t1 -440($fp) + seq $t0 $t0 $t1 + sw $t0 -444($fp) + j label_119 + label_116: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -472($fp) + lw $t0 -440($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -472($fp) + lw $t1 -468($fp) + seq $t0 $t0 $t1 + sw $t0 -444($fp) + j label_119 + label_117: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -472($fp) + lw $t0 -440($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -472($fp) + move $a0 $t0 + lw $t0 -468($fp) + move $a1 $t0 + jal equal_str + sw $v0 -444($fp) + j label_119 + label_118: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -472($fp) + lw $t0 -440($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -472($fp) + lw $t1 -468($fp) + seq $t0 $t0 $t1 + sw $t0 -444($fp) + j label_119 + label_119: + lw $t0 -444($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -476($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -480($fp) + lw $t0 -480($fp) + bne $t0 $zero label_162 + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -392($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -416($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -412($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -408($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -404($fp) + lw $t0 -416($fp) + lw $t1 -412($fp) + seq $t0 $t0 $t1 + sw $t0 -400($fp) + lw $t0 -400($fp) + bne $t0 $zero label_120 + lw $t0 -416($fp) + lw $t1 -408($fp) + seq $t0 $t0 $t1 + sw $t0 -400($fp) + lw $t0 -400($fp) + bne $t0 $zero label_121 + lw $t0 -416($fp) + lw $t1 -404($fp) + seq $t0 $t0 $t1 + sw $t0 -400($fp) + lw $t0 -400($fp) + bne $t0 $zero label_122 + lw $t0 0($fp) + lw $t1 -392($fp) + seq $t0 $t0 $t1 + sw $t0 -396($fp) + j label_123 + label_120: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -424($fp) + lw $t0 -392($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -424($fp) + lw $t1 -420($fp) + seq $t0 $t0 $t1 + sw $t0 -396($fp) + j label_123 + label_121: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -424($fp) + lw $t0 -392($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -424($fp) + move $a0 $t0 + lw $t0 -420($fp) + move $a1 $t0 + jal equal_str + sw $v0 -396($fp) + j label_123 + label_122: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -424($fp) + lw $t0 -392($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -424($fp) + lw $t1 -420($fp) + seq $t0 $t0 $t1 + sw $t0 -396($fp) + j label_123 + label_123: + lw $t0 -396($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -428($fp) + lw $t0 -428($fp) + lw $t1 12($t0) + sw $t1 -432($fp) + lw $t0 -432($fp) + bne $t0 $zero label_160 + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -344($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -368($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -364($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -360($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -356($fp) + lw $t0 -368($fp) + lw $t1 -364($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_124 + lw $t0 -368($fp) + lw $t1 -360($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_125 + lw $t0 -368($fp) + lw $t1 -356($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_126 + lw $t0 0($fp) + lw $t1 -344($fp) + seq $t0 $t0 $t1 + sw $t0 -348($fp) + j label_127 + label_124: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -344($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -376($fp) + lw $t1 -372($fp) + seq $t0 $t0 $t1 + sw $t0 -348($fp) + j label_127 + label_125: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -344($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -376($fp) + move $a0 $t0 + lw $t0 -372($fp) + move $a1 $t0 + jal equal_str + sw $v0 -348($fp) + j label_127 + label_126: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -344($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -376($fp) + lw $t1 -372($fp) + seq $t0 $t0 $t1 + sw $t0 -348($fp) + j label_127 + label_127: + lw $t0 -348($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -380($fp) + lw $t0 -380($fp) + lw $t1 12($t0) + sw $t1 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_158 + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -296($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -320($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -316($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -312($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -308($fp) + lw $t0 -320($fp) + lw $t1 -316($fp) + seq $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_128 + lw $t0 -320($fp) + lw $t1 -312($fp) + seq $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_129 + lw $t0 -320($fp) + lw $t1 -308($fp) + seq $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_130 + lw $t0 0($fp) + lw $t1 -296($fp) + seq $t0 $t0 $t1 + sw $t0 -300($fp) + j label_131 + label_128: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -328($fp) + lw $t0 -296($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -328($fp) + lw $t1 -324($fp) + seq $t0 $t0 $t1 + sw $t0 -300($fp) + j label_131 + label_129: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -328($fp) + lw $t0 -296($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -328($fp) + move $a0 $t0 + lw $t0 -324($fp) + move $a1 $t0 + jal equal_str + sw $v0 -300($fp) + j label_131 + label_130: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -328($fp) + lw $t0 -296($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -328($fp) + lw $t1 -324($fp) + seq $t0 $t0 $t1 + sw $t0 -300($fp) + j label_131 + label_131: + lw $t0 -300($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -332($fp) + lw $t0 -332($fp) + lw $t1 12($t0) + sw $t1 -336($fp) + lw $t0 -336($fp) + bne $t0 $zero label_156 + li $t0 6 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -248($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -272($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -268($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -264($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -260($fp) + lw $t0 -272($fp) + lw $t1 -268($fp) + seq $t0 $t0 $t1 + sw $t0 -256($fp) + lw $t0 -256($fp) + bne $t0 $zero label_132 + lw $t0 -272($fp) + lw $t1 -264($fp) + seq $t0 $t0 $t1 + sw $t0 -256($fp) + lw $t0 -256($fp) + bne $t0 $zero label_133 + lw $t0 -272($fp) + lw $t1 -260($fp) + seq $t0 $t0 $t1 + sw $t0 -256($fp) + lw $t0 -256($fp) + bne $t0 $zero label_134 + lw $t0 0($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -252($fp) + j label_135 + label_132: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + lw $t0 -248($fp) + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t0 -280($fp) + lw $t1 -276($fp) + seq $t0 $t0 $t1 + sw $t0 -252($fp) + j label_135 + label_133: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + lw $t0 -248($fp) + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t0 -280($fp) + move $a0 $t0 + lw $t0 -276($fp) + move $a1 $t0 + jal equal_str + sw $v0 -252($fp) + j label_135 + label_134: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + lw $t0 -248($fp) + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t0 -280($fp) + lw $t1 -276($fp) + seq $t0 $t0 $t1 + sw $t0 -252($fp) + j label_135 + label_135: + lw $t0 -252($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -284($fp) + lw $t0 -284($fp) + lw $t1 12($t0) + sw $t1 -288($fp) + lw $t0 -288($fp) + bne $t0 $zero label_154 + li $t0 7 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -200($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -224($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -220($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -216($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -212($fp) + lw $t0 -224($fp) + lw $t1 -220($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_136 + lw $t0 -224($fp) + lw $t1 -216($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_137 + lw $t0 -224($fp) + lw $t1 -212($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_138 + lw $t0 0($fp) + lw $t1 -200($fp) + seq $t0 $t0 $t1 + sw $t0 -204($fp) + j label_139 + label_136: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -200($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + lw $t0 -232($fp) + lw $t1 -228($fp) + seq $t0 $t0 $t1 + sw $t0 -204($fp) + j label_139 + label_137: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -200($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + lw $t0 -232($fp) + move $a0 $t0 + lw $t0 -228($fp) + move $a1 $t0 + jal equal_str + sw $v0 -204($fp) + j label_139 + label_138: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -200($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + lw $t0 -232($fp) + lw $t1 -228($fp) + seq $t0 $t0 $t1 + sw $t0 -204($fp) + j label_139 + label_139: + lw $t0 -204($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -236($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -240($fp) + bne $t0 $zero label_152 + li $t0 8 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -176($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -172($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -168($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -164($fp) + lw $t0 -176($fp) + lw $t1 -172($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_140 + lw $t0 -176($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_141 + lw $t0 -176($fp) + lw $t1 -164($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_142 + lw $t0 0($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -156($fp) + j label_143 + label_140: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -156($fp) + j label_143 + label_141: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -184($fp) + move $a0 $t0 + lw $t0 -180($fp) + move $a1 $t0 + jal equal_str + sw $v0 -156($fp) + j label_143 + label_142: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -156($fp) + j label_143 + label_143: + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -188($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -192($fp) + lw $t0 -192($fp) + bne $t0 $zero label_150 + li $t0 9 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -128($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -124($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -120($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -116($fp) + lw $t0 -128($fp) + lw $t1 -124($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_144 + lw $t0 -128($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_145 + lw $t0 -128($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_146 + lw $t0 0($fp) + lw $t1 -104($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_147 + label_144: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_147 + label_145: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + move $a0 $t0 + lw $t0 -132($fp) + move $a1 $t0 + jal equal_str + sw $v0 -108($fp) + j label_147 + label_146: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_147 + label_147: + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -140($fp) + lw $t0 -140($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_148 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -100($fp) + la $t0 data_37 + sw $t0 -96($fp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + sw $t0 -148($fp) + j label_149 + label_148: + la $t0 data_38 + sw $t0 -88($fp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + sw $t0 -148($fp) + label_149: + lw $t0 -148($fp) + sw $t0 -196($fp) + j label_151 + label_150: + la $t0 data_39 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + sw $t0 -196($fp) + label_151: + lw $t0 -196($fp) + sw $t0 -244($fp) + j label_153 + label_152: + la $t0 data_40 + sw $t0 -72($fp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -244($fp) + label_153: + lw $t0 -244($fp) + sw $t0 -292($fp) + j label_155 + label_154: + la $t0 data_41 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 -60($fp) + sw $t0 -292($fp) + label_155: + lw $t0 -292($fp) + sw $t0 -340($fp) + j label_157 + label_156: + la $t0 data_42 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + sw $t0 -340($fp) + label_157: + lw $t0 -340($fp) + sw $t0 -388($fp) + j label_159 + label_158: + la $t0 data_43 + sw $t0 -48($fp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -388($fp) + label_159: + lw $t0 -388($fp) + sw $t0 -436($fp) + j label_161 + label_160: + la $t0 data_44 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -436($fp) + label_161: + lw $t0 -436($fp) + sw $t0 -484($fp) + j label_163 + label_162: + la $t0 data_45 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -484($fp) + label_163: + lw $t0 -484($fp) + sw $t0 -532($fp) + j label_165 + label_164: + la $t0 data_46 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -532($fp) + label_165: + lw $t0 -532($fp) + sw $t0 -580($fp) + j label_167 + label_166: + la $t0 data_47 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -580($fp) + label_167: + lw $v0 -580($fp) + addi $sp $sp 572 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_a2i_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -300 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -264($fp) + lw $t0 -264($fp) + bne $t0 $zero label_168 + j label_169 + label_168: + li $v0 4 + la $a0 data_48 + syscall + li $v0 10 + syscall + label_169: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -260($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -256($fp) + lw $t0 -260($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -288($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -284($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -280($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -276($fp) + lw $t0 -288($fp) + lw $t1 -284($fp) + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_170 + lw $t0 -288($fp) + lw $t1 -280($fp) + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_171 + lw $t0 -288($fp) + lw $t1 -276($fp) + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_172 + lw $t0 -260($fp) + lw $t1 -256($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + j label_173 + label_170: + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -296($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + j label_173 + label_171: + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -296($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -296($fp) + move $a0 $t0 + lw $t0 -292($fp) + move $a1 $t0 + jal equal_str + sw $v0 -268($fp) + j label_173 + label_172: + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -296($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + j label_173 + label_173: + lw $t0 -268($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -300($fp) + lw $t0 -300($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_198 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -208($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -204($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -200($fp) + lw $t0 -200($fp) + bne $t0 $zero label_174 + j label_175 + label_174: + li $v0 4 + la $a0 data_49 + syscall + li $v0 10 + syscall + label_175: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -208($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -204($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -196($fp) + la $t0 data_50 + sw $t0 -192($fp) + lw $t0 -192($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -188($fp) + lw $t0 -196($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -232($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -228($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -224($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -220($fp) + lw $t0 -232($fp) + lw $t1 -228($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_176 + lw $t0 -232($fp) + lw $t1 -224($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_177 + lw $t0 -232($fp) + lw $t1 -220($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_178 + lw $t0 -196($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + j label_179 + label_176: + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -240($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + j label_179 + label_177: + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -240($fp) + move $a0 $t0 + lw $t0 -236($fp) + move $a1 $t0 + jal equal_str + sw $v0 -212($fp) + j label_179 + label_178: + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -240($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + j label_179 + label_179: + lw $t0 -212($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -244($fp) + lw $t0 -244($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -248($fp) + bne $t0 $zero label_192 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -140($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -136($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_180 + j label_181 + label_180: + li $v0 4 + la $a0 data_51 + syscall + li $v0 10 + syscall + label_181: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -140($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -136($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -128($fp) + la $t0 data_52 + sw $t0 -124($fp) + lw $t0 -124($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -120($fp) + lw $t0 -128($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -164($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -160($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -156($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -152($fp) + lw $t0 -164($fp) + lw $t1 -160($fp) + seq $t0 $t0 $t1 + sw $t0 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_182 + lw $t0 -164($fp) + lw $t1 -156($fp) + seq $t0 $t0 $t1 + sw $t0 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_183 + lw $t0 -164($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_184 + lw $t0 -128($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -144($fp) + j label_185 + label_182: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -172($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -144($fp) + j label_185 + label_183: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -172($fp) + move $a0 $t0 + lw $t0 -168($fp) + move $a1 $t0 + jal equal_str + sw $v0 -144($fp) + j label_185 + label_184: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -172($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -144($fp) + j label_185 + label_185: + lw $t0 -144($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -176($fp) + lw $t0 -176($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -180($fp) + bne $t0 $zero label_186 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -116($fp) + lw $t0 -116($fp) + sw $t0 -184($fp) + j label_191 + label_186: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -108($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_187 + j label_188 + label_187: + li $v0 4 + la $a0 data_53 + syscall + li $v0 10 + syscall + label_188: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + sub $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_189 + j label_190 + label_189: + li $v0 4 + la $a0 data_54 + syscall + li $v0 10 + syscall + label_190: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -72($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -184($fp) + label_191: + lw $t0 -184($fp) + sw $t0 -252($fp) + j label_197 + label_192: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_193 + j label_194 + label_193: + li $v0 4 + la $a0 data_55 + syscall + li $v0 10 + syscall + label_194: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + sub $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_195 + j label_196 + label_195: + li $v0 4 + la $a0 data_56 + syscall + li $v0 10 + syscall + label_196: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -16($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -64($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -60($fp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -252($fp) + label_197: + lw $t0 -252($fp) + sw $t0 -308($fp) + j label_199 + label_198: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -308($fp) + label_199: + lw $v0 -308($fp) + addi $sp $sp 300 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_a2i_aux_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -120 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -124($fp) + lw $t0 -124($fp) + sw $t0 -128($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_200 + j label_201 + label_200: + li $v0 4 + la $a0 data_57 + syscall + li $v0 10 + syscall + label_201: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -120($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 -104($fp) + sw $t0 -108($fp) + label_202: + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + slt $t1 $t0 $t1 + sw $t1 -84($fp) + lw $t0 -84($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -96($fp) + lw $t0 -96($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_203 + j label_206 + label_203: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + li $t0 10 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + mul $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_204 + j label_205 + label_204: + li $v0 4 + la $a0 data_58 + syscall + li $v0 10 + syscall + label_205: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -32($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -44($fp) + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + add $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + sw $t0 -128($fp) + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -108($fp) + j label_202 + label_206: + lw $v0 -128($fp) + addi $sp $sp 120 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_i2a_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -140 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -128($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -124($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -120($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -116($fp) + lw $t0 -128($fp) + lw $t1 -124($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_207 + lw $t0 -128($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_208 + lw $t0 -128($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_209 + lw $t0 0($fp) + lw $t1 -104($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_210 + label_207: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_210 + label_208: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + move $a0 $t0 + lw $t0 -132($fp) + move $a1 $t0 + jal equal_str + sw $v0 -108($fp) + j label_210 + label_209: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_210 + label_210: + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -140($fp) + lw $t0 -140($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_215 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + slt $t1 $t0 $t1 + sw $t1 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_213 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -48($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) + mul $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -72($fp) + la $t0 data_59 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_211 + j label_212 + label_211: + li $v0 4 + la $a0 data_60 + syscall + li $v0 10 + syscall + label_212: + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -100($fp) + j label_214 + label_213: + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -100($fp) + label_214: + lw $t0 -100($fp) + sw $t0 -148($fp) + j label_216 + label_215: + la $t0 data_61 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -148($fp) + label_216: + lw $v0 -148($fp) + addi $sp $sp 140 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_i2a_aux_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -136 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -124($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -120($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -116($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -112($fp) + lw $t0 -124($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_217 + lw $t0 -124($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_218 + lw $t0 -124($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_219 + lw $t0 0($fp) + lw $t1 -100($fp) + seq $t0 $t0 $t1 + sw $t0 -104($fp) + j label_220 + label_217: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -104($fp) + j label_220 + label_218: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -132($fp) + move $a0 $t0 + lw $t0 -128($fp) + move $a1 $t0 + jal equal_str + sw $v0 -104($fp) + j label_220 + label_219: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -104($fp) + j label_220 + label_220: + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -136($fp) + lw $t0 -136($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_225 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + li $t0 10 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -72($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -72($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 -76($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_221 + j label_222 + label_221: + li $v0 4 + la $a0 data_62 + syscall + li $v0 10 + syscall + label_222: + lw $t0 -88($fp) + lw $t1 -84($fp) + div $t0 $t1 + mflo $t0 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + sw $t0 -96($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -96($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + li $t0 10 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + mul $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + sub $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -68($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + lw $t0 -28($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_223 + j label_224 + label_223: + li $v0 4 + la $a0 data_63 + syscall + li $v0 10 + syscall + label_224: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -144($fp) + j label_226 + label_225: + la $t0 data_64 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -144($fp) + label_226: + lw $v0 -144($fp) + addi $sp $sp 136 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_A2I: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 10 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_A2I + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + la $t0 data_14 + sw $t0 -28($fp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 0($fp) + lw $t1 -28($fp) + sw $t1 20($t0) + lw $t0 0($fp) + lw $t1 -24($fp) + sw $t1 16($t0) + lw $t0 0($fp) + lw $t1 -20($fp) + sw $t1 12($t0) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 24($t0) + lw $v0 0($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_menu_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -268 + la $t0 data_65 + sw $t0 -256($fp) + lw $t0 -256($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -252($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -252($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -260($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -248($fp) + la $t0 data_66 + sw $t0 -240($fp) + lw $t0 -240($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -236($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -236($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -244($fp) + la $t0 data_67 + sw $t0 -228($fp) + lw $t0 -228($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -224($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -224($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -232($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -220($fp) + la $t0 data_68 + sw $t0 -212($fp) + lw $t0 -212($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -208($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -208($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -216($fp) + la $t0 data_69 + sw $t0 -200($fp) + lw $t0 -200($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -196($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -196($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -204($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -192($fp) + la $t0 data_70 + sw $t0 -184($fp) + lw $t0 -184($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -180($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -180($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -188($fp) + la $t0 data_71 + sw $t0 -172($fp) + lw $t0 -172($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -168($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -168($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -176($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -164($fp) + la $t0 data_72 + sw $t0 -156($fp) + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -152($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -160($fp) + la $t0 data_73 + sw $t0 -144($fp) + lw $t0 -144($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -140($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -140($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -148($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -136($fp) + la $t0 data_74 + sw $t0 -128($fp) + lw $t0 -128($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -124($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -124($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -132($fp) + la $t0 data_75 + sw $t0 -116($fp) + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -112($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -112($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -120($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -108($fp) + la $t0 data_76 + sw $t0 -100($fp) + lw $t0 -100($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -96($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -104($fp) + la $t0 data_77 + sw $t0 -88($fp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -84($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -92($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -80($fp) + la $t0 data_78 + sw $t0 -72($fp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -76($fp) + la $t0 data_79 + sw $t0 -60($fp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -64($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -52($fp) + la $t0 data_80 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -48($fp) + la $t0 data_81 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + la $t0 data_82 + sw $t0 -20($fp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 268 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_prompt_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -44 + la $t0 data_83 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + la $t0 data_84 + sw $t0 -20($fp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 44 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_get_int_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -40 + jal __init_at_A2I + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -32($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -24($fp) + lw $t0 -32($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_227 + j label_228 + label_227: + li $v0 4 + la $a0 data_85 + syscall + li $v0 10 + syscall + label_228: + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 40 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_is_even_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -192 + lw $t0 0($fp) + sw $t0 -184($fp) + lw $t0 -184($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -156($fp) + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -164($fp) + lw $t0 -168($fp) + lw $t1 -164($fp) + slt $t1 $t0 $t1 + sw $t1 -160($fp) + lw $t0 -160($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -172($fp) + lw $t0 -172($fp) + lw $t1 12($t0) + sw $t1 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_241 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -108($fp) + lw $t0 -108($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -132($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -128($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -124($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_229 + lw $t0 -132($fp) + lw $t1 -124($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_230 + lw $t0 -132($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_231 + lw $t0 -108($fp) + lw $t1 -184($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + j label_232 + label_229: + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -184($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + j label_232 + label_230: + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -184($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -140($fp) + move $a0 $t0 + lw $t0 -136($fp) + move $a1 $t0 + jal equal_str + sw $v0 -112($fp) + j label_232 + label_231: + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -184($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + j label_232 + label_232: + lw $t0 -112($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -144($fp) + lw $t0 -144($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_239 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 -60($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -84($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -80($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -76($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -72($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_233 + lw $t0 -84($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_234 + lw $t0 -84($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_235 + lw $t0 -60($fp) + lw $t1 -184($fp) + seq $t0 $t0 $t1 + sw $t0 -64($fp) + j label_236 + label_233: + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -184($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + seq $t0 $t0 $t1 + sw $t0 -64($fp) + j label_236 + label_234: + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -184($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -92($fp) + move $a0 $t0 + lw $t0 -88($fp) + move $a1 $t0 + jal equal_str + sw $v0 -64($fp) + j label_236 + label_235: + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -184($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + seq $t0 $t0 $t1 + sw $t0 -64($fp) + j label_236 + label_236: + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -96($fp) + lw $t0 -96($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_237 + lw $t0 -184($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + lw $t0 -48($fp) + lw $t1 -44($fp) + sub $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -56($fp) + lw $t0 -56($fp) + sw $t0 -104($fp) + j label_238 + label_237: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -104($fp) + label_238: + lw $t0 -104($fp) + sw $t0 -152($fp) + j label_240 + label_239: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -152($fp) + label_240: + lw $t0 -152($fp) + sw $t0 -180($fp) + j label_242 + label_241: + lw $t0 -184($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -180($fp) + label_242: + lw $v0 -180($fp) + addi $sp $sp 192 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_class_type_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -132 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -120($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_243 + j label_244 + label_243: + li $v0 4 + la $a0 data_86 + syscall + li $v0 10 + syscall + label_244: + la $t0 types_table + addi $t0 $t0 36 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_245 + la $t0 types_table + addi $t0 $t0 28 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_246 + la $t0 types_table + addi $t0 $t0 32 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_247 + la $t0 types_table + addi $t0 $t0 24 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_248 + la $t0 types_table + addi $t0 $t0 20 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_249 + la $t0 types_table + addi $t0 $t0 0 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_250 + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_250 + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_250 + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_250 + la $t0 types_table + addi $t0 $t0 4 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_250 + la $t0 types_table + addi $t0 $t0 40 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_250 + la $t0 types_table + addi $t0 $t0 44 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_250 + li $v0 4 + la $a0 data_87 + syscall + li $v0 10 + syscall + label_245: + lw $t0 0($fp) + sw $t0 -104($fp) + la $t0 data_88 + sw $t0 -96($fp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -100($fp) + lw $t0 -100($fp) + sw $t0 -124($fp) + j label_251 + label_246: + lw $t0 0($fp) + sw $t0 -88($fp) + la $t0 data_89 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -84($fp) + lw $t0 -84($fp) + sw $t0 -124($fp) + j label_251 + label_247: + lw $t0 0($fp) + sw $t0 -72($fp) + la $t0 data_90 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -124($fp) + j label_251 + label_248: + lw $t0 0($fp) + sw $t0 -56($fp) + la $t0 data_91 + sw $t0 -48($fp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -52($fp) + lw $t0 -52($fp) + sw $t0 -124($fp) + j label_251 + label_249: + lw $t0 0($fp) + sw $t0 -40($fp) + la $t0 data_92 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -124($fp) + j label_251 + label_250: + lw $t0 0($fp) + sw $t0 -24($fp) + la $t0 data_93 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -124($fp) + j label_251 + label_251: + lw $v0 -124($fp) + addi $sp $sp 132 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -56 + jal __init_at_A2I + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -48($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_252 + j label_253 + label_252: + li $v0 4 + la $a0 data_94 + syscall + li $v0 10 + syscall + label_253: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -48($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_254 + j label_255 + label_254: + li $v0 4 + la $a0 data_95 + syscall + li $v0 10 + syscall + label_255: + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + la $t0 data_96 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $v0 -20($fp) + addi $sp $sp 56 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -1112 + jal __init_at_A + sw $v0 -1104($fp) + lw $t0 -1104($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + label_256: + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -1100($fp) + lw $t0 -1100($fp) + bne $t0 $zero label_257 + j label_384 + label_257: + la $t0 data_97 + sw $t0 -1092($fp) + lw $t0 -1092($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1088($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1088($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1096($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1084($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1068($fp) + lw $t0 -1068($fp) + bne $t0 $zero label_258 + j label_259 + label_258: + li $v0 4 + la $a0 data_98 + syscall + li $v0 10 + syscall + label_259: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -1064($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1064($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1072($fp) + lw $t0 -1072($fp) + lw $t1 12($t0) + sw $t1 -1076($fp) + lw $t0 -1076($fp) + bne $t0 $zero label_260 + la $t0 data_99 + sw $t0 -1056($fp) + lw $t0 -1056($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1052($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1052($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1060($fp) + lw $t0 -1060($fp) + sw $t0 -1080($fp) + j label_261 + label_260: + la $t0 data_100 + sw $t0 -1044($fp) + lw $t0 -1044($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1040($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1040($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1048($fp) + lw $t0 -1048($fp) + sw $t0 -1080($fp) + label_261: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1036($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -1032($fp) + lw $t0 -1032($fp) + lw $t1 0($fp) + addi $t1 $t1 20 + sw $t0 0($t1) + la $t0 data_101 + sw $t0 -984($fp) + lw $t0 -984($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -980($fp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -1008($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -1004($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -1000($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -996($fp) + lw $t0 -1008($fp) + lw $t1 -1004($fp) + seq $t0 $t0 $t1 + sw $t0 -992($fp) + lw $t0 -992($fp) + bne $t0 $zero label_262 + lw $t0 -1008($fp) + lw $t1 -1000($fp) + seq $t0 $t0 $t1 + sw $t0 -992($fp) + lw $t0 -992($fp) + bne $t0 $zero label_263 + lw $t0 -1008($fp) + lw $t1 -996($fp) + seq $t0 $t0 $t1 + sw $t0 -992($fp) + lw $t0 -992($fp) + bne $t0 $zero label_264 + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -980($fp) + seq $t0 $t0 $t1 + sw $t0 -988($fp) + j label_265 + label_262: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -1016($fp) + lw $t0 -980($fp) + lw $t1 12($t0) + sw $t1 -1012($fp) + lw $t0 -1016($fp) + lw $t1 -1012($fp) + seq $t0 $t0 $t1 + sw $t0 -988($fp) + j label_265 + label_263: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -1016($fp) + lw $t0 -980($fp) + lw $t1 12($t0) + sw $t1 -1012($fp) + lw $t0 -1016($fp) + move $a0 $t0 + lw $t0 -1012($fp) + move $a1 $t0 + jal equal_str + sw $v0 -988($fp) + j label_265 + label_264: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -1016($fp) + lw $t0 -980($fp) + lw $t1 12($t0) + sw $t1 -1012($fp) + lw $t0 -1016($fp) + lw $t1 -1012($fp) + seq $t0 $t0 $t1 + sw $t0 -988($fp) + j label_265 + label_265: + lw $t0 -988($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -1020($fp) + lw $t0 -1020($fp) + lw $t1 12($t0) + sw $t1 -1024($fp) + lw $t0 -1024($fp) + bne $t0 $zero label_374 + la $t0 data_102 + sw $t0 -932($fp) + lw $t0 -932($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -928($fp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -956($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -952($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -948($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -944($fp) + lw $t0 -956($fp) + lw $t1 -952($fp) + seq $t0 $t0 $t1 + sw $t0 -940($fp) + lw $t0 -940($fp) + bne $t0 $zero label_266 + lw $t0 -956($fp) + lw $t1 -948($fp) + seq $t0 $t0 $t1 + sw $t0 -940($fp) + lw $t0 -940($fp) + bne $t0 $zero label_267 + lw $t0 -956($fp) + lw $t1 -944($fp) + seq $t0 $t0 $t1 + sw $t0 -940($fp) + lw $t0 -940($fp) + bne $t0 $zero label_268 + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -928($fp) + seq $t0 $t0 $t1 + sw $t0 -936($fp) + j label_269 + label_266: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -964($fp) + lw $t0 -928($fp) + lw $t1 12($t0) + sw $t1 -960($fp) + lw $t0 -964($fp) + lw $t1 -960($fp) + seq $t0 $t0 $t1 + sw $t0 -936($fp) + j label_269 + label_267: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -964($fp) + lw $t0 -928($fp) + lw $t1 12($t0) + sw $t1 -960($fp) + lw $t0 -964($fp) + move $a0 $t0 + lw $t0 -960($fp) + move $a1 $t0 + jal equal_str + sw $v0 -936($fp) + j label_269 + label_268: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -964($fp) + lw $t0 -928($fp) + lw $t1 12($t0) + sw $t1 -960($fp) + lw $t0 -964($fp) + lw $t1 -960($fp) + seq $t0 $t0 $t1 + sw $t0 -936($fp) + j label_269 + label_269: + lw $t0 -936($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -968($fp) + lw $t0 -968($fp) + lw $t1 12($t0) + sw $t1 -972($fp) + lw $t0 -972($fp) + bne $t0 $zero label_358 + la $t0 data_103 + sw $t0 -880($fp) + lw $t0 -880($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -876($fp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -904($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -900($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -896($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -892($fp) + lw $t0 -904($fp) + lw $t1 -900($fp) + seq $t0 $t0 $t1 + sw $t0 -888($fp) + lw $t0 -888($fp) + bne $t0 $zero label_270 + lw $t0 -904($fp) + lw $t1 -896($fp) + seq $t0 $t0 $t1 + sw $t0 -888($fp) + lw $t0 -888($fp) + bne $t0 $zero label_271 + lw $t0 -904($fp) + lw $t1 -892($fp) + seq $t0 $t0 $t1 + sw $t0 -888($fp) + lw $t0 -888($fp) + bne $t0 $zero label_272 + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -876($fp) + seq $t0 $t0 $t1 + sw $t0 -884($fp) + j label_273 + label_270: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -912($fp) + lw $t0 -876($fp) + lw $t1 12($t0) + sw $t1 -908($fp) + lw $t0 -912($fp) + lw $t1 -908($fp) + seq $t0 $t0 $t1 + sw $t0 -884($fp) + j label_273 + label_271: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -912($fp) + lw $t0 -876($fp) + lw $t1 12($t0) + sw $t1 -908($fp) + lw $t0 -912($fp) + move $a0 $t0 + lw $t0 -908($fp) + move $a1 $t0 + jal equal_str + sw $v0 -884($fp) + j label_273 + label_272: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -912($fp) + lw $t0 -876($fp) + lw $t1 12($t0) + sw $t1 -908($fp) + lw $t0 -912($fp) + lw $t1 -908($fp) + seq $t0 $t0 $t1 + sw $t0 -884($fp) + j label_273 + label_273: + lw $t0 -884($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -916($fp) + lw $t0 -916($fp) + lw $t1 12($t0) + sw $t1 -920($fp) + lw $t0 -920($fp) + bne $t0 $zero label_348 + la $t0 data_104 + sw $t0 -828($fp) + lw $t0 -828($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -824($fp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -852($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -848($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -844($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -840($fp) + lw $t0 -852($fp) + lw $t1 -848($fp) + seq $t0 $t0 $t1 + sw $t0 -836($fp) + lw $t0 -836($fp) + bne $t0 $zero label_274 + lw $t0 -852($fp) + lw $t1 -844($fp) + seq $t0 $t0 $t1 + sw $t0 -836($fp) + lw $t0 -836($fp) + bne $t0 $zero label_275 + lw $t0 -852($fp) + lw $t1 -840($fp) + seq $t0 $t0 $t1 + sw $t0 -836($fp) + lw $t0 -836($fp) + bne $t0 $zero label_276 + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -824($fp) + seq $t0 $t0 $t1 + sw $t0 -832($fp) + j label_277 + label_274: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -860($fp) + lw $t0 -824($fp) + lw $t1 12($t0) + sw $t1 -856($fp) + lw $t0 -860($fp) + lw $t1 -856($fp) + seq $t0 $t0 $t1 + sw $t0 -832($fp) + j label_277 + label_275: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -860($fp) + lw $t0 -824($fp) + lw $t1 12($t0) + sw $t1 -856($fp) + lw $t0 -860($fp) + move $a0 $t0 + lw $t0 -856($fp) + move $a1 $t0 + jal equal_str + sw $v0 -832($fp) + j label_277 + label_276: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -860($fp) + lw $t0 -824($fp) + lw $t1 12($t0) + sw $t1 -856($fp) + lw $t0 -860($fp) + lw $t1 -856($fp) + seq $t0 $t0 $t1 + sw $t0 -832($fp) + j label_277 + label_277: + lw $t0 -832($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -864($fp) + lw $t0 -864($fp) + lw $t1 12($t0) + sw $t1 -868($fp) + lw $t0 -868($fp) + bne $t0 $zero label_342 + la $t0 data_105 + sw $t0 -776($fp) + lw $t0 -776($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -772($fp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -800($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -796($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -792($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -788($fp) + lw $t0 -800($fp) + lw $t1 -796($fp) + seq $t0 $t0 $t1 + sw $t0 -784($fp) + lw $t0 -784($fp) + bne $t0 $zero label_278 + lw $t0 -800($fp) + lw $t1 -792($fp) + seq $t0 $t0 $t1 + sw $t0 -784($fp) + lw $t0 -784($fp) + bne $t0 $zero label_279 + lw $t0 -800($fp) + lw $t1 -788($fp) + seq $t0 $t0 $t1 + sw $t0 -784($fp) + lw $t0 -784($fp) + bne $t0 $zero label_280 + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -772($fp) + seq $t0 $t0 $t1 + sw $t0 -780($fp) + j label_281 + label_278: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -808($fp) + lw $t0 -772($fp) + lw $t1 12($t0) + sw $t1 -804($fp) + lw $t0 -808($fp) + lw $t1 -804($fp) + seq $t0 $t0 $t1 + sw $t0 -780($fp) + j label_281 + label_279: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -808($fp) + lw $t0 -772($fp) + lw $t1 12($t0) + sw $t1 -804($fp) + lw $t0 -808($fp) + move $a0 $t0 + lw $t0 -804($fp) + move $a1 $t0 + jal equal_str + sw $v0 -780($fp) + j label_281 + label_280: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -808($fp) + lw $t0 -772($fp) + lw $t1 12($t0) + sw $t1 -804($fp) + lw $t0 -808($fp) + lw $t1 -804($fp) + seq $t0 $t0 $t1 + sw $t0 -780($fp) + j label_281 + label_281: + lw $t0 -780($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -812($fp) + lw $t0 -812($fp) + lw $t1 12($t0) + sw $t1 -816($fp) + lw $t0 -816($fp) + bne $t0 $zero label_336 + la $t0 data_106 + sw $t0 -724($fp) + lw $t0 -724($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -720($fp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -748($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -744($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -740($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -736($fp) + lw $t0 -748($fp) + lw $t1 -744($fp) + seq $t0 $t0 $t1 + sw $t0 -732($fp) + lw $t0 -732($fp) + bne $t0 $zero label_282 + lw $t0 -748($fp) + lw $t1 -740($fp) + seq $t0 $t0 $t1 + sw $t0 -732($fp) + lw $t0 -732($fp) + bne $t0 $zero label_283 + lw $t0 -748($fp) + lw $t1 -736($fp) + seq $t0 $t0 $t1 + sw $t0 -732($fp) + lw $t0 -732($fp) + bne $t0 $zero label_284 + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -720($fp) + seq $t0 $t0 $t1 + sw $t0 -728($fp) + j label_285 + label_282: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -756($fp) + lw $t0 -720($fp) + lw $t1 12($t0) + sw $t1 -752($fp) + lw $t0 -756($fp) + lw $t1 -752($fp) + seq $t0 $t0 $t1 + sw $t0 -728($fp) + j label_285 + label_283: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -756($fp) + lw $t0 -720($fp) + lw $t1 12($t0) + sw $t1 -752($fp) + lw $t0 -756($fp) + move $a0 $t0 + lw $t0 -752($fp) + move $a1 $t0 + jal equal_str + sw $v0 -728($fp) + j label_285 + label_284: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -756($fp) + lw $t0 -720($fp) + lw $t1 12($t0) + sw $t1 -752($fp) + lw $t0 -756($fp) + lw $t1 -752($fp) + seq $t0 $t0 $t1 + sw $t0 -728($fp) + j label_285 + label_285: + lw $t0 -728($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -760($fp) + lw $t0 -760($fp) + lw $t1 12($t0) + sw $t1 -764($fp) + lw $t0 -764($fp) + bne $t0 $zero label_330 + la $t0 data_107 + sw $t0 -672($fp) + lw $t0 -672($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -668($fp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -696($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -692($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -688($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -684($fp) + lw $t0 -696($fp) + lw $t1 -692($fp) + seq $t0 $t0 $t1 + sw $t0 -680($fp) + lw $t0 -680($fp) + bne $t0 $zero label_286 + lw $t0 -696($fp) + lw $t1 -688($fp) + seq $t0 $t0 $t1 + sw $t0 -680($fp) + lw $t0 -680($fp) + bne $t0 $zero label_287 + lw $t0 -696($fp) + lw $t1 -684($fp) + seq $t0 $t0 $t1 + sw $t0 -680($fp) + lw $t0 -680($fp) + bne $t0 $zero label_288 + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -668($fp) + seq $t0 $t0 $t1 + sw $t0 -676($fp) + j label_289 + label_286: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -704($fp) + lw $t0 -668($fp) + lw $t1 12($t0) + sw $t1 -700($fp) + lw $t0 -704($fp) + lw $t1 -700($fp) + seq $t0 $t0 $t1 + sw $t0 -676($fp) + j label_289 + label_287: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -704($fp) + lw $t0 -668($fp) + lw $t1 12($t0) + sw $t1 -700($fp) + lw $t0 -704($fp) + move $a0 $t0 + lw $t0 -700($fp) + move $a1 $t0 + jal equal_str + sw $v0 -676($fp) + j label_289 + label_288: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -704($fp) + lw $t0 -668($fp) + lw $t1 12($t0) + sw $t1 -700($fp) + lw $t0 -704($fp) + lw $t1 -700($fp) + seq $t0 $t0 $t1 + sw $t0 -676($fp) + j label_289 + label_289: + lw $t0 -676($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -708($fp) + lw $t0 -708($fp) + lw $t1 12($t0) + sw $t1 -712($fp) + lw $t0 -712($fp) + bne $t0 $zero label_322 + la $t0 data_108 + sw $t0 -620($fp) + lw $t0 -620($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -616($fp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -644($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -640($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -636($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -632($fp) + lw $t0 -644($fp) + lw $t1 -640($fp) + seq $t0 $t0 $t1 + sw $t0 -628($fp) + lw $t0 -628($fp) + bne $t0 $zero label_290 + lw $t0 -644($fp) + lw $t1 -636($fp) + seq $t0 $t0 $t1 + sw $t0 -628($fp) + lw $t0 -628($fp) + bne $t0 $zero label_291 + lw $t0 -644($fp) + lw $t1 -632($fp) + seq $t0 $t0 $t1 + sw $t0 -628($fp) + lw $t0 -628($fp) + bne $t0 $zero label_292 + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -616($fp) + seq $t0 $t0 $t1 + sw $t0 -624($fp) + j label_293 + label_290: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -652($fp) + lw $t0 -616($fp) + lw $t1 12($t0) + sw $t1 -648($fp) + lw $t0 -652($fp) + lw $t1 -648($fp) + seq $t0 $t0 $t1 + sw $t0 -624($fp) + j label_293 + label_291: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -652($fp) + lw $t0 -616($fp) + lw $t1 12($t0) + sw $t1 -648($fp) + lw $t0 -652($fp) + move $a0 $t0 + lw $t0 -648($fp) + move $a1 $t0 + jal equal_str + sw $v0 -624($fp) + j label_293 + label_292: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -652($fp) + lw $t0 -616($fp) + lw $t1 12($t0) + sw $t1 -648($fp) + lw $t0 -652($fp) + lw $t1 -648($fp) + seq $t0 $t0 $t1 + sw $t0 -624($fp) + j label_293 + label_293: + lw $t0 -624($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -656($fp) + lw $t0 -656($fp) + lw $t1 12($t0) + sw $t1 -660($fp) + lw $t0 -660($fp) + bne $t0 $zero label_310 + la $t0 data_109 + sw $t0 -568($fp) + lw $t0 -568($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -564($fp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -592($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -588($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -584($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -580($fp) + lw $t0 -592($fp) + lw $t1 -588($fp) + seq $t0 $t0 $t1 + sw $t0 -576($fp) + lw $t0 -576($fp) + bne $t0 $zero label_294 + lw $t0 -592($fp) + lw $t1 -584($fp) + seq $t0 $t0 $t1 + sw $t0 -576($fp) + lw $t0 -576($fp) + bne $t0 $zero label_295 + lw $t0 -592($fp) + lw $t1 -580($fp) + seq $t0 $t0 $t1 + sw $t0 -576($fp) + lw $t0 -576($fp) + bne $t0 $zero label_296 + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -564($fp) + seq $t0 $t0 $t1 + sw $t0 -572($fp) + j label_297 + label_294: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -600($fp) + lw $t0 -564($fp) + lw $t1 12($t0) + sw $t1 -596($fp) + lw $t0 -600($fp) + lw $t1 -596($fp) + seq $t0 $t0 $t1 + sw $t0 -572($fp) + j label_297 + label_295: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -600($fp) + lw $t0 -564($fp) + lw $t1 12($t0) + sw $t1 -596($fp) + lw $t0 -600($fp) + move $a0 $t0 + lw $t0 -596($fp) + move $a1 $t0 + jal equal_str + sw $v0 -572($fp) + j label_297 + label_296: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -600($fp) + lw $t0 -564($fp) + lw $t1 12($t0) + sw $t1 -596($fp) + lw $t0 -600($fp) + lw $t1 -596($fp) + seq $t0 $t0 $t1 + sw $t0 -572($fp) + j label_297 + label_297: + lw $t0 -572($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -604($fp) + lw $t0 -604($fp) + lw $t1 12($t0) + sw $t1 -608($fp) + lw $t0 -608($fp) + bne $t0 $zero label_308 + la $t0 data_110 + sw $t0 -516($fp) + lw $t0 -516($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -512($fp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -540($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -536($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -532($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -528($fp) + lw $t0 -540($fp) + lw $t1 -536($fp) + seq $t0 $t0 $t1 + sw $t0 -524($fp) + lw $t0 -524($fp) + bne $t0 $zero label_298 + lw $t0 -540($fp) + lw $t1 -532($fp) + seq $t0 $t0 $t1 + sw $t0 -524($fp) + lw $t0 -524($fp) + bne $t0 $zero label_299 + lw $t0 -540($fp) + lw $t1 -528($fp) + seq $t0 $t0 $t1 + sw $t0 -524($fp) + lw $t0 -524($fp) + bne $t0 $zero label_300 + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -512($fp) + seq $t0 $t0 $t1 + sw $t0 -520($fp) + j label_301 + label_298: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -548($fp) + lw $t0 -512($fp) + lw $t1 12($t0) + sw $t1 -544($fp) + lw $t0 -548($fp) + lw $t1 -544($fp) + seq $t0 $t0 $t1 + sw $t0 -520($fp) + j label_301 + label_299: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -548($fp) + lw $t0 -512($fp) + lw $t1 12($t0) + sw $t1 -544($fp) + lw $t0 -548($fp) + move $a0 $t0 + lw $t0 -544($fp) + move $a1 $t0 + jal equal_str + sw $v0 -520($fp) + j label_301 + label_300: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -548($fp) + lw $t0 -512($fp) + lw $t1 12($t0) + sw $t1 -544($fp) + lw $t0 -548($fp) + lw $t1 -544($fp) + seq $t0 $t0 $t1 + sw $t0 -520($fp) + j label_301 + label_301: + lw $t0 -520($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -552($fp) + lw $t0 -552($fp) + lw $t1 12($t0) + sw $t1 -556($fp) + lw $t0 -556($fp) + bne $t0 $zero label_306 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -508($fp) + lw $t0 -508($fp) + bne $t0 $zero label_302 + j label_303 + label_302: + li $v0 4 + la $a0 data_111 + syscall + li $v0 10 + syscall + label_303: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -504($fp) + jal __init_at_A + sw $v0 -500($fp) + lw $t0 -500($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -496($fp) + lw $t0 -496($fp) + bne $t0 $zero label_304 + j label_305 + label_304: + li $v0 4 + la $a0 data_112 + syscall + li $v0 10 + syscall + label_305: + lw $t0 -500($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -504($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -500($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -492($fp) + lw $t0 -492($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -560($fp) + j label_307 + label_306: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -488($fp) + lw $t0 -488($fp) + lw $t1 0($fp) + addi $t1 $t1 24 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -560($fp) + label_307: + lw $t0 -560($fp) + sw $t0 -612($fp) + j label_309 + label_308: + jal __init_at_A + sw $v0 -484($fp) + lw $t0 -484($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -612($fp) + label_309: + lw $t0 -612($fp) + sw $t0 -664($fp) + j label_321 + label_310: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -476($fp) + lw $t0 -476($fp) + bne $t0 $zero label_311 + j label_312 + label_311: + li $v0 4 + la $a0 data_113 + syscall + li $v0 10 + syscall + label_312: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -472($fp) + jal __init_at_E + sw $v0 -468($fp) + lw $t0 -468($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -464($fp) + lw $t0 -464($fp) + bne $t0 $zero label_313 + j label_314 + label_313: + li $v0 4 + la $a0 data_114 + syscall + li $v0 10 + syscall + label_314: + lw $t0 -468($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -472($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -468($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -460($fp) + lw $t0 -460($fp) + sw $t0 -480($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_315 + j label_316 + label_315: + li $v0 4 + la $a0 data_115 + syscall + li $v0 10 + syscall + label_316: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -432($fp) + lw $t0 -432($fp) + lw $t1 12($t0) + sw $t1 -448($fp) + lw $t0 -480($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -412($fp) + lw $t0 -412($fp) + bne $t0 $zero label_317 + j label_318 + label_317: + li $v0 4 + la $a0 data_116 + syscall + li $v0 10 + syscall + label_318: + lw $t0 -480($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -480($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -408($fp) + lw $t0 -408($fp) + lw $t1 12($t0) + sw $t1 -424($fp) + li $t0 8 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -404($fp) + lw $t0 -404($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -424($fp) + lw $t1 -420($fp) + mul $t0 $t0 $t1 + sw $t0 -416($fp) + lw $t0 -416($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -428($fp) + lw $t0 -428($fp) + lw $t1 12($t0) + sw $t1 -444($fp) + lw $t0 -448($fp) + lw $t1 -444($fp) + sub $t0 $t0 $t1 + sw $t0 -440($fp) + lw $t0 -440($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -452($fp) + lw $t0 -452($fp) + sw $t0 -456($fp) + la $t0 data_117 + sw $t0 -396($fp) + lw $t0 -396($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -392($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -392($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -400($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -388($fp) + la $t0 data_118 + sw $t0 -380($fp) + lw $t0 -380($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -376($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -376($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -384($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -480($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -372($fp) + la $t0 data_119 + sw $t0 -364($fp) + lw $t0 -364($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -360($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -360($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -368($fp) + jal __init_at_A2I + sw $v0 -352($fp) + lw $t0 -352($fp) + sw $t0 -356($fp) + lw $t0 -356($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -344($fp) + lw $t0 -344($fp) + bne $t0 $zero label_319 + j label_320 + label_319: + li $v0 4 + la $a0 data_120 + syscall + li $v0 10 + syscall + label_320: + lw $t0 -356($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -456($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -356($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -340($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -340($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -348($fp) + la $t0 data_121 + sw $t0 -332($fp) + lw $t0 -332($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -328($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -328($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -336($fp) + lw $t0 -480($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -664($fp) + label_321: + lw $t0 -664($fp) + sw $t0 -716($fp) + j label_329 + label_322: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -316($fp) + lw $t0 -316($fp) + bne $t0 $zero label_323 + j label_324 + label_323: + li $v0 4 + la $a0 data_122 + syscall + li $v0 10 + syscall + label_324: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -312($fp) + jal __init_at_D + sw $v0 -308($fp) + lw $t0 -308($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_325 + j label_326 + label_325: + li $v0 4 + la $a0 data_123 + syscall + li $v0 10 + syscall + label_326: + lw $t0 -308($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -312($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -308($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -300($fp) + lw $t0 -300($fp) + lw $t1 12($t0) + sw $t1 -320($fp) + lw $t0 -320($fp) + bne $t0 $zero label_327 + la $t0 data_124 + sw $t0 -292($fp) + lw $t0 -292($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -288($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -288($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -296($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -284($fp) + la $t0 data_125 + sw $t0 -276($fp) + lw $t0 -276($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -272($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -272($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -280($fp) + lw $t0 -280($fp) + sw $t0 -324($fp) + j label_328 + label_327: + la $t0 data_126 + sw $t0 -264($fp) + lw $t0 -264($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -260($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -260($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -268($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -256($fp) + la $t0 data_127 + sw $t0 -248($fp) + lw $t0 -248($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -244($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -244($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -252($fp) + lw $t0 -252($fp) + sw $t0 -324($fp) + label_328: + lw $t0 -324($fp) + sw $t0 -716($fp) + label_329: + lw $t0 -716($fp) + sw $t0 -768($fp) + j label_335 + label_330: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -240($fp) + lw $t0 -240($fp) + bne $t0 $zero label_331 + j label_332 + label_331: + li $v0 4 + la $a0 data_128 + syscall + li $v0 10 + syscall + label_332: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -236($fp) + jal __init_at_C + sw $v0 -232($fp) + lw $t0 -232($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_333 + j label_334 + label_333: + li $v0 4 + la $a0 data_129 + syscall + li $v0 10 + syscall + label_334: + lw $t0 -232($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -236($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_method5_at_C + addi $sp $sp 8 + sw $v0 -224($fp) + lw $t0 -224($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -768($fp) + label_335: + lw $t0 -768($fp) + sw $t0 -820($fp) + j label_341 + label_336: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -220($fp) + lw $t0 -220($fp) + bne $t0 $zero label_337 + j label_338 + label_337: + li $v0 4 + la $a0 data_130 + syscall + li $v0 10 + syscall + label_338: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -216($fp) + jal __init_at_C + sw $v0 -212($fp) + lw $t0 -212($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_339 + j label_340 + label_339: + li $v0 4 + la $a0 data_131 + syscall + li $v0 10 + syscall + label_340: + lw $t0 -212($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -216($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_method5_at_B + addi $sp $sp 8 + sw $v0 -204($fp) + lw $t0 -204($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -820($fp) + label_341: + lw $t0 -820($fp) + sw $t0 -872($fp) + j label_347 + label_342: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -200($fp) + lw $t0 -200($fp) + bne $t0 $zero label_343 + j label_344 + label_343: + li $v0 4 + la $a0 data_132 + syscall + li $v0 10 + syscall + label_344: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -196($fp) + jal __init_at_C + sw $v0 -192($fp) + lw $t0 -192($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -188($fp) + lw $t0 -188($fp) + bne $t0 $zero label_345 + j label_346 + label_345: + li $v0 4 + la $a0 data_133 + syscall + li $v0 10 + syscall + label_346: + lw $t0 -192($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -196($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_method5_at_A + addi $sp $sp 8 + sw $v0 -184($fp) + lw $t0 -184($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -872($fp) + label_347: + lw $t0 -872($fp) + sw $t0 -924($fp) + j label_357 + label_348: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -180($fp) + jal __init_at_A + sw $v0 -176($fp) + lw $t0 -176($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -172($fp) + lw $t0 -172($fp) + bne $t0 $zero label_349 + j label_350 + label_349: + li $v0 4 + la $a0 data_134 + syscall + li $v0 10 + syscall + label_350: + lw $t0 -176($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -180($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -176($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -168($fp) + lw $t0 -168($fp) + lw $t1 0($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_351 + j label_352 + label_351: + li $v0 4 + la $a0 data_135 + syscall + li $v0 10 + syscall + label_352: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -160($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -156($fp) + lw $t0 -156($fp) + bne $t0 $zero label_353 + j label_354 + label_353: + li $v0 4 + la $a0 data_136 + syscall + li $v0 10 + syscall + label_354: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -152($fp) + jal __init_at_D + sw $v0 -148($fp) + lw $t0 -148($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_355 + j label_356 + label_355: + li $v0 4 + la $a0 data_137 + syscall + li $v0 10 + syscall + label_356: + lw $t0 -148($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -160($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -152($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -148($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -140($fp) + lw $t0 -140($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -924($fp) + label_357: + lw $t0 -924($fp) + sw $t0 -976($fp) + j label_373 + label_358: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -132($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_359 + j label_360 + label_359: + li $v0 4 + la $a0 data_138 + syscall + li $v0 10 + syscall + label_360: + la $t0 types_table + addi $t0 $t0 28 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -120($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_361 + la $t0 types_table + addi $t0 $t0 20 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -120($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_366 + la $t0 types_table + addi $t0 $t0 24 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -120($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_366 + la $t0 types_table + addi $t0 $t0 32 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -120($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_366 + la $t0 types_table + addi $t0 $t0 36 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -120($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_366 + la $t0 types_table + addi $t0 $t0 0 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -120($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_371 + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -120($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_371 + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -120($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_371 + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -120($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_371 + la $t0 types_table + addi $t0 $t0 4 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -120($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_371 + la $t0 types_table + addi $t0 $t0 40 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -120($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_371 + la $t0 types_table + addi $t0 $t0 44 + lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -120($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_371 + li $v0 4 + la $a0 data_139 + syscall + li $v0 10 + syscall + label_361: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -116($fp) + lw $t0 -116($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_362 + j label_363 + label_362: + li $v0 4 + la $a0 data_140 + syscall + li $v0 10 + syscall + label_363: + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -108($fp) + lw $t0 -116($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_364 + j label_365 + label_364: + li $v0 4 + la $a0 data_141 + syscall + li $v0 10 + syscall + label_365: + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -100($fp) + lw $t0 -100($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -136($fp) + j label_372 + label_366: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -96($fp) + lw $t0 -96($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_367 + j label_368 + label_367: + li $v0 4 + la $a0 data_142 + syscall + li $v0 10 + syscall + label_368: + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -88($fp) + lw $t0 -96($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_369 + j label_370 + label_369: + li $v0 4 + la $a0 data_143 + syscall + li $v0 10 + syscall + label_370: + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -80($fp) + lw $t0 -80($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -136($fp) + j label_372 + label_371: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -76($fp) + la $t0 data_144 + sw $t0 -68($fp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -72($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -60($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -56($fp) + sw $t0 -136($fp) + j label_372 + label_372: + lw $t0 -136($fp) + sw $t0 -976($fp) + label_373: + lw $t0 -976($fp) + sw $t0 -1028($fp) + j label_383 + label_374: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -52($fp) + jal __init_at_A + sw $v0 -48($fp) + lw $t0 -48($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_375 + j label_376 + label_375: + li $v0 4 + la $a0 data_145 + syscall + li $v0 10 + syscall + label_376: + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + lw $t0 -40($fp) + lw $t1 0($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_377 + j label_378 + label_377: + li $v0 4 + la $a0 data_146 + syscall + li $v0 10 + syscall + label_378: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_379 + j label_380 + label_379: + li $v0 4 + la $a0 data_147 + syscall + li $v0 10 + syscall + label_380: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -24($fp) + jal __init_at_B + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_381 + j label_382 + label_381: + li $v0 4 + la $a0 data_148 + syscall + li $v0 10 + syscall + label_382: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -1028($fp) + label_383: + j label_256 + label_384: + li $v0 0 + addi $sp $sp 1112 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + li $t0 11 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + jr $ra + \ No newline at end of file diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index bfd69420b..e221613e0 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -1,80 +1,80 @@ .data -default_str: .asciiz "" +default_str: .asciiz "" .word 0 -data_1: .asciiz "Object" +data_1: .asciiz "Object" .word 0 -data_2: .asciiz "IO" +data_2: .asciiz "IO" .word 0 -data_3: .asciiz "String" +data_3: .asciiz "String" .word 0 -data_4: .asciiz "Int" +data_4: .asciiz "Int" .word 0 -data_5: .asciiz "Bool" +data_5: .asciiz "Bool" .word 0 -data_6: .asciiz "A2I" +data_6: .asciiz "A2I" .word 0 -data_7: .asciiz "Main" +data_7: .asciiz "Main" .word 0 data_8: .asciiz " -" +" .word 0 -data_9: .asciiz "" +data_9: .asciiz "" .word 0 -data_10: .asciiz "Abort called from class " +data_10: .asciiz "Abort called from class " .word 0 -data_11: .asciiz "Substring out of range" +data_11: .asciiz "Substring out of range" .word 0 -data_12: .asciiz "0" +data_12: .asciiz "0" .word 0 -data_13: .asciiz "1" +data_13: .asciiz "1" .word 0 -data_14: .asciiz "2" +data_14: .asciiz "2" .word 0 -data_15: .asciiz "3" +data_15: .asciiz "3" .word 0 -data_16: .asciiz "4" +data_16: .asciiz "4" .word 0 -data_17: .asciiz "5" +data_17: .asciiz "5" .word 0 -data_18: .asciiz "6" +data_18: .asciiz "6" .word 0 -data_19: .asciiz "7" +data_19: .asciiz "7" .word 0 -data_20: .asciiz "8" +data_20: .asciiz "8" .word 0 -data_21: .asciiz "9" +data_21: .asciiz "9" .word 0 -data_22: .asciiz "" +data_22: .asciiz "" .word 0 -data_23: .asciiz "9" +data_23: .asciiz "9" .word 0 -data_24: .asciiz "8" +data_24: .asciiz "8" .word 0 -data_25: .asciiz "7" +data_25: .asciiz "7" .word 0 -data_26: .asciiz "6" +data_26: .asciiz "6" .word 0 -data_27: .asciiz "5" +data_27: .asciiz "5" .word 0 -data_28: .asciiz "4" +data_28: .asciiz "4" .word 0 -data_29: .asciiz "3" +data_29: .asciiz "3" .word 0 -data_30: .asciiz "2" +data_30: .asciiz "2" .word 0 -data_31: .asciiz "1" +data_31: .asciiz "1" .word 0 -data_32: .asciiz "0" +data_32: .asciiz "0" .word 0 data_33: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_34: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_35: .asciiz "-" +data_35: .asciiz "-" .word 0 data_36: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_37: .asciiz "+" +data_37: .asciiz "+" .word 0 data_38: .asciiz "RuntimeError: Function call in a void instance" .word 0 @@ -88,27 +88,27 @@ data_42: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_43: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_44: .asciiz "-" +data_44: .asciiz "-" .word 0 data_45: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_46: .asciiz "0" +data_46: .asciiz "0" .word 0 -data_47: .asciiz "RuntimeError: Division by zero" +data_47: .asciiz "RuntimeError: Division by zero" .word 0 data_48: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_49: .asciiz "" +data_49: .asciiz "" .word 0 -data_50: .asciiz "678987" +data_50: .asciiz "678987" .word 0 data_51: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_52: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_53: .asciiz " == " +data_53: .asciiz " == " .word 0 -data_54: .asciiz "\n" +data_54: .asciiz "\n" types_table: @@ -247,4538 +247,4538 @@ type_7_prototype: .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 la $t0 data_10 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall la $t0 data_8 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 la $a0 data_11 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_attr_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_c2i_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -568 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -568 la $t0 data_12 - sw $t0 -532($fp) - lw $t0 -532($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -528($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -532($fp) + lw $t0 -532($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -528($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -556($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -556($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -552($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -552($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -548($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -548($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -544($fp) - lw $t0 -556($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) - bne $t0 $zero label_3 - lw $t0 -556($fp) - lw $t1 -548($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) - bne $t0 $zero label_4 - lw $t0 -556($fp) - lw $t1 -544($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) - bne $t0 $zero label_5 - lw $t0 0($fp) - lw $t1 -528($fp) - seq $t0 $t0 $t1 - sw $t0 -536($fp) - j label_6 - label_3: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -528($fp) - lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) - seq $t0 $t0 $t1 - sw $t0 -536($fp) - j label_6 - label_4: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -528($fp) - lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) - move $a0 $t0 - lw $t0 -560($fp) - move $a1 $t0 - jal equal_str - sw $v0 -536($fp) - j label_6 - label_5: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -528($fp) - lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) - seq $t0 $t0 $t1 - sw $t0 -536($fp) - j label_6 - label_6: - lw $t0 -536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -568($fp) - lw $t0 -568($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -572($fp) - bne $t0 $zero label_61 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -544($fp) + lw $t0 -556($fp) + lw $t1 -552($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + bne $t0 $zero label_3 + lw $t0 -556($fp) + lw $t1 -548($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + bne $t0 $zero label_4 + lw $t0 -556($fp) + lw $t1 -544($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + bne $t0 $zero label_5 + lw $t0 0($fp) + lw $t1 -528($fp) + seq $t0 $t0 $t1 + sw $t0 -536($fp) + j label_6 + label_3: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -528($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + lw $t1 -560($fp) + seq $t0 $t0 $t1 + sw $t0 -536($fp) + j label_6 + label_4: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -528($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + move $a0 $t0 + lw $t0 -560($fp) + move $a1 $t0 + jal equal_str + sw $v0 -536($fp) + j label_6 + label_5: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -528($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + lw $t1 -560($fp) + seq $t0 $t0 $t1 + sw $t0 -536($fp) + j label_6 + label_6: + lw $t0 -536($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -568($fp) + lw $t0 -568($fp) + lw $t1 12($t0) + sw $t1 -572($fp) + lw $t0 -572($fp) + bne $t0 $zero label_61 la $t0 data_13 - sw $t0 -480($fp) - lw $t0 -480($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -476($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -480($fp) + lw $t0 -480($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -476($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -504($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -504($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -500($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -500($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -496($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -496($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -492($fp) - lw $t0 -504($fp) - lw $t1 -500($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - lw $t0 -488($fp) - bne $t0 $zero label_7 - lw $t0 -504($fp) - lw $t1 -496($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - lw $t0 -488($fp) - bne $t0 $zero label_8 - lw $t0 -504($fp) - lw $t1 -492($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - lw $t0 -488($fp) - bne $t0 $zero label_9 - lw $t0 0($fp) - lw $t1 -476($fp) - seq $t0 $t0 $t1 - sw $t0 -484($fp) - j label_10 - label_7: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -512($fp) - lw $t1 -508($fp) - seq $t0 $t0 $t1 - sw $t0 -484($fp) - j label_10 - label_8: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -512($fp) - move $a0 $t0 - lw $t0 -508($fp) - move $a1 $t0 - jal equal_str - sw $v0 -484($fp) - j label_10 - label_9: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -512($fp) - lw $t1 -508($fp) - seq $t0 $t0 $t1 - sw $t0 -484($fp) - j label_10 - label_10: - lw $t0 -484($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -516($fp) - lw $t0 -516($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -520($fp) - bne $t0 $zero label_59 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -492($fp) + lw $t0 -504($fp) + lw $t1 -500($fp) + seq $t0 $t0 $t1 + sw $t0 -488($fp) + lw $t0 -488($fp) + bne $t0 $zero label_7 + lw $t0 -504($fp) + lw $t1 -496($fp) + seq $t0 $t0 $t1 + sw $t0 -488($fp) + lw $t0 -488($fp) + bne $t0 $zero label_8 + lw $t0 -504($fp) + lw $t1 -492($fp) + seq $t0 $t0 $t1 + sw $t0 -488($fp) + lw $t0 -488($fp) + bne $t0 $zero label_9 + lw $t0 0($fp) + lw $t1 -476($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + j label_10 + label_7: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -512($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -512($fp) + lw $t1 -508($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + j label_10 + label_8: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -512($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -512($fp) + move $a0 $t0 + lw $t0 -508($fp) + move $a1 $t0 + jal equal_str + sw $v0 -484($fp) + j label_10 + label_9: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -512($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -512($fp) + lw $t1 -508($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + j label_10 + label_10: + lw $t0 -484($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -516($fp) + lw $t0 -516($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -520($fp) + bne $t0 $zero label_59 la $t0 data_14 - sw $t0 -428($fp) - lw $t0 -428($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -424($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -428($fp) + lw $t0 -428($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -424($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -452($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -452($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -448($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -448($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -444($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -444($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -440($fp) - lw $t0 -452($fp) - lw $t1 -448($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_11 - lw $t0 -452($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_12 - lw $t0 -452($fp) - lw $t1 -440($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_13 - lw $t0 0($fp) - lw $t1 -424($fp) - seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_14 - label_11: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -424($fp) - lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_14 - label_12: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -424($fp) - lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - move $a0 $t0 - lw $t0 -456($fp) - move $a1 $t0 - jal equal_str - sw $v0 -432($fp) - j label_14 - label_13: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -424($fp) - lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_14 - label_14: - lw $t0 -432($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -464($fp) - lw $t0 -464($fp) - lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -468($fp) - bne $t0 $zero label_57 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -440($fp) + lw $t0 -452($fp) + lw $t1 -448($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_11 + lw $t0 -452($fp) + lw $t1 -444($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_12 + lw $t0 -452($fp) + lw $t1 -440($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_13 + lw $t0 0($fp) + lw $t1 -424($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_14 + label_11: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -424($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_14 + label_12: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -424($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + move $a0 $t0 + lw $t0 -456($fp) + move $a1 $t0 + jal equal_str + sw $v0 -432($fp) + j label_14 + label_13: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -424($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_14 + label_14: + lw $t0 -432($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -464($fp) + lw $t0 -464($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -468($fp) + bne $t0 $zero label_57 la $t0 data_15 - sw $t0 -376($fp) - lw $t0 -376($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -372($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -376($fp) + lw $t0 -376($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -372($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -400($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -400($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -396($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -396($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -392($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -392($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -388($fp) - lw $t0 -400($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - lw $t0 -384($fp) - bne $t0 $zero label_15 - lw $t0 -400($fp) - lw $t1 -392($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - lw $t0 -384($fp) - bne $t0 $zero label_16 - lw $t0 -400($fp) - lw $t1 -388($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - lw $t0 -384($fp) - bne $t0 $zero label_17 - lw $t0 0($fp) - lw $t1 -372($fp) - seq $t0 $t0 $t1 - sw $t0 -380($fp) - j label_18 - label_15: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -372($fp) - lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -408($fp) - lw $t1 -404($fp) - seq $t0 $t0 $t1 - sw $t0 -380($fp) - j label_18 - label_16: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -372($fp) - lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -408($fp) - move $a0 $t0 - lw $t0 -404($fp) - move $a1 $t0 - jal equal_str - sw $v0 -380($fp) - j label_18 - label_17: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -372($fp) - lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -408($fp) - lw $t1 -404($fp) - seq $t0 $t0 $t1 - sw $t0 -380($fp) - j label_18 - label_18: - lw $t0 -380($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -412($fp) - lw $t0 -412($fp) - lw $t1 12($t0) - sw $t1 -416($fp) - lw $t0 -416($fp) - bne $t0 $zero label_55 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -388($fp) + lw $t0 -400($fp) + lw $t1 -396($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_15 + lw $t0 -400($fp) + lw $t1 -392($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_16 + lw $t0 -400($fp) + lw $t1 -388($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_17 + lw $t0 0($fp) + lw $t1 -372($fp) + seq $t0 $t0 $t1 + sw $t0 -380($fp) + j label_18 + label_15: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -372($fp) + lw $t1 12($t0) + sw $t1 -404($fp) + lw $t0 -408($fp) + lw $t1 -404($fp) + seq $t0 $t0 $t1 + sw $t0 -380($fp) + j label_18 + label_16: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -372($fp) + lw $t1 12($t0) + sw $t1 -404($fp) + lw $t0 -408($fp) + move $a0 $t0 + lw $t0 -404($fp) + move $a1 $t0 + jal equal_str + sw $v0 -380($fp) + j label_18 + label_17: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -372($fp) + lw $t1 12($t0) + sw $t1 -404($fp) + lw $t0 -408($fp) + lw $t1 -404($fp) + seq $t0 $t0 $t1 + sw $t0 -380($fp) + j label_18 + label_18: + lw $t0 -380($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -412($fp) + lw $t0 -412($fp) + lw $t1 12($t0) + sw $t1 -416($fp) + lw $t0 -416($fp) + bne $t0 $zero label_55 la $t0 data_16 - sw $t0 -324($fp) - lw $t0 -324($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -320($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -324($fp) + lw $t0 -324($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -320($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -348($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -348($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -344($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -344($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -340($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -340($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -336($fp) - lw $t0 -348($fp) - lw $t1 -344($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - lw $t0 -332($fp) - bne $t0 $zero label_19 - lw $t0 -348($fp) - lw $t1 -340($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - lw $t0 -332($fp) - bne $t0 $zero label_20 - lw $t0 -348($fp) - lw $t1 -336($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - lw $t0 -332($fp) - bne $t0 $zero label_21 - lw $t0 0($fp) - lw $t1 -320($fp) - seq $t0 $t0 $t1 - sw $t0 -328($fp) - j label_22 - label_19: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -320($fp) - lw $t1 12($t0) - sw $t1 -352($fp) - lw $t0 -356($fp) - lw $t1 -352($fp) - seq $t0 $t0 $t1 - sw $t0 -328($fp) - j label_22 - label_20: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -320($fp) - lw $t1 12($t0) - sw $t1 -352($fp) - lw $t0 -356($fp) - move $a0 $t0 - lw $t0 -352($fp) - move $a1 $t0 - jal equal_str - sw $v0 -328($fp) - j label_22 - label_21: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -320($fp) - lw $t1 12($t0) - sw $t1 -352($fp) - lw $t0 -356($fp) - lw $t1 -352($fp) - seq $t0 $t0 $t1 - sw $t0 -328($fp) - j label_22 - label_22: - lw $t0 -328($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -360($fp) - lw $t0 -360($fp) - lw $t1 12($t0) - sw $t1 -364($fp) - lw $t0 -364($fp) - bne $t0 $zero label_53 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -336($fp) + lw $t0 -348($fp) + lw $t1 -344($fp) + seq $t0 $t0 $t1 + sw $t0 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_19 + lw $t0 -348($fp) + lw $t1 -340($fp) + seq $t0 $t0 $t1 + sw $t0 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_20 + lw $t0 -348($fp) + lw $t1 -336($fp) + seq $t0 $t0 $t1 + sw $t0 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_21 + lw $t0 0($fp) + lw $t1 -320($fp) + seq $t0 $t0 $t1 + sw $t0 -328($fp) + j label_22 + label_19: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -356($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -352($fp) + lw $t0 -356($fp) + lw $t1 -352($fp) + seq $t0 $t0 $t1 + sw $t0 -328($fp) + j label_22 + label_20: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -356($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -352($fp) + lw $t0 -356($fp) + move $a0 $t0 + lw $t0 -352($fp) + move $a1 $t0 + jal equal_str + sw $v0 -328($fp) + j label_22 + label_21: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -356($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -352($fp) + lw $t0 -356($fp) + lw $t1 -352($fp) + seq $t0 $t0 $t1 + sw $t0 -328($fp) + j label_22 + label_22: + lw $t0 -328($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -360($fp) + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -364($fp) + lw $t0 -364($fp) + bne $t0 $zero label_53 la $t0 data_17 - sw $t0 -272($fp) - lw $t0 -272($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -268($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -272($fp) + lw $t0 -272($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -268($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -296($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -296($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -292($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -292($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -288($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -288($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -284($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_23 - lw $t0 -296($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_24 - lw $t0 -296($fp) - lw $t1 -284($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_25 - lw $t0 0($fp) - lw $t1 -268($fp) - seq $t0 $t0 $t1 - sw $t0 -276($fp) - j label_26 - label_23: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -304($fp) - lw $t1 -300($fp) - seq $t0 $t0 $t1 - sw $t0 -276($fp) - j label_26 - label_24: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -304($fp) - move $a0 $t0 - lw $t0 -300($fp) - move $a1 $t0 - jal equal_str - sw $v0 -276($fp) - j label_26 - label_25: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -304($fp) - lw $t1 -300($fp) - seq $t0 $t0 $t1 - sw $t0 -276($fp) - j label_26 - label_26: - lw $t0 -276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -308($fp) - lw $t0 -308($fp) - lw $t1 12($t0) - sw $t1 -312($fp) - lw $t0 -312($fp) - bne $t0 $zero label_51 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -284($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_23 + lw $t0 -296($fp) + lw $t1 -288($fp) + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_24 + lw $t0 -296($fp) + lw $t1 -284($fp) + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_25 + lw $t0 0($fp) + lw $t1 -268($fp) + seq $t0 $t0 $t1 + sw $t0 -276($fp) + j label_26 + label_23: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -304($fp) + lw $t1 -300($fp) + seq $t0 $t0 $t1 + sw $t0 -276($fp) + j label_26 + label_24: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -304($fp) + move $a0 $t0 + lw $t0 -300($fp) + move $a1 $t0 + jal equal_str + sw $v0 -276($fp) + j label_26 + label_25: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -304($fp) + lw $t1 -300($fp) + seq $t0 $t0 $t1 + sw $t0 -276($fp) + j label_26 + label_26: + lw $t0 -276($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -308($fp) + lw $t0 -308($fp) + lw $t1 12($t0) + sw $t1 -312($fp) + lw $t0 -312($fp) + bne $t0 $zero label_51 la $t0 data_18 - sw $t0 -220($fp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -220($fp) + lw $t0 -220($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -216($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -244($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -244($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -240($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -240($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -236($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -236($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -232($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_27 - lw $t0 -244($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_28 - lw $t0 -244($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_29 - lw $t0 0($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_30 - label_27: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -216($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_30 - label_28: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -216($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - move $a0 $t0 - lw $t0 -248($fp) - move $a1 $t0 - jal equal_str - sw $v0 -224($fp) - j label_30 - label_29: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -216($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_30 - label_30: - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_49 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -232($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_27 + lw $t0 -244($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_28 + lw $t0 -244($fp) + lw $t1 -232($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_29 + lw $t0 0($fp) + lw $t1 -216($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_30 + label_27: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_30 + label_28: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + move $a0 $t0 + lw $t0 -248($fp) + move $a1 $t0 + jal equal_str + sw $v0 -224($fp) + j label_30 + label_29: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_30 + label_30: + lw $t0 -224($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -256($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_49 la $t0 data_19 - sw $t0 -168($fp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -168($fp) + lw $t0 -168($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -164($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -192($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -192($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -188($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -188($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -184($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -184($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -180($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_31 - lw $t0 -192($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_32 - lw $t0 -192($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_33 - lw $t0 0($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_34 - label_31: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_34 - label_32: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - move $a0 $t0 - lw $t0 -196($fp) - move $a1 $t0 - jal equal_str - sw $v0 -172($fp) - j label_34 - label_33: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_34 - label_34: - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_47 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -180($fp) + lw $t0 -192($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_31 + lw $t0 -192($fp) + lw $t1 -184($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_32 + lw $t0 -192($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_33 + lw $t0 0($fp) + lw $t1 -164($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_34 + label_31: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_34 + label_32: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + move $a0 $t0 + lw $t0 -196($fp) + move $a1 $t0 + jal equal_str + sw $v0 -172($fp) + j label_34 + label_33: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_34 + label_34: + lw $t0 -172($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -204($fp) + lw $t0 -204($fp) + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_47 la $t0 data_20 - sw $t0 -116($fp) - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -116($fp) + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -112($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -140($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -140($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -136($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -136($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -132($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -132($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -128($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_35 - lw $t0 -140($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_36 - lw $t0 -140($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_37 - lw $t0 0($fp) - lw $t1 -112($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_38 - label_35: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_38 - label_36: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - move $a0 $t0 - lw $t0 -144($fp) - move $a1 $t0 - jal equal_str - sw $v0 -120($fp) - j label_38 - label_37: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_38 - label_38: - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -156($fp) - bne $t0 $zero label_45 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -128($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_35 + lw $t0 -140($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_36 + lw $t0 -140($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_37 + lw $t0 0($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_38 + label_35: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_38 + label_36: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + move $a0 $t0 + lw $t0 -144($fp) + move $a1 $t0 + jal equal_str + sw $v0 -120($fp) + j label_38 + label_37: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_38 + label_38: + lw $t0 -120($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -156($fp) + bne $t0 $zero label_45 la $t0 data_21 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -88($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -88($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -84($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -84($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -80($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -80($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -76($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_39 - lw $t0 -88($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_40 - lw $t0 -88($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_41 - lw $t0 0($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_42 - label_39: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_42 - label_40: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - move $a0 $t0 - lw $t0 -92($fp) - move $a1 $t0 - jal equal_str - sw $v0 -68($fp) - j label_42 - label_41: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_42 - label_42: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_43 - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -56($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -108($fp) - j label_44 - label_43: - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -108($fp) - label_44: - lw $t0 -108($fp) - sw $t0 -160($fp) - j label_46 - label_45: - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -160($fp) - label_46: - lw $t0 -160($fp) - sw $t0 -212($fp) - j label_48 - label_47: - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -212($fp) - label_48: - lw $t0 -212($fp) - sw $t0 -264($fp) - j label_50 - label_49: - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -264($fp) - label_50: - lw $t0 -264($fp) - sw $t0 -316($fp) - j label_52 - label_51: - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -316($fp) - label_52: - lw $t0 -316($fp) - sw $t0 -368($fp) - j label_54 - label_53: - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -368($fp) - label_54: - lw $t0 -368($fp) - sw $t0 -420($fp) - j label_56 - label_55: - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -420($fp) - label_56: - lw $t0 -420($fp) - sw $t0 -472($fp) - j label_58 - label_57: - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -472($fp) - label_58: - lw $t0 -472($fp) - sw $t0 -524($fp) - j label_60 - label_59: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -524($fp) - label_60: - lw $t0 -524($fp) - sw $t0 -576($fp) - j label_62 - label_61: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -576($fp) - label_62: - lw $v0 -576($fp) - addi $sp $sp 568 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -76($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_39 + lw $t0 -88($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_40 + lw $t0 -88($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_41 + lw $t0 0($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_42 + label_39: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_42 + label_40: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + move $a0 $t0 + lw $t0 -92($fp) + move $a1 $t0 + jal equal_str + sw $v0 -68($fp) + j label_42 + label_41: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_42 + label_42: + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_43 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -56($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + sw $t0 -108($fp) + j label_44 + label_43: + li $t0 9 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + sw $t0 -108($fp) + label_44: + lw $t0 -108($fp) + sw $t0 -160($fp) + j label_46 + label_45: + li $t0 8 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -160($fp) + label_46: + lw $t0 -160($fp) + sw $t0 -212($fp) + j label_48 + label_47: + li $t0 7 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -212($fp) + label_48: + lw $t0 -212($fp) + sw $t0 -264($fp) + j label_50 + label_49: + li $t0 6 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -264($fp) + label_50: + lw $t0 -264($fp) + sw $t0 -316($fp) + j label_52 + label_51: + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -316($fp) + label_52: + lw $t0 -316($fp) + sw $t0 -368($fp) + j label_54 + label_53: + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -368($fp) + label_54: + lw $t0 -368($fp) + sw $t0 -420($fp) + j label_56 + label_55: + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -420($fp) + label_56: + lw $t0 -420($fp) + sw $t0 -472($fp) + j label_58 + label_57: + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -472($fp) + label_58: + lw $t0 -472($fp) + sw $t0 -524($fp) + j label_60 + label_59: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -524($fp) + label_60: + lw $t0 -524($fp) + sw $t0 -576($fp) + j label_62 + label_61: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -576($fp) + label_62: + lw $v0 -576($fp) + addi $sp $sp 568 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_i2c_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -572 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -536($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -572 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -536($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -560($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -560($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -556($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -556($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -552($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -552($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -548($fp) - lw $t0 -560($fp) - lw $t1 -556($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_63 - lw $t0 -560($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_64 - lw $t0 -560($fp) - lw $t1 -548($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_65 - lw $t0 0($fp) - lw $t1 -536($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_66 - label_63: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -536($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_66 - label_64: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -536($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - move $a0 $t0 - lw $t0 -564($fp) - move $a1 $t0 - jal equal_str - sw $v0 -540($fp) - j label_66 - label_65: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -536($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_66 - label_66: - lw $t0 -540($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -572($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -576($fp) - lw $t0 -576($fp) - bne $t0 $zero label_121 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -488($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -548($fp) + lw $t0 -560($fp) + lw $t1 -556($fp) + seq $t0 $t0 $t1 + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_63 + lw $t0 -560($fp) + lw $t1 -552($fp) + seq $t0 $t0 $t1 + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_64 + lw $t0 -560($fp) + lw $t1 -548($fp) + seq $t0 $t0 $t1 + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_65 + lw $t0 0($fp) + lw $t1 -536($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + j label_66 + label_63: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -568($fp) + lw $t0 -536($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -568($fp) + lw $t1 -564($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + j label_66 + label_64: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -568($fp) + lw $t0 -536($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -568($fp) + move $a0 $t0 + lw $t0 -564($fp) + move $a1 $t0 + jal equal_str + sw $v0 -540($fp) + j label_66 + label_65: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -568($fp) + lw $t0 -536($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -568($fp) + lw $t1 -564($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + j label_66 + label_66: + lw $t0 -540($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -572($fp) + lw $t0 -572($fp) + lw $t1 12($t0) + sw $t1 -576($fp) + lw $t0 -576($fp) + bne $t0 $zero label_121 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -488($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -512($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -512($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -508($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -508($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -504($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -504($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -500($fp) - lw $t0 -512($fp) - lw $t1 -508($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - lw $t0 -496($fp) - bne $t0 $zero label_67 - lw $t0 -512($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - lw $t0 -496($fp) - bne $t0 $zero label_68 - lw $t0 -512($fp) - lw $t1 -500($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - lw $t0 -496($fp) - bne $t0 $zero label_69 - lw $t0 0($fp) - lw $t1 -488($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - j label_70 - label_67: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -488($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -520($fp) - lw $t1 -516($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - j label_70 - label_68: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -488($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -520($fp) - move $a0 $t0 - lw $t0 -516($fp) - move $a1 $t0 - jal equal_str - sw $v0 -492($fp) - j label_70 - label_69: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -488($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -520($fp) - lw $t1 -516($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - j label_70 - label_70: - lw $t0 -492($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -524($fp) - lw $t0 -524($fp) - lw $t1 12($t0) - sw $t1 -528($fp) - lw $t0 -528($fp) - bne $t0 $zero label_119 - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -440($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -500($fp) + lw $t0 -512($fp) + lw $t1 -508($fp) + seq $t0 $t0 $t1 + sw $t0 -496($fp) + lw $t0 -496($fp) + bne $t0 $zero label_67 + lw $t0 -512($fp) + lw $t1 -504($fp) + seq $t0 $t0 $t1 + sw $t0 -496($fp) + lw $t0 -496($fp) + bne $t0 $zero label_68 + lw $t0 -512($fp) + lw $t1 -500($fp) + seq $t0 $t0 $t1 + sw $t0 -496($fp) + lw $t0 -496($fp) + bne $t0 $zero label_69 + lw $t0 0($fp) + lw $t1 -488($fp) + seq $t0 $t0 $t1 + sw $t0 -492($fp) + j label_70 + label_67: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -488($fp) + lw $t1 12($t0) + sw $t1 -516($fp) + lw $t0 -520($fp) + lw $t1 -516($fp) + seq $t0 $t0 $t1 + sw $t0 -492($fp) + j label_70 + label_68: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -488($fp) + lw $t1 12($t0) + sw $t1 -516($fp) + lw $t0 -520($fp) + move $a0 $t0 + lw $t0 -516($fp) + move $a1 $t0 + jal equal_str + sw $v0 -492($fp) + j label_70 + label_69: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -488($fp) + lw $t1 12($t0) + sw $t1 -516($fp) + lw $t0 -520($fp) + lw $t1 -516($fp) + seq $t0 $t0 $t1 + sw $t0 -492($fp) + j label_70 + label_70: + lw $t0 -492($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -524($fp) + lw $t0 -524($fp) + lw $t1 12($t0) + sw $t1 -528($fp) + lw $t0 -528($fp) + bne $t0 $zero label_119 + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -440($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -464($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -464($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -460($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -460($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -456($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -456($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -452($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_71 - lw $t0 -464($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_72 - lw $t0 -464($fp) - lw $t1 -452($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_73 - lw $t0 0($fp) - lw $t1 -440($fp) - seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_74 - label_71: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -440($fp) - lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - lw $t1 -468($fp) - seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_74 - label_72: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -440($fp) - lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - move $a0 $t0 - lw $t0 -468($fp) - move $a1 $t0 - jal equal_str - sw $v0 -444($fp) - j label_74 - label_73: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -440($fp) - lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - lw $t1 -468($fp) - seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_74 - label_74: - lw $t0 -444($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -476($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -480($fp) - lw $t0 -480($fp) - bne $t0 $zero label_117 - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -392($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -452($fp) + lw $t0 -464($fp) + lw $t1 -460($fp) + seq $t0 $t0 $t1 + sw $t0 -448($fp) + lw $t0 -448($fp) + bne $t0 $zero label_71 + lw $t0 -464($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -448($fp) + lw $t0 -448($fp) + bne $t0 $zero label_72 + lw $t0 -464($fp) + lw $t1 -452($fp) + seq $t0 $t0 $t1 + sw $t0 -448($fp) + lw $t0 -448($fp) + bne $t0 $zero label_73 + lw $t0 0($fp) + lw $t1 -440($fp) + seq $t0 $t0 $t1 + sw $t0 -444($fp) + j label_74 + label_71: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -472($fp) + lw $t0 -440($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -472($fp) + lw $t1 -468($fp) + seq $t0 $t0 $t1 + sw $t0 -444($fp) + j label_74 + label_72: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -472($fp) + lw $t0 -440($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -472($fp) + move $a0 $t0 + lw $t0 -468($fp) + move $a1 $t0 + jal equal_str + sw $v0 -444($fp) + j label_74 + label_73: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -472($fp) + lw $t0 -440($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -472($fp) + lw $t1 -468($fp) + seq $t0 $t0 $t1 + sw $t0 -444($fp) + j label_74 + label_74: + lw $t0 -444($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -476($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -480($fp) + lw $t0 -480($fp) + bne $t0 $zero label_117 + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -392($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -416($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -416($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -412($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -412($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -408($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -408($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -404($fp) - lw $t0 -416($fp) - lw $t1 -412($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - lw $t0 -400($fp) - bne $t0 $zero label_75 - lw $t0 -416($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - lw $t0 -400($fp) - bne $t0 $zero label_76 - lw $t0 -416($fp) - lw $t1 -404($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - lw $t0 -400($fp) - bne $t0 $zero label_77 - lw $t0 0($fp) - lw $t1 -392($fp) - seq $t0 $t0 $t1 - sw $t0 -396($fp) - j label_78 - label_75: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -392($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -424($fp) - lw $t1 -420($fp) - seq $t0 $t0 $t1 - sw $t0 -396($fp) - j label_78 - label_76: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -392($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -424($fp) - move $a0 $t0 - lw $t0 -420($fp) - move $a1 $t0 - jal equal_str - sw $v0 -396($fp) - j label_78 - label_77: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -392($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -424($fp) - lw $t1 -420($fp) - seq $t0 $t0 $t1 - sw $t0 -396($fp) - j label_78 - label_78: - lw $t0 -396($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -432($fp) - lw $t0 -432($fp) - bne $t0 $zero label_115 - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -344($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -404($fp) + lw $t0 -416($fp) + lw $t1 -412($fp) + seq $t0 $t0 $t1 + sw $t0 -400($fp) + lw $t0 -400($fp) + bne $t0 $zero label_75 + lw $t0 -416($fp) + lw $t1 -408($fp) + seq $t0 $t0 $t1 + sw $t0 -400($fp) + lw $t0 -400($fp) + bne $t0 $zero label_76 + lw $t0 -416($fp) + lw $t1 -404($fp) + seq $t0 $t0 $t1 + sw $t0 -400($fp) + lw $t0 -400($fp) + bne $t0 $zero label_77 + lw $t0 0($fp) + lw $t1 -392($fp) + seq $t0 $t0 $t1 + sw $t0 -396($fp) + j label_78 + label_75: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -424($fp) + lw $t0 -392($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -424($fp) + lw $t1 -420($fp) + seq $t0 $t0 $t1 + sw $t0 -396($fp) + j label_78 + label_76: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -424($fp) + lw $t0 -392($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -424($fp) + move $a0 $t0 + lw $t0 -420($fp) + move $a1 $t0 + jal equal_str + sw $v0 -396($fp) + j label_78 + label_77: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -424($fp) + lw $t0 -392($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -424($fp) + lw $t1 -420($fp) + seq $t0 $t0 $t1 + sw $t0 -396($fp) + j label_78 + label_78: + lw $t0 -396($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -428($fp) + lw $t0 -428($fp) + lw $t1 12($t0) + sw $t1 -432($fp) + lw $t0 -432($fp) + bne $t0 $zero label_115 + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -344($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -368($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -368($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -364($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -364($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -360($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -360($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -356($fp) - lw $t0 -368($fp) - lw $t1 -364($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_79 - lw $t0 -368($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_80 - lw $t0 -368($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_81 - lw $t0 0($fp) - lw $t1 -344($fp) - seq $t0 $t0 $t1 - sw $t0 -348($fp) - j label_82 - label_79: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -344($fp) - lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -376($fp) - lw $t1 -372($fp) - seq $t0 $t0 $t1 - sw $t0 -348($fp) - j label_82 - label_80: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -344($fp) - lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -376($fp) - move $a0 $t0 - lw $t0 -372($fp) - move $a1 $t0 - jal equal_str - sw $v0 -348($fp) - j label_82 - label_81: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -344($fp) - lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -376($fp) - lw $t1 -372($fp) - seq $t0 $t0 $t1 - sw $t0 -348($fp) - j label_82 - label_82: - lw $t0 -348($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -380($fp) - lw $t0 -380($fp) - lw $t1 12($t0) - sw $t1 -384($fp) - lw $t0 -384($fp) - bne $t0 $zero label_113 - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -296($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -356($fp) + lw $t0 -368($fp) + lw $t1 -364($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_79 + lw $t0 -368($fp) + lw $t1 -360($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_80 + lw $t0 -368($fp) + lw $t1 -356($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_81 + lw $t0 0($fp) + lw $t1 -344($fp) + seq $t0 $t0 $t1 + sw $t0 -348($fp) + j label_82 + label_79: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -344($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -376($fp) + lw $t1 -372($fp) + seq $t0 $t0 $t1 + sw $t0 -348($fp) + j label_82 + label_80: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -344($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -376($fp) + move $a0 $t0 + lw $t0 -372($fp) + move $a1 $t0 + jal equal_str + sw $v0 -348($fp) + j label_82 + label_81: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -344($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -376($fp) + lw $t1 -372($fp) + seq $t0 $t0 $t1 + sw $t0 -348($fp) + j label_82 + label_82: + lw $t0 -348($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -380($fp) + lw $t0 -380($fp) + lw $t1 12($t0) + sw $t1 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_113 + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -296($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -320($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -320($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -316($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -316($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -312($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -312($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -308($fp) - lw $t0 -320($fp) - lw $t1 -316($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_83 - lw $t0 -320($fp) - lw $t1 -312($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_84 - lw $t0 -320($fp) - lw $t1 -308($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_85 - lw $t0 0($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_86 - label_83: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -296($fp) - lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_86 - label_84: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -296($fp) - lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - move $a0 $t0 - lw $t0 -324($fp) - move $a1 $t0 - jal equal_str - sw $v0 -300($fp) - j label_86 - label_85: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -296($fp) - lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_86 - label_86: - lw $t0 -300($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -332($fp) - lw $t0 -332($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_111 - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -248($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -308($fp) + lw $t0 -320($fp) + lw $t1 -316($fp) + seq $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_83 + lw $t0 -320($fp) + lw $t1 -312($fp) + seq $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_84 + lw $t0 -320($fp) + lw $t1 -308($fp) + seq $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_85 + lw $t0 0($fp) + lw $t1 -296($fp) + seq $t0 $t0 $t1 + sw $t0 -300($fp) + j label_86 + label_83: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -328($fp) + lw $t0 -296($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -328($fp) + lw $t1 -324($fp) + seq $t0 $t0 $t1 + sw $t0 -300($fp) + j label_86 + label_84: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -328($fp) + lw $t0 -296($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -328($fp) + move $a0 $t0 + lw $t0 -324($fp) + move $a1 $t0 + jal equal_str + sw $v0 -300($fp) + j label_86 + label_85: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -328($fp) + lw $t0 -296($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -328($fp) + lw $t1 -324($fp) + seq $t0 $t0 $t1 + sw $t0 -300($fp) + j label_86 + label_86: + lw $t0 -300($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -332($fp) + lw $t0 -332($fp) + lw $t1 12($t0) + sw $t1 -336($fp) + lw $t0 -336($fp) + bne $t0 $zero label_111 + li $t0 6 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -248($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -272($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -272($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -268($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -268($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -264($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -264($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -260($fp) - lw $t0 -272($fp) - lw $t1 -268($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_87 - lw $t0 -272($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_88 - lw $t0 -272($fp) - lw $t1 -260($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_89 - lw $t0 0($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -252($fp) - j label_90 - label_87: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -248($fp) - lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -280($fp) - lw $t1 -276($fp) - seq $t0 $t0 $t1 - sw $t0 -252($fp) - j label_90 - label_88: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -248($fp) - lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -280($fp) - move $a0 $t0 - lw $t0 -276($fp) - move $a1 $t0 - jal equal_str - sw $v0 -252($fp) - j label_90 - label_89: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -248($fp) - lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -280($fp) - lw $t1 -276($fp) - seq $t0 $t0 $t1 - sw $t0 -252($fp) - j label_90 - label_90: - lw $t0 -252($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -284($fp) - lw $t0 -284($fp) - lw $t1 12($t0) - sw $t1 -288($fp) - lw $t0 -288($fp) - bne $t0 $zero label_109 - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -200($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -260($fp) + lw $t0 -272($fp) + lw $t1 -268($fp) + seq $t0 $t0 $t1 + sw $t0 -256($fp) + lw $t0 -256($fp) + bne $t0 $zero label_87 + lw $t0 -272($fp) + lw $t1 -264($fp) + seq $t0 $t0 $t1 + sw $t0 -256($fp) + lw $t0 -256($fp) + bne $t0 $zero label_88 + lw $t0 -272($fp) + lw $t1 -260($fp) + seq $t0 $t0 $t1 + sw $t0 -256($fp) + lw $t0 -256($fp) + bne $t0 $zero label_89 + lw $t0 0($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -252($fp) + j label_90 + label_87: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + lw $t0 -248($fp) + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t0 -280($fp) + lw $t1 -276($fp) + seq $t0 $t0 $t1 + sw $t0 -252($fp) + j label_90 + label_88: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + lw $t0 -248($fp) + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t0 -280($fp) + move $a0 $t0 + lw $t0 -276($fp) + move $a1 $t0 + jal equal_str + sw $v0 -252($fp) + j label_90 + label_89: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + lw $t0 -248($fp) + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t0 -280($fp) + lw $t1 -276($fp) + seq $t0 $t0 $t1 + sw $t0 -252($fp) + j label_90 + label_90: + lw $t0 -252($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -284($fp) + lw $t0 -284($fp) + lw $t1 12($t0) + sw $t1 -288($fp) + lw $t0 -288($fp) + bne $t0 $zero label_109 + li $t0 7 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -200($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -224($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -224($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -220($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -220($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -216($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -216($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -212($fp) - lw $t0 -224($fp) - lw $t1 -220($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_91 - lw $t0 -224($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_92 - lw $t0 -224($fp) - lw $t1 -212($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_93 - lw $t0 0($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -204($fp) - j label_94 - label_91: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -232($fp) - lw $t1 -228($fp) - seq $t0 $t0 $t1 - sw $t0 -204($fp) - j label_94 - label_92: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -232($fp) - move $a0 $t0 - lw $t0 -228($fp) - move $a1 $t0 - jal equal_str - sw $v0 -204($fp) - j label_94 - label_93: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -232($fp) - lw $t1 -228($fp) - seq $t0 $t0 $t1 - sw $t0 -204($fp) - j label_94 - label_94: - lw $t0 -204($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -236($fp) - lw $t0 -236($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -240($fp) - bne $t0 $zero label_107 - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -212($fp) + lw $t0 -224($fp) + lw $t1 -220($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_91 + lw $t0 -224($fp) + lw $t1 -216($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_92 + lw $t0 -224($fp) + lw $t1 -212($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_93 + lw $t0 0($fp) + lw $t1 -200($fp) + seq $t0 $t0 $t1 + sw $t0 -204($fp) + j label_94 + label_91: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -200($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + lw $t0 -232($fp) + lw $t1 -228($fp) + seq $t0 $t0 $t1 + sw $t0 -204($fp) + j label_94 + label_92: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -200($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + lw $t0 -232($fp) + move $a0 $t0 + lw $t0 -228($fp) + move $a1 $t0 + jal equal_str + sw $v0 -204($fp) + j label_94 + label_93: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -200($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + lw $t0 -232($fp) + lw $t1 -228($fp) + seq $t0 $t0 $t1 + sw $t0 -204($fp) + j label_94 + label_94: + lw $t0 -204($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -236($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -240($fp) + bne $t0 $zero label_107 + li $t0 8 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -176($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -176($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -172($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -172($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -168($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -168($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -164($fp) - lw $t0 -176($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_95 - lw $t0 -176($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_96 - lw $t0 -176($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_97 - lw $t0 0($fp) - lw $t1 -152($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_98 - label_95: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_98 - label_96: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - move $a0 $t0 - lw $t0 -180($fp) - move $a1 $t0 - jal equal_str - sw $v0 -156($fp) - j label_98 - label_97: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_98 - label_98: - lw $t0 -156($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -192($fp) - bne $t0 $zero label_105 - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -164($fp) + lw $t0 -176($fp) + lw $t1 -172($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_95 + lw $t0 -176($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_96 + lw $t0 -176($fp) + lw $t1 -164($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_97 + lw $t0 0($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -156($fp) + j label_98 + label_95: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -156($fp) + j label_98 + label_96: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -184($fp) + move $a0 $t0 + lw $t0 -180($fp) + move $a1 $t0 + jal equal_str + sw $v0 -156($fp) + j label_98 + label_97: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -156($fp) + j label_98 + label_98: + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -188($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -192($fp) + lw $t0 -192($fp) + bne $t0 $zero label_105 + li $t0 9 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -128($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -128($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -124($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -124($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -120($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -120($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -128($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_99 - lw $t0 -128($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_100 - lw $t0 -128($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_101 - lw $t0 0($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_102 - label_99: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_102 - label_100: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - move $a0 $t0 - lw $t0 -132($fp) - move $a1 $t0 - jal equal_str - sw $v0 -108($fp) - j label_102 - label_101: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_102 - label_102: - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_103 - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -100($fp) + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -116($fp) + lw $t0 -128($fp) + lw $t1 -124($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_99 + lw $t0 -128($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_100 + lw $t0 -128($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_101 + lw $t0 0($fp) + lw $t1 -104($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_102 + label_99: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_102 + label_100: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + move $a0 $t0 + lw $t0 -132($fp) + move $a1 $t0 + jal equal_str + sw $v0 -108($fp) + j label_102 + label_101: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_102 + label_102: + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -140($fp) + lw $t0 -140($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_103 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -100($fp) la $t0 data_22 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -148($fp) - j label_104 - label_103: + sw $t0 -96($fp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + sw $t0 -148($fp) + j label_104 + label_103: la $t0 data_23 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -148($fp) - label_104: - lw $t0 -148($fp) - sw $t0 -196($fp) - j label_106 - label_105: + sw $t0 -88($fp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + sw $t0 -148($fp) + label_104: + lw $t0 -148($fp) + sw $t0 -196($fp) + j label_106 + label_105: la $t0 data_24 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -196($fp) - label_106: - lw $t0 -196($fp) - sw $t0 -244($fp) - j label_108 - label_107: + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + sw $t0 -196($fp) + label_106: + lw $t0 -196($fp) + sw $t0 -244($fp) + j label_108 + label_107: la $t0 data_25 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -244($fp) - label_108: - lw $t0 -244($fp) - sw $t0 -292($fp) - j label_110 - label_109: + sw $t0 -72($fp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -244($fp) + label_108: + lw $t0 -244($fp) + sw $t0 -292($fp) + j label_110 + label_109: la $t0 data_26 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -292($fp) - label_110: - lw $t0 -292($fp) - sw $t0 -340($fp) - j label_112 - label_111: + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 -60($fp) + sw $t0 -292($fp) + label_110: + lw $t0 -292($fp) + sw $t0 -340($fp) + j label_112 + label_111: la $t0 data_27 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -340($fp) - label_112: - lw $t0 -340($fp) - sw $t0 -388($fp) - j label_114 - label_113: + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + sw $t0 -340($fp) + label_112: + lw $t0 -340($fp) + sw $t0 -388($fp) + j label_114 + label_113: la $t0 data_28 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -388($fp) - label_114: - lw $t0 -388($fp) - sw $t0 -436($fp) - j label_116 - label_115: + sw $t0 -48($fp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -388($fp) + label_114: + lw $t0 -388($fp) + sw $t0 -436($fp) + j label_116 + label_115: la $t0 data_29 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -436($fp) - label_116: - lw $t0 -436($fp) - sw $t0 -484($fp) - j label_118 - label_117: + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -436($fp) + label_116: + lw $t0 -436($fp) + sw $t0 -484($fp) + j label_118 + label_117: la $t0 data_30 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -484($fp) - label_118: - lw $t0 -484($fp) - sw $t0 -532($fp) - j label_120 - label_119: + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -484($fp) + label_118: + lw $t0 -484($fp) + sw $t0 -532($fp) + j label_120 + label_119: la $t0 data_31 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -532($fp) - label_120: - lw $t0 -532($fp) - sw $t0 -580($fp) - j label_122 - label_121: + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -532($fp) + label_120: + lw $t0 -532($fp) + sw $t0 -580($fp) + j label_122 + label_121: la $t0 data_32 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -580($fp) - label_122: - lw $v0 -580($fp) - addi $sp $sp 572 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -580($fp) + label_122: + lw $v0 -580($fp) + addi $sp $sp 572 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_a2i_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -300 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -264($fp) - lw $t0 -264($fp) - bne $t0 $zero label_123 - j label_124 - label_123: - li $v0 4 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -300 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -264($fp) + lw $t0 -264($fp) + bne $t0 $zero label_123 + j label_124 + label_123: + li $v0 4 la $a0 data_33 - syscall - li $v0 10 - syscall - label_124: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -260($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -260($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + syscall + li $v0 10 + syscall + label_124: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -260($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -256($fp) + lw $t0 -260($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -288($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -288($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -284($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -284($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -280($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -280($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -276($fp) - lw $t0 -288($fp) - lw $t1 -284($fp) - seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_125 - lw $t0 -288($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_126 - lw $t0 -288($fp) - lw $t1 -276($fp) - seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_127 - lw $t0 -260($fp) - lw $t1 -256($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_128 - label_125: - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_128 - label_126: - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - move $a0 $t0 - lw $t0 -292($fp) - move $a1 $t0 - jal equal_str - sw $v0 -268($fp) - j label_128 - label_127: - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_128 - label_128: - lw $t0 -268($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_153 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -208($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -200($fp) - lw $t0 -200($fp) - bne $t0 $zero label_129 - j label_130 - label_129: - li $v0 4 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -276($fp) + lw $t0 -288($fp) + lw $t1 -284($fp) + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_125 + lw $t0 -288($fp) + lw $t1 -280($fp) + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_126 + lw $t0 -288($fp) + lw $t1 -276($fp) + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_127 + lw $t0 -260($fp) + lw $t1 -256($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + j label_128 + label_125: + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -296($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + j label_128 + label_126: + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -296($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -296($fp) + move $a0 $t0 + lw $t0 -292($fp) + move $a1 $t0 + jal equal_str + sw $v0 -268($fp) + j label_128 + label_127: + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -296($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + j label_128 + label_128: + lw $t0 -268($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -300($fp) + lw $t0 -300($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_153 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -208($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -204($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -200($fp) + lw $t0 -200($fp) + bne $t0 $zero label_129 + j label_130 + label_129: + li $v0 4 la $a0 data_34 - syscall - li $v0 10 - syscall - label_130: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -208($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -204($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -196($fp) + syscall + li $v0 10 + syscall + label_130: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -208($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -204($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -196($fp) la $t0 data_35 - sw $t0 -192($fp) - lw $t0 -192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -196($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -192($fp) + lw $t0 -192($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -188($fp) + lw $t0 -196($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -232($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -232($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -228($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -228($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -224($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -224($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -220($fp) - lw $t0 -232($fp) - lw $t1 -228($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_131 - lw $t0 -232($fp) - lw $t1 -224($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_132 - lw $t0 -232($fp) - lw $t1 -220($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_133 - lw $t0 -196($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - j label_134 - label_131: - lw $t0 -196($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -240($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - j label_134 - label_132: - lw $t0 -196($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -240($fp) - move $a0 $t0 - lw $t0 -236($fp) - move $a1 $t0 - jal equal_str - sw $v0 -212($fp) - j label_134 - label_133: - lw $t0 -196($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -240($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - j label_134 - label_134: - lw $t0 -212($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -244($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -248($fp) - bne $t0 $zero label_147 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -140($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_135 - j label_136 - label_135: - li $v0 4 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -220($fp) + lw $t0 -232($fp) + lw $t1 -228($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_131 + lw $t0 -232($fp) + lw $t1 -224($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_132 + lw $t0 -232($fp) + lw $t1 -220($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_133 + lw $t0 -196($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + j label_134 + label_131: + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -240($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + j label_134 + label_132: + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -240($fp) + move $a0 $t0 + lw $t0 -236($fp) + move $a1 $t0 + jal equal_str + sw $v0 -212($fp) + j label_134 + label_133: + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -240($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + j label_134 + label_134: + lw $t0 -212($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -244($fp) + lw $t0 -244($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -248($fp) + bne $t0 $zero label_147 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -140($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -136($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_135 + j label_136 + label_135: + li $v0 4 la $a0 data_36 - syscall - li $v0 10 - syscall - label_136: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -128($fp) + syscall + li $v0 10 + syscall + label_136: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -140($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -136($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -128($fp) la $t0 data_37 - sw $t0 -124($fp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -128($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -124($fp) + lw $t0 -124($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -120($fp) + lw $t0 -128($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -164($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -164($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -160($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -160($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -156($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -156($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -152($fp) - lw $t0 -164($fp) - lw $t1 -160($fp) - seq $t0 $t0 $t1 - sw $t0 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_137 - lw $t0 -164($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_138 - lw $t0 -164($fp) - lw $t1 -152($fp) - seq $t0 $t0 $t1 - sw $t0 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_139 - lw $t0 -128($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -144($fp) - j label_140 - label_137: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -172($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -144($fp) - j label_140 - label_138: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -172($fp) - move $a0 $t0 - lw $t0 -168($fp) - move $a1 $t0 - jal equal_str - sw $v0 -144($fp) - j label_140 - label_139: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -172($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -144($fp) - j label_140 - label_140: - lw $t0 -144($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -176($fp) - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_141 - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -116($fp) - lw $t0 -116($fp) - sw $t0 -184($fp) - j label_146 - label_141: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_142 - j label_143 - label_142: - li $v0 4 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -152($fp) + lw $t0 -164($fp) + lw $t1 -160($fp) + seq $t0 $t0 $t1 + sw $t0 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_137 + lw $t0 -164($fp) + lw $t1 -156($fp) + seq $t0 $t0 $t1 + sw $t0 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_138 + lw $t0 -164($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_139 + lw $t0 -128($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -144($fp) + j label_140 + label_137: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -172($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -144($fp) + j label_140 + label_138: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -172($fp) + move $a0 $t0 + lw $t0 -168($fp) + move $a1 $t0 + jal equal_str + sw $v0 -144($fp) + j label_140 + label_139: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -172($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -144($fp) + j label_140 + label_140: + lw $t0 -144($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -176($fp) + lw $t0 -176($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -180($fp) + bne $t0 $zero label_141 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -116($fp) + lw $t0 -116($fp) + sw $t0 -184($fp) + j label_146 + label_141: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -108($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_142 + j label_143 + label_142: + li $v0 4 la $a0 data_38 - syscall - li $v0 10 - syscall - label_143: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - sub $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_144 - j label_145 - label_144: - li $v0 4 + syscall + li $v0 10 + syscall + label_143: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + sub $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_144 + j label_145 + label_144: + li $v0 4 la $a0 data_39 - syscall - li $v0 10 - syscall - label_145: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -72($fp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -184($fp) - label_146: - lw $t0 -184($fp) - sw $t0 -252($fp) - j label_152 - label_147: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_148 - j label_149 - label_148: - li $v0 4 + syscall + li $v0 10 + syscall + label_145: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -72($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -184($fp) + label_146: + lw $t0 -184($fp) + sw $t0 -252($fp) + j label_152 + label_147: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_148 + j label_149 + label_148: + li $v0 4 la $a0 data_40 - syscall - li $v0 10 - syscall - label_149: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - sub $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_150 - j label_151 - label_150: - li $v0 4 + syscall + li $v0 10 + syscall + label_149: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + sub $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_150 + j label_151 + label_150: + li $v0 4 la $a0 data_41 - syscall - li $v0 10 - syscall - label_151: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -16($fp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -252($fp) - label_152: - lw $t0 -252($fp) - sw $t0 -308($fp) - j label_154 - label_153: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -308($fp) - label_154: - lw $v0 -308($fp) - addi $sp $sp 300 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + syscall + li $v0 10 + syscall + label_151: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -16($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -64($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -60($fp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -252($fp) + label_152: + lw $t0 -252($fp) + sw $t0 -308($fp) + j label_154 + label_153: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -308($fp) + label_154: + lw $v0 -308($fp) + addi $sp $sp 300 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_a2i_aux_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -120 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -124($fp) - sw $t0 -128($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_155 - j label_156 - label_155: - li $v0 4 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -120 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -124($fp) + lw $t0 -124($fp) + sw $t0 -128($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_155 + j label_156 + label_155: + li $v0 4 la $a0 data_42 - syscall - li $v0 10 - syscall - label_156: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -120($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - sw $t0 -108($fp) - label_157: - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - slt $t1 $t0 $t1 - sw $t1 -84($fp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_158 - j label_161 - label_158: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - mul $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_159 - j label_160 - label_159: - li $v0 4 + syscall + li $v0 10 + syscall + label_156: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -120($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 -104($fp) + sw $t0 -108($fp) + label_157: + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + slt $t1 $t0 $t1 + sw $t1 -84($fp) + lw $t0 -84($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -96($fp) + lw $t0 -96($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_158 + j label_161 + label_158: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + li $t0 10 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + mul $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_159 + j label_160 + label_159: + li $v0 4 la $a0 data_43 - syscall - li $v0 10 - syscall - label_160: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -32($fp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - add $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -128($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -108($fp) - j label_157 - label_161: - lw $v0 -128($fp) - addi $sp $sp 120 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + syscall + li $v0 10 + syscall + label_160: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -32($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -44($fp) + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + add $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + sw $t0 -128($fp) + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -108($fp) + j label_157 + label_161: + lw $v0 -128($fp) + addi $sp $sp 120 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_i2a_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -140 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -140 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -128($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -128($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -124($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -124($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -120($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -120($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -128($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_162 - lw $t0 -128($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_163 - lw $t0 -128($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_164 - lw $t0 0($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_165 - label_162: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_165 - label_163: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - move $a0 $t0 - lw $t0 -132($fp) - move $a1 $t0 - jal equal_str - sw $v0 -108($fp) - j label_165 - label_164: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_165 - label_165: - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_170 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) - slt $t1 $t0 $t1 - sw $t1 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_168 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -48($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - mul $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -72($fp) + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -116($fp) + lw $t0 -128($fp) + lw $t1 -124($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_162 + lw $t0 -128($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_163 + lw $t0 -128($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_164 + lw $t0 0($fp) + lw $t1 -104($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_165 + label_162: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_165 + label_163: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + move $a0 $t0 + lw $t0 -132($fp) + move $a1 $t0 + jal equal_str + sw $v0 -108($fp) + j label_165 + label_164: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_165 + label_165: + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -140($fp) + lw $t0 -140($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_170 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + slt $t1 $t0 $t1 + sw $t1 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_168 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -48($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) + mul $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -72($fp) la $t0 data_44 - sw $t0 -36($fp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_166 - j label_167 - label_166: - li $v0 4 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_166 + j label_167 + label_166: + li $v0 4 la $a0 data_45 - syscall - li $v0 10 - syscall - label_167: - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -100($fp) - j label_169 - label_168: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -100($fp) - label_169: - lw $t0 -100($fp) - sw $t0 -148($fp) - j label_171 - label_170: + syscall + li $v0 10 + syscall + label_167: + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -100($fp) + j label_169 + label_168: + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -100($fp) + label_169: + lw $t0 -100($fp) + sw $t0 -148($fp) + j label_171 + label_170: la $t0 data_46 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -148($fp) - label_171: - lw $v0 -148($fp) - addi $sp $sp 140 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -148($fp) + label_171: + lw $v0 -148($fp) + addi $sp $sp 140 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_i2a_aux_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -136 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -136 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -124($fp) + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -124($fp) la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -120($fp) + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -120($fp) la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -116($fp) + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -116($fp) la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -112($fp) - lw $t0 -124($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_172 - lw $t0 -124($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_173 - lw $t0 -124($fp) - lw $t1 -112($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_174 - lw $t0 0($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_175 - label_172: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_175 - label_173: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - move $a0 $t0 - lw $t0 -128($fp) - move $a1 $t0 - jal equal_str - sw $v0 -104($fp) - j label_175 - label_174: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_175 - label_175: - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_180 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -76($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_176 - j label_177 - label_176: - li $v0 4 + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -112($fp) + lw $t0 -124($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_172 + lw $t0 -124($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_173 + lw $t0 -124($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_174 + lw $t0 0($fp) + lw $t1 -100($fp) + seq $t0 $t0 $t1 + sw $t0 -104($fp) + j label_175 + label_172: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -104($fp) + j label_175 + label_173: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -132($fp) + move $a0 $t0 + lw $t0 -128($fp) + move $a1 $t0 + jal equal_str + sw $v0 -104($fp) + j label_175 + label_174: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -104($fp) + j label_175 + label_175: + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -136($fp) + lw $t0 -136($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_180 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + li $t0 10 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -72($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -72($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 -76($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_176 + j label_177 + label_176: + li $v0 4 la $a0 data_47 - syscall - li $v0 10 - syscall - label_177: - lw $t0 -88($fp) - lw $t1 -84($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -96($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - mul $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - sub $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -68($fp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_178 - j label_179 - label_178: - li $v0 4 + syscall + li $v0 10 + syscall + label_177: + lw $t0 -88($fp) + lw $t1 -84($fp) + div $t0 $t1 + mflo $t0 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + sw $t0 -96($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -96($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + li $t0 10 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + mul $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + sub $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -68($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + lw $t0 -28($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_178 + j label_179 + label_178: + li $v0 4 la $a0 data_48 - syscall - li $v0 10 - syscall - label_179: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -144($fp) - j label_181 - label_180: + syscall + li $v0 10 + syscall + label_179: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -144($fp) + j label_181 + label_180: la $t0 data_49 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -144($fp) - label_181: - lw $v0 -144($fp) - addi $sp $sp 136 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -144($fp) + label_181: + lw $v0 -144($fp) + addi $sp $sp 136 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 5 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A2I - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_A2I + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -76 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -76 la $t0 data_50 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - jal __init_at_A2I - sw $v0 -72($fp) - lw $t0 -72($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_182 - j label_183 - label_182: - li $v0 4 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -76($fp) + jal __init_at_A2I + sw $v0 -72($fp) + lw $t0 -72($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_182 + j label_183 + label_182: + li $v0 4 la $a0 data_51 - syscall - li $v0 10 - syscall - label_183: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -64($fp) - lw $t0 -64($fp) - sw $t0 -84($fp) - li $t0 678987 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - jal __init_at_A2I - sw $v0 -52($fp) - lw $t0 -52($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_184 - j label_185 - label_184: - li $v0 4 + syscall + li $v0 10 + syscall + label_183: + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -64($fp) + lw $t0 -64($fp) + sw $t0 -84($fp) + li $t0 678987 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + jal __init_at_A2I + sw $v0 -52($fp) + lw $t0 -52($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_184 + j label_185 + label_184: + li $v0 4 la $a0 data_52 - syscall - li $v0 10 - syscall - label_185: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -60($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) + syscall + li $v0 10 + syscall + label_185: + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -60($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -84($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) la $t0 data_53 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -24($fp) + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) la $t0 data_54 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $v0 -20($fp) - addi $sp $sp 76 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $v0 -20($fp) + addi $sp $sp 76 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 6 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 6 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra diff --git a/tests/codegen/basic.cl b/tests/codegen/basic.cl deleted file mode 100755 index f08bdf32d..000000000 --- a/tests/codegen/basic.cl +++ /dev/null @@ -1,19 +0,0 @@ -class Main inherits IO { - a : String <- "Hello world\n"; - main(): IO { - let b : Int <- 0, c : Bool <- false in out_string(a) - }; -}; - ---class Main inherits IO { --- main(): IO { --- out_int(f()) --- }; --- f() : Int { --- if true then --- 1 --- else --- 2 --- fi --- }; ---}; \ 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 000000000..a35f191d7 --- /dev/null +++ b/tests/codegen/book_list.mips @@ -0,0 +1,2695 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Book" +.word 0 +data_7: .asciiz "Article" +.word 0 +data_8: .asciiz "BookList" +.word 0 +data_9: .asciiz "Cons" +.word 0 +data_10: .asciiz "Nil" +.word 0 +data_11: .asciiz "Main" +.word 0 +data_12: .asciiz " +" +.word 0 +data_13: .asciiz "" +.word 0 +data_14: .asciiz "Abort called from class " +.word 0 +data_15: .asciiz "Substring out of range" +.word 0 +data_16: .asciiz "\n" +.word 0 +data_17: .asciiz "title: " +.word 0 +data_18: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_19: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_20: .asciiz "\n" +.word 0 +data_21: .asciiz "author: " +.word 0 +data_22: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_23: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_24: .asciiz "\n" +.word 0 +data_25: .asciiz "periodical: " +.word 0 +data_26: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_27: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_28: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_29: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_30: .asciiz "RuntimeError: void in switch case" +.word 0 +data_31: .asciiz "RuntimeError: Case statement without a match branch" +.word 0 +data_32: .asciiz "- dynamic type was Article -\n" +.word 0 +data_33: .asciiz "- dynamic type was Book -\n" +.word 0 +data_34: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_35: .asciiz "Compilers, Principles, Techniques, and Tools" +.word 0 +data_36: .asciiz "Aho, Sethi, and Ullman" +.word 0 +data_37: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_38: .asciiz "The Top 100 CD_ROMs" +.word 0 +data_39: .asciiz "Ulanoff" +.word 0 +data_40: .asciiz "PC Magazine" +.word 0 +data_41: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_42: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_43: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_44: .asciiz "RuntimeError: Function call in a void instance" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + .word data_8 + .word data_9 + .word data_10 + .word data_11 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + .word type_11_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_initBook_at_Book + .word function_print_at_Book + .word __init_attr_at_Book + .word __init_at_Book + +type_6_prototype: + .word 5 + .word 6 + .word type_6_dispatch + .word 0 + .word 0 + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_initBook_at_Book + .word function_print_at_Article + .word function_initArticle_at_Article + .word __init_attr_at_Article + .word __init_at_Article + +type_7_prototype: + .word 6 + .word 7 + .word type_7_dispatch + .word 0 + .word 0 + .word 0 + .word -1 + + +type_8_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_car_at_BookList + .word function_cdr_at_BookList + .word function_cons_at_BookList + .word function_isNil_at_BookList + .word function_print_list_at_BookList + .word __init_attr_at_BookList + .word __init_at_BookList + +type_8_prototype: + .word 7 + .word 4 + .word type_8_dispatch + .word -1 + + +type_9_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_car_at_Cons + .word function_cdr_at_Cons + .word function_cons_at_BookList + .word function_isNil_at_Cons + .word function_print_list_at_Cons + .word function_init_at_Cons + .word __init_attr_at_Cons + .word __init_at_Cons + +type_9_prototype: + .word 8 + .word 6 + .word type_9_dispatch + .word 0 + .word 0 + .word -1 + + +type_10_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_car_at_BookList + .word function_cdr_at_BookList + .word function_cons_at_BookList + .word function_isNil_at_Nil + .word function_print_list_at_Nil + .word __init_attr_at_Nil + .word __init_at_Nil + +type_10_prototype: + .word 9 + .word 4 + .word type_10_dispatch + .word -1 + + +type_11_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_11_prototype: + .word 10 + .word 5 + .word type_11_dispatch + .word 0 + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_14 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_12 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_15 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Book: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + la $t0 data_13 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 16($t0) + la $t0 data_13 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_initBook_at_Book: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 4($fp) + lw $t1 8($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t0 0($fp) + lw $t1 8($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $v0 8($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_Book: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -80 + la $t0 data_16 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -76($fp) + la $t0 data_17 + sw $t0 -68($fp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -72($fp) + lw $t0 -72($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_4: + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -56($fp) + lw $t0 -56($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_6: + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -48($fp) + la $t0 data_20 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -40($fp) + la $t0 data_21 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + lw $t0 -36($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_8: + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_10: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 80 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Book: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Book + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Article: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Book + addi $sp $sp 4 + sw $v0 -16($fp) + la $t0 data_13 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 20($t0) + lw $v0 0($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_initArticle_at_Article: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + lw $t0 12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 8($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $t0 0($fp) + lw $t1 12($fp) + addi $t1 $t1 20 + sw $t0 0($t1) + lw $v0 12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_Article: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -52 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -48($fp) + la $t0 data_24 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -40($fp) + la $t0 data_25 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + lw $t0 -36($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_11 + j label_12 + label_11: + li $v0 4 + la $a0 data_26 + syscall + li $v0 10 + syscall + label_12: + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 + la $a0 data_27 + syscall + li $v0 10 + syscall + label_14: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 52 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Article: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Article + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_BookList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_BookList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cons_at_BookList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + jal __init_at_Cons + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -24($fp) + lw $t0 -24($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_28 + syscall + li $v0 10 + syscall + label_16: + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_car_at_BookList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + jal __init_at_Book + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cdr_at_BookList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + jal __init_at_BookList + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_list_at_BookList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_BookList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 7 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_BookList + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_BookList + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 12($t0) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 0($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_init_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 4($fp) + lw $t1 8($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t0 0($fp) + lw $t1 8($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $v0 8($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_car_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cdr_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_list_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -76 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_17 + j label_18 + label_17: + li $v0 4 + la $a0 data_29 + syscall + li $v0 10 + syscall + label_18: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 -60($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -72($fp) + lw $t0 -60($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_19 + j label_20 + label_19: + li $v0 4 + la $a0 data_30 + syscall + li $v0 10 + syscall + label_20: + la $t0 types_table + addi $t0 $t0 24 + lw $t0 0($t0) + sw $t0 -52($fp) + lw $t0 -52($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_21 + la $t0 types_table + addi $t0 $t0 20 + lw $t0 0($t0) + sw $t0 -52($fp) + lw $t0 -52($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_22 + li $v0 4 + la $a0 data_31 + syscall + li $v0 10 + syscall + label_21: + lw $t0 -60($fp) + sw $t0 -48($fp) + la $t0 data_32 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -76($fp) + j label_23 + label_22: + lw $t0 -60($fp) + sw $t0 -32($fp) + la $t0 data_33 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -76($fp) + j label_23 + label_23: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_24 + j label_25 + label_24: + li $v0 4 + la $a0 data_34 + syscall + li $v0 10 + syscall + label_25: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 76 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 8 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Cons + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_BookList + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_list_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 9 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Nil + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -104 + la $t0 data_35 + sw $t0 -104($fp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -100($fp) + la $t0 data_36 + sw $t0 -96($fp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -92($fp) + jal __init_at_Book + sw $v0 -88($fp) + lw $t0 -88($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_26 + j label_27 + label_26: + li $v0 4 + la $a0 data_37 + syscall + li $v0 10 + syscall + label_27: + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -100($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -80($fp) + lw $t0 -80($fp) + sw $t0 -108($fp) + la $t0 data_38 + sw $t0 -72($fp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -68($fp) + la $t0 data_39 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + la $t0 data_40 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -52($fp) + jal __init_at_Article + sw $v0 -48($fp) + lw $t0 -48($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_28 + j label_29 + label_28: + li $v0 4 + la $a0 data_41 + syscall + li $v0 10 + syscall + label_29: + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 16 + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -76($fp) + jal __init_at_Nil + sw $v0 -36($fp) + lw $t0 -36($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_30 + j label_31 + label_30: + li $v0 4 + la $a0 data_42 + syscall + li $v0 10 + syscall + label_31: + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + lw $t0 -28($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_32 + j label_33 + label_32: + li $v0 4 + la $a0 data_43 + syscall + li $v0 10 + syscall + label_33: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_34 + j label_35 + label_34: + li $v0 4 + la $a0 data_44 + syscall + li $v0 10 + syscall + label_35: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 104 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 10 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + 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 000000000..a1d74fff2 --- /dev/null +++ b/tests/codegen/cells.mips @@ -0,0 +1,2792 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "CellularAutomaton" +.word 0 +data_7: .asciiz "Main" +.word 0 +data_8: .asciiz " +" +.word 0 +data_9: .asciiz "" +.word 0 +data_10: .asciiz "Abort called from class " +.word 0 +data_11: .asciiz "Substring out of range" +.word 0 +data_12: .asciiz "\n" +.word 0 +data_13: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_14: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_15: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_16: .asciiz "X" +.word 0 +data_17: .asciiz "X" +.word 0 +data_18: .asciiz "X" +.word 0 +data_19: .asciiz "." +.word 0 +data_20: .asciiz "X" +.word 0 +data_21: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_22: .asciiz " X " +.word 0 +data_23: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_24: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_25: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_26: .asciiz "RuntimeError: Function call in a void instance" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_cell_at_CellularAutomaton + .word function_cell_at_next_evolution_at_CellularAutomaton + .word function_cell_left_neighbor_at_CellularAutomaton + .word function_cell_right_neighbor_at_CellularAutomaton + .word function_evolve_at_CellularAutomaton + .word function_init_at_CellularAutomaton + .word function_num_cells_at_CellularAutomaton + .word function_print_at_CellularAutomaton + .word __init_attr_at_CellularAutomaton + .word __init_at_CellularAutomaton + +type_6_prototype: + .word 5 + .word 5 + .word type_6_dispatch + .word 0 + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_7_prototype: + .word 6 + .word 5 + .word type_7_dispatch + .word 0 + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_10 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_8 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_11 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + la $t0 data_9 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_init_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + la $t0 data_12 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_13 + syscall + li $v0 10 + syscall + label_4: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + lw $v0 0($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_num_cells_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_6: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cell_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_15 + syscall + li $v0 10 + syscall + label_8: + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cell_left_neighbor_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -104 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -88($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -84($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -80($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -76($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_9 + lw $t0 -88($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_10 + lw $t0 -88($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_11 + lw $t0 0($fp) + lw $t1 -64($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_12 + label_9: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_12 + label_10: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + move $a0 $t0 + lw $t0 -92($fp) + move $a1 $t0 + jal equal_str + sw $v0 -68($fp) + j label_12 + label_11: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_12 + label_12: + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_13 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + sub $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -60($fp) + lw $t0 -60($fp) + sw $t0 -108($fp) + j label_14 + label_13: + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + sub $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -108($fp) + label_14: + lw $v0 -108($fp) + addi $sp $sp 104 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cell_right_neighbor_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -104 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + sub $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -88($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -84($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -80($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -76($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_15 + lw $t0 -88($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_16 + lw $t0 -88($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_17 + lw $t0 0($fp) + lw $t1 -64($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_18 + label_15: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_18 + label_16: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + move $a0 $t0 + lw $t0 -92($fp) + move $a1 $t0 + jal equal_str + sw $v0 -68($fp) + j label_18 + label_17: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_18 + label_18: + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_19 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -32($fp) + lw $t1 -28($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -108($fp) + j label_20 + label_19: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -108($fp) + label_20: + lw $v0 -108($fp) + addi $sp $sp 104 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cell_at_next_evolution_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -292 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -176($fp) + la $t0 data_16 + sw $t0 -172($fp) + lw $t0 -172($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -168($fp) + lw $t0 -176($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -200($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -196($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -192($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -188($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + seq $t0 $t0 $t1 + sw $t0 -184($fp) + lw $t0 -184($fp) + bne $t0 $zero label_21 + lw $t0 -200($fp) + lw $t1 -192($fp) + seq $t0 $t0 $t1 + sw $t0 -184($fp) + lw $t0 -184($fp) + bne $t0 $zero label_22 + lw $t0 -200($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -184($fp) + lw $t0 -184($fp) + bne $t0 $zero label_23 + lw $t0 -176($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -180($fp) + j label_24 + label_21: + lw $t0 -176($fp) + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -168($fp) + lw $t1 12($t0) + sw $t1 -204($fp) + lw $t0 -208($fp) + lw $t1 -204($fp) + seq $t0 $t0 $t1 + sw $t0 -180($fp) + j label_24 + label_22: + lw $t0 -176($fp) + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -168($fp) + lw $t1 12($t0) + sw $t1 -204($fp) + lw $t0 -208($fp) + move $a0 $t0 + lw $t0 -204($fp) + move $a1 $t0 + jal equal_str + sw $v0 -180($fp) + j label_24 + label_23: + lw $t0 -176($fp) + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -168($fp) + lw $t1 12($t0) + sw $t1 -204($fp) + lw $t0 -208($fp) + lw $t1 -204($fp) + seq $t0 $t0 $t1 + sw $t0 -180($fp) + j label_24 + label_24: + lw $t0 -180($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -212($fp) + lw $t0 -212($fp) + lw $t1 12($t0) + sw $t1 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_25 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -164($fp) + lw $t0 -164($fp) + sw $t0 -220($fp) + j label_26 + label_25: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -160($fp) + lw $t0 -160($fp) + sw $t0 -220($fp) + label_26: + lw $t0 -220($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -112($fp) + la $t0 data_17 + sw $t0 -108($fp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 -112($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -136($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -132($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -128($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -124($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_27 + lw $t0 -136($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_28 + lw $t0 -136($fp) + lw $t1 -124($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_29 + lw $t0 -112($fp) + lw $t1 -104($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + j label_30 + label_27: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + j label_30 + label_28: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -144($fp) + move $a0 $t0 + lw $t0 -140($fp) + move $a1 $t0 + jal equal_str + sw $v0 -116($fp) + j label_30 + label_29: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + j label_30 + label_30: + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -148($fp) + lw $t0 -148($fp) + lw $t1 12($t0) + sw $t1 -152($fp) + lw $t0 -152($fp) + bne $t0 $zero label_31 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -100($fp) + sw $t0 -156($fp) + j label_32 + label_31: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -96($fp) + lw $t0 -96($fp) + sw $t0 -156($fp) + label_32: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + lw $t0 -232($fp) + lw $t1 -228($fp) + add $t0 $t0 $t1 + sw $t0 -224($fp) + lw $t0 -224($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -236($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -48($fp) + la $t0 data_18 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -48($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -72($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -68($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -64($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -60($fp) + lw $t0 -72($fp) + lw $t1 -68($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_33 + lw $t0 -72($fp) + lw $t1 -64($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_34 + lw $t0 -72($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_35 + lw $t0 -48($fp) + lw $t1 -40($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + j label_36 + label_33: + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -40($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + j label_36 + label_34: + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -40($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -80($fp) + move $a0 $t0 + lw $t0 -76($fp) + move $a1 $t0 + jal equal_str + sw $v0 -52($fp) + j label_36 + label_35: + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -40($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + j label_36 + label_36: + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_37 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -92($fp) + j label_38 + label_37: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -92($fp) + label_38: + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -244($fp) + lw $t0 -248($fp) + lw $t1 -244($fp) + add $t0 $t0 $t1 + sw $t0 -240($fp) + lw $t0 -240($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -252($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -252($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -276($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -272($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -268($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -264($fp) + lw $t0 -276($fp) + lw $t1 -272($fp) + seq $t0 $t0 $t1 + sw $t0 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_39 + lw $t0 -276($fp) + lw $t1 -268($fp) + seq $t0 $t0 $t1 + sw $t0 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_40 + lw $t0 -276($fp) + lw $t1 -264($fp) + seq $t0 $t0 $t1 + sw $t0 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_41 + lw $t0 -252($fp) + lw $t1 -28($fp) + seq $t0 $t0 $t1 + sw $t0 -256($fp) + j label_42 + label_39: + lw $t0 -252($fp) + lw $t1 12($t0) + sw $t1 -284($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + lw $t0 -284($fp) + lw $t1 -280($fp) + seq $t0 $t0 $t1 + sw $t0 -256($fp) + j label_42 + label_40: + lw $t0 -252($fp) + lw $t1 12($t0) + sw $t1 -284($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + lw $t0 -284($fp) + move $a0 $t0 + lw $t0 -280($fp) + move $a1 $t0 + jal equal_str + sw $v0 -256($fp) + j label_42 + label_41: + lw $t0 -252($fp) + lw $t1 12($t0) + sw $t1 -284($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + lw $t0 -284($fp) + lw $t1 -280($fp) + seq $t0 $t0 $t1 + sw $t0 -256($fp) + j label_42 + label_42: + lw $t0 -256($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -288($fp) + lw $t0 -288($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -292($fp) + bne $t0 $zero label_43 + la $t0 data_19 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -296($fp) + j label_44 + label_43: + la $t0 data_20 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -296($fp) + label_44: + lw $v0 -296($fp) + addi $sp $sp 292 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_evolve_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -72 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -72($fp) + la $t0 data_9 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -64($fp) + label_45: + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -72($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + slt $t1 $t0 $t1 + sw $t1 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_46 + j label_49 + label_46: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + lw $t0 -64($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_47 + j label_48 + label_47: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_48: + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -64($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -76($fp) + j label_45 + label_49: + lw $t0 -64($fp) + lw $t1 0($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $v0 0($fp) + addi $sp $sp 72 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_CellularAutomaton + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -100 + la $t0 data_22 + sw $t0 -104($fp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -100($fp) + jal __init_at_CellularAutomaton + sw $v0 -96($fp) + lw $t0 -96($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_50 + j label_51 + label_50: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_51: + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -100($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -88($fp) + lw $t0 -88($fp) + lw $t1 0($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_52 + j label_53 + label_52: + li $v0 4 + la $a0 data_24 + syscall + li $v0 10 + syscall + label_53: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 56($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -80($fp) + li $t0 20 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -76($fp) + label_54: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + slt $t1 $t0 $t1 + sw $t1 -52($fp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_55 + j label_60 + label_55: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_56 + j label_57 + label_56: + li $v0 4 + la $a0 data_25 + syscall + li $v0 10 + syscall + label_57: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_58 + j label_59 + label_58: + li $v0 4 + la $a0 data_26 + syscall + li $v0 10 + syscall + label_59: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 56($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + sub $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -76($fp) + j label_54 + label_60: + lw $v0 0($fp) + addi $sp $sp 100 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + 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 000000000..f540044b8 --- /dev/null +++ b/tests/codegen/complex.mips @@ -0,0 +1,2568 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz "Complex" +.word 0 +data_8: .asciiz " +" +.word 0 +data_9: .asciiz "" +.word 0 +data_10: .asciiz "Abort called from class " +.word 0 +data_11: .asciiz "Substring out of range" +.word 0 +data_12: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_13: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_14: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_15: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_16: .asciiz "=(\n" +.word 0 +data_17: .asciiz "=)\n" +.word 0 +data_18: .asciiz "I" +.word 0 +data_19: .asciiz "+" +.word 0 +data_20: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_21: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_22: .asciiz "RuntimeError: Function call in a void instance" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_6_prototype: + .word 5 + .word 4 + .word type_6_dispatch + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_init_at_Complex + .word function_print_at_Complex + .word function_reflect_0_at_Complex + .word function_reflect_X_at_Complex + .word function_reflect_Y_at_Complex + .word __init_attr_at_Complex + .word __init_at_Complex + +type_7_prototype: + .word 6 + .word 6 + .word type_7_dispatch + .word 0 + .word 0 + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_10 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_8 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_11 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -116 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -120($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -116($fp) + jal __init_at_Complex + sw $v0 -112($fp) + lw $t0 -112($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_12 + syscall + li $v0 10 + syscall + label_4: + lw $t0 -112($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -120($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -112($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -104($fp) + lw $t0 -104($fp) + sw $t0 -124($fp) + lw $t0 -124($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_13 + syscall + li $v0 10 + syscall + label_6: + lw $t0 -124($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -124($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_8: + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -124($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_15 + syscall + li $v0 10 + syscall + label_10: + lw $t0 -124($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -124($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -44($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -80($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -76($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -72($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -68($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_11 + lw $t0 -80($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_12 + lw $t0 -80($fp) + lw $t1 -68($fp) + seq $t0 $t0 $t1 + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_13 + lw $t0 -44($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -60($fp) + j label_14 + label_11: + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -60($fp) + j label_14 + label_12: + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 -88($fp) + move $a0 $t0 + lw $t0 -84($fp) + move $a1 $t0 + jal equal_str + sw $v0 -60($fp) + j label_14 + label_13: + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -60($fp) + j label_14 + label_14: + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_15 + la $t0 data_16 + sw $t0 -28($fp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -100($fp) + j label_16 + label_15: + la $t0 data_17 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -100($fp) + label_16: + lw $v0 -100($fp) + addi $sp $sp 116 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 12($t0) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 0($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_init_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -80 + lw $t4 8($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -68($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -64($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -60($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -56($fp) + lw $t0 -68($fp) + lw $t1 -64($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_17 + lw $t0 -68($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_18 + lw $t0 -68($fp) + lw $t1 -56($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_19 + lw $t4 8($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 4($fp) + seq $t0 $t0 $t1 + sw $t0 -48($fp) + j label_20 + label_17: + lw $t4 8($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 + sw $t0 -48($fp) + j label_20 + label_18: + lw $t4 8($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + move $a0 $t0 + lw $t0 -72($fp) + move $a1 $t0 + jal equal_str + sw $v0 -48($fp) + j label_20 + label_19: + lw $t4 8($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 + sw $t0 -48($fp) + j label_20 + label_20: + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t4 8($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -32($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -28($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -24($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -20($fp) + lw $t0 -32($fp) + lw $t1 -28($fp) + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_21 + lw $t0 -32($fp) + lw $t1 -24($fp) + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_22 + lw $t0 -32($fp) + lw $t1 -20($fp) + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_23 + lw $t4 8($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($fp) + seq $t0 $t0 $t1 + sw $t0 -12($fp) + j label_24 + label_21: + lw $t4 8($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -12($fp) + j label_24 + label_22: + lw $t4 8($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + move $a0 $t0 + lw $t0 -36($fp) + move $a1 $t0 + jal equal_str + sw $v0 -12($fp) + j label_24 + label_23: + lw $t4 8($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -12($fp) + j label_24 + label_24: + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -44($fp) + lw $v0 8($fp) + addi $sp $sp 80 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -104 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -84($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -80($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -76($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -72($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_25 + lw $t0 -84($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_26 + lw $t0 -84($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_27 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -64($fp) + j label_28 + label_25: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + seq $t0 $t0 $t1 + sw $t0 -64($fp) + j label_28 + label_26: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -92($fp) + move $a0 $t0 + lw $t0 -88($fp) + move $a1 $t0 + jal equal_str + sw $v0 -64($fp) + j label_28 + label_27: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + seq $t0 $t0 $t1 + sw $t0 -64($fp) + j label_28 + label_28: + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -96($fp) + lw $t0 -96($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_35 + la $t0 data_18 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -52($fp) + la $t0 data_19 + sw $t0 -48($fp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + lw $t0 -40($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_29 + j label_30 + label_29: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_30: + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -32($fp) + lw $t0 -32($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_31 + j label_32 + label_31: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_32: + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + lw $t0 -24($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_33 + j label_34 + label_33: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_34: + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -104($fp) + j label_36 + label_35: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -104($fp) + label_36: + lw $v0 -104($fp) + addi $sp $sp 104 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_reflect_0_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -104 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -64($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -60($fp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -92($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -88($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -84($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -80($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_37 + lw $t0 -92($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_38 + lw $t0 -92($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_39 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -68($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + j label_40 + label_37: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + j label_40 + label_38: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + move $a0 $t0 + lw $t0 -96($fp) + move $a1 $t0 + jal equal_str + sw $v0 -72($fp) + j label_40 + label_39: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + j label_40 + label_40: + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -44($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -40($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -36($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -32($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_41 + lw $t0 -44($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_42 + lw $t0 -44($fp) + lw $t1 -32($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_43 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -20($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_44 + label_41: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_44 + label_42: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + move $a0 $t0 + lw $t0 -48($fp) + move $a1 $t0 + jal equal_str + sw $v0 -24($fp) + j label_44 + label_43: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_44 + label_44: + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -56($fp) + lw $v0 0($fp) + addi $sp $sp 104 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_reflect_X_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -56 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -44($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -40($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -36($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -32($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_45 + lw $t0 -44($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_46 + lw $t0 -44($fp) + lw $t1 -32($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_47 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -20($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_48 + label_45: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_48 + label_46: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + move $a0 $t0 + lw $t0 -48($fp) + move $a1 $t0 + jal equal_str + sw $v0 -24($fp) + j label_48 + label_47: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_48 + label_48: + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -56($fp) + lw $v0 0($fp) + addi $sp $sp 56 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_reflect_Y_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -56 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -44($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -40($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -36($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -32($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_49 + lw $t0 -44($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_50 + lw $t0 -44($fp) + lw $t1 -32($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_51 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -20($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_52 + label_49: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_52 + label_50: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + move $a0 $t0 + lw $t0 -48($fp) + move $a1 $t0 + jal equal_str + sw $v0 -24($fp) + j label_52 + label_51: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_52 + label_52: + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -56($fp) + lw $v0 0($fp) + addi $sp $sp 56 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Complex + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + jr $ra + \ No newline at end of file diff --git a/tests/codegen/covariance.cl b/tests/codegen/covariance.cl deleted file mode 100644 index 8f5ec5e45..000000000 --- a/tests/codegen/covariance.cl +++ /dev/null @@ -1,26 +0,0 @@ -class Main { - a : A <- new B; - main(): Int { - { - a <- new B; - a.a(); - } - }; -}; - -class A { - aa : Int <- 101; - a() : Int { - aa - }; -}; - -class B inherits A { - bb : Int <- 102; - a() : Int { - 100 - }; - b() : Int { - bb - }; -}; diff --git a/tests/codegen/sort-list.cl b/tests/codegen/d/sort-list.cl similarity index 100% rename from tests/codegen/sort-list.cl rename to tests/codegen/d/sort-list.cl diff --git a/tests/codegen/d/sort-list.mips b/tests/codegen/d/sort-list.mips new file mode 100644 index 000000000..107015682 --- /dev/null +++ b/tests/codegen/d/sort-list.mips @@ -0,0 +1,2714 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "List" +.word 0 +data_7: .asciiz "Cons" +.word 0 +data_8: .asciiz "Nil" +.word 0 +data_9: .asciiz "Main" +.word 0 +data_10: .asciiz " +" +.word 0 +data_11: .asciiz "" +.word 0 +data_12: .asciiz "Abort called from class " +.word 0 +data_13: .asciiz "Substring out of range" +.word 0 +data_14: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_15: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_16: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_17: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_18: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_19: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_20: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_21: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_22: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_23: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_24: .asciiz "\n" +.word 0 +data_25: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_26: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_27: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_28: .asciiz "How many numbers to sort? " +.word 0 +data_29: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_30: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_31: .asciiz "RuntimeError: Function call in a void instance" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + .word data_8 + .word data_9 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_car_at_List + .word function_cdr_at_List + .word function_cons_at_List + .word function_insert_at_List + .word function_isNil_at_List + .word function_print_list_at_List + .word function_rcons_at_List + .word function_rev_at_List + .word function_sort_at_List + .word __init_attr_at_List + .word __init_at_List + +type_6_prototype: + .word 5 + .word 4 + .word type_6_dispatch + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_car_at_Cons + .word function_cdr_at_Cons + .word function_cons_at_List + .word function_insert_at_Cons + .word function_isNil_at_Cons + .word function_print_list_at_Cons + .word function_rcons_at_Cons + .word function_rev_at_Cons + .word function_sort_at_Cons + .word function_init_at_Cons + .word __init_attr_at_Cons + .word __init_at_Cons + +type_7_prototype: + .word 6 + .word 6 + .word type_7_dispatch + .word 0 + .word 0 + .word -1 + + +type_8_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_car_at_List + .word function_cdr_at_List + .word function_cons_at_List + .word function_insert_at_Nil + .word function_isNil_at_Nil + .word function_print_list_at_Nil + .word function_rcons_at_Nil + .word function_rev_at_Nil + .word function_sort_at_Nil + .word __init_attr_at_Nil + .word __init_at_Nil + +type_8_prototype: + .word 7 + .word 4 + .word type_8_dispatch + .word -1 + + +type_9_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_iota_at_Main + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_9_prototype: + .word 8 + .word 5 + .word type_9_dispatch + .word 0 + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_12 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_10 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_13 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cons_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + jal __init_at_Cons + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -24($fp) + lw $t0 -24($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_4: + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_car_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cdr_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + jal __init_at_List + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_rev_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_sort_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_insert_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_rcons_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_list_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_List + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_List + addi $sp $sp 4 + sw $v0 -20($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 12($t0) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 0($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_init_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 4($fp) + lw $t1 8($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t0 0($fp) + lw $t1 8($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $v0 8($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_car_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cdr_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_rev_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_15 + syscall + li $v0 10 + syscall + label_6: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 56($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_16 + syscall + li $v0 10 + syscall + label_8: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_sort_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_17 + syscall + li $v0 10 + syscall + label_10: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 60($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_11 + j label_12 + label_11: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_12: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_insert_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -64 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + slt $t1 $t0 $t1 + sw $t1 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_17 + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_14: + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + jal __init_at_Cons + sw $v0 -32($fp) + lw $t0 -32($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_16: + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -64($fp) + j label_20 + label_17: + jal __init_at_Cons + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_18 + j label_19 + label_18: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_19: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -64($fp) + label_20: + lw $v0 -64($fp) + addi $sp $sp 64 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_rcons_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -28 + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_21 + j label_22 + label_21: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_22: + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + jal __init_at_Cons + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_23 + j label_24 + label_23: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_24: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 28 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_list_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -32 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -32($fp) + la $t0 data_24 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_25 + j label_26 + label_25: + li $v0 4 + la $a0 data_25 + syscall + li $v0 10 + syscall + label_26: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 32 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Cons + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_List + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_rev_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_sort_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_insert_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_rcons_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + jal __init_at_Cons + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_27 + j label_28 + label_27: + li $v0 4 + la $a0 data_26 + syscall + li $v0 10 + syscall + label_28: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_list_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Nil: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 7 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Nil + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_iota_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -68 + jal __init_at_Nil + sw $v0 -72($fp) + lw $t0 -72($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + sw $t0 -68($fp) + label_29: + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + slt $t1 $t0 $t1 + sw $t1 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_30 + j label_33 + label_30: + jal __init_at_Cons + sw $v0 -40($fp) + lw $t0 -40($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_31 + j label_32 + label_31: + li $v0 4 + la $a0 data_27 + syscall + li $v0 10 + syscall + label_32: + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -32($fp) + lw $t0 -32($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -68($fp) + j label_29 + label_33: + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 68 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -48 + la $t0 data_28 + sw $t0 -48($fp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -52($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + lw $t0 -40($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_34 + j label_35 + label_34: + li $v0 4 + la $a0 data_29 + syscall + li $v0 10 + syscall + label_35: + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 56($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_36 + j label_37 + label_36: + li $v0 4 + la $a0 data_30 + syscall + li $v0 10 + syscall + label_37: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 60($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_38 + j label_39 + label_38: + li $v0 4 + la $a0 data_31 + syscall + li $v0 10 + syscall + label_39: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + addi $sp $sp 48 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 8 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + jr $ra + \ No newline at end of file diff --git a/tests/codegen/sort-list_input.txt b/tests/codegen/d/sort-list_input.txt similarity index 100% rename from tests/codegen/sort-list_input.txt rename to tests/codegen/d/sort-list_input.txt diff --git a/tests/codegen/sort-list_output.txt b/tests/codegen/d/sort-list_output.txt similarity index 100% rename from tests/codegen/sort-list_output.txt rename to tests/codegen/d/sort-list_output.txt diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips new file mode 100644 index 000000000..300eae61e --- /dev/null +++ b/tests/codegen/fib.mips @@ -0,0 +1,1369 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz " +" +.word 0 +data_8: .asciiz "" +.word 0 +data_9: .asciiz "Abort called from class " +.word 0 +data_10: .asciiz "Substring out of range" +.word 0 +data_11: .asciiz "Enter n to find nth fibonacci number!\n" +.word 0 +data_12: .asciiz "\n" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_fib_at_Main + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_6_prototype: + .word 5 + .word 4 + .word type_6_dispatch + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_9 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_7 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_10 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + la $t0 data_11 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -44($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -32($fp) + la $t0 data_12 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $v0 -20($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_fib_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -116 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -120($fp) + lw $t0 -120($fp) + sw $t0 -124($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -116($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 -104($fp) + sw $t0 -108($fp) + label_3: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -72($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -68($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -64($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -60($fp) + lw $t0 -72($fp) + lw $t1 -68($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_4 + lw $t0 -72($fp) + lw $t1 -64($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_5 + lw $t0 -72($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_6 + lw $t0 0($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + j label_7 + label_4: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + j label_7 + label_5: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -80($fp) + move $a0 $t0 + lw $t0 -76($fp) + move $a1 $t0 + jal equal_str + sw $v0 -52($fp) + j label_7 + label_6: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + j label_7 + label_7: + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -92($fp) + xori $t0 $t0 1 + sw $t0 -88($fp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -96($fp) + lw $t0 -96($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_8 + j label_9 + label_8: + lw $t0 -124($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -116($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) + add $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -108($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + sub $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 0($fp) + lw $t0 -124($fp) + sw $t0 -116($fp) + lw $t0 -108($fp) + sw $t0 -124($fp) + j label_3 + label_9: + lw $v0 -108($fp) + addi $sp $sp 116 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + 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 000000000..50e533909 --- /dev/null +++ b/tests/codegen/graph.mips @@ -0,0 +1,7046 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Graph" +.word 0 +data_7: .asciiz "Vertice" +.word 0 +data_8: .asciiz "Edge" +.word 0 +data_9: .asciiz "EList" +.word 0 +data_10: .asciiz "ECons" +.word 0 +data_11: .asciiz "VList" +.word 0 +data_12: .asciiz "VCons" +.word 0 +data_13: .asciiz "Parse" +.word 0 +data_14: .asciiz "Main" +.word 0 +data_15: .asciiz "BoolOp" +.word 0 +data_16: .asciiz " +" +.word 0 +data_17: .asciiz "" +.word 0 +data_18: .asciiz "Abort called from class " +.word 0 +data_19: .asciiz "Substring out of range" +.word 0 +data_20: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_21: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_22: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_23: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_24: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_25: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_26: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_27: .asciiz " (" +.word 0 +data_28: .asciiz "," +.word 0 +data_29: .asciiz ")" +.word 0 +data_30: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_31: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_32: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_33: .asciiz "\n" +.word 0 +data_34: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_35: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_36: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_37: .asciiz "\n" +.word 0 +data_38: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_39: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_40: .asciiz "\n" +.word 0 +data_41: .asciiz "" +.word 0 +data_42: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_43: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_44: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_45: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_46: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_47: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_48: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_49: .asciiz "0" +.word 0 +data_50: .asciiz "1" +.word 0 +data_51: .asciiz "2" +.word 0 +data_52: .asciiz "3" +.word 0 +data_53: .asciiz "4" +.word 0 +data_54: .asciiz "5" +.word 0 +data_55: .asciiz "6" +.word 0 +data_56: .asciiz "7" +.word 0 +data_57: .asciiz "8" +.word 0 +data_58: .asciiz "9" +.word 0 +data_59: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_60: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_61: .asciiz "-" +.word 0 +data_62: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_63: .asciiz " " +.word 0 +data_64: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_65: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_66: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_67: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_68: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_69: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_70: .asciiz " " +.word 0 +data_71: .asciiz "," +.word 0 +data_72: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_73: .asciiz "" +.word 0 +data_74: .asciiz "" +.word 0 +data_75: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_76: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_77: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_78: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_79: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_80: .asciiz "RuntimeError: Function call in a void instance" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + .word data_8 + .word data_9 + .word data_10 + .word data_11 + .word data_12 + .word data_13 + .word data_14 + .word data_15 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + .word type_11_prototype + .word type_12_prototype + .word type_13_prototype + .word type_14_prototype + .word type_15_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_add_vertice_at_Graph + .word function_print_E_at_Graph + .word function_print_V_at_Graph + .word __init_attr_at_Graph + .word __init_at_Graph + +type_6_prototype: + .word 5 + .word 6 + .word type_6_dispatch + .word 0 + .word 0 + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_add_out_at_Vertice + .word function_init_at_Vertice + .word function_number_at_Vertice + .word function_outgoing_at_Vertice + .word function_print_at_Vertice + .word __init_attr_at_Vertice + .word __init_at_Vertice + +type_7_prototype: + .word 6 + .word 6 + .word type_7_dispatch + .word 0 + .word 0 + .word -1 + + +type_8_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_init_at_Edge + .word function_print_at_Edge + .word __init_attr_at_Edge + .word __init_at_Edge + +type_8_prototype: + .word 7 + .word 7 + .word type_8_dispatch + .word 0 + .word 0 + .word 0 + .word -1 + + +type_9_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_append_at_EList + .word function_cons_at_EList + .word function_head_at_EList + .word function_isNil_at_EList + .word function_print_at_EList + .word function_tail_at_EList + .word __init_attr_at_EList + .word __init_at_EList + +type_9_prototype: + .word 8 + .word 5 + .word type_9_dispatch + .word 0 + .word -1 + + +type_10_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_append_at_EList + .word function_cons_at_EList + .word function_head_at_ECons + .word function_isNil_at_ECons + .word function_print_at_ECons + .word function_tail_at_ECons + .word function_init_at_ECons + .word __init_attr_at_ECons + .word __init_at_ECons + +type_10_prototype: + .word 9 + .word 6 + .word type_10_dispatch + .word 0 + .word 0 + .word -1 + + +type_11_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_cons_at_VList + .word function_head_at_VList + .word function_isNil_at_VList + .word function_print_at_VList + .word function_tail_at_VList + .word __init_attr_at_VList + .word __init_at_VList + +type_11_prototype: + .word 10 + .word 5 + .word type_11_dispatch + .word 0 + .word -1 + + +type_12_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_cons_at_VList + .word function_head_at_VCons + .word function_isNil_at_VCons + .word function_print_at_VCons + .word function_tail_at_VCons + .word function_init_at_VCons + .word __init_attr_at_VCons + .word __init_at_VCons + +type_12_prototype: + .word 11 + .word 6 + .word type_12_dispatch + .word 0 + .word 0 + .word -1 + + +type_13_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_a2i_at_Parse + .word function_a2i_aux_at_Parse + .word function_c2i_at_Parse + .word function_parse_line_at_Parse + .word function_read_input_at_Parse + .word __init_attr_at_Parse + .word __init_at_Parse + +type_13_prototype: + .word 12 + .word 6 + .word type_13_dispatch + .word 0 + .word 0 + .word -1 + + +type_14_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_a2i_at_Parse + .word function_a2i_aux_at_Parse + .word function_c2i_at_Parse + .word function_parse_line_at_Parse + .word function_read_input_at_Parse + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_14_prototype: + .word 13 + .word 7 + .word type_14_dispatch + .word 0 + .word 0 + .word 0 + .word -1 + + +type_15_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_and_at_BoolOp + .word function_or_at_BoolOp + .word __init_attr_at_BoolOp + .word __init_at_BoolOp + +type_15_prototype: + .word 14 + .word 4 + .word type_15_dispatch + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_18 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_16 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Graph: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + jal __init_at_VList + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -24($fp) + lw $t0 0($fp) + lw $t1 -24($fp) + sw $t1 16($t0) + jal __init_at_EList + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_add_vertice_at_Graph: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -32 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_4: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_6: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_8: + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 4($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 32 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_E_at_Graph: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_10: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_V_at_Graph: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_11 + j label_12 + label_11: + li $v0 4 + la $a0 data_24 + syscall + li $v0 10 + syscall + label_12: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Graph: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Graph + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Vertice: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 0($fp) + lw $t1 -20($fp) + sw $t1 12($t0) + jal __init_at_EList + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 16($t0) + lw $v0 0($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_outgoing_at_Vertice: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_number_at_Vertice: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_init_at_Vertice: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $v0 4($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_add_out_at_Vertice: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 + la $a0 data_25 + syscall + li $v0 10 + syscall + label_14: + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 4($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $v0 4($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_Vertice: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_26 + syscall + li $v0 10 + syscall + label_16: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Vertice: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Vertice + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Edge: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 0($fp) + lw $t1 -20($fp) + sw $t1 12($t0) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 16($t0) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 20($t0) + lw $v0 0($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_init_at_Edge: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + lw $t0 8($fp) + lw $t1 12($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t0 4($fp) + lw $t1 12($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t0 0($fp) + lw $t1 12($fp) + addi $t1 $t1 20 + sw $t0 0($t1) + lw $v0 12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_Edge: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -60 + la $t0 data_27 + sw $t0 -52($fp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -56($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -44($fp) + la $t0 data_28 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + la $t0 data_29 + sw $t0 -20($fp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 60 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Edge: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + li $t0 7 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Edge + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_EList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_EList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_head_at_EList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_tail_at_EList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cons_at_EList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + jal __init_at_ECons + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_17 + j label_18 + label_17: + li $v0 4 + la $a0 data_30 + syscall + li $v0 10 + syscall + label_18: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_append_at_EList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -40 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_23 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_19 + j label_20 + label_19: + li $v0 4 + la $a0 data_31 + syscall + li $v0 10 + syscall + label_20: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_21 + j label_22 + label_21: + li $v0 4 + la $a0 data_32 + syscall + li $v0 10 + syscall + label_22: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -44($fp) + j label_24 + label_23: + lw $t0 0($fp) + sw $t0 -44($fp) + label_24: + lw $v0 -44($fp) + addi $sp $sp 40 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_EList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + la $t0 data_33 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $v0 -20($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_EList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 8 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_EList + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_ECons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_EList + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 0($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_ECons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_head_at_ECons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_tail_at_ECons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_init_at_ECons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 4($fp) + lw $t1 8($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t0 0($fp) + lw $t1 8($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $v0 8($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_ECons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_25 + j label_26 + label_25: + li $v0 4 + la $a0 data_34 + syscall + li $v0 10 + syscall + label_26: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_27 + j label_28 + label_27: + li $v0 4 + la $a0 data_35 + syscall + li $v0 10 + syscall + label_28: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_ECons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 9 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_ECons + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_VList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_VList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_head_at_VList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_tail_at_VList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cons_at_VList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + jal __init_at_VCons + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_29 + j label_30 + label_29: + li $v0 4 + la $a0 data_36 + syscall + li $v0 10 + syscall + label_30: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_VList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + la $t0 data_37 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $v0 -20($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_VList: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 10 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_VList + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_VCons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_VList + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 0($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_VCons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_head_at_VCons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_tail_at_VCons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_init_at_VCons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 4($fp) + lw $t1 8($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t0 0($fp) + lw $t1 8($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $v0 8($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_VCons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_31 + j label_32 + label_31: + li $v0 4 + la $a0 data_38 + syscall + li $v0 10 + syscall + label_32: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_33 + j label_34 + label_33: + li $v0 4 + la $a0 data_39 + syscall + li $v0 10 + syscall + label_34: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_VCons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 11 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_VCons + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Parse: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + jal __init_at_BoolOp + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -20($fp) + lw $t0 0($fp) + lw $t1 -20($fp) + sw $t1 12($t0) + la $t0 data_17 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 0($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_read_input_at_Parse: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -164 + jal __init_at_Graph + sw $v0 -160($fp) + lw $t0 -160($fp) + sw $t0 -164($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 -152($fp) + sw $t0 -156($fp) + label_35: + la $t0 data_40 + sw $t0 -96($fp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -156($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -120($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -116($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -112($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -120($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_36 + lw $t0 -120($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_37 + lw $t0 -120($fp) + lw $t1 -108($fp) + seq $t0 $t0 $t1 + sw $t0 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_38 + lw $t0 -156($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -100($fp) + j label_39 + label_36: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -124($fp) + lw $t0 -128($fp) + lw $t1 -124($fp) + seq $t0 $t0 $t1 + sw $t0 -100($fp) + j label_39 + label_37: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -124($fp) + lw $t0 -128($fp) + move $a0 $t0 + lw $t0 -124($fp) + move $a1 $t0 + jal equal_str + sw $v0 -100($fp) + j label_39 + label_38: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -124($fp) + lw $t0 -128($fp) + lw $t1 -124($fp) + seq $t0 $t0 $t1 + sw $t0 -100($fp) + j label_39 + label_39: + lw $t0 -100($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -132($fp) + lw $t0 -132($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -140($fp) + xori $t0 $t0 1 + sw $t0 -136($fp) + lw $t0 -136($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -144($fp) + la $t0 data_41 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -156($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -64($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -60($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -56($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -52($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_40 + lw $t0 -64($fp) + lw $t1 -56($fp) + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_41 + lw $t0 -64($fp) + lw $t1 -52($fp) + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_42 + lw $t0 -156($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -44($fp) + j label_43 + label_40: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t0 -72($fp) + lw $t1 -68($fp) + seq $t0 $t0 $t1 + sw $t0 -44($fp) + j label_43 + label_41: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t0 -72($fp) + move $a0 $t0 + lw $t0 -68($fp) + move $a1 $t0 + jal equal_str + sw $v0 -44($fp) + j label_43 + label_42: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t0 -72($fp) + lw $t1 -68($fp) + seq $t0 $t0 $t1 + sw $t0 -44($fp) + j label_43 + label_43: + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 -84($fp) + xori $t0 $t0 1 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -88($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_44 + j label_45 + label_44: + li $v0 4 + la $a0 data_42 + syscall + li $v0 10 + syscall + label_45: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -144($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_46 + j label_49 + label_46: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + lw $t0 -164($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_47 + j label_48 + label_47: + li $v0 4 + la $a0 data_43 + syscall + li $v0 10 + syscall + label_48: + lw $t0 -164($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -164($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -16($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -156($fp) + j label_35 + label_49: + lw $v0 -164($fp) + addi $sp $sp 164 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_parse_line_at_Parse: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -136 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -132($fp) + jal __init_at_Vertice + sw $v0 -128($fp) + lw $t0 -128($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_50 + j label_51 + label_50: + li $v0 4 + la $a0 data_44 + syscall + li $v0 10 + syscall + label_51: + lw $t0 -128($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -132($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -128($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -120($fp) + lw $t0 -120($fp) + sw $t0 -136($fp) + label_52: + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_53 + j label_54 + label_53: + li $v0 4 + la $a0 data_45 + syscall + li $v0 10 + syscall + label_54: + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -60($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -60($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -88($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -84($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -80($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -76($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_55 + lw $t0 -88($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_56 + lw $t0 -88($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_57 + lw $t0 -60($fp) + lw $t1 -56($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_58 + label_55: + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_58 + label_56: + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + move $a0 $t0 + lw $t0 -92($fp) + move $a1 $t0 + jal equal_str + sw $v0 -68($fp) + j label_58 + label_57: + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_58 + label_58: + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -108($fp) + lw $t0 -108($fp) + xori $t0 $t0 1 + sw $t0 -104($fp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -112($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_59 + j label_66 + label_59: + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -48($fp) + lw $t0 -48($fp) + sw $t0 -52($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -44($fp) + lw $t0 -136($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_60 + j label_61 + label_60: + li $v0 4 + la $a0 data_46 + syscall + li $v0 10 + syscall + label_61: + lw $t0 -136($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -136($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -32($fp) + jal __init_at_Edge + sw $v0 -28($fp) + lw $t0 -28($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_62 + j label_63 + label_62: + li $v0 4 + la $a0 data_47 + syscall + li $v0 10 + syscall + label_63: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 16 + sw $v0 -20($fp) + lw $t0 -136($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_64 + j label_65 + label_64: + li $v0 4 + la $a0 data_48 + syscall + li $v0 10 + syscall + label_65: + lw $t0 -136($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -136($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + j label_52 + label_66: + lw $v0 -136($fp) + addi $sp $sp 136 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_c2i_at_Parse: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -576 + la $t0 data_49 + sw $t0 -532($fp) + lw $t0 -532($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -528($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -556($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -552($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -548($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -544($fp) + lw $t0 -556($fp) + lw $t1 -552($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + bne $t0 $zero label_67 + lw $t0 -556($fp) + lw $t1 -548($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + bne $t0 $zero label_68 + lw $t0 -556($fp) + lw $t1 -544($fp) + seq $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + bne $t0 $zero label_69 + lw $t0 0($fp) + lw $t1 -528($fp) + seq $t0 $t0 $t1 + sw $t0 -536($fp) + j label_70 + label_67: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -528($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + lw $t1 -560($fp) + seq $t0 $t0 $t1 + sw $t0 -536($fp) + j label_70 + label_68: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -528($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + move $a0 $t0 + lw $t0 -560($fp) + move $a1 $t0 + jal equal_str + sw $v0 -536($fp) + j label_70 + label_69: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -528($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + lw $t1 -560($fp) + seq $t0 $t0 $t1 + sw $t0 -536($fp) + j label_70 + label_70: + lw $t0 -536($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -568($fp) + lw $t0 -568($fp) + lw $t1 12($t0) + sw $t1 -572($fp) + lw $t0 -572($fp) + bne $t0 $zero label_125 + la $t0 data_50 + sw $t0 -480($fp) + lw $t0 -480($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -476($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -504($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -500($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -496($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -492($fp) + lw $t0 -504($fp) + lw $t1 -500($fp) + seq $t0 $t0 $t1 + sw $t0 -488($fp) + lw $t0 -488($fp) + bne $t0 $zero label_71 + lw $t0 -504($fp) + lw $t1 -496($fp) + seq $t0 $t0 $t1 + sw $t0 -488($fp) + lw $t0 -488($fp) + bne $t0 $zero label_72 + lw $t0 -504($fp) + lw $t1 -492($fp) + seq $t0 $t0 $t1 + sw $t0 -488($fp) + lw $t0 -488($fp) + bne $t0 $zero label_73 + lw $t0 0($fp) + lw $t1 -476($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + j label_74 + label_71: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -512($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -512($fp) + lw $t1 -508($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + j label_74 + label_72: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -512($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -512($fp) + move $a0 $t0 + lw $t0 -508($fp) + move $a1 $t0 + jal equal_str + sw $v0 -484($fp) + j label_74 + label_73: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -512($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -512($fp) + lw $t1 -508($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + j label_74 + label_74: + lw $t0 -484($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -516($fp) + lw $t0 -516($fp) + lw $t1 12($t0) + sw $t1 -520($fp) + lw $t0 -520($fp) + bne $t0 $zero label_123 + la $t0 data_51 + sw $t0 -428($fp) + lw $t0 -428($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -424($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -452($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -448($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -444($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -440($fp) + lw $t0 -452($fp) + lw $t1 -448($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_75 + lw $t0 -452($fp) + lw $t1 -444($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_76 + lw $t0 -452($fp) + lw $t1 -440($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_77 + lw $t0 0($fp) + lw $t1 -424($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_78 + label_75: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -424($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_78 + label_76: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -424($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + move $a0 $t0 + lw $t0 -456($fp) + move $a1 $t0 + jal equal_str + sw $v0 -432($fp) + j label_78 + label_77: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -424($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_78 + label_78: + lw $t0 -432($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -464($fp) + lw $t0 -464($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -468($fp) + bne $t0 $zero label_121 + la $t0 data_52 + sw $t0 -376($fp) + lw $t0 -376($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -372($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -400($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -396($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -392($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -388($fp) + lw $t0 -400($fp) + lw $t1 -396($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_79 + lw $t0 -400($fp) + lw $t1 -392($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_80 + lw $t0 -400($fp) + lw $t1 -388($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_81 + lw $t0 0($fp) + lw $t1 -372($fp) + seq $t0 $t0 $t1 + sw $t0 -380($fp) + j label_82 + label_79: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -372($fp) + lw $t1 12($t0) + sw $t1 -404($fp) + lw $t0 -408($fp) + lw $t1 -404($fp) + seq $t0 $t0 $t1 + sw $t0 -380($fp) + j label_82 + label_80: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -372($fp) + lw $t1 12($t0) + sw $t1 -404($fp) + lw $t0 -408($fp) + move $a0 $t0 + lw $t0 -404($fp) + move $a1 $t0 + jal equal_str + sw $v0 -380($fp) + j label_82 + label_81: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -372($fp) + lw $t1 12($t0) + sw $t1 -404($fp) + lw $t0 -408($fp) + lw $t1 -404($fp) + seq $t0 $t0 $t1 + sw $t0 -380($fp) + j label_82 + label_82: + lw $t0 -380($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -412($fp) + lw $t0 -412($fp) + lw $t1 12($t0) + sw $t1 -416($fp) + lw $t0 -416($fp) + bne $t0 $zero label_119 + la $t0 data_53 + sw $t0 -324($fp) + lw $t0 -324($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -320($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -348($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -344($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -340($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -336($fp) + lw $t0 -348($fp) + lw $t1 -344($fp) + seq $t0 $t0 $t1 + sw $t0 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_83 + lw $t0 -348($fp) + lw $t1 -340($fp) + seq $t0 $t0 $t1 + sw $t0 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_84 + lw $t0 -348($fp) + lw $t1 -336($fp) + seq $t0 $t0 $t1 + sw $t0 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_85 + lw $t0 0($fp) + lw $t1 -320($fp) + seq $t0 $t0 $t1 + sw $t0 -328($fp) + j label_86 + label_83: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -356($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -352($fp) + lw $t0 -356($fp) + lw $t1 -352($fp) + seq $t0 $t0 $t1 + sw $t0 -328($fp) + j label_86 + label_84: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -356($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -352($fp) + lw $t0 -356($fp) + move $a0 $t0 + lw $t0 -352($fp) + move $a1 $t0 + jal equal_str + sw $v0 -328($fp) + j label_86 + label_85: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -356($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -352($fp) + lw $t0 -356($fp) + lw $t1 -352($fp) + seq $t0 $t0 $t1 + sw $t0 -328($fp) + j label_86 + label_86: + lw $t0 -328($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -360($fp) + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -364($fp) + lw $t0 -364($fp) + bne $t0 $zero label_117 + la $t0 data_54 + sw $t0 -272($fp) + lw $t0 -272($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -268($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -296($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -292($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -288($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -284($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_87 + lw $t0 -296($fp) + lw $t1 -288($fp) + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_88 + lw $t0 -296($fp) + lw $t1 -284($fp) + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_89 + lw $t0 0($fp) + lw $t1 -268($fp) + seq $t0 $t0 $t1 + sw $t0 -276($fp) + j label_90 + label_87: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -304($fp) + lw $t1 -300($fp) + seq $t0 $t0 $t1 + sw $t0 -276($fp) + j label_90 + label_88: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -304($fp) + move $a0 $t0 + lw $t0 -300($fp) + move $a1 $t0 + jal equal_str + sw $v0 -276($fp) + j label_90 + label_89: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -304($fp) + lw $t1 -300($fp) + seq $t0 $t0 $t1 + sw $t0 -276($fp) + j label_90 + label_90: + lw $t0 -276($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -308($fp) + lw $t0 -308($fp) + lw $t1 12($t0) + sw $t1 -312($fp) + lw $t0 -312($fp) + bne $t0 $zero label_115 + la $t0 data_55 + sw $t0 -220($fp) + lw $t0 -220($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -216($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -244($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -240($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -236($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -232($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_91 + lw $t0 -244($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_92 + lw $t0 -244($fp) + lw $t1 -232($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_93 + lw $t0 0($fp) + lw $t1 -216($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_94 + label_91: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_94 + label_92: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + move $a0 $t0 + lw $t0 -248($fp) + move $a1 $t0 + jal equal_str + sw $v0 -224($fp) + j label_94 + label_93: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_94 + label_94: + lw $t0 -224($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -256($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_113 + la $t0 data_56 + sw $t0 -168($fp) + lw $t0 -168($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -164($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -192($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -188($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -184($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -180($fp) + lw $t0 -192($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_95 + lw $t0 -192($fp) + lw $t1 -184($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_96 + lw $t0 -192($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_97 + lw $t0 0($fp) + lw $t1 -164($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_98 + label_95: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_98 + label_96: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + move $a0 $t0 + lw $t0 -196($fp) + move $a1 $t0 + jal equal_str + sw $v0 -172($fp) + j label_98 + label_97: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_98 + label_98: + lw $t0 -172($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -204($fp) + lw $t0 -204($fp) + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_111 + la $t0 data_57 + sw $t0 -116($fp) + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -112($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -140($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -136($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -132($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -128($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_99 + lw $t0 -140($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_100 + lw $t0 -140($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_101 + lw $t0 0($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_102 + label_99: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_102 + label_100: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + move $a0 $t0 + lw $t0 -144($fp) + move $a1 $t0 + jal equal_str + sw $v0 -120($fp) + j label_102 + label_101: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_102 + label_102: + lw $t0 -120($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -156($fp) + bne $t0 $zero label_109 + la $t0 data_58 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -88($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -84($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -80($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -76($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_103 + lw $t0 -88($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_104 + lw $t0 -88($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_105 + lw $t0 0($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_106 + label_103: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_106 + label_104: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + move $a0 $t0 + lw $t0 -92($fp) + move $a1 $t0 + jal equal_str + sw $v0 -68($fp) + j label_106 + label_105: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + j label_106 + label_106: + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_107 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -56($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + sw $t0 -108($fp) + j label_108 + label_107: + li $t0 9 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + sw $t0 -108($fp) + label_108: + lw $t0 -108($fp) + sw $t0 -160($fp) + j label_110 + label_109: + li $t0 8 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -160($fp) + label_110: + lw $t0 -160($fp) + sw $t0 -212($fp) + j label_112 + label_111: + li $t0 7 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -212($fp) + label_112: + lw $t0 -212($fp) + sw $t0 -264($fp) + j label_114 + label_113: + li $t0 6 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -264($fp) + label_114: + lw $t0 -264($fp) + sw $t0 -316($fp) + j label_116 + label_115: + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -316($fp) + label_116: + lw $t0 -316($fp) + sw $t0 -368($fp) + j label_118 + label_117: + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -368($fp) + label_118: + lw $t0 -368($fp) + sw $t0 -420($fp) + j label_120 + label_119: + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -420($fp) + label_120: + lw $t0 -420($fp) + sw $t0 -472($fp) + j label_122 + label_121: + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -472($fp) + label_122: + lw $t0 -472($fp) + sw $t0 -524($fp) + j label_124 + label_123: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -524($fp) + label_124: + lw $t0 -524($fp) + sw $t0 -576($fp) + j label_126 + label_125: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -576($fp) + label_126: + lw $v0 -576($fp) + addi $sp $sp 576 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_a2i_at_Parse: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -308 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -264($fp) + lw $t0 -264($fp) + bne $t0 $zero label_127 + j label_128 + label_127: + li $v0 4 + la $a0 data_59 + syscall + li $v0 10 + syscall + label_128: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -260($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -256($fp) + lw $t0 -260($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -288($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -284($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -280($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -276($fp) + lw $t0 -288($fp) + lw $t1 -284($fp) + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_129 + lw $t0 -288($fp) + lw $t1 -280($fp) + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_130 + lw $t0 -288($fp) + lw $t1 -276($fp) + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_131 + lw $t0 -260($fp) + lw $t1 -256($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + j label_132 + label_129: + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -296($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + j label_132 + label_130: + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -296($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -296($fp) + move $a0 $t0 + lw $t0 -292($fp) + move $a1 $t0 + jal equal_str + sw $v0 -268($fp) + j label_132 + label_131: + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -296($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + j label_132 + label_132: + lw $t0 -268($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -300($fp) + lw $t0 -300($fp) + lw $t1 12($t0) + sw $t1 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_157 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -208($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -204($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -200($fp) + lw $t0 -200($fp) + bne $t0 $zero label_133 + j label_134 + label_133: + li $v0 4 + la $a0 data_60 + syscall + li $v0 10 + syscall + label_134: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -208($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -204($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -196($fp) + la $t0 data_61 + sw $t0 -192($fp) + lw $t0 -192($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -188($fp) + lw $t0 -196($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -232($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -228($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -224($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -220($fp) + lw $t0 -232($fp) + lw $t1 -228($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_135 + lw $t0 -232($fp) + lw $t1 -224($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_136 + lw $t0 -232($fp) + lw $t1 -220($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_137 + lw $t0 -196($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + j label_138 + label_135: + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -240($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + j label_138 + label_136: + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -240($fp) + move $a0 $t0 + lw $t0 -236($fp) + move $a1 $t0 + jal equal_str + sw $v0 -212($fp) + j label_138 + label_137: + lw $t0 -196($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -240($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + j label_138 + label_138: + lw $t0 -212($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -244($fp) + lw $t0 -244($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -248($fp) + bne $t0 $zero label_151 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -140($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -136($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_139 + j label_140 + label_139: + li $v0 4 + la $a0 data_62 + syscall + li $v0 10 + syscall + label_140: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -140($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -136($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -128($fp) + la $t0 data_63 + sw $t0 -124($fp) + lw $t0 -124($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -120($fp) + lw $t0 -128($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -164($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -160($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -156($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -152($fp) + lw $t0 -164($fp) + lw $t1 -160($fp) + seq $t0 $t0 $t1 + sw $t0 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_141 + lw $t0 -164($fp) + lw $t1 -156($fp) + seq $t0 $t0 $t1 + sw $t0 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_142 + lw $t0 -164($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_143 + lw $t0 -128($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -144($fp) + j label_144 + label_141: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -172($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -144($fp) + j label_144 + label_142: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -172($fp) + move $a0 $t0 + lw $t0 -168($fp) + move $a1 $t0 + jal equal_str + sw $v0 -144($fp) + j label_144 + label_143: + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -172($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -144($fp) + j label_144 + label_144: + lw $t0 -144($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -176($fp) + lw $t0 -176($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -180($fp) + bne $t0 $zero label_145 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -116($fp) + lw $t0 -116($fp) + sw $t0 -184($fp) + j label_150 + label_145: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -108($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_146 + j label_147 + label_146: + li $v0 4 + la $a0 data_64 + syscall + li $v0 10 + syscall + label_147: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + sub $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_148 + j label_149 + label_148: + li $v0 4 + la $a0 data_65 + syscall + li $v0 10 + syscall + label_149: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -72($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -184($fp) + label_150: + lw $t0 -184($fp) + sw $t0 -252($fp) + j label_156 + label_151: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_152 + j label_153 + label_152: + li $v0 4 + la $a0 data_66 + syscall + li $v0 10 + syscall + label_153: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + sub $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_154 + j label_155 + label_154: + li $v0 4 + la $a0 data_67 + syscall + li $v0 10 + syscall + label_155: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -16($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -64($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -60($fp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -252($fp) + label_156: + lw $t0 -252($fp) + sw $t0 -308($fp) + j label_158 + label_157: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -308($fp) + label_158: + lw $v0 -308($fp) + addi $sp $sp 308 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_a2i_aux_at_Parse: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -452 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -448($fp) + lw $t0 -448($fp) + sw $t0 -452($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -440($fp) + lw $t0 -440($fp) + bne $t0 $zero label_159 + j label_160 + label_159: + li $v0 4 + la $a0 data_68 + syscall + li $v0 10 + syscall + label_160: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -436($fp) + lw $t0 -436($fp) + sw $t0 -444($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -428($fp) + lw $t0 -428($fp) + sw $t0 -432($fp) + label_161: + lw $t0 -432($fp) + lw $t1 12($t0) + sw $t1 -416($fp) + lw $t0 -444($fp) + lw $t1 12($t0) + sw $t1 -412($fp) + lw $t0 -416($fp) + lw $t1 -412($fp) + slt $t1 $t0 $t1 + sw $t1 -408($fp) + lw $t0 -408($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -420($fp) + lw $t0 -420($fp) + lw $t1 12($t0) + sw $t1 -424($fp) + lw $t0 -424($fp) + bne $t0 $zero label_162 + j label_193 + label_162: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -400($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -396($fp) + lw $t0 -396($fp) + bne $t0 $zero label_163 + j label_164 + label_163: + li $v0 4 + la $a0 data_69 + syscall + li $v0 10 + syscall + label_164: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -432($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -400($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -392($fp) + lw $t0 -392($fp) + sw $t0 -404($fp) + la $t0 data_70 + sw $t0 -344($fp) + lw $t0 -344($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -340($fp) + lw $t0 -404($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -368($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -364($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -360($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -356($fp) + lw $t0 -368($fp) + lw $t1 -364($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_165 + lw $t0 -368($fp) + lw $t1 -360($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_166 + lw $t0 -368($fp) + lw $t1 -356($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_167 + lw $t0 -404($fp) + lw $t1 -340($fp) + seq $t0 $t0 $t1 + sw $t0 -348($fp) + j label_168 + label_165: + lw $t0 -404($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -340($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -376($fp) + lw $t1 -372($fp) + seq $t0 $t0 $t1 + sw $t0 -348($fp) + j label_168 + label_166: + lw $t0 -404($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -340($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -376($fp) + move $a0 $t0 + lw $t0 -372($fp) + move $a1 $t0 + jal equal_str + sw $v0 -348($fp) + j label_168 + label_167: + lw $t0 -404($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -340($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -376($fp) + lw $t1 -372($fp) + seq $t0 $t0 $t1 + sw $t0 -348($fp) + j label_168 + label_168: + lw $t0 -348($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -380($fp) + lw $t0 -380($fp) + lw $t1 12($t0) + sw $t1 -384($fp) + lw $t0 -384($fp) + bne $t0 $zero label_187 + la $t0 data_71 + sw $t0 -292($fp) + lw $t0 -292($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -288($fp) + lw $t0 -404($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -316($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -312($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -308($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -304($fp) + lw $t0 -316($fp) + lw $t1 -312($fp) + seq $t0 $t0 $t1 + sw $t0 -300($fp) + lw $t0 -300($fp) + bne $t0 $zero label_169 + lw $t0 -316($fp) + lw $t1 -308($fp) + seq $t0 $t0 $t1 + sw $t0 -300($fp) + lw $t0 -300($fp) + bne $t0 $zero label_170 + lw $t0 -316($fp) + lw $t1 -304($fp) + seq $t0 $t0 $t1 + sw $t0 -300($fp) + lw $t0 -300($fp) + bne $t0 $zero label_171 + lw $t0 -404($fp) + lw $t1 -288($fp) + seq $t0 $t0 $t1 + sw $t0 -296($fp) + j label_172 + label_169: + lw $t0 -404($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -288($fp) + lw $t1 12($t0) + sw $t1 -320($fp) + lw $t0 -324($fp) + lw $t1 -320($fp) + seq $t0 $t0 $t1 + sw $t0 -296($fp) + j label_172 + label_170: + lw $t0 -404($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -288($fp) + lw $t1 12($t0) + sw $t1 -320($fp) + lw $t0 -324($fp) + move $a0 $t0 + lw $t0 -320($fp) + move $a1 $t0 + jal equal_str + sw $v0 -296($fp) + j label_172 + label_171: + lw $t0 -404($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -288($fp) + lw $t1 12($t0) + sw $t1 -320($fp) + lw $t0 -324($fp) + lw $t1 -320($fp) + seq $t0 $t0 $t1 + sw $t0 -296($fp) + j label_172 + label_172: + lw $t0 -296($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -328($fp) + lw $t0 -328($fp) + lw $t1 12($t0) + sw $t1 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_181 + lw $t0 -452($fp) + lw $t1 12($t0) + sw $t1 -264($fp) + li $t0 10 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -252($fp) + lw $t0 -252($fp) + lw $t1 12($t0) + sw $t1 -260($fp) + lw $t0 -264($fp) + lw $t1 -260($fp) + mul $t0 $t0 $t1 + sw $t0 -256($fp) + lw $t0 -256($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -268($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -280($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -244($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -240($fp) + lw $t0 -240($fp) + bne $t0 $zero label_173 + j label_174 + label_173: + li $v0 4 + la $a0 data_72 + syscall + li $v0 10 + syscall + label_174: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -432($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -244($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -236($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -236($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -248($fp) + lw $t0 -248($fp) + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t0 -280($fp) + lw $t1 -276($fp) + add $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -284($fp) + lw $t0 -284($fp) + sw $t0 -452($fp) + lw $t0 -432($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -216($fp) + lw $t0 -216($fp) + lw $t1 12($t0) + sw $t1 -224($fp) + lw $t0 -228($fp) + lw $t1 -224($fp) + add $t0 $t0 $t1 + sw $t0 -220($fp) + lw $t0 -220($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -232($fp) + lw $t0 -232($fp) + sw $t0 -432($fp) + lw $t0 -432($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -192($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -188($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -184($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -180($fp) + lw $t0 -192($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_175 + lw $t0 -192($fp) + lw $t1 -184($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_176 + lw $t0 -192($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_177 + lw $t0 -432($fp) + lw $t1 -444($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_178 + label_175: + lw $t0 -432($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -444($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_178 + label_176: + lw $t0 -432($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -444($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + move $a0 $t0 + lw $t0 -196($fp) + move $a1 $t0 + jal equal_str + sw $v0 -172($fp) + j label_178 + label_177: + lw $t0 -432($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t0 -444($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + j label_178 + label_178: + lw $t0 -172($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -204($fp) + lw $t0 -204($fp) + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_179 + la $t0 data_73 + sw $t0 -168($fp) + lw $t0 -168($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -164($fp) + lw $t0 -164($fp) + sw $t0 -212($fp) + j label_180 + label_179: + la $t0 data_74 + sw $t0 -160($fp) + lw $t0 -160($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -156($fp) + lw $t0 -156($fp) + lw $t1 4($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -212($fp) + label_180: + lw $t0 -212($fp) + sw $t0 -336($fp) + j label_186 + label_181: + lw $t0 -432($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -136($fp) + lw $t0 -136($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + add $t0 $t0 $t1 + sw $t0 -140($fp) + lw $t0 -140($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_182 + j label_183 + label_182: + li $v0 4 + la $a0 data_75 + syscall + li $v0 10 + syscall + label_183: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -96($fp) + lw $t0 -96($fp) + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -432($fp) + lw $t1 12($t0) + sw $t1 -108($fp) + lw $t0 -112($fp) + lw $t1 -108($fp) + sub $t0 $t0 $t1 + sw $t0 -104($fp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -116($fp) + lw $t0 -116($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -124($fp) + lw $t0 -128($fp) + lw $t1 -124($fp) + sub $t0 $t0 $t1 + sw $t0 -120($fp) + lw $t0 -120($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -132($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_184 + j label_185 + label_184: + li $v0 4 + la $a0 data_76 + syscall + li $v0 10 + syscall + label_185: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -152($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -132($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -84($fp) + lw $t0 -84($fp) + lw $t1 4($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t0 -444($fp) + sw $t0 -432($fp) + lw $t0 -432($fp) + sw $t0 -336($fp) + label_186: + lw $t0 -336($fp) + sw $t0 -388($fp) + j label_192 + label_187: + lw $t0 -432($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + add $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_188 + j label_189 + label_188: + li $v0 4 + la $a0 data_77 + syscall + li $v0 10 + syscall + label_189: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -432($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) + sub $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) + sub $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_190 + j label_191 + label_190: + li $v0 4 + la $a0 data_78 + syscall + li $v0 10 + syscall + label_191: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 4($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t0 -444($fp) + sw $t0 -432($fp) + lw $t0 -432($fp) + sw $t0 -388($fp) + label_192: + j label_161 + label_193: + lw $v0 -452($fp) + addi $sp $sp 452 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Parse: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 12 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Parse + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Parse + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 20($t0) + lw $v0 0($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -28 + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_194 + j label_195 + label_194: + li $v0 4 + la $a0 data_79 + syscall + li $v0 10 + syscall + label_195: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_196 + j label_197 + label_196: + li $v0 4 + la $a0 data_80 + syscall + li $v0 10 + syscall + label_197: + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 28 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + li $t0 13 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_BoolOp: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_and_at_BoolOp: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_198 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -20($fp) + j label_199 + label_198: + lw $t0 0($fp) + sw $t0 -20($fp) + label_199: + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_or_at_BoolOp: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_200 + lw $t0 0($fp) + sw $t0 -20($fp) + j label_201 + label_200: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -20($fp) + label_201: + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_BoolOp: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 14 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_BoolOp + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + jr $ra + \ No newline at end of file diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index c547c7a06..066937ad8 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -1,34 +1,34 @@ .data -default_str: .asciiz "" +default_str: .asciiz "" .word 0 -data_1: .asciiz "Object" +data_1: .asciiz "Object" .word 0 -data_2: .asciiz "IO" +data_2: .asciiz "IO" .word 0 -data_3: .asciiz "String" +data_3: .asciiz "String" .word 0 -data_4: .asciiz "Int" +data_4: .asciiz "Int" .word 0 -data_5: .asciiz "Bool" +data_5: .asciiz "Bool" .word 0 -data_6: .asciiz "Foo" +data_6: .asciiz "Foo" .word 0 -data_7: .asciiz "Bar" +data_7: .asciiz "Bar" .word 0 -data_8: .asciiz "Razz" +data_8: .asciiz "Razz" .word 0 -data_9: .asciiz "Bazz" +data_9: .asciiz "Bazz" .word 0 -data_10: .asciiz "Main" +data_10: .asciiz "Main" .word 0 data_11: .asciiz " -" +" .word 0 -data_12: .asciiz "" +data_12: .asciiz "" .word 0 -data_13: .asciiz "Abort called from class " +data_13: .asciiz "Abort called from class " .word 0 -data_14: .asciiz "Substring out of range" +data_14: .asciiz "Substring out of range" .word 0 data_15: .asciiz "RuntimeError: void in switch case" .word 0 @@ -52,7 +52,7 @@ data_24: .asciiz "RuntimeError: void in switch case" .word 0 data_25: .asciiz "RuntimeError: Case statement without a match branch" .word 0 -data_26: .asciiz "do nothing" +data_26: .asciiz "do nothing" types_table: @@ -281,1642 +281,1642 @@ type_10_prototype: .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 la $t0 data_13 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall la $t0 data_11 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 la $a0 data_14 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_attr_at_Foo: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -144 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Bazz - addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -144 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Bazz + addi $sp $sp 4 + sw $v0 -132($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -120($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 la $a0 data_15 - syscall - li $v0 10 - syscall - label_4: + syscall + li $v0 10 + syscall + label_4: la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_5 + addi $t0 $t0 24 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_5 la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_6 + addi $t0 $t0 28 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_6 la $t0 types_table - addi $t0 $t0 20 - lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_7 - li $v0 4 + addi $t0 $t0 20 + lw $t0 0($t0) + sw $t0 -108($fp) + lw $t0 -108($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_7 + li $v0 4 la $a0 data_16 - syscall - li $v0 10 - syscall - label_5: - lw $t0 0($fp) - sw $t0 -104($fp) - lw $t0 -104($fp) - sw $t0 -124($fp) - j label_8 - label_6: - lw $t0 0($fp) - sw $t0 -100($fp) - jal __init_at_Bar - sw $v0 -96($fp) - lw $t0 -96($fp) - sw $t0 -124($fp) - j label_8 - label_7: - lw $t0 0($fp) - sw $t0 -92($fp) - jal __init_at_Razz - sw $v0 -88($fp) - lw $t0 -88($fp) - sw $t0 -124($fp) - j label_8 - label_8: - lw $t0 -124($fp) - sw $t0 -128($fp) - lw $t0 0($fp) - lw $t1 -128($fp) - sw $t1 24($t0) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 + syscall + li $v0 10 + syscall + label_5: + lw $t0 0($fp) + sw $t0 -104($fp) + lw $t0 -104($fp) + sw $t0 -124($fp) + j label_8 + label_6: + lw $t0 0($fp) + sw $t0 -100($fp) + jal __init_at_Bar + sw $v0 -96($fp) + lw $t0 -96($fp) + sw $t0 -124($fp) + j label_8 + label_7: + lw $t0 0($fp) + sw $t0 -92($fp) + jal __init_at_Razz + sw $v0 -88($fp) + lw $t0 -88($fp) + sw $t0 -124($fp) + j label_8 + label_8: + lw $t0 -124($fp) + sw $t0 -128($fp) + lw $t0 0($fp) + lw $t1 -128($fp) + sw $t1 24($t0) + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 la $a0 data_17 - syscall - li $v0 10 - syscall - label_10: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 + syscall + li $v0 10 + syscall + label_10: + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_11 + j label_12 + label_11: + li $v0 4 la $a0 data_18 - syscall - li $v0 10 - syscall - label_12: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - add $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - add $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -84($fp) - lw $t0 0($fp) - lw $t1 -84($fp) - sw $t1 28($t0) - lw $v0 0($fp) - addi $sp $sp 144 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + syscall + li $v0 10 + syscall + label_12: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + add $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + add $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + sw $t0 -84($fp) + lw $t0 0($fp) + lw $t1 -84($fp) + sw $t1 28($t0) + lw $v0 0($fp) + addi $sp $sp 144 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_doh_at_Foo: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -44 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -32($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 -32($fp) - addi $sp $sp 44 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -44 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -32($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $v0 -32($fp) + addi $sp $sp 44 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_Foo: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - li $t0 5 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -28 + li $t0 5 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Foo - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Foo + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 28 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_attr_at_Bar: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Razz - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -24($fp) - lw $t0 0($fp) - lw $t1 -24($fp) - sw $t1 40($t0) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 44($t0) - lw $v0 0($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -56 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Razz + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -24($fp) + lw $t0 0($fp) + lw $t1 -24($fp) + sw $t1 40($t0) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 44($t0) + lw $v0 0($fp) + addi $sp $sp 56 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_Bar: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -44 - li $t0 6 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -44 + li $t0 6 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Bar - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 44 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Bar + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 44 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_attr_at_Razz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -168 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Foo - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -168 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Foo + addi $sp $sp 4 + sw $v0 -148($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -136($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -136($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 la $a0 data_19 - syscall - li $v0 10 - syscall - label_14: + syscall + li $v0 10 + syscall + label_14: la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -124($fp) - lw $t0 -124($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_15 + addi $t0 $t0 24 + lw $t0 0($t0) + sw $t0 -124($fp) + lw $t0 -124($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_15 la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -124($fp) - lw $t0 -124($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_16 - li $v0 4 + addi $t0 $t0 28 + lw $t0 0($t0) + sw $t0 -124($fp) + lw $t0 -124($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_16 + li $v0 4 la $a0 data_20 - syscall - li $v0 10 - syscall - label_15: - lw $t0 0($fp) - sw $t0 -120($fp) - lw $t0 -120($fp) - sw $t0 -140($fp) - j label_17 - label_16: - lw $t0 0($fp) - sw $t0 -116($fp) - jal __init_at_Bar - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -140($fp) - j label_17 - label_17: - lw $t0 -140($fp) - sw $t0 -144($fp) - lw $t0 0($fp) - lw $t1 -144($fp) - sw $t1 32($t0) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_18 - j label_19 - label_18: - li $v0 4 + syscall + li $v0 10 + syscall + label_15: + lw $t0 0($fp) + sw $t0 -120($fp) + lw $t0 -120($fp) + sw $t0 -140($fp) + j label_17 + label_16: + lw $t0 0($fp) + sw $t0 -116($fp) + jal __init_at_Bar + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -140($fp) + j label_17 + label_17: + lw $t0 -140($fp) + sw $t0 -144($fp) + lw $t0 0($fp) + lw $t1 -144($fp) + sw $t1 32($t0) + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_18 + j label_19 + label_18: + li $v0 4 la $a0 data_21 - syscall - li $v0 10 - syscall - label_19: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal function_doh_at_Foo - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_20 - j label_21 - label_20: - li $v0 4 + syscall + li $v0 10 + syscall + label_19: + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal function_doh_at_Bazz + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_20 + j label_21 + label_20: + li $v0 4 la $a0 data_22 - syscall - li $v0 10 - syscall - label_21: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - add $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t4 0($fp) - lw $t4 32($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_22 - j label_23 - label_22: - li $v0 4 + syscall + li $v0 10 + syscall + label_21: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + add $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t4 0($fp) + lw $t4 32($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_22 + j label_23 + label_22: + li $v0 4 la $a0 data_23 - syscall - li $v0 10 - syscall - label_23: - lw $t4 0($fp) - lw $t4 32($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 32($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - add $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - add $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - add $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - sw $t0 -108($fp) - lw $t0 0($fp) - lw $t1 -108($fp) - sw $t1 36($t0) - lw $v0 0($fp) - addi $sp $sp 168 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + syscall + li $v0 10 + syscall + label_23: + lw $t4 0($fp) + lw $t4 32($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 32($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -68($fp) + lw $t1 -64($fp) + add $t0 $t0 $t1 + sw $t0 -60($fp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) + add $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -88($fp) + lw $t0 -88($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + add $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 -104($fp) + sw $t0 -108($fp) + lw $t0 0($fp) + lw $t1 -108($fp) + sw $t1 36($t0) + lw $v0 0($fp) + addi $sp $sp 168 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_Razz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - li $t0 7 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + li $t0 7 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Razz - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Razz + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_attr_at_Bazz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -80 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -76($fp) - lw $t0 0($fp) - lw $t1 -76($fp) - sw $t1 16($t0) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -80 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -76($fp) + lw $t0 0($fp) + lw $t1 -76($fp) + sw $t1 16($t0) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_24 - j label_25 - label_24: - li $v0 4 + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -60($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_24 + j label_25 + label_24: + li $v0 4 la $a0 data_24 - syscall - li $v0 10 - syscall - label_25: + syscall + li $v0 10 + syscall + label_25: la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -48($fp) - lw $t0 -48($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_26 + addi $t0 $t0 24 + lw $t0 0($t0) + sw $t0 -48($fp) + lw $t0 -48($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_26 la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -48($fp) - lw $t0 -48($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_27 + addi $t0 $t0 28 + lw $t0 0($t0) + sw $t0 -48($fp) + lw $t0 -48($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_27 la $t0 types_table - addi $t0 $t0 20 - lw $t0 0($t0) - sw $t0 -48($fp) - lw $t0 -48($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_28 + addi $t0 $t0 20 + lw $t0 0($t0) + sw $t0 -48($fp) + lw $t0 -48($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_28 la $t0 types_table - addi $t0 $t0 32 - lw $t0 0($t0) - sw $t0 -48($fp) - lw $t0 -48($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_29 - li $v0 4 + addi $t0 $t0 32 + lw $t0 0($t0) + sw $t0 -48($fp) + lw $t0 -48($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_29 + li $v0 4 la $a0 data_25 - syscall - li $v0 10 - syscall - label_26: - lw $t0 0($fp) - sw $t0 -44($fp) - lw $t0 -44($fp) - sw $t0 -64($fp) - j label_30 - label_27: - lw $t0 0($fp) - sw $t0 -40($fp) - jal __init_at_Bar - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -64($fp) - j label_30 - label_28: - lw $t0 0($fp) - sw $t0 -32($fp) - jal __init_at_Razz - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -64($fp) - j label_30 - label_29: - lw $t0 0($fp) - sw $t0 -24($fp) - jal __init_at_Foo - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -64($fp) - j label_30 - label_30: - lw $t0 -64($fp) - sw $t0 -68($fp) - lw $t0 0($fp) - lw $t1 -68($fp) - sw $t1 12($t0) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 20($t0) - lw $v0 0($fp) - addi $sp $sp 80 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + syscall + li $v0 10 + syscall + label_26: + lw $t0 0($fp) + sw $t0 -44($fp) + lw $t0 -44($fp) + sw $t0 -64($fp) + j label_30 + label_27: + lw $t0 0($fp) + sw $t0 -40($fp) + jal __init_at_Bar + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -64($fp) + j label_30 + label_28: + lw $t0 0($fp) + sw $t0 -32($fp) + jal __init_at_Razz + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -64($fp) + j label_30 + label_29: + lw $t0 0($fp) + sw $t0 -24($fp) + jal __init_at_Foo + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -64($fp) + j label_30 + label_30: + lw $t0 -64($fp) + sw $t0 -68($fp) + lw $t0 0($fp) + lw $t1 -68($fp) + sw $t1 12($t0) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 20($t0) + lw $v0 0($fp) + addi $sp $sp 80 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_printh_at_Bazz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -16($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -16($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_doh_at_Bazz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -32($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 -32($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -32($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 0($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $v0 -32($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_Bazz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 8 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + li $t0 8 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Bazz - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Bazz + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -48 - jal __init_at_Bazz - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -40($fp) - lw $t0 0($fp) - lw $t1 -40($fp) - sw $t1 12($t0) - jal __init_at_Foo - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -32($fp) - lw $t0 0($fp) - lw $t1 -32($fp) - sw $t1 16($t0) - jal __init_at_Razz - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -24($fp) - lw $t0 0($fp) - lw $t1 -24($fp) - sw $t1 20($t0) - jal __init_at_Bar - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 24($t0) - lw $v0 0($fp) - addi $sp $sp 48 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -48 + jal __init_at_Bazz + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -40($fp) + lw $t0 0($fp) + lw $t1 -40($fp) + sw $t1 12($t0) + jal __init_at_Foo + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -32($fp) + lw $t0 0($fp) + lw $t1 -32($fp) + sw $t1 16($t0) + jal __init_at_Razz + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -24($fp) + lw $t0 0($fp) + lw $t1 -24($fp) + sw $t1 20($t0) + jal __init_at_Bar + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 24($t0) + lw $v0 0($fp) + addi $sp $sp 48 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 la $t0 data_26 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 9 - sll $t0 $t0 2 + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + li $t0 9 + sll $t0 $t0 2 la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips new file mode 100644 index 000000000..ad702988a --- /dev/null +++ b/tests/codegen/hello_world.mips @@ -0,0 +1,1097 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz " +" +.word 0 +data_8: .asciiz "" +.word 0 +data_9: .asciiz "Abort called from class " +.word 0 +data_10: .asciiz "Substring out of range" +.word 0 +data_11: .asciiz "Hello, World.\n" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_6_prototype: + .word 5 + .word 4 + .word type_6_dispatch + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_9 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_7 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_10 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + la $t0 data_11 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $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 000000000..d110fa260 --- /dev/null +++ b/tests/codegen/io.mips @@ -0,0 +1,1750 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "A" +.word 0 +data_7: .asciiz "B" +.word 0 +data_8: .asciiz "C" +.word 0 +data_9: .asciiz "D" +.word 0 +data_10: .asciiz "Main" +.word 0 +data_11: .asciiz " +" +.word 0 +data_12: .asciiz "" +.word 0 +data_13: .asciiz "Abort called from class " +.word 0 +data_14: .asciiz "Substring out of range" +.word 0 +data_15: .asciiz "A: Hello world\n" +.word 0 +data_16: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_17: .asciiz "B: Hello world\n" +.word 0 +data_18: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_19: .asciiz "C: Hello world\n" +.word 0 +data_20: .asciiz "D: Hello world\n" +.word 0 +data_21: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_22: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_23: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_24: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_25: .asciiz "Done.\n" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + .word data_8 + .word data_9 + .word data_10 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_out_a_at_A + .word __init_attr_at_A + .word __init_at_A + +type_6_prototype: + .word 5 + .word 5 + .word type_6_dispatch + .word 0 + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_out_a_at_A + .word function_out_b_at_B + .word __init_attr_at_B + .word __init_at_B + +type_7_prototype: + .word 6 + .word 5 + .word type_7_dispatch + .word 0 + .word -1 + + +type_8_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_out_c_at_C + .word __init_attr_at_C + .word __init_at_C + +type_8_prototype: + .word 7 + .word 4 + .word type_8_dispatch + .word -1 + + +type_9_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_out_c_at_C + .word function_out_d_at_D + .word __init_attr_at_D + .word __init_at_D + +type_9_prototype: + .word 8 + .word 4 + .word type_9_dispatch + .word -1 + + +type_10_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_10_prototype: + .word 9 + .word 4 + .word type_10_dispatch + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_13 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_11 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_A: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + jal __init_at_IO + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_a_at_A: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + la $t0 data_15 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_16 + syscall + li $v0 10 + syscall + label_4: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_A: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_A + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_B: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_A + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_b_at_B: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + la $t0 data_17 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_6: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_B: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_B + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_C: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_c_at_C: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + la $t0 data_19 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_C: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 7 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_C + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_D: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_C + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_d_at_D: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + la $t0 data_20 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_D: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 8 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_D + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -60 + jal __init_at_A + sw $v0 -68($fp) + lw $t0 -68($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_8: + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -60($fp) + jal __init_at_B + sw $v0 -56($fp) + lw $t0 -56($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_10: + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -48($fp) + jal __init_at_C + sw $v0 -44($fp) + lw $t0 -44($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_11 + j label_12 + label_11: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_12: + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -36($fp) + jal __init_at_D + sw $v0 -32($fp) + lw $t0 -32($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 + la $a0 data_24 + syscall + li $v0 10 + syscall + label_14: + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -24($fp) + la $t0 data_25 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $v0 -20($fp) + addi $sp $sp 60 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 9 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + 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 000000000..dc02cd957 --- /dev/null +++ b/tests/codegen/life.mips @@ -0,0 +1,10485 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Board" +.word 0 +data_7: .asciiz "CellularAutomaton" +.word 0 +data_8: .asciiz "Main" +.word 0 +data_9: .asciiz " +" +.word 0 +data_10: .asciiz "" +.word 0 +data_11: .asciiz "Abort called from class " +.word 0 +data_12: .asciiz "Substring out of range" +.word 0 +data_13: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_14: .asciiz "\n" +.word 0 +data_15: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_16: .asciiz "\n" +.word 0 +data_17: .asciiz "\n" +.word 0 +data_18: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_19: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_20: .asciiz " " +.word 0 +data_21: .asciiz " " +.word 0 +data_22: .asciiz " " +.word 0 +data_23: .asciiz "RuntimeError: Division by zero" +.word 0 +data_24: .asciiz " " +.word 0 +data_25: .asciiz "RuntimeError: Division by zero" +.word 0 +data_26: .asciiz " " +.word 0 +data_27: .asciiz " " +.word 0 +data_28: .asciiz "RuntimeError: Division by zero" +.word 0 +data_29: .asciiz " " +.word 0 +data_30: .asciiz " " +.word 0 +data_31: .asciiz "RuntimeError: Division by zero" +.word 0 +data_32: .asciiz " " +.word 0 +data_33: .asciiz " " +.word 0 +data_34: .asciiz "RuntimeError: Division by zero" +.word 0 +data_35: .asciiz " " +.word 0 +data_36: .asciiz " " +.word 0 +data_37: .asciiz "RuntimeError: Division by zero" +.word 0 +data_38: .asciiz " " +.word 0 +data_39: .asciiz " " +.word 0 +data_40: .asciiz "X" +.word 0 +data_41: .asciiz "X" +.word 0 +data_42: .asciiz "X" +.word 0 +data_43: .asciiz "X" +.word 0 +data_44: .asciiz "X" +.word 0 +data_45: .asciiz "X" +.word 0 +data_46: .asciiz "X" +.word 0 +data_47: .asciiz "X" +.word 0 +data_48: .asciiz "-" +.word 0 +data_49: .asciiz "X" +.word 0 +data_50: .asciiz "-" +.word 0 +data_51: .asciiz "X" +.word 0 +data_52: .asciiz "X" +.word 0 +data_53: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_54: .asciiz "\nPlease chose a number:\n" +.word 0 +data_55: .asciiz "\t1: A cross\n" +.word 0 +data_56: .asciiz "\t2: A slash from the upper left to lower right\n" +.word 0 +data_57: .asciiz "\t3: A slash from the upper right to lower left\n" +.word 0 +data_58: .asciiz "\t4: An X\n" +.word 0 +data_59: .asciiz "\t5: A greater than sign \n" +.word 0 +data_60: .asciiz "\t6: A less than sign\n" +.word 0 +data_61: .asciiz "\t7: Two greater than signs\n" +.word 0 +data_62: .asciiz "\t8: Two less than signs\n" +.word 0 +data_63: .asciiz "\t9: A 'V'\n" +.word 0 +data_64: .asciiz "\t10: An inverse 'V'\n" +.word 0 +data_65: .asciiz "\t11: Numbers 9 and 10 combined\n" +.word 0 +data_66: .asciiz "\t12: A full grid\n" +.word 0 +data_67: .asciiz "\t13: A 'T'\n" +.word 0 +data_68: .asciiz "\t14: A plus '+'\n" +.word 0 +data_69: .asciiz "\t15: A 'W'\n" +.word 0 +data_70: .asciiz "\t16: An 'M'\n" +.word 0 +data_71: .asciiz "\t17: An 'E'\n" +.word 0 +data_72: .asciiz "\t18: A '3'\n" +.word 0 +data_73: .asciiz "\t19: An 'O'\n" +.word 0 +data_74: .asciiz "\t20: An '8'\n" +.word 0 +data_75: .asciiz "\t21: An 'S'\n" +.word 0 +data_76: .asciiz "Your choice => " +.word 0 +data_77: .asciiz "\n" +.word 0 +data_78: .asciiz " " +.word 0 +data_79: .asciiz " XXXX X XX X XXXX " +.word 0 +data_80: .asciiz " XX X XX X XX X XX X XX " +.word 0 +data_81: .asciiz " XX X XX X XX " +.word 0 +data_82: .asciiz "XXX X X X X XXXX " +.word 0 +data_83: .asciiz "XXXXX X XXXXX X XXXX" +.word 0 +data_84: .asciiz " X X X X X X X" +.word 0 +data_85: .asciiz "X X X X X X X " +.word 0 +data_86: .asciiz " X X XXXXX X X " +.word 0 +data_87: .asciiz "XXXXX X X X X " +.word 0 +data_88: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" +.word 0 +data_89: .asciiz "X X X X X X X X" +.word 0 +data_90: .asciiz " X X X X X" +.word 0 +data_91: .asciiz "X X X X X " +.word 0 +data_92: .asciiz " X XX X X X " +.word 0 +data_93: .asciiz "X X X XX X " +.word 0 +data_94: .asciiz " X X X X X" +.word 0 +data_95: .asciiz "X X X X X " +.word 0 +data_96: .asciiz "X X X X X X X X X" +.word 0 +data_97: .asciiz "X X X X X" +.word 0 +data_98: .asciiz " X X X X X " +.word 0 +data_99: .asciiz " XX XXXX XXXX XX " +.word 0 +data_100: .asciiz "Would you like to continue with the next generation? \n" +.word 0 +data_101: .asciiz "Please use lowercase y or n for your answer [y]: " +.word 0 +data_102: .asciiz "\n" +.word 0 +data_103: .asciiz "n" +.word 0 +data_104: .asciiz "\n\n" +.word 0 +data_105: .asciiz "Would you like to choose a background pattern? \n" +.word 0 +data_106: .asciiz "Please use lowercase y or n for your answer [n]: " +.word 0 +data_107: .asciiz "y" +.word 0 +data_108: .asciiz "Welcome to the Game of Life.\n" +.word 0 +data_109: .asciiz "There are many initial states to choose from. \n" +.word 0 +data_110: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_111: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_112: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_113: .asciiz "RuntimeError: Function call in a void instance" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + .word data_8 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_board_init_at_Board + .word function_size_of_board_at_Board + .word __init_attr_at_Board + .word __init_at_Board + +type_6_prototype: + .word 5 + .word 7 + .word type_6_dispatch + .word 0 + .word 0 + .word 0 + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_board_init_at_Board + .word function_size_of_board_at_Board + .word function_cell_at_CellularAutomaton + .word function_cell_at_next_evolution_at_CellularAutomaton + .word function_east_at_CellularAutomaton + .word function_evolve_at_CellularAutomaton + .word function_init_at_CellularAutomaton + .word function_neighbors_at_CellularAutomaton + .word function_north_at_CellularAutomaton + .word function_northeast_at_CellularAutomaton + .word function_northwest_at_CellularAutomaton + .word function_num_cells_at_CellularAutomaton + .word function_option_at_CellularAutomaton + .word function_print_at_CellularAutomaton + .word function_prompt_at_CellularAutomaton + .word function_prompt2_at_CellularAutomaton + .word function_south_at_CellularAutomaton + .word function_southeast_at_CellularAutomaton + .word function_southwest_at_CellularAutomaton + .word function_west_at_CellularAutomaton + .word __init_attr_at_CellularAutomaton + .word __init_at_CellularAutomaton + +type_7_prototype: + .word 6 + .word 8 + .word type_7_dispatch + .word 0 + .word 0 + .word 0 + .word 0 + .word -1 + + +type_8_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_board_init_at_Board + .word function_size_of_board_at_Board + .word function_cell_at_CellularAutomaton + .word function_cell_at_next_evolution_at_CellularAutomaton + .word function_east_at_CellularAutomaton + .word function_evolve_at_CellularAutomaton + .word function_init_at_CellularAutomaton + .word function_neighbors_at_CellularAutomaton + .word function_north_at_CellularAutomaton + .word function_northeast_at_CellularAutomaton + .word function_northwest_at_CellularAutomaton + .word function_num_cells_at_CellularAutomaton + .word function_option_at_CellularAutomaton + .word function_print_at_CellularAutomaton + .word function_prompt_at_CellularAutomaton + .word function_prompt2_at_CellularAutomaton + .word function_south_at_CellularAutomaton + .word function_southeast_at_CellularAutomaton + .word function_southwest_at_CellularAutomaton + .word function_west_at_CellularAutomaton + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_8_prototype: + .word 7 + .word 9 + .word type_8_dispatch + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_11 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_9 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_12 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Board: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 0($fp) + lw $t1 -20($fp) + sw $t1 20($t0) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 16($t0) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_size_of_board_at_Board: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_13 + syscall + li $v0 10 + syscall + label_4: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_board_init_at_Board: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -364 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -356($fp) + lw $t0 -356($fp) + sw $t0 -360($fp) + li $t0 15 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -308($fp) + lw $t0 -360($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -332($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -328($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -324($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -320($fp) + lw $t0 -332($fp) + lw $t1 -328($fp) + seq $t0 $t0 $t1 + sw $t0 -316($fp) + lw $t0 -316($fp) + bne $t0 $zero label_5 + lw $t0 -332($fp) + lw $t1 -324($fp) + seq $t0 $t0 $t1 + sw $t0 -316($fp) + lw $t0 -316($fp) + bne $t0 $zero label_6 + lw $t0 -332($fp) + lw $t1 -320($fp) + seq $t0 $t0 $t1 + sw $t0 -316($fp) + lw $t0 -316($fp) + bne $t0 $zero label_7 + lw $t0 -360($fp) + lw $t1 -308($fp) + seq $t0 $t0 $t1 + sw $t0 -312($fp) + j label_8 + label_5: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -340($fp) + lw $t0 -308($fp) + lw $t1 12($t0) + sw $t1 -336($fp) + lw $t0 -340($fp) + lw $t1 -336($fp) + seq $t0 $t0 $t1 + sw $t0 -312($fp) + j label_8 + label_6: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -340($fp) + lw $t0 -308($fp) + lw $t1 12($t0) + sw $t1 -336($fp) + lw $t0 -340($fp) + move $a0 $t0 + lw $t0 -336($fp) + move $a1 $t0 + jal equal_str + sw $v0 -312($fp) + j label_8 + label_7: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -340($fp) + lw $t0 -308($fp) + lw $t1 12($t0) + sw $t1 -336($fp) + lw $t0 -340($fp) + lw $t1 -336($fp) + seq $t0 $t0 $t1 + sw $t0 -312($fp) + j label_8 + label_8: + lw $t0 -312($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -344($fp) + lw $t0 -344($fp) + lw $t1 12($t0) + sw $t1 -348($fp) + lw $t0 -348($fp) + bne $t0 $zero label_39 + li $t0 16 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -260($fp) + lw $t0 -360($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -284($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -280($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -276($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -272($fp) + lw $t0 -284($fp) + lw $t1 -280($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + lw $t0 -268($fp) + bne $t0 $zero label_9 + lw $t0 -284($fp) + lw $t1 -276($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + lw $t0 -268($fp) + bne $t0 $zero label_10 + lw $t0 -284($fp) + lw $t1 -272($fp) + seq $t0 $t0 $t1 + sw $t0 -268($fp) + lw $t0 -268($fp) + bne $t0 $zero label_11 + lw $t0 -360($fp) + lw $t1 -260($fp) + seq $t0 $t0 $t1 + sw $t0 -264($fp) + j label_12 + label_9: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -288($fp) + lw $t0 -292($fp) + lw $t1 -288($fp) + seq $t0 $t0 $t1 + sw $t0 -264($fp) + j label_12 + label_10: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -288($fp) + lw $t0 -292($fp) + move $a0 $t0 + lw $t0 -288($fp) + move $a1 $t0 + jal equal_str + sw $v0 -264($fp) + j label_12 + label_11: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -260($fp) + lw $t1 12($t0) + sw $t1 -288($fp) + lw $t0 -292($fp) + lw $t1 -288($fp) + seq $t0 $t0 $t1 + sw $t0 -264($fp) + j label_12 + label_12: + lw $t0 -264($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -296($fp) + lw $t0 -296($fp) + lw $t1 12($t0) + sw $t1 -300($fp) + lw $t0 -300($fp) + bne $t0 $zero label_37 + li $t0 20 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -212($fp) + lw $t0 -360($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -236($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -232($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -228($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -224($fp) + lw $t0 -236($fp) + lw $t1 -232($fp) + seq $t0 $t0 $t1 + sw $t0 -220($fp) + lw $t0 -220($fp) + bne $t0 $zero label_13 + lw $t0 -236($fp) + lw $t1 -228($fp) + seq $t0 $t0 $t1 + sw $t0 -220($fp) + lw $t0 -220($fp) + bne $t0 $zero label_14 + lw $t0 -236($fp) + lw $t1 -224($fp) + seq $t0 $t0 $t1 + sw $t0 -220($fp) + lw $t0 -220($fp) + bne $t0 $zero label_15 + lw $t0 -360($fp) + lw $t1 -212($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + j label_16 + label_13: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -244($fp) + lw $t0 -212($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + j label_16 + label_14: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -244($fp) + lw $t0 -212($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -244($fp) + move $a0 $t0 + lw $t0 -240($fp) + move $a1 $t0 + jal equal_str + sw $v0 -216($fp) + j label_16 + label_15: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -244($fp) + lw $t0 -212($fp) + lw $t1 12($t0) + sw $t1 -240($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) + seq $t0 $t0 $t1 + sw $t0 -216($fp) + j label_16 + label_16: + lw $t0 -216($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -248($fp) + lw $t0 -248($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -252($fp) + bne $t0 $zero label_35 + li $t0 21 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -164($fp) + lw $t0 -360($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -188($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -184($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -180($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -176($fp) + lw $t0 -188($fp) + lw $t1 -184($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + lw $t0 -172($fp) + bne $t0 $zero label_17 + lw $t0 -188($fp) + lw $t1 -180($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + lw $t0 -172($fp) + bne $t0 $zero label_18 + lw $t0 -188($fp) + lw $t1 -176($fp) + seq $t0 $t0 $t1 + sw $t0 -172($fp) + lw $t0 -172($fp) + bne $t0 $zero label_19 + lw $t0 -360($fp) + lw $t1 -164($fp) + seq $t0 $t0 $t1 + sw $t0 -168($fp) + j label_20 + label_17: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -192($fp) + lw $t0 -196($fp) + lw $t1 -192($fp) + seq $t0 $t0 $t1 + sw $t0 -168($fp) + j label_20 + label_18: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -192($fp) + lw $t0 -196($fp) + move $a0 $t0 + lw $t0 -192($fp) + move $a1 $t0 + jal equal_str + sw $v0 -168($fp) + j label_20 + label_19: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -192($fp) + lw $t0 -196($fp) + lw $t1 -192($fp) + seq $t0 $t0 $t1 + sw $t0 -168($fp) + j label_20 + label_20: + lw $t0 -168($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -200($fp) + lw $t0 -200($fp) + lw $t1 12($t0) + sw $t1 -204($fp) + lw $t0 -204($fp) + bne $t0 $zero label_33 + li $t0 25 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -116($fp) + lw $t0 -360($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -140($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -136($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -132($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -128($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_21 + lw $t0 -140($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_22 + lw $t0 -140($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_23 + lw $t0 -360($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_24 + label_21: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -116($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_24 + label_22: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -116($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + move $a0 $t0 + lw $t0 -144($fp) + move $a1 $t0 + jal equal_str + sw $v0 -120($fp) + j label_24 + label_23: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -116($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_24 + label_24: + lw $t0 -120($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -156($fp) + bne $t0 $zero label_31 + li $t0 28 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -360($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -92($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -88($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -84($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -80($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_25 + lw $t0 -92($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_26 + lw $t0 -92($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_27 + lw $t0 -360($fp) + lw $t1 -68($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + j label_28 + label_25: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + j label_28 + label_26: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + move $a0 $t0 + lw $t0 -96($fp) + move $a1 $t0 + jal equal_str + sw $v0 -72($fp) + j label_28 + label_27: + lw $t0 -360($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + j label_28 + label_28: + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_29 + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 4($fp) + addi $t1 $t1 20 + sw $t0 0($t1) + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 -60($fp) + lw $t1 4($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t0 -360($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -112($fp) + j label_30 + label_29: + li $t0 7 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 4($fp) + addi $t1 $t1 20 + sw $t0 0($t1) + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + lw $t1 4($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t0 -360($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -112($fp) + label_30: + lw $t0 -112($fp) + sw $t0 -160($fp) + j label_32 + label_31: + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 4($fp) + addi $t1 $t1 20 + sw $t0 0($t1) + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + lw $t1 4($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t0 -360($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -160($fp) + label_32: + lw $t0 -160($fp) + sw $t0 -208($fp) + j label_34 + label_33: + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + lw $t1 4($fp) + addi $t1 $t1 20 + sw $t0 0($t1) + li $t0 7 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + lw $t1 4($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t0 -360($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -208($fp) + label_34: + lw $t0 -208($fp) + sw $t0 -256($fp) + j label_36 + label_35: + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + lw $t1 4($fp) + addi $t1 $t1 20 + sw $t0 0($t1) + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 4($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t0 -360($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -256($fp) + label_36: + lw $t0 -256($fp) + sw $t0 -304($fp) + j label_38 + label_37: + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 -24($fp) + lw $t1 4($fp) + addi $t1 $t1 20 + sw $t0 0($t1) + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 4($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t0 -360($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -304($fp) + label_38: + lw $t0 -304($fp) + sw $t0 -352($fp) + j label_40 + label_39: + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + lw $t1 4($fp) + addi $t1 $t1 20 + sw $t0 0($t1) + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 4($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $t0 -360($fp) + lw $t1 4($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -352($fp) + label_40: + lw $v0 4($fp) + addi $sp $sp 364 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Board: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Board + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Board + addi $sp $sp 4 + sw $v0 -16($fp) + la $t0 data_10 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 24($t0) + lw $v0 0($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_init_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + lw $t0 0($fp) + lw $t1 4($fp) + addi $t1 $t1 24 + sw $t0 0($t1) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 4($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -112 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -100($fp) + sw $t0 -104($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -96($fp) + la $t0 data_14 + sw $t0 -88($fp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -84($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -92($fp) + label_41: + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -96($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t0 -72($fp) + lw $t1 -68($fp) + slt $t1 $t0 $t1 + sw $t1 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_42 + j label_45 + label_42: + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_43 + j label_44 + label_43: + li $v0 4 + la $a0 data_15 + syscall + li $v0 10 + syscall + label_44: + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -52($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -60($fp) + la $t0 data_16 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -48($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -32($fp) + lw $t1 -28($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -104($fp) + j label_41 + label_45: + la $t0 data_17 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $v0 0($fp) + addi $sp $sp 112 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_num_cells_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_46 + j label_47 + label_46: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_47: + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cell_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -80 + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -44($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + sub $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + slt $t1 $t0 $t1 + sw $t1 -52($fp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_50 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t4 4($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_48 + j label_49 + label_48: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_49: + lw $t4 4($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 4($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -72($fp) + j label_51 + label_50: + la $t0 data_20 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -72($fp) + label_51: + lw $v0 -72($fp) + addi $sp $sp 80 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_north_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -88 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + sub $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -68($fp) + lw $t1 -64($fp) + slt $t1 $t0 $t1 + sw $t1 -60($fp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_52 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + sub $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -80($fp) + j label_53 + label_52: + la $t0 data_21 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -80($fp) + label_53: + lw $v0 -80($fp) + addi $sp $sp 88 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_south_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -84 + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -44($fp) + lw $t0 -48($fp) + lw $t1 -44($fp) + add $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) + slt $t1 $t0 $t1 + sw $t1 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_54 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + add $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -76($fp) + j label_55 + label_54: + la $t0 data_22 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -76($fp) + label_55: + lw $v0 -76($fp) + addi $sp $sp 84 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_east_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -168 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + add $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -84($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_56 + j label_57 + label_56: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_57: + lw $t0 -96($fp) + lw $t1 -92($fp) + div $t0 $t1 + mflo $t0 + sw $t0 -88($fp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -108($fp) + lw $t0 -112($fp) + lw $t1 -108($fp) + mul $t0 $t0 $t1 + sw $t0 -104($fp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -116($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) + add $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 -116($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -140($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -136($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -132($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -128($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_58 + lw $t0 -140($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_59 + lw $t0 -140($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_60 + lw $t0 -116($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_61 + label_58: + lw $t0 -116($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_61 + label_59: + lw $t0 -116($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + move $a0 $t0 + lw $t0 -144($fp) + move $a1 $t0 + jal equal_str + sw $v0 -120($fp) + j label_61 + label_60: + lw $t0 -116($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -120($fp) + j label_61 + label_61: + lw $t0 -120($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -156($fp) + bne $t0 $zero label_62 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -32($fp) + lw $t1 -28($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -160($fp) + j label_63 + label_62: + la $t0 data_24 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -160($fp) + label_63: + lw $v0 -160($fp) + addi $sp $sp 168 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_west_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -184 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -132($fp) + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -156($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -152($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -148($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -144($fp) + lw $t0 -156($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_64 + lw $t0 -156($fp) + lw $t1 -148($fp) + seq $t0 $t0 $t1 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_65 + lw $t0 -156($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_66 + lw $t0 0($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -136($fp) + j label_67 + label_64: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -164($fp) + lw $t0 -132($fp) + lw $t1 12($t0) + sw $t1 -160($fp) + lw $t0 -164($fp) + lw $t1 -160($fp) + seq $t0 $t0 $t1 + sw $t0 -136($fp) + j label_67 + label_65: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -164($fp) + lw $t0 -132($fp) + lw $t1 12($t0) + sw $t1 -160($fp) + lw $t0 -164($fp) + move $a0 $t0 + lw $t0 -160($fp) + move $a1 $t0 + jal equal_str + sw $v0 -136($fp) + j label_67 + label_66: + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -164($fp) + lw $t0 -132($fp) + lw $t1 12($t0) + sw $t1 -160($fp) + lw $t0 -164($fp) + lw $t1 -160($fp) + seq $t0 $t0 $t1 + sw $t0 -136($fp) + j label_67 + label_67: + lw $t0 -136($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -168($fp) + lw $t0 -168($fp) + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -172($fp) + bne $t0 $zero label_76 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -52($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_68 + j label_69 + label_68: + li $v0 4 + la $a0 data_25 + syscall + li $v0 10 + syscall + label_69: + lw $t0 -64($fp) + lw $t1 -60($fp) + div $t0 $t1 + mflo $t0 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) + mul $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -108($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -104($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -100($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -96($fp) + lw $t0 -108($fp) + lw $t1 -104($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_70 + lw $t0 -108($fp) + lw $t1 -100($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_71 + lw $t0 -108($fp) + lw $t1 -96($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_72 + lw $t0 -84($fp) + lw $t1 0($fp) + seq $t0 $t0 $t1 + sw $t0 -88($fp) + j label_73 + label_70: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -116($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -88($fp) + j label_73 + label_71: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -116($fp) + move $a0 $t0 + lw $t0 -112($fp) + move $a1 $t0 + jal equal_str + sw $v0 -88($fp) + j label_73 + label_72: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -116($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -88($fp) + j label_73 + label_73: + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -120($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_74 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) + sub $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -48($fp) + lw $t0 -48($fp) + sw $t0 -128($fp) + j label_75 + label_74: + la $t0 data_26 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -128($fp) + label_75: + lw $t0 -128($fp) + sw $t0 -176($fp) + j label_77 + label_76: + la $t0 data_27 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -176($fp) + label_77: + lw $v0 -176($fp) + addi $sp $sp 184 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_northwest_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -180 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) + sub $t0 $t0 $t1 + sw $t0 -136($fp) + lw $t0 -136($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -148($fp) + lw $t0 -148($fp) + lw $t1 12($t0) + sw $t1 -160($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -132($fp) + lw $t0 -132($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -160($fp) + lw $t1 -156($fp) + slt $t1 $t0 $t1 + sw $t1 -152($fp) + lw $t0 -152($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -164($fp) + lw $t0 -164($fp) + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -168($fp) + bne $t0 $zero label_86 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -52($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_78 + j label_79 + label_78: + li $v0 4 + la $a0 data_28 + syscall + li $v0 10 + syscall + label_79: + lw $t0 -64($fp) + lw $t1 -60($fp) + div $t0 $t1 + mflo $t0 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) + mul $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -108($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -104($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -100($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -96($fp) + lw $t0 -108($fp) + lw $t1 -104($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_80 + lw $t0 -108($fp) + lw $t1 -100($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_81 + lw $t0 -108($fp) + lw $t1 -96($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_82 + lw $t0 -84($fp) + lw $t1 0($fp) + seq $t0 $t0 $t1 + sw $t0 -88($fp) + j label_83 + label_80: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -116($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -88($fp) + j label_83 + label_81: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -116($fp) + move $a0 $t0 + lw $t0 -112($fp) + move $a1 $t0 + jal equal_str + sw $v0 -88($fp) + j label_83 + label_82: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -116($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -88($fp) + j label_83 + label_83: + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -120($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_84 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) + sub $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 60($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -48($fp) + lw $t0 -48($fp) + sw $t0 -128($fp) + j label_85 + label_84: + la $t0 data_29 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -128($fp) + label_85: + lw $t0 -128($fp) + sw $t0 -172($fp) + j label_87 + label_86: + la $t0 data_30 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -172($fp) + label_87: + lw $v0 -172($fp) + addi $sp $sp 180 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_northeast_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -220 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) + sub $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -188($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -200($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -172($fp) + lw $t0 -172($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + slt $t1 $t0 $t1 + sw $t1 -192($fp) + lw $t0 -192($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -204($fp) + lw $t0 -204($fp) + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_96 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) + add $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -88($fp) + lw $t0 -88($fp) + lw $t1 12($t0) + sw $t1 -104($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -92($fp) + lw $t1 -100($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_88 + j label_89 + label_88: + li $v0 4 + la $a0 data_31 + syscall + li $v0 10 + syscall + label_89: + lw $t0 -104($fp) + lw $t1 -100($fp) + div $t0 $t1 + mflo $t0 + sw $t0 -96($fp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -108($fp) + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -120($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 -120($fp) + lw $t1 -116($fp) + mul $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -124($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) + add $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -124($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -148($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -144($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -140($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -136($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_90 + lw $t0 -148($fp) + lw $t1 -140($fp) + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_91 + lw $t0 -148($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_92 + lw $t0 -124($fp) + lw $t1 -68($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + j label_93 + label_90: + lw $t0 -124($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -152($fp) + lw $t0 -156($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + j label_93 + label_91: + lw $t0 -124($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -152($fp) + lw $t0 -156($fp) + move $a0 $t0 + lw $t0 -152($fp) + move $a1 $t0 + jal equal_str + sw $v0 -128($fp) + j label_93 + label_92: + lw $t0 -124($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -152($fp) + lw $t0 -156($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + j label_93 + label_93: + lw $t0 -128($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -160($fp) + lw $t0 -160($fp) + lw $t1 12($t0) + sw $t1 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_94 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) + add $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 60($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -48($fp) + lw $t0 -48($fp) + sw $t0 -168($fp) + j label_95 + label_94: + la $t0 data_32 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -168($fp) + label_95: + lw $t0 -168($fp) + sw $t0 -212($fp) + j label_97 + label_96: + la $t0 data_33 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -212($fp) + label_97: + lw $v0 -212($fp) + addi $sp $sp 220 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_southeast_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -216 + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -176($fp) + lw $t0 -180($fp) + lw $t1 -176($fp) + add $t0 $t0 $t1 + sw $t0 -172($fp) + lw $t0 -172($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -184($fp) + lw $t0 -184($fp) + lw $t1 12($t0) + sw $t1 -192($fp) + lw $t0 -196($fp) + lw $t1 -192($fp) + slt $t1 $t0 $t1 + sw $t1 -188($fp) + lw $t0 -188($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -200($fp) + lw $t0 -200($fp) + lw $t1 12($t0) + sw $t1 -204($fp) + lw $t0 -204($fp) + bne $t0 $zero label_106 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) + add $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -88($fp) + lw $t0 -88($fp) + lw $t1 12($t0) + sw $t1 -104($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -92($fp) + lw $t1 -100($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_98 + j label_99 + label_98: + li $v0 4 + la $a0 data_34 + syscall + li $v0 10 + syscall + label_99: + lw $t0 -104($fp) + lw $t1 -100($fp) + div $t0 $t1 + mflo $t0 + sw $t0 -96($fp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -108($fp) + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -120($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 -120($fp) + lw $t1 -116($fp) + mul $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -124($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) + add $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -124($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -148($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -144($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -140($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -136($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_100 + lw $t0 -148($fp) + lw $t1 -140($fp) + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_101 + lw $t0 -148($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_102 + lw $t0 -124($fp) + lw $t1 -68($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + j label_103 + label_100: + lw $t0 -124($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -152($fp) + lw $t0 -156($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + j label_103 + label_101: + lw $t0 -124($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -152($fp) + lw $t0 -156($fp) + move $a0 $t0 + lw $t0 -152($fp) + move $a1 $t0 + jal equal_str + sw $v0 -128($fp) + j label_103 + label_102: + lw $t0 -124($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -152($fp) + lw $t0 -156($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + j label_103 + label_103: + lw $t0 -128($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -160($fp) + lw $t0 -160($fp) + lw $t1 12($t0) + sw $t1 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_104 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) + add $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 92($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -48($fp) + lw $t0 -48($fp) + sw $t0 -168($fp) + j label_105 + label_104: + la $t0 data_35 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -168($fp) + label_105: + lw $t0 -168($fp) + sw $t0 -208($fp) + j label_107 + label_106: + la $t0 data_36 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -208($fp) + label_107: + lw $v0 -208($fp) + addi $sp $sp 216 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_southwest_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -176 + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) + add $t0 $t0 $t1 + sw $t0 -132($fp) + lw $t0 -132($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -144($fp) + lw $t0 -144($fp) + lw $t1 12($t0) + sw $t1 -152($fp) + lw $t0 -156($fp) + lw $t1 -152($fp) + slt $t1 $t0 $t1 + sw $t1 -148($fp) + lw $t0 -148($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -160($fp) + lw $t0 -160($fp) + lw $t1 12($t0) + sw $t1 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_116 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -52($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_108 + j label_109 + label_108: + li $v0 4 + la $a0 data_37 + syscall + li $v0 10 + syscall + label_109: + lw $t0 -64($fp) + lw $t1 -60($fp) + div $t0 $t1 + mflo $t0 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) + mul $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -108($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -104($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -100($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -96($fp) + lw $t0 -108($fp) + lw $t1 -104($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_110 + lw $t0 -108($fp) + lw $t1 -100($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_111 + lw $t0 -108($fp) + lw $t1 -96($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_112 + lw $t0 -84($fp) + lw $t1 0($fp) + seq $t0 $t0 $t1 + sw $t0 -88($fp) + j label_113 + label_110: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -116($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -88($fp) + j label_113 + label_111: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -116($fp) + move $a0 $t0 + lw $t0 -112($fp) + move $a1 $t0 + jal equal_str + sw $v0 -88($fp) + j label_113 + label_112: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -116($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -88($fp) + j label_113 + label_113: + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -120($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_114 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) + sub $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 92($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -48($fp) + lw $t0 -48($fp) + sw $t0 -128($fp) + j label_115 + label_114: + la $t0 data_38 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -128($fp) + label_115: + lw $t0 -128($fp) + sw $t0 -168($fp) + j label_117 + label_116: + la $t0 data_39 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -168($fp) + label_117: + lw $v0 -168($fp) + addi $sp $sp 176 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_neighbors_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -640 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 60($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -476($fp) + la $t0 data_40 + sw $t0 -472($fp) + lw $t0 -472($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -468($fp) + lw $t0 -476($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -500($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -496($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -492($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -488($fp) + lw $t0 -500($fp) + lw $t1 -496($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + lw $t0 -484($fp) + bne $t0 $zero label_118 + lw $t0 -500($fp) + lw $t1 -492($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + lw $t0 -484($fp) + bne $t0 $zero label_119 + lw $t0 -500($fp) + lw $t1 -488($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + lw $t0 -484($fp) + bne $t0 $zero label_120 + lw $t0 -476($fp) + lw $t1 -468($fp) + seq $t0 $t0 $t1 + sw $t0 -480($fp) + j label_121 + label_118: + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -468($fp) + lw $t1 12($t0) + sw $t1 -504($fp) + lw $t0 -508($fp) + lw $t1 -504($fp) + seq $t0 $t0 $t1 + sw $t0 -480($fp) + j label_121 + label_119: + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -468($fp) + lw $t1 12($t0) + sw $t1 -504($fp) + lw $t0 -508($fp) + move $a0 $t0 + lw $t0 -504($fp) + move $a1 $t0 + jal equal_str + sw $v0 -480($fp) + j label_121 + label_120: + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -468($fp) + lw $t1 12($t0) + sw $t1 -504($fp) + lw $t0 -508($fp) + lw $t1 -504($fp) + seq $t0 $t0 $t1 + sw $t0 -480($fp) + j label_121 + label_121: + lw $t0 -480($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -512($fp) + lw $t0 -512($fp) + lw $t1 12($t0) + sw $t1 -516($fp) + lw $t0 -516($fp) + bne $t0 $zero label_122 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -464($fp) + lw $t0 -464($fp) + sw $t0 -520($fp) + j label_123 + label_122: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -460($fp) + lw $t0 -460($fp) + sw $t0 -520($fp) + label_123: + lw $t0 -520($fp) + lw $t1 12($t0) + sw $t1 -532($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 92($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -412($fp) + la $t0 data_41 + sw $t0 -408($fp) + lw $t0 -408($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -404($fp) + lw $t0 -412($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -436($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -432($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -428($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -424($fp) + lw $t0 -436($fp) + lw $t1 -432($fp) + seq $t0 $t0 $t1 + sw $t0 -420($fp) + lw $t0 -420($fp) + bne $t0 $zero label_124 + lw $t0 -436($fp) + lw $t1 -428($fp) + seq $t0 $t0 $t1 + sw $t0 -420($fp) + lw $t0 -420($fp) + bne $t0 $zero label_125 + lw $t0 -436($fp) + lw $t1 -424($fp) + seq $t0 $t0 $t1 + sw $t0 -420($fp) + lw $t0 -420($fp) + bne $t0 $zero label_126 + lw $t0 -412($fp) + lw $t1 -404($fp) + seq $t0 $t0 $t1 + sw $t0 -416($fp) + j label_127 + label_124: + lw $t0 -412($fp) + lw $t1 12($t0) + sw $t1 -444($fp) + lw $t0 -404($fp) + lw $t1 12($t0) + sw $t1 -440($fp) + lw $t0 -444($fp) + lw $t1 -440($fp) + seq $t0 $t0 $t1 + sw $t0 -416($fp) + j label_127 + label_125: + lw $t0 -412($fp) + lw $t1 12($t0) + sw $t1 -444($fp) + lw $t0 -404($fp) + lw $t1 12($t0) + sw $t1 -440($fp) + lw $t0 -444($fp) + move $a0 $t0 + lw $t0 -440($fp) + move $a1 $t0 + jal equal_str + sw $v0 -416($fp) + j label_127 + label_126: + lw $t0 -412($fp) + lw $t1 12($t0) + sw $t1 -444($fp) + lw $t0 -404($fp) + lw $t1 12($t0) + sw $t1 -440($fp) + lw $t0 -444($fp) + lw $t1 -440($fp) + seq $t0 $t0 $t1 + sw $t0 -416($fp) + j label_127 + label_127: + lw $t0 -416($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -448($fp) + lw $t0 -448($fp) + lw $t1 12($t0) + sw $t1 -452($fp) + lw $t0 -452($fp) + bne $t0 $zero label_128 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -400($fp) + lw $t0 -400($fp) + sw $t0 -456($fp) + j label_129 + label_128: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -396($fp) + lw $t0 -396($fp) + sw $t0 -456($fp) + label_129: + lw $t0 -456($fp) + lw $t1 12($t0) + sw $t1 -528($fp) + lw $t0 -532($fp) + lw $t1 -528($fp) + add $t0 $t0 $t1 + sw $t0 -524($fp) + lw $t0 -524($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -536($fp) + lw $t0 -536($fp) + lw $t1 12($t0) + sw $t1 -548($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -348($fp) + la $t0 data_42 + sw $t0 -344($fp) + lw $t0 -344($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -340($fp) + lw $t0 -348($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -372($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -368($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -364($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -360($fp) + lw $t0 -372($fp) + lw $t1 -368($fp) + seq $t0 $t0 $t1 + sw $t0 -356($fp) + lw $t0 -356($fp) + bne $t0 $zero label_130 + lw $t0 -372($fp) + lw $t1 -364($fp) + seq $t0 $t0 $t1 + sw $t0 -356($fp) + lw $t0 -356($fp) + bne $t0 $zero label_131 + lw $t0 -372($fp) + lw $t1 -360($fp) + seq $t0 $t0 $t1 + sw $t0 -356($fp) + lw $t0 -356($fp) + bne $t0 $zero label_132 + lw $t0 -348($fp) + lw $t1 -340($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + j label_133 + label_130: + lw $t0 -348($fp) + lw $t1 12($t0) + sw $t1 -380($fp) + lw $t0 -340($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -380($fp) + lw $t1 -376($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + j label_133 + label_131: + lw $t0 -348($fp) + lw $t1 12($t0) + sw $t1 -380($fp) + lw $t0 -340($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -380($fp) + move $a0 $t0 + lw $t0 -376($fp) + move $a1 $t0 + jal equal_str + sw $v0 -352($fp) + j label_133 + label_132: + lw $t0 -348($fp) + lw $t1 12($t0) + sw $t1 -380($fp) + lw $t0 -340($fp) + lw $t1 12($t0) + sw $t1 -376($fp) + lw $t0 -380($fp) + lw $t1 -376($fp) + seq $t0 $t0 $t1 + sw $t0 -352($fp) + j label_133 + label_133: + lw $t0 -352($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -384($fp) + lw $t0 -384($fp) + lw $t1 12($t0) + sw $t1 -388($fp) + lw $t0 -388($fp) + bne $t0 $zero label_134 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -336($fp) + lw $t0 -336($fp) + sw $t0 -392($fp) + j label_135 + label_134: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -332($fp) + lw $t0 -332($fp) + sw $t0 -392($fp) + label_135: + lw $t0 -392($fp) + lw $t1 12($t0) + sw $t1 -544($fp) + lw $t0 -548($fp) + lw $t1 -544($fp) + add $t0 $t0 $t1 + sw $t0 -540($fp) + lw $t0 -540($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -552($fp) + lw $t0 -552($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 104($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -284($fp) + la $t0 data_43 + sw $t0 -280($fp) + lw $t0 -280($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -276($fp) + lw $t0 -284($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -308($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -304($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -300($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -296($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) + seq $t0 $t0 $t1 + sw $t0 -292($fp) + lw $t0 -292($fp) + bne $t0 $zero label_136 + lw $t0 -308($fp) + lw $t1 -300($fp) + seq $t0 $t0 $t1 + sw $t0 -292($fp) + lw $t0 -292($fp) + bne $t0 $zero label_137 + lw $t0 -308($fp) + lw $t1 -296($fp) + seq $t0 $t0 $t1 + sw $t0 -292($fp) + lw $t0 -292($fp) + bne $t0 $zero label_138 + lw $t0 -284($fp) + lw $t1 -276($fp) + seq $t0 $t0 $t1 + sw $t0 -288($fp) + j label_139 + label_136: + lw $t0 -284($fp) + lw $t1 12($t0) + sw $t1 -316($fp) + lw $t0 -276($fp) + lw $t1 12($t0) + sw $t1 -312($fp) + lw $t0 -316($fp) + lw $t1 -312($fp) + seq $t0 $t0 $t1 + sw $t0 -288($fp) + j label_139 + label_137: + lw $t0 -284($fp) + lw $t1 12($t0) + sw $t1 -316($fp) + lw $t0 -276($fp) + lw $t1 12($t0) + sw $t1 -312($fp) + lw $t0 -316($fp) + move $a0 $t0 + lw $t0 -312($fp) + move $a1 $t0 + jal equal_str + sw $v0 -288($fp) + j label_139 + label_138: + lw $t0 -284($fp) + lw $t1 12($t0) + sw $t1 -316($fp) + lw $t0 -276($fp) + lw $t1 12($t0) + sw $t1 -312($fp) + lw $t0 -316($fp) + lw $t1 -312($fp) + seq $t0 $t0 $t1 + sw $t0 -288($fp) + j label_139 + label_139: + lw $t0 -288($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -320($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -324($fp) + bne $t0 $zero label_140 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -272($fp) + lw $t0 -272($fp) + sw $t0 -328($fp) + j label_141 + label_140: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -268($fp) + lw $t0 -268($fp) + sw $t0 -328($fp) + label_141: + lw $t0 -328($fp) + lw $t1 12($t0) + sw $t1 -560($fp) + lw $t0 -564($fp) + lw $t1 -560($fp) + add $t0 $t0 $t1 + sw $t0 -556($fp) + lw $t0 -556($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -568($fp) + lw $t0 -568($fp) + lw $t1 12($t0) + sw $t1 -580($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 64($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -220($fp) + la $t0 data_44 + sw $t0 -216($fp) + lw $t0 -216($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -212($fp) + lw $t0 -220($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -244($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -240($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -236($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -232($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_142 + lw $t0 -244($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_143 + lw $t0 -244($fp) + lw $t1 -232($fp) + seq $t0 $t0 $t1 + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_144 + lw $t0 -220($fp) + lw $t1 -212($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_145 + label_142: + lw $t0 -220($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -212($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_145 + label_143: + lw $t0 -220($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -212($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + move $a0 $t0 + lw $t0 -248($fp) + move $a1 $t0 + jal equal_str + sw $v0 -224($fp) + j label_145 + label_144: + lw $t0 -220($fp) + lw $t1 12($t0) + sw $t1 -252($fp) + lw $t0 -212($fp) + lw $t1 12($t0) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -224($fp) + j label_145 + label_145: + lw $t0 -224($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -256($fp) + lw $t0 -256($fp) + lw $t1 12($t0) + sw $t1 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_146 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -208($fp) + lw $t0 -208($fp) + sw $t0 -264($fp) + j label_147 + label_146: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -204($fp) + lw $t0 -204($fp) + sw $t0 -264($fp) + label_147: + lw $t0 -264($fp) + lw $t1 12($t0) + sw $t1 -576($fp) + lw $t0 -580($fp) + lw $t1 -576($fp) + add $t0 $t0 $t1 + sw $t0 -572($fp) + lw $t0 -572($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -584($fp) + lw $t0 -584($fp) + lw $t1 12($t0) + sw $t1 -596($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 68($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -156($fp) + la $t0 data_45 + sw $t0 -152($fp) + lw $t0 -152($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -148($fp) + lw $t0 -156($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -180($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -176($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -172($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -168($fp) + lw $t0 -180($fp) + lw $t1 -176($fp) + seq $t0 $t0 $t1 + sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_148 + lw $t0 -180($fp) + lw $t1 -172($fp) + seq $t0 $t0 $t1 + sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_149 + lw $t0 -180($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_150 + lw $t0 -156($fp) + lw $t1 -148($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + j label_151 + label_148: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -188($fp) + lw $t0 -148($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -188($fp) + lw $t1 -184($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + j label_151 + label_149: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -188($fp) + lw $t0 -148($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -188($fp) + move $a0 $t0 + lw $t0 -184($fp) + move $a1 $t0 + jal equal_str + sw $v0 -160($fp) + j label_151 + label_150: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -188($fp) + lw $t0 -148($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -188($fp) + lw $t1 -184($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + j label_151 + label_151: + lw $t0 -160($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -192($fp) + lw $t0 -192($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -196($fp) + bne $t0 $zero label_152 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -144($fp) + lw $t0 -144($fp) + sw $t0 -200($fp) + j label_153 + label_152: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -140($fp) + lw $t0 -140($fp) + sw $t0 -200($fp) + label_153: + lw $t0 -200($fp) + lw $t1 12($t0) + sw $t1 -592($fp) + lw $t0 -596($fp) + lw $t1 -592($fp) + add $t0 $t0 $t1 + sw $t0 -588($fp) + lw $t0 -588($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -600($fp) + lw $t0 -600($fp) + lw $t1 12($t0) + sw $t1 -612($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 96($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -92($fp) + la $t0 data_46 + sw $t0 -88($fp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -92($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -116($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -112($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -108($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -104($fp) + lw $t0 -116($fp) + lw $t1 -112($fp) + seq $t0 $t0 $t1 + sw $t0 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_154 + lw $t0 -116($fp) + lw $t1 -108($fp) + seq $t0 $t0 $t1 + sw $t0 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_155 + lw $t0 -116($fp) + lw $t1 -104($fp) + seq $t0 $t0 $t1 + sw $t0 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_156 + lw $t0 -92($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -96($fp) + j label_157 + label_154: + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -124($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -120($fp) + lw $t0 -124($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -96($fp) + j label_157 + label_155: + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -124($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -120($fp) + lw $t0 -124($fp) + move $a0 $t0 + lw $t0 -120($fp) + move $a1 $t0 + jal equal_str + sw $v0 -96($fp) + j label_157 + label_156: + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -124($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -120($fp) + lw $t0 -124($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -96($fp) + j label_157 + label_157: + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -128($fp) + lw $t0 -128($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_158 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + sw $t0 -136($fp) + j label_159 + label_158: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + sw $t0 -136($fp) + label_159: + lw $t0 -136($fp) + lw $t1 12($t0) + sw $t1 -608($fp) + lw $t0 -612($fp) + lw $t1 -608($fp) + add $t0 $t0 $t1 + sw $t0 -604($fp) + lw $t0 -604($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -616($fp) + lw $t0 -616($fp) + lw $t1 12($t0) + sw $t1 -628($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 100($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + la $t0 data_47 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -28($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -52($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -48($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -44($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -40($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_160 + lw $t0 -52($fp) + lw $t1 -44($fp) + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_161 + lw $t0 -52($fp) + lw $t1 -40($fp) + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_162 + lw $t0 -28($fp) + lw $t1 -20($fp) + seq $t0 $t0 $t1 + sw $t0 -32($fp) + j label_163 + label_160: + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + seq $t0 $t0 $t1 + sw $t0 -32($fp) + j label_163 + label_161: + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + move $a0 $t0 + lw $t0 -56($fp) + move $a1 $t0 + jal equal_str + sw $v0 -32($fp) + j label_163 + label_162: + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) + seq $t0 $t0 $t1 + sw $t0 -32($fp) + j label_163 + label_163: + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_164 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -72($fp) + j label_165 + label_164: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -72($fp) + label_165: + lw $t0 -72($fp) + lw $t1 12($t0) + sw $t1 -624($fp) + lw $t0 -628($fp) + lw $t1 -624($fp) + add $t0 $t0 $t1 + sw $t0 -620($fp) + lw $t0 -620($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -632($fp) + lw $v0 -632($fp) + addi $sp $sp 640 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cell_at_next_evolution_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -208 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 56($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -156($fp) + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 -156($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -180($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -176($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -172($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -168($fp) + lw $t0 -180($fp) + lw $t1 -176($fp) + seq $t0 $t0 $t1 + sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_166 + lw $t0 -180($fp) + lw $t1 -172($fp) + seq $t0 $t0 $t1 + sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_167 + lw $t0 -180($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_168 + lw $t0 -156($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + j label_169 + label_166: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -188($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -188($fp) + lw $t1 -184($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + j label_169 + label_167: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -188($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -188($fp) + move $a0 $t0 + lw $t0 -184($fp) + move $a1 $t0 + jal equal_str + sw $v0 -160($fp) + j label_169 + label_168: + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -188($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t0 -188($fp) + lw $t1 -184($fp) + seq $t0 $t0 $t1 + sw $t0 -160($fp) + j label_169 + label_169: + lw $t0 -160($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -192($fp) + lw $t0 -192($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -196($fp) + bne $t0 $zero label_182 + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 56($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -104($fp) + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -104($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -128($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -124($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -120($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -116($fp) + lw $t0 -128($fp) + lw $t1 -124($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_170 + lw $t0 -128($fp) + lw $t1 -120($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_171 + lw $t0 -128($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_172 + lw $t0 -104($fp) + lw $t1 -100($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_173 + label_170: + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_173 + label_171: + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + move $a0 $t0 + lw $t0 -132($fp) + move $a1 $t0 + jal equal_str + sw $v0 -108($fp) + j label_173 + label_172: + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -136($fp) + lw $t0 -100($fp) + lw $t1 12($t0) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -108($fp) + j label_173 + label_173: + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -140($fp) + lw $t0 -140($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_174 + la $t0 data_48 + sw $t0 -96($fp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + sw $t0 -148($fp) + j label_181 + label_174: + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 36($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -44($fp) + la $t0 data_49 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -44($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -68($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -64($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -60($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -56($fp) + lw $t0 -68($fp) + lw $t1 -64($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_175 + lw $t0 -68($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_176 + lw $t0 -68($fp) + lw $t1 -56($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_177 + lw $t0 -44($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -48($fp) + j label_178 + label_175: + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 + sw $t0 -48($fp) + j label_178 + label_176: + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + move $a0 $t0 + lw $t0 -72($fp) + move $a1 $t0 + jal equal_str + sw $v0 -48($fp) + j label_178 + label_177: + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -36($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 + sw $t0 -48($fp) + j label_178 + label_178: + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_179 + la $t0 data_50 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -88($fp) + j label_180 + label_179: + la $t0 data_51 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -88($fp) + label_180: + lw $t0 -88($fp) + sw $t0 -148($fp) + label_181: + lw $t0 -148($fp) + sw $t0 -200($fp) + j label_183 + label_182: + la $t0 data_52 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -200($fp) + label_183: + lw $v0 -200($fp) + addi $sp $sp 208 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_evolve_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -88 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + sw $t0 -80($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 72($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -72($fp) + la $t0 data_10 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -64($fp) + label_184: + lw $t0 -80($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -72($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + slt $t1 $t0 $t1 + sw $t1 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_185 + j label_188 + label_185: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + lw $t0 -64($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_186 + j label_187 + label_186: + li $v0 4 + la $a0 data_53 + syscall + li $v0 10 + syscall + label_187: + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -64($fp) + lw $t0 -80($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -80($fp) + j label_184 + label_188: + lw $t0 -64($fp) + lw $t1 0($fp) + addi $t1 $t1 24 + sw $t0 0($t1) + lw $v0 0($fp) + addi $sp $sp 88 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_option_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -1496 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -1488($fp) + la $t0 data_54 + sw $t0 -1480($fp) + lw $t0 -1480($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1476($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1476($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1484($fp) + la $t0 data_55 + sw $t0 -1468($fp) + lw $t0 -1468($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1464($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1464($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1472($fp) + la $t0 data_56 + sw $t0 -1456($fp) + lw $t0 -1456($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1452($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1452($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1460($fp) + la $t0 data_57 + sw $t0 -1444($fp) + lw $t0 -1444($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1440($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1440($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1448($fp) + la $t0 data_58 + sw $t0 -1432($fp) + lw $t0 -1432($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1428($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1428($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1436($fp) + la $t0 data_59 + sw $t0 -1420($fp) + lw $t0 -1420($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1416($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1416($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1424($fp) + la $t0 data_60 + sw $t0 -1408($fp) + lw $t0 -1408($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1404($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1404($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1412($fp) + la $t0 data_61 + sw $t0 -1396($fp) + lw $t0 -1396($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1392($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1392($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1400($fp) + la $t0 data_62 + sw $t0 -1384($fp) + lw $t0 -1384($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1380($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1380($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1388($fp) + la $t0 data_63 + sw $t0 -1372($fp) + lw $t0 -1372($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1368($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1368($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1376($fp) + la $t0 data_64 + sw $t0 -1360($fp) + lw $t0 -1360($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1356($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1356($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1364($fp) + la $t0 data_65 + sw $t0 -1348($fp) + lw $t0 -1348($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1344($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1344($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1352($fp) + la $t0 data_66 + sw $t0 -1336($fp) + lw $t0 -1336($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1332($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1332($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1340($fp) + la $t0 data_67 + sw $t0 -1324($fp) + lw $t0 -1324($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1320($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1320($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1328($fp) + la $t0 data_68 + sw $t0 -1312($fp) + lw $t0 -1312($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1308($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1308($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1316($fp) + la $t0 data_69 + sw $t0 -1300($fp) + lw $t0 -1300($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1296($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1296($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1304($fp) + la $t0 data_70 + sw $t0 -1288($fp) + lw $t0 -1288($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1284($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1284($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1292($fp) + la $t0 data_71 + sw $t0 -1276($fp) + lw $t0 -1276($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1272($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1272($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1280($fp) + la $t0 data_72 + sw $t0 -1264($fp) + lw $t0 -1264($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1260($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1260($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1268($fp) + la $t0 data_73 + sw $t0 -1252($fp) + lw $t0 -1252($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1248($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1248($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1256($fp) + la $t0 data_74 + sw $t0 -1240($fp) + lw $t0 -1240($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1236($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1236($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1244($fp) + la $t0 data_75 + sw $t0 -1228($fp) + lw $t0 -1228($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1224($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1224($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1232($fp) + la $t0 data_76 + sw $t0 -1216($fp) + lw $t0 -1216($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1212($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1212($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1220($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -1208($fp) + lw $t0 -1208($fp) + sw $t0 -1488($fp) + la $t0 data_77 + sw $t0 -1200($fp) + lw $t0 -1200($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -1196($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -1196($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -1204($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -1148($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -1172($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -1168($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -1164($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -1160($fp) + lw $t0 -1172($fp) + lw $t1 -1168($fp) + seq $t0 $t0 $t1 + sw $t0 -1156($fp) + lw $t0 -1156($fp) + bne $t0 $zero label_189 + lw $t0 -1172($fp) + lw $t1 -1164($fp) + seq $t0 $t0 $t1 + sw $t0 -1156($fp) + lw $t0 -1156($fp) + bne $t0 $zero label_190 + lw $t0 -1172($fp) + lw $t1 -1160($fp) + seq $t0 $t0 $t1 + sw $t0 -1156($fp) + lw $t0 -1156($fp) + bne $t0 $zero label_191 + lw $t0 -1488($fp) + lw $t1 -1148($fp) + seq $t0 $t0 $t1 + sw $t0 -1152($fp) + j label_192 + label_189: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -1180($fp) + lw $t0 -1148($fp) + lw $t1 12($t0) + sw $t1 -1176($fp) + lw $t0 -1180($fp) + lw $t1 -1176($fp) + seq $t0 $t0 $t1 + sw $t0 -1152($fp) + j label_192 + label_190: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -1180($fp) + lw $t0 -1148($fp) + lw $t1 12($t0) + sw $t1 -1176($fp) + lw $t0 -1180($fp) + move $a0 $t0 + lw $t0 -1176($fp) + move $a1 $t0 + jal equal_str + sw $v0 -1152($fp) + j label_192 + label_191: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -1180($fp) + lw $t0 -1148($fp) + lw $t1 12($t0) + sw $t1 -1176($fp) + lw $t0 -1180($fp) + lw $t1 -1176($fp) + seq $t0 $t0 $t1 + sw $t0 -1152($fp) + j label_192 + label_192: + lw $t0 -1152($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -1184($fp) + lw $t0 -1184($fp) + lw $t1 12($t0) + sw $t1 -1188($fp) + lw $t0 -1188($fp) + bne $t0 $zero label_313 + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -1100($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -1124($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -1120($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -1116($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -1112($fp) + lw $t0 -1124($fp) + lw $t1 -1120($fp) + seq $t0 $t0 $t1 + sw $t0 -1108($fp) + lw $t0 -1108($fp) + bne $t0 $zero label_193 + lw $t0 -1124($fp) + lw $t1 -1116($fp) + seq $t0 $t0 $t1 + sw $t0 -1108($fp) + lw $t0 -1108($fp) + bne $t0 $zero label_194 + lw $t0 -1124($fp) + lw $t1 -1112($fp) + seq $t0 $t0 $t1 + sw $t0 -1108($fp) + lw $t0 -1108($fp) + bne $t0 $zero label_195 + lw $t0 -1488($fp) + lw $t1 -1100($fp) + seq $t0 $t0 $t1 + sw $t0 -1104($fp) + j label_196 + label_193: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -1132($fp) + lw $t0 -1100($fp) + lw $t1 12($t0) + sw $t1 -1128($fp) + lw $t0 -1132($fp) + lw $t1 -1128($fp) + seq $t0 $t0 $t1 + sw $t0 -1104($fp) + j label_196 + label_194: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -1132($fp) + lw $t0 -1100($fp) + lw $t1 12($t0) + sw $t1 -1128($fp) + lw $t0 -1132($fp) + move $a0 $t0 + lw $t0 -1128($fp) + move $a1 $t0 + jal equal_str + sw $v0 -1104($fp) + j label_196 + label_195: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -1132($fp) + lw $t0 -1100($fp) + lw $t1 12($t0) + sw $t1 -1128($fp) + lw $t0 -1132($fp) + lw $t1 -1128($fp) + seq $t0 $t0 $t1 + sw $t0 -1104($fp) + j label_196 + label_196: + lw $t0 -1104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -1136($fp) + lw $t0 -1136($fp) + lw $t1 12($t0) + sw $t1 -1140($fp) + lw $t0 -1140($fp) + bne $t0 $zero label_311 + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -1052($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -1076($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -1072($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -1068($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -1064($fp) + lw $t0 -1076($fp) + lw $t1 -1072($fp) + seq $t0 $t0 $t1 + sw $t0 -1060($fp) + lw $t0 -1060($fp) + bne $t0 $zero label_197 + lw $t0 -1076($fp) + lw $t1 -1068($fp) + seq $t0 $t0 $t1 + sw $t0 -1060($fp) + lw $t0 -1060($fp) + bne $t0 $zero label_198 + lw $t0 -1076($fp) + lw $t1 -1064($fp) + seq $t0 $t0 $t1 + sw $t0 -1060($fp) + lw $t0 -1060($fp) + bne $t0 $zero label_199 + lw $t0 -1488($fp) + lw $t1 -1052($fp) + seq $t0 $t0 $t1 + sw $t0 -1056($fp) + j label_200 + label_197: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -1084($fp) + lw $t0 -1052($fp) + lw $t1 12($t0) + sw $t1 -1080($fp) + lw $t0 -1084($fp) + lw $t1 -1080($fp) + seq $t0 $t0 $t1 + sw $t0 -1056($fp) + j label_200 + label_198: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -1084($fp) + lw $t0 -1052($fp) + lw $t1 12($t0) + sw $t1 -1080($fp) + lw $t0 -1084($fp) + move $a0 $t0 + lw $t0 -1080($fp) + move $a1 $t0 + jal equal_str + sw $v0 -1056($fp) + j label_200 + label_199: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -1084($fp) + lw $t0 -1052($fp) + lw $t1 12($t0) + sw $t1 -1080($fp) + lw $t0 -1084($fp) + lw $t1 -1080($fp) + seq $t0 $t0 $t1 + sw $t0 -1056($fp) + j label_200 + label_200: + lw $t0 -1056($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -1088($fp) + lw $t0 -1088($fp) + lw $t1 12($t0) + sw $t1 -1092($fp) + lw $t0 -1092($fp) + bne $t0 $zero label_309 + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -1004($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -1028($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -1024($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -1020($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -1016($fp) + lw $t0 -1028($fp) + lw $t1 -1024($fp) + seq $t0 $t0 $t1 + sw $t0 -1012($fp) + lw $t0 -1012($fp) + bne $t0 $zero label_201 + lw $t0 -1028($fp) + lw $t1 -1020($fp) + seq $t0 $t0 $t1 + sw $t0 -1012($fp) + lw $t0 -1012($fp) + bne $t0 $zero label_202 + lw $t0 -1028($fp) + lw $t1 -1016($fp) + seq $t0 $t0 $t1 + sw $t0 -1012($fp) + lw $t0 -1012($fp) + bne $t0 $zero label_203 + lw $t0 -1488($fp) + lw $t1 -1004($fp) + seq $t0 $t0 $t1 + sw $t0 -1008($fp) + j label_204 + label_201: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -1036($fp) + lw $t0 -1004($fp) + lw $t1 12($t0) + sw $t1 -1032($fp) + lw $t0 -1036($fp) + lw $t1 -1032($fp) + seq $t0 $t0 $t1 + sw $t0 -1008($fp) + j label_204 + label_202: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -1036($fp) + lw $t0 -1004($fp) + lw $t1 12($t0) + sw $t1 -1032($fp) + lw $t0 -1036($fp) + move $a0 $t0 + lw $t0 -1032($fp) + move $a1 $t0 + jal equal_str + sw $v0 -1008($fp) + j label_204 + label_203: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -1036($fp) + lw $t0 -1004($fp) + lw $t1 12($t0) + sw $t1 -1032($fp) + lw $t0 -1036($fp) + lw $t1 -1032($fp) + seq $t0 $t0 $t1 + sw $t0 -1008($fp) + j label_204 + label_204: + lw $t0 -1008($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -1040($fp) + lw $t0 -1040($fp) + lw $t1 12($t0) + sw $t1 -1044($fp) + lw $t0 -1044($fp) + bne $t0 $zero label_307 + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -956($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -980($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -976($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -972($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -968($fp) + lw $t0 -980($fp) + lw $t1 -976($fp) + seq $t0 $t0 $t1 + sw $t0 -964($fp) + lw $t0 -964($fp) + bne $t0 $zero label_205 + lw $t0 -980($fp) + lw $t1 -972($fp) + seq $t0 $t0 $t1 + sw $t0 -964($fp) + lw $t0 -964($fp) + bne $t0 $zero label_206 + lw $t0 -980($fp) + lw $t1 -968($fp) + seq $t0 $t0 $t1 + sw $t0 -964($fp) + lw $t0 -964($fp) + bne $t0 $zero label_207 + lw $t0 -1488($fp) + lw $t1 -956($fp) + seq $t0 $t0 $t1 + sw $t0 -960($fp) + j label_208 + label_205: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -988($fp) + lw $t0 -956($fp) + lw $t1 12($t0) + sw $t1 -984($fp) + lw $t0 -988($fp) + lw $t1 -984($fp) + seq $t0 $t0 $t1 + sw $t0 -960($fp) + j label_208 + label_206: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -988($fp) + lw $t0 -956($fp) + lw $t1 12($t0) + sw $t1 -984($fp) + lw $t0 -988($fp) + move $a0 $t0 + lw $t0 -984($fp) + move $a1 $t0 + jal equal_str + sw $v0 -960($fp) + j label_208 + label_207: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -988($fp) + lw $t0 -956($fp) + lw $t1 12($t0) + sw $t1 -984($fp) + lw $t0 -988($fp) + lw $t1 -984($fp) + seq $t0 $t0 $t1 + sw $t0 -960($fp) + j label_208 + label_208: + lw $t0 -960($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -992($fp) + lw $t0 -992($fp) + lw $t1 12($t0) + sw $t1 -996($fp) + lw $t0 -996($fp) + bne $t0 $zero label_305 + li $t0 6 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -908($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -932($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -928($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -924($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -920($fp) + lw $t0 -932($fp) + lw $t1 -928($fp) + seq $t0 $t0 $t1 + sw $t0 -916($fp) + lw $t0 -916($fp) + bne $t0 $zero label_209 + lw $t0 -932($fp) + lw $t1 -924($fp) + seq $t0 $t0 $t1 + sw $t0 -916($fp) + lw $t0 -916($fp) + bne $t0 $zero label_210 + lw $t0 -932($fp) + lw $t1 -920($fp) + seq $t0 $t0 $t1 + sw $t0 -916($fp) + lw $t0 -916($fp) + bne $t0 $zero label_211 + lw $t0 -1488($fp) + lw $t1 -908($fp) + seq $t0 $t0 $t1 + sw $t0 -912($fp) + j label_212 + label_209: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -940($fp) + lw $t0 -908($fp) + lw $t1 12($t0) + sw $t1 -936($fp) + lw $t0 -940($fp) + lw $t1 -936($fp) + seq $t0 $t0 $t1 + sw $t0 -912($fp) + j label_212 + label_210: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -940($fp) + lw $t0 -908($fp) + lw $t1 12($t0) + sw $t1 -936($fp) + lw $t0 -940($fp) + move $a0 $t0 + lw $t0 -936($fp) + move $a1 $t0 + jal equal_str + sw $v0 -912($fp) + j label_212 + label_211: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -940($fp) + lw $t0 -908($fp) + lw $t1 12($t0) + sw $t1 -936($fp) + lw $t0 -940($fp) + lw $t1 -936($fp) + seq $t0 $t0 $t1 + sw $t0 -912($fp) + j label_212 + label_212: + lw $t0 -912($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -944($fp) + lw $t0 -944($fp) + lw $t1 12($t0) + sw $t1 -948($fp) + lw $t0 -948($fp) + bne $t0 $zero label_303 + li $t0 7 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -860($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -884($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -880($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -876($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -872($fp) + lw $t0 -884($fp) + lw $t1 -880($fp) + seq $t0 $t0 $t1 + sw $t0 -868($fp) + lw $t0 -868($fp) + bne $t0 $zero label_213 + lw $t0 -884($fp) + lw $t1 -876($fp) + seq $t0 $t0 $t1 + sw $t0 -868($fp) + lw $t0 -868($fp) + bne $t0 $zero label_214 + lw $t0 -884($fp) + lw $t1 -872($fp) + seq $t0 $t0 $t1 + sw $t0 -868($fp) + lw $t0 -868($fp) + bne $t0 $zero label_215 + lw $t0 -1488($fp) + lw $t1 -860($fp) + seq $t0 $t0 $t1 + sw $t0 -864($fp) + j label_216 + label_213: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -892($fp) + lw $t0 -860($fp) + lw $t1 12($t0) + sw $t1 -888($fp) + lw $t0 -892($fp) + lw $t1 -888($fp) + seq $t0 $t0 $t1 + sw $t0 -864($fp) + j label_216 + label_214: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -892($fp) + lw $t0 -860($fp) + lw $t1 12($t0) + sw $t1 -888($fp) + lw $t0 -892($fp) + move $a0 $t0 + lw $t0 -888($fp) + move $a1 $t0 + jal equal_str + sw $v0 -864($fp) + j label_216 + label_215: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -892($fp) + lw $t0 -860($fp) + lw $t1 12($t0) + sw $t1 -888($fp) + lw $t0 -892($fp) + lw $t1 -888($fp) + seq $t0 $t0 $t1 + sw $t0 -864($fp) + j label_216 + label_216: + lw $t0 -864($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -896($fp) + lw $t0 -896($fp) + lw $t1 12($t0) + sw $t1 -900($fp) + lw $t0 -900($fp) + bne $t0 $zero label_301 + li $t0 8 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -812($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -836($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -832($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -828($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -824($fp) + lw $t0 -836($fp) + lw $t1 -832($fp) + seq $t0 $t0 $t1 + sw $t0 -820($fp) + lw $t0 -820($fp) + bne $t0 $zero label_217 + lw $t0 -836($fp) + lw $t1 -828($fp) + seq $t0 $t0 $t1 + sw $t0 -820($fp) + lw $t0 -820($fp) + bne $t0 $zero label_218 + lw $t0 -836($fp) + lw $t1 -824($fp) + seq $t0 $t0 $t1 + sw $t0 -820($fp) + lw $t0 -820($fp) + bne $t0 $zero label_219 + lw $t0 -1488($fp) + lw $t1 -812($fp) + seq $t0 $t0 $t1 + sw $t0 -816($fp) + j label_220 + label_217: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -844($fp) + lw $t0 -812($fp) + lw $t1 12($t0) + sw $t1 -840($fp) + lw $t0 -844($fp) + lw $t1 -840($fp) + seq $t0 $t0 $t1 + sw $t0 -816($fp) + j label_220 + label_218: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -844($fp) + lw $t0 -812($fp) + lw $t1 12($t0) + sw $t1 -840($fp) + lw $t0 -844($fp) + move $a0 $t0 + lw $t0 -840($fp) + move $a1 $t0 + jal equal_str + sw $v0 -816($fp) + j label_220 + label_219: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -844($fp) + lw $t0 -812($fp) + lw $t1 12($t0) + sw $t1 -840($fp) + lw $t0 -844($fp) + lw $t1 -840($fp) + seq $t0 $t0 $t1 + sw $t0 -816($fp) + j label_220 + label_220: + lw $t0 -816($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -848($fp) + lw $t0 -848($fp) + lw $t1 12($t0) + sw $t1 -852($fp) + lw $t0 -852($fp) + bne $t0 $zero label_299 + li $t0 9 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -764($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -788($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -784($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -780($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -776($fp) + lw $t0 -788($fp) + lw $t1 -784($fp) + seq $t0 $t0 $t1 + sw $t0 -772($fp) + lw $t0 -772($fp) + bne $t0 $zero label_221 + lw $t0 -788($fp) + lw $t1 -780($fp) + seq $t0 $t0 $t1 + sw $t0 -772($fp) + lw $t0 -772($fp) + bne $t0 $zero label_222 + lw $t0 -788($fp) + lw $t1 -776($fp) + seq $t0 $t0 $t1 + sw $t0 -772($fp) + lw $t0 -772($fp) + bne $t0 $zero label_223 + lw $t0 -1488($fp) + lw $t1 -764($fp) + seq $t0 $t0 $t1 + sw $t0 -768($fp) + j label_224 + label_221: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -796($fp) + lw $t0 -764($fp) + lw $t1 12($t0) + sw $t1 -792($fp) + lw $t0 -796($fp) + lw $t1 -792($fp) + seq $t0 $t0 $t1 + sw $t0 -768($fp) + j label_224 + label_222: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -796($fp) + lw $t0 -764($fp) + lw $t1 12($t0) + sw $t1 -792($fp) + lw $t0 -796($fp) + move $a0 $t0 + lw $t0 -792($fp) + move $a1 $t0 + jal equal_str + sw $v0 -768($fp) + j label_224 + label_223: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -796($fp) + lw $t0 -764($fp) + lw $t1 12($t0) + sw $t1 -792($fp) + lw $t0 -796($fp) + lw $t1 -792($fp) + seq $t0 $t0 $t1 + sw $t0 -768($fp) + j label_224 + label_224: + lw $t0 -768($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -800($fp) + lw $t0 -800($fp) + lw $t1 12($t0) + sw $t1 -804($fp) + lw $t0 -804($fp) + bne $t0 $zero label_297 + li $t0 10 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -716($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -740($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -736($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -732($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -728($fp) + lw $t0 -740($fp) + lw $t1 -736($fp) + seq $t0 $t0 $t1 + sw $t0 -724($fp) + lw $t0 -724($fp) + bne $t0 $zero label_225 + lw $t0 -740($fp) + lw $t1 -732($fp) + seq $t0 $t0 $t1 + sw $t0 -724($fp) + lw $t0 -724($fp) + bne $t0 $zero label_226 + lw $t0 -740($fp) + lw $t1 -728($fp) + seq $t0 $t0 $t1 + sw $t0 -724($fp) + lw $t0 -724($fp) + bne $t0 $zero label_227 + lw $t0 -1488($fp) + lw $t1 -716($fp) + seq $t0 $t0 $t1 + sw $t0 -720($fp) + j label_228 + label_225: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -748($fp) + lw $t0 -716($fp) + lw $t1 12($t0) + sw $t1 -744($fp) + lw $t0 -748($fp) + lw $t1 -744($fp) + seq $t0 $t0 $t1 + sw $t0 -720($fp) + j label_228 + label_226: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -748($fp) + lw $t0 -716($fp) + lw $t1 12($t0) + sw $t1 -744($fp) + lw $t0 -748($fp) + move $a0 $t0 + lw $t0 -744($fp) + move $a1 $t0 + jal equal_str + sw $v0 -720($fp) + j label_228 + label_227: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -748($fp) + lw $t0 -716($fp) + lw $t1 12($t0) + sw $t1 -744($fp) + lw $t0 -748($fp) + lw $t1 -744($fp) + seq $t0 $t0 $t1 + sw $t0 -720($fp) + j label_228 + label_228: + lw $t0 -720($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -752($fp) + lw $t0 -752($fp) + lw $t1 12($t0) + sw $t1 -756($fp) + lw $t0 -756($fp) + bne $t0 $zero label_295 + li $t0 11 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -668($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -692($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -688($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -684($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -680($fp) + lw $t0 -692($fp) + lw $t1 -688($fp) + seq $t0 $t0 $t1 + sw $t0 -676($fp) + lw $t0 -676($fp) + bne $t0 $zero label_229 + lw $t0 -692($fp) + lw $t1 -684($fp) + seq $t0 $t0 $t1 + sw $t0 -676($fp) + lw $t0 -676($fp) + bne $t0 $zero label_230 + lw $t0 -692($fp) + lw $t1 -680($fp) + seq $t0 $t0 $t1 + sw $t0 -676($fp) + lw $t0 -676($fp) + bne $t0 $zero label_231 + lw $t0 -1488($fp) + lw $t1 -668($fp) + seq $t0 $t0 $t1 + sw $t0 -672($fp) + j label_232 + label_229: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -700($fp) + lw $t0 -668($fp) + lw $t1 12($t0) + sw $t1 -696($fp) + lw $t0 -700($fp) + lw $t1 -696($fp) + seq $t0 $t0 $t1 + sw $t0 -672($fp) + j label_232 + label_230: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -700($fp) + lw $t0 -668($fp) + lw $t1 12($t0) + sw $t1 -696($fp) + lw $t0 -700($fp) + move $a0 $t0 + lw $t0 -696($fp) + move $a1 $t0 + jal equal_str + sw $v0 -672($fp) + j label_232 + label_231: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -700($fp) + lw $t0 -668($fp) + lw $t1 12($t0) + sw $t1 -696($fp) + lw $t0 -700($fp) + lw $t1 -696($fp) + seq $t0 $t0 $t1 + sw $t0 -672($fp) + j label_232 + label_232: + lw $t0 -672($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -704($fp) + lw $t0 -704($fp) + lw $t1 12($t0) + sw $t1 -708($fp) + lw $t0 -708($fp) + bne $t0 $zero label_293 + li $t0 12 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -620($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -644($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -640($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -636($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -632($fp) + lw $t0 -644($fp) + lw $t1 -640($fp) + seq $t0 $t0 $t1 + sw $t0 -628($fp) + lw $t0 -628($fp) + bne $t0 $zero label_233 + lw $t0 -644($fp) + lw $t1 -636($fp) + seq $t0 $t0 $t1 + sw $t0 -628($fp) + lw $t0 -628($fp) + bne $t0 $zero label_234 + lw $t0 -644($fp) + lw $t1 -632($fp) + seq $t0 $t0 $t1 + sw $t0 -628($fp) + lw $t0 -628($fp) + bne $t0 $zero label_235 + lw $t0 -1488($fp) + lw $t1 -620($fp) + seq $t0 $t0 $t1 + sw $t0 -624($fp) + j label_236 + label_233: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -652($fp) + lw $t0 -620($fp) + lw $t1 12($t0) + sw $t1 -648($fp) + lw $t0 -652($fp) + lw $t1 -648($fp) + seq $t0 $t0 $t1 + sw $t0 -624($fp) + j label_236 + label_234: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -652($fp) + lw $t0 -620($fp) + lw $t1 12($t0) + sw $t1 -648($fp) + lw $t0 -652($fp) + move $a0 $t0 + lw $t0 -648($fp) + move $a1 $t0 + jal equal_str + sw $v0 -624($fp) + j label_236 + label_235: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -652($fp) + lw $t0 -620($fp) + lw $t1 12($t0) + sw $t1 -648($fp) + lw $t0 -652($fp) + lw $t1 -648($fp) + seq $t0 $t0 $t1 + sw $t0 -624($fp) + j label_236 + label_236: + lw $t0 -624($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -656($fp) + lw $t0 -656($fp) + lw $t1 12($t0) + sw $t1 -660($fp) + lw $t0 -660($fp) + bne $t0 $zero label_291 + li $t0 13 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -572($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -596($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -592($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -588($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -584($fp) + lw $t0 -596($fp) + lw $t1 -592($fp) + seq $t0 $t0 $t1 + sw $t0 -580($fp) + lw $t0 -580($fp) + bne $t0 $zero label_237 + lw $t0 -596($fp) + lw $t1 -588($fp) + seq $t0 $t0 $t1 + sw $t0 -580($fp) + lw $t0 -580($fp) + bne $t0 $zero label_238 + lw $t0 -596($fp) + lw $t1 -584($fp) + seq $t0 $t0 $t1 + sw $t0 -580($fp) + lw $t0 -580($fp) + bne $t0 $zero label_239 + lw $t0 -1488($fp) + lw $t1 -572($fp) + seq $t0 $t0 $t1 + sw $t0 -576($fp) + j label_240 + label_237: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -604($fp) + lw $t0 -572($fp) + lw $t1 12($t0) + sw $t1 -600($fp) + lw $t0 -604($fp) + lw $t1 -600($fp) + seq $t0 $t0 $t1 + sw $t0 -576($fp) + j label_240 + label_238: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -604($fp) + lw $t0 -572($fp) + lw $t1 12($t0) + sw $t1 -600($fp) + lw $t0 -604($fp) + move $a0 $t0 + lw $t0 -600($fp) + move $a1 $t0 + jal equal_str + sw $v0 -576($fp) + j label_240 + label_239: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -604($fp) + lw $t0 -572($fp) + lw $t1 12($t0) + sw $t1 -600($fp) + lw $t0 -604($fp) + lw $t1 -600($fp) + seq $t0 $t0 $t1 + sw $t0 -576($fp) + j label_240 + label_240: + lw $t0 -576($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -608($fp) + lw $t0 -608($fp) + lw $t1 12($t0) + sw $t1 -612($fp) + lw $t0 -612($fp) + bne $t0 $zero label_289 + li $t0 14 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -524($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -548($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -544($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -540($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -536($fp) + lw $t0 -548($fp) + lw $t1 -544($fp) + seq $t0 $t0 $t1 + sw $t0 -532($fp) + lw $t0 -532($fp) + bne $t0 $zero label_241 + lw $t0 -548($fp) + lw $t1 -540($fp) + seq $t0 $t0 $t1 + sw $t0 -532($fp) + lw $t0 -532($fp) + bne $t0 $zero label_242 + lw $t0 -548($fp) + lw $t1 -536($fp) + seq $t0 $t0 $t1 + sw $t0 -532($fp) + lw $t0 -532($fp) + bne $t0 $zero label_243 + lw $t0 -1488($fp) + lw $t1 -524($fp) + seq $t0 $t0 $t1 + sw $t0 -528($fp) + j label_244 + label_241: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -556($fp) + lw $t0 -524($fp) + lw $t1 12($t0) + sw $t1 -552($fp) + lw $t0 -556($fp) + lw $t1 -552($fp) + seq $t0 $t0 $t1 + sw $t0 -528($fp) + j label_244 + label_242: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -556($fp) + lw $t0 -524($fp) + lw $t1 12($t0) + sw $t1 -552($fp) + lw $t0 -556($fp) + move $a0 $t0 + lw $t0 -552($fp) + move $a1 $t0 + jal equal_str + sw $v0 -528($fp) + j label_244 + label_243: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -556($fp) + lw $t0 -524($fp) + lw $t1 12($t0) + sw $t1 -552($fp) + lw $t0 -556($fp) + lw $t1 -552($fp) + seq $t0 $t0 $t1 + sw $t0 -528($fp) + j label_244 + label_244: + lw $t0 -528($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -560($fp) + lw $t0 -560($fp) + lw $t1 12($t0) + sw $t1 -564($fp) + lw $t0 -564($fp) + bne $t0 $zero label_287 + li $t0 15 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -476($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -500($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -496($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -492($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -488($fp) + lw $t0 -500($fp) + lw $t1 -496($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + lw $t0 -484($fp) + bne $t0 $zero label_245 + lw $t0 -500($fp) + lw $t1 -492($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + lw $t0 -484($fp) + bne $t0 $zero label_246 + lw $t0 -500($fp) + lw $t1 -488($fp) + seq $t0 $t0 $t1 + sw $t0 -484($fp) + lw $t0 -484($fp) + bne $t0 $zero label_247 + lw $t0 -1488($fp) + lw $t1 -476($fp) + seq $t0 $t0 $t1 + sw $t0 -480($fp) + j label_248 + label_245: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -504($fp) + lw $t0 -508($fp) + lw $t1 -504($fp) + seq $t0 $t0 $t1 + sw $t0 -480($fp) + j label_248 + label_246: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -504($fp) + lw $t0 -508($fp) + move $a0 $t0 + lw $t0 -504($fp) + move $a1 $t0 + jal equal_str + sw $v0 -480($fp) + j label_248 + label_247: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -508($fp) + lw $t0 -476($fp) + lw $t1 12($t0) + sw $t1 -504($fp) + lw $t0 -508($fp) + lw $t1 -504($fp) + seq $t0 $t0 $t1 + sw $t0 -480($fp) + j label_248 + label_248: + lw $t0 -480($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -512($fp) + lw $t0 -512($fp) + lw $t1 12($t0) + sw $t1 -516($fp) + lw $t0 -516($fp) + bne $t0 $zero label_285 + li $t0 16 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -428($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -452($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -448($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -444($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -440($fp) + lw $t0 -452($fp) + lw $t1 -448($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_249 + lw $t0 -452($fp) + lw $t1 -444($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_250 + lw $t0 -452($fp) + lw $t1 -440($fp) + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_251 + lw $t0 -1488($fp) + lw $t1 -428($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_252 + label_249: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -428($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_252 + label_250: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -428($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + move $a0 $t0 + lw $t0 -456($fp) + move $a1 $t0 + jal equal_str + sw $v0 -432($fp) + j label_252 + label_251: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -460($fp) + lw $t0 -428($fp) + lw $t1 12($t0) + sw $t1 -456($fp) + lw $t0 -460($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -432($fp) + j label_252 + label_252: + lw $t0 -432($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -464($fp) + lw $t0 -464($fp) + lw $t1 12($t0) + sw $t1 -468($fp) + lw $t0 -468($fp) + bne $t0 $zero label_283 + li $t0 17 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -380($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -404($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -400($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -396($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -392($fp) + lw $t0 -404($fp) + lw $t1 -400($fp) + seq $t0 $t0 $t1 + sw $t0 -388($fp) + lw $t0 -388($fp) + bne $t0 $zero label_253 + lw $t0 -404($fp) + lw $t1 -396($fp) + seq $t0 $t0 $t1 + sw $t0 -388($fp) + lw $t0 -388($fp) + bne $t0 $zero label_254 + lw $t0 -404($fp) + lw $t1 -392($fp) + seq $t0 $t0 $t1 + sw $t0 -388($fp) + lw $t0 -388($fp) + bne $t0 $zero label_255 + lw $t0 -1488($fp) + lw $t1 -380($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + j label_256 + label_253: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -412($fp) + lw $t0 -380($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -412($fp) + lw $t1 -408($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + j label_256 + label_254: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -412($fp) + lw $t0 -380($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -412($fp) + move $a0 $t0 + lw $t0 -408($fp) + move $a1 $t0 + jal equal_str + sw $v0 -384($fp) + j label_256 + label_255: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -412($fp) + lw $t0 -380($fp) + lw $t1 12($t0) + sw $t1 -408($fp) + lw $t0 -412($fp) + lw $t1 -408($fp) + seq $t0 $t0 $t1 + sw $t0 -384($fp) + j label_256 + label_256: + lw $t0 -384($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -416($fp) + lw $t0 -416($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -420($fp) + bne $t0 $zero label_281 + li $t0 18 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -332($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -356($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -352($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -348($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -344($fp) + lw $t0 -356($fp) + lw $t1 -352($fp) + seq $t0 $t0 $t1 + sw $t0 -340($fp) + lw $t0 -340($fp) + bne $t0 $zero label_257 + lw $t0 -356($fp) + lw $t1 -348($fp) + seq $t0 $t0 $t1 + sw $t0 -340($fp) + lw $t0 -340($fp) + bne $t0 $zero label_258 + lw $t0 -356($fp) + lw $t1 -344($fp) + seq $t0 $t0 $t1 + sw $t0 -340($fp) + lw $t0 -340($fp) + bne $t0 $zero label_259 + lw $t0 -1488($fp) + lw $t1 -332($fp) + seq $t0 $t0 $t1 + sw $t0 -336($fp) + j label_260 + label_257: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -364($fp) + lw $t0 -332($fp) + lw $t1 12($t0) + sw $t1 -360($fp) + lw $t0 -364($fp) + lw $t1 -360($fp) + seq $t0 $t0 $t1 + sw $t0 -336($fp) + j label_260 + label_258: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -364($fp) + lw $t0 -332($fp) + lw $t1 12($t0) + sw $t1 -360($fp) + lw $t0 -364($fp) + move $a0 $t0 + lw $t0 -360($fp) + move $a1 $t0 + jal equal_str + sw $v0 -336($fp) + j label_260 + label_259: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -364($fp) + lw $t0 -332($fp) + lw $t1 12($t0) + sw $t1 -360($fp) + lw $t0 -364($fp) + lw $t1 -360($fp) + seq $t0 $t0 $t1 + sw $t0 -336($fp) + j label_260 + label_260: + lw $t0 -336($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -368($fp) + lw $t0 -368($fp) + lw $t1 12($t0) + sw $t1 -372($fp) + lw $t0 -372($fp) + bne $t0 $zero label_279 + li $t0 19 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -284($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -308($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -304($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -300($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -296($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) + seq $t0 $t0 $t1 + sw $t0 -292($fp) + lw $t0 -292($fp) + bne $t0 $zero label_261 + lw $t0 -308($fp) + lw $t1 -300($fp) + seq $t0 $t0 $t1 + sw $t0 -292($fp) + lw $t0 -292($fp) + bne $t0 $zero label_262 + lw $t0 -308($fp) + lw $t1 -296($fp) + seq $t0 $t0 $t1 + sw $t0 -292($fp) + lw $t0 -292($fp) + bne $t0 $zero label_263 + lw $t0 -1488($fp) + lw $t1 -284($fp) + seq $t0 $t0 $t1 + sw $t0 -288($fp) + j label_264 + label_261: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -316($fp) + lw $t0 -284($fp) + lw $t1 12($t0) + sw $t1 -312($fp) + lw $t0 -316($fp) + lw $t1 -312($fp) + seq $t0 $t0 $t1 + sw $t0 -288($fp) + j label_264 + label_262: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -316($fp) + lw $t0 -284($fp) + lw $t1 12($t0) + sw $t1 -312($fp) + lw $t0 -316($fp) + move $a0 $t0 + lw $t0 -312($fp) + move $a1 $t0 + jal equal_str + sw $v0 -288($fp) + j label_264 + label_263: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -316($fp) + lw $t0 -284($fp) + lw $t1 12($t0) + sw $t1 -312($fp) + lw $t0 -316($fp) + lw $t1 -312($fp) + seq $t0 $t0 $t1 + sw $t0 -288($fp) + j label_264 + label_264: + lw $t0 -288($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -320($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -324($fp) + bne $t0 $zero label_277 + li $t0 20 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -236($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -260($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -256($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -252($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -248($fp) + lw $t0 -260($fp) + lw $t1 -256($fp) + seq $t0 $t0 $t1 + sw $t0 -244($fp) + lw $t0 -244($fp) + bne $t0 $zero label_265 + lw $t0 -260($fp) + lw $t1 -252($fp) + seq $t0 $t0 $t1 + sw $t0 -244($fp) + lw $t0 -244($fp) + bne $t0 $zero label_266 + lw $t0 -260($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -244($fp) + lw $t0 -244($fp) + bne $t0 $zero label_267 + lw $t0 -1488($fp) + lw $t1 -236($fp) + seq $t0 $t0 $t1 + sw $t0 -240($fp) + j label_268 + label_265: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -268($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -264($fp) + lw $t0 -268($fp) + lw $t1 -264($fp) + seq $t0 $t0 $t1 + sw $t0 -240($fp) + j label_268 + label_266: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -268($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -264($fp) + lw $t0 -268($fp) + move $a0 $t0 + lw $t0 -264($fp) + move $a1 $t0 + jal equal_str + sw $v0 -240($fp) + j label_268 + label_267: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -268($fp) + lw $t0 -236($fp) + lw $t1 12($t0) + sw $t1 -264($fp) + lw $t0 -268($fp) + lw $t1 -264($fp) + seq $t0 $t0 $t1 + sw $t0 -240($fp) + j label_268 + label_268: + lw $t0 -240($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -272($fp) + lw $t0 -272($fp) + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t0 -276($fp) + bne $t0 $zero label_275 + li $t0 21 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -188($fp) + lw $t0 -1488($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -212($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -208($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -204($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -200($fp) + lw $t0 -212($fp) + lw $t1 -208($fp) + seq $t0 $t0 $t1 + sw $t0 -196($fp) + lw $t0 -196($fp) + bne $t0 $zero label_269 + lw $t0 -212($fp) + lw $t1 -204($fp) + seq $t0 $t0 $t1 + sw $t0 -196($fp) + lw $t0 -196($fp) + bne $t0 $zero label_270 + lw $t0 -212($fp) + lw $t1 -200($fp) + seq $t0 $t0 $t1 + sw $t0 -196($fp) + lw $t0 -196($fp) + bne $t0 $zero label_271 + lw $t0 -1488($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -192($fp) + j label_272 + label_269: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -220($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -216($fp) + lw $t0 -220($fp) + lw $t1 -216($fp) + seq $t0 $t0 $t1 + sw $t0 -192($fp) + j label_272 + label_270: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -220($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -216($fp) + lw $t0 -220($fp) + move $a0 $t0 + lw $t0 -216($fp) + move $a1 $t0 + jal equal_str + sw $v0 -192($fp) + j label_272 + label_271: + lw $t0 -1488($fp) + lw $t1 12($t0) + sw $t1 -220($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -216($fp) + lw $t0 -220($fp) + lw $t1 -216($fp) + seq $t0 $t0 $t1 + sw $t0 -192($fp) + j label_272 + label_272: + lw $t0 -192($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -224($fp) + lw $t0 -224($fp) + lw $t1 12($t0) + sw $t1 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_273 + la $t0 data_78 + sw $t0 -184($fp) + lw $t0 -184($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -180($fp) + lw $t0 -180($fp) + sw $t0 -232($fp) + j label_274 + label_273: + la $t0 data_79 + sw $t0 -176($fp) + lw $t0 -176($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -172($fp) + lw $t0 -172($fp) + sw $t0 -232($fp) + label_274: + lw $t0 -232($fp) + sw $t0 -280($fp) + j label_276 + label_275: + la $t0 data_80 + sw $t0 -168($fp) + lw $t0 -168($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -164($fp) + lw $t0 -164($fp) + sw $t0 -280($fp) + label_276: + lw $t0 -280($fp) + sw $t0 -328($fp) + j label_278 + label_277: + la $t0 data_81 + sw $t0 -160($fp) + lw $t0 -160($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -156($fp) + lw $t0 -156($fp) + sw $t0 -328($fp) + label_278: + lw $t0 -328($fp) + sw $t0 -376($fp) + j label_280 + label_279: + la $t0 data_82 + sw $t0 -152($fp) + lw $t0 -152($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -148($fp) + lw $t0 -148($fp) + sw $t0 -376($fp) + label_280: + lw $t0 -376($fp) + sw $t0 -424($fp) + j label_282 + label_281: + la $t0 data_83 + sw $t0 -144($fp) + lw $t0 -144($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -140($fp) + lw $t0 -140($fp) + sw $t0 -424($fp) + label_282: + lw $t0 -424($fp) + sw $t0 -472($fp) + j label_284 + label_283: + la $t0 data_84 + sw $t0 -136($fp) + lw $t0 -136($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -132($fp) + lw $t0 -132($fp) + sw $t0 -472($fp) + label_284: + lw $t0 -472($fp) + sw $t0 -520($fp) + j label_286 + label_285: + la $t0 data_85 + sw $t0 -128($fp) + lw $t0 -128($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -124($fp) + lw $t0 -124($fp) + sw $t0 -520($fp) + label_286: + lw $t0 -520($fp) + sw $t0 -568($fp) + j label_288 + label_287: + la $t0 data_86 + sw $t0 -120($fp) + lw $t0 -120($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -116($fp) + lw $t0 -116($fp) + sw $t0 -568($fp) + label_288: + lw $t0 -568($fp) + sw $t0 -616($fp) + j label_290 + label_289: + la $t0 data_87 + sw $t0 -112($fp) + lw $t0 -112($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -108($fp) + lw $t0 -108($fp) + sw $t0 -616($fp) + label_290: + lw $t0 -616($fp) + sw $t0 -664($fp) + j label_292 + label_291: + la $t0 data_88 + sw $t0 -104($fp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 -100($fp) + sw $t0 -664($fp) + label_292: + lw $t0 -664($fp) + sw $t0 -712($fp) + j label_294 + label_293: + la $t0 data_89 + sw $t0 -96($fp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + sw $t0 -712($fp) + label_294: + lw $t0 -712($fp) + sw $t0 -760($fp) + j label_296 + label_295: + la $t0 data_90 + sw $t0 -88($fp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + sw $t0 -760($fp) + label_296: + lw $t0 -760($fp) + sw $t0 -808($fp) + j label_298 + label_297: + la $t0 data_91 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + sw $t0 -808($fp) + label_298: + lw $t0 -808($fp) + sw $t0 -856($fp) + j label_300 + label_299: + la $t0 data_92 + sw $t0 -72($fp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -856($fp) + label_300: + lw $t0 -856($fp) + sw $t0 -904($fp) + j label_302 + label_301: + la $t0 data_93 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 -60($fp) + sw $t0 -904($fp) + label_302: + lw $t0 -904($fp) + sw $t0 -952($fp) + j label_304 + label_303: + la $t0 data_94 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + sw $t0 -952($fp) + label_304: + lw $t0 -952($fp) + sw $t0 -1000($fp) + j label_306 + label_305: + la $t0 data_95 + sw $t0 -48($fp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -1000($fp) + label_306: + lw $t0 -1000($fp) + sw $t0 -1048($fp) + j label_308 + label_307: + la $t0 data_96 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -1048($fp) + label_308: + lw $t0 -1048($fp) + sw $t0 -1096($fp) + j label_310 + label_309: + la $t0 data_97 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -1096($fp) + label_310: + lw $t0 -1096($fp) + sw $t0 -1144($fp) + j label_312 + label_311: + la $t0 data_98 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -1144($fp) + label_312: + lw $t0 -1144($fp) + sw $t0 -1192($fp) + j label_314 + label_313: + la $t0 data_99 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -1192($fp) + label_314: + lw $v0 -1192($fp) + addi $sp $sp 1496 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_prompt_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -120 + la $t0 data_10 + sw $t0 -112($fp) + lw $t0 -112($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -112($fp) + la $t0 data_100 + sw $t0 -104($fp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -100($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -108($fp) + la $t0 data_101 + sw $t0 -92($fp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -88($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -96($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + sw $t0 -112($fp) + la $t0 data_102 + sw $t0 -76($fp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -80($fp) + la $t0 data_103 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -112($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -48($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -44($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -40($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -36($fp) + lw $t0 -48($fp) + lw $t1 -44($fp) + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_315 + lw $t0 -48($fp) + lw $t1 -40($fp) + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_316 + lw $t0 -48($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_317 + lw $t0 -112($fp) + lw $t1 -20($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + j label_318 + label_315: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + j label_318 + label_316: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + move $a0 $t0 + lw $t0 -52($fp) + move $a1 $t0 + jal equal_str + sw $v0 -28($fp) + j label_318 + label_317: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + j label_318 + label_318: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_319 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -68($fp) + j label_320 + label_319: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -68($fp) + label_320: + lw $v0 -68($fp) + addi $sp $sp 120 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_prompt2_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -120 + la $t0 data_10 + sw $t0 -112($fp) + lw $t0 -112($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -112($fp) + la $t0 data_104 + sw $t0 -104($fp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -100($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -100($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -108($fp) + la $t0 data_105 + sw $t0 -92($fp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -88($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -96($fp) + la $t0 data_106 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -84($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -112($fp) + la $t0 data_107 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -112($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -48($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -44($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -40($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -36($fp) + lw $t0 -48($fp) + lw $t1 -44($fp) + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_321 + lw $t0 -48($fp) + lw $t1 -40($fp) + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_322 + lw $t0 -48($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_323 + lw $t0 -112($fp) + lw $t1 -20($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + j label_324 + label_321: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + j label_324 + label_322: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + move $a0 $t0 + lw $t0 -52($fp) + move $a1 $t0 + jal equal_str + sw $v0 -28($fp) + j label_324 + label_323: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + j label_324 + label_324: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_325 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -68($fp) + j label_326 + label_325: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -68($fp) + label_326: + lw $v0 -68($fp) + addi $sp $sp 120 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_CellularAutomaton: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_CellularAutomaton + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -28 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_CellularAutomaton + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 28($t0) + lw $v0 0($fp) + addi $sp $sp 28 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -124 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -112($fp) + la $t0 data_10 + sw $t0 -108($fp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -108($fp) + la $t0 data_108 + sw $t0 -100($fp) + lw $t0 -100($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -96($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -104($fp) + la $t0 data_109 + sw $t0 -88($fp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -84($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -92($fp) + label_327: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 88($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_328 + j label_342 + label_328: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -112($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 76($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -108($fp) + jal __init_at_CellularAutomaton + sw $v0 -64($fp) + lw $t0 -64($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_329 + j label_330 + label_329: + li $v0 4 + la $a0 data_110 + syscall + li $v0 10 + syscall + label_330: + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -56($fp) + lw $t0 -56($fp) + lw $t1 0($fp) + addi $t1 $t1 28 + sw $t0 0($t1) + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_331 + j label_332 + label_331: + li $v0 4 + la $a0 data_111 + syscall + li $v0 10 + syscall + label_332: + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 80($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -48($fp) + label_333: + lw $t0 -112($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_334 + j label_341 + label_334: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 84($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_335 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -112($fp) + lw $t0 -112($fp) + sw $t0 -40($fp) + j label_340 + label_335: + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_336 + j label_337 + label_336: + li $v0 4 + la $a0 data_112 + syscall + li $v0 10 + syscall + label_337: + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_338 + j label_339 + label_338: + li $v0 4 + la $a0 data_113 + syscall + li $v0 10 + syscall + label_339: + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 80($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -40($fp) + label_340: + j label_333 + label_341: + j label_327 + label_342: + lw $v0 0($fp) + addi $sp $sp 124 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -28 + li $t0 7 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 28 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + 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 000000000..e52b48060 --- /dev/null +++ b/tests/codegen/list.mips @@ -0,0 +1,1987 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "List" +.word 0 +data_7: .asciiz "Cons" +.word 0 +data_8: .asciiz "Main" +.word 0 +data_9: .asciiz " +" +.word 0 +data_10: .asciiz "" +.word 0 +data_11: .asciiz "Abort called from class " +.word 0 +data_12: .asciiz "Substring out of range" +.word 0 +data_13: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_14: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_15: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_16: .asciiz " " +.word 0 +data_17: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_18: .asciiz "\n" +.word 0 +data_19: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_20: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_21: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_22: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_23: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_24: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_25: .asciiz "RuntimeError: Function call in a void instance" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + .word data_8 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_cons_at_List + .word function_head_at_List + .word function_isNil_at_List + .word function_tail_at_List + .word __init_attr_at_List + .word __init_at_List + +type_6_prototype: + .word 5 + .word 4 + .word type_6_dispatch + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_cons_at_List + .word function_head_at_Cons + .word function_isNil_at_Cons + .word function_tail_at_Cons + .word function_init_at_Cons + .word __init_attr_at_Cons + .word __init_at_Cons + +type_7_prototype: + .word 6 + .word 6 + .word type_7_dispatch + .word 0 + .word 0 + .word -1 + + +type_8_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_main_at_Main + .word function_print_list_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_8_prototype: + .word 7 + .word 5 + .word type_8_dispatch + .word 0 + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_11 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_9 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_12 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_head_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -16($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_tail_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 0($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_cons_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + jal __init_at_Cons + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_13 + syscall + li $v0 10 + syscall + label_4: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_List: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_List + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -20 + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_List + addi $sp $sp 4 + sw $v0 -20($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 12($t0) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 0($fp) + addi $sp $sp 20 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_isNil_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_head_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_tail_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_init_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 4($fp) + lw $t1 8($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + lw $t0 0($fp) + lw $t1 8($fp) + addi $t1 $t1 16 + sw $t0 0($t1) + lw $v0 8($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Cons: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Cons + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_list_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -68 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_6: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_11 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_15 + syscall + li $v0 10 + syscall + label_8: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -56($fp) + la $t0 data_16 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -44($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_17 + syscall + li $v0 10 + syscall + label_10: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -72($fp) + j label_12 + label_11: + la $t0 data_18 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -72($fp) + label_12: + lw $v0 -72($fp) + addi $sp $sp 68 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -104 + li $t0 5 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -108($fp) + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -100($fp) + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -96($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -92($fp) + jal __init_at_List + sw $v0 -88($fp) + lw $t0 -88($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_14: + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -80($fp) + lw $t0 -80($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_16: + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -72($fp) + lw $t0 -72($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_17 + j label_18 + label_17: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_18: + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -100($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -64($fp) + lw $t0 -64($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_19 + j label_20 + label_19: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_20: + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -56($fp) + lw $t0 -56($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_21 + j label_22 + label_21: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_22: + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -108($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 0($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + label_23: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_24 + j label_25 + label_24: + li $v0 4 + la $a0 data_24 + syscall + li $v0 10 + syscall + label_25: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -36($fp) + xori $t0 $t0 1 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -40($fp) + lw $t0 -40($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_26 + j label_29 + label_26: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_27 + j label_28 + label_27: + li $v0 4 + la $a0 data_25 + syscall + li $v0 10 + syscall + label_28: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + j label_23 + label_29: + li $v0 0 + addi $sp $sp 104 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 7 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + 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 000000000..c40447822 --- /dev/null +++ b/tests/codegen/new_complex.mips @@ -0,0 +1,3032 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz "Complex" +.word 0 +data_8: .asciiz " +" +.word 0 +data_9: .asciiz "" +.word 0 +data_10: .asciiz "Abort called from class " +.word 0 +data_11: .asciiz "Substring out of range" +.word 0 +data_12: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_13: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_14: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_15: .asciiz "=(\n" +.word 0 +data_16: .asciiz "=)\n" +.word 0 +data_17: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_18: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_19: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_20: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_21: .asciiz "I" +.word 0 +data_22: .asciiz "+" +.word 0 +data_23: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_24: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_25: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_26: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_27: .asciiz "RuntimeError: Function call in a void instance" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + .word data_7 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_6_prototype: + .word 5 + .word 4 + .word type_6_dispatch + .word -1 + + +type_7_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_equal_at_Complex + .word function_init_at_Complex + .word function_print_at_Complex + .word function_reflect_0_at_Complex + .word function_reflect_X_at_Complex + .word function_reflect_Y_at_Complex + .word function_x_value_at_Complex + .word function_y_value_at_Complex + .word __init_attr_at_Complex + .word __init_at_Complex + +type_7_prototype: + .word 6 + .word 6 + .word type_7_dispatch + .word 0 + .word 0 + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_10 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_8 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_11 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -148 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -152($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -148($fp) + jal __init_at_Complex + sw $v0 -144($fp) + lw $t0 -144($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_12 + syscall + li $v0 10 + syscall + label_4: + lw $t0 -144($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -152($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -148($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -144($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -136($fp) + lw $t0 -136($fp) + sw $t0 -156($fp) + lw $t0 -156($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_13 + syscall + li $v0 10 + syscall + label_6: + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -156($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_8: + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -84($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -112($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -108($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -104($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -100($fp) + lw $t0 -112($fp) + lw $t1 -108($fp) + seq $t0 $t0 $t1 + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_9 + lw $t0 -112($fp) + lw $t1 -104($fp) + seq $t0 $t0 $t1 + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_10 + lw $t0 -112($fp) + lw $t1 -100($fp) + seq $t0 $t0 $t1 + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_11 + lw $t0 -84($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + j label_12 + label_9: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -120($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 -120($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + j label_12 + label_10: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -120($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 -120($fp) + move $a0 $t0 + lw $t0 -116($fp) + move $a1 $t0 + jal equal_str + sw $v0 -92($fp) + j label_12 + label_11: + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -120($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 -120($fp) + lw $t1 -116($fp) + seq $t0 $t0 $t1 + sw $t0 -92($fp) + j label_12 + label_12: + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -124($fp) + lw $t0 -124($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_13 + la $t0 data_15 + sw $t0 -68($fp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -132($fp) + j label_14 + label_13: + la $t0 data_16 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -60($fp) + lw $t0 -60($fp) + sw $t0 -132($fp) + label_14: + lw $t0 -156($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_17 + syscall + li $v0 10 + syscall + label_16: + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 40($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 -156($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_17 + j label_18 + label_17: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_18: + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -156($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 44($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_19 + j label_20 + label_19: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_20: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_21 + j label_22 + label_21: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_22: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + addi $sp $sp 148 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 16 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 0($fp) + lw $t1 -16($fp) + sw $t1 12($t0) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 0($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_init_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -80 + lw $t4 8($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -68($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -64($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -60($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -56($fp) + lw $t0 -68($fp) + lw $t1 -64($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_23 + lw $t0 -68($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_24 + lw $t0 -68($fp) + lw $t1 -56($fp) + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_25 + lw $t4 8($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 4($fp) + seq $t0 $t0 $t1 + sw $t0 -48($fp) + j label_26 + label_23: + lw $t4 8($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 + sw $t0 -48($fp) + j label_26 + label_24: + lw $t4 8($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + move $a0 $t0 + lw $t0 -72($fp) + move $a1 $t0 + jal equal_str + sw $v0 -48($fp) + j label_26 + label_25: + lw $t4 8($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 + sw $t0 -48($fp) + j label_26 + label_26: + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t4 8($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -32($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -28($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -24($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -20($fp) + lw $t0 -32($fp) + lw $t1 -28($fp) + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_27 + lw $t0 -32($fp) + lw $t1 -24($fp) + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_28 + lw $t0 -32($fp) + lw $t1 -20($fp) + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_29 + lw $t4 8($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($fp) + seq $t0 $t0 $t1 + sw $t0 -12($fp) + j label_30 + label_27: + lw $t4 8($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -12($fp) + j label_30 + label_28: + lw $t4 8($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + move $a0 $t0 + lw $t0 -36($fp) + move $a1 $t0 + jal equal_str + sw $v0 -12($fp) + j label_30 + label_29: + lw $t4 8($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -12($fp) + j label_30 + label_30: + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -44($fp) + lw $v0 8($fp) + addi $sp $sp 80 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_print_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -104 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -84($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -80($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -76($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -72($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_31 + lw $t0 -84($fp) + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_32 + lw $t0 -84($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_33 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -64($fp) + j label_34 + label_31: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + seq $t0 $t0 $t1 + sw $t0 -64($fp) + j label_34 + label_32: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -92($fp) + move $a0 $t0 + lw $t0 -88($fp) + move $a1 $t0 + jal equal_str + sw $v0 -64($fp) + j label_34 + label_33: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + seq $t0 $t0 $t1 + sw $t0 -64($fp) + j label_34 + label_34: + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -96($fp) + lw $t0 -96($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_41 + la $t0 data_21 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -52($fp) + la $t0 data_22 + sw $t0 -48($fp) + lw $t0 -48($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + lw $t0 -40($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_35 + j label_36 + label_35: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_36: + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -32($fp) + lw $t0 -32($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_37 + j label_38 + label_37: + li $v0 4 + la $a0 data_24 + syscall + li $v0 10 + syscall + label_38: + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -24($fp) + lw $t0 -24($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_39 + j label_40 + label_39: + li $v0 4 + la $a0 data_25 + syscall + li $v0 10 + syscall + label_40: + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -104($fp) + j label_42 + label_41: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -104($fp) + label_42: + lw $v0 -104($fp) + addi $sp $sp 104 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_reflect_0_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -104 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -64($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -60($fp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -92($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -88($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -84($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -80($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_43 + lw $t0 -92($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_44 + lw $t0 -92($fp) + lw $t1 -80($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_45 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -68($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + j label_46 + label_43: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + j label_46 + label_44: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + move $a0 $t0 + lw $t0 -96($fp) + move $a1 $t0 + jal equal_str + sw $v0 -72($fp) + j label_46 + label_45: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + seq $t0 $t0 $t1 + sw $t0 -72($fp) + j label_46 + label_46: + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -104($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -44($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -40($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -36($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -32($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_47 + lw $t0 -44($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_48 + lw $t0 -44($fp) + lw $t1 -32($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_49 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -20($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_50 + label_47: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_50 + label_48: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + move $a0 $t0 + lw $t0 -48($fp) + move $a1 $t0 + jal equal_str + sw $v0 -24($fp) + j label_50 + label_49: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_50 + label_50: + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -56($fp) + lw $v0 0($fp) + addi $sp $sp 104 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_reflect_X_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -56 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -44($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -40($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -36($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -32($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_51 + lw $t0 -44($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_52 + lw $t0 -44($fp) + lw $t1 -32($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_53 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -20($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_54 + label_51: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_54 + label_52: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + move $a0 $t0 + lw $t0 -48($fp) + move $a1 $t0 + jal equal_str + sw $v0 -24($fp) + j label_54 + label_53: + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_54 + label_54: + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -56($fp) + lw $v0 0($fp) + addi $sp $sp 56 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_reflect_Y_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -56 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -44($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -40($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -36($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -32($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_55 + lw $t0 -44($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_56 + lw $t0 -44($fp) + lw $t1 -32($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_57 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -20($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_58 + label_55: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_58 + label_56: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + move $a0 $t0 + lw $t0 -48($fp) + move $a1 $t0 + jal equal_str + sw $v0 -24($fp) + j label_58 + label_57: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) + seq $t0 $t0 $t1 + sw $t0 -24($fp) + j label_58 + label_58: + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -56($fp) + lw $v0 0($fp) + addi $sp $sp 56 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_equal_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -124 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_59 + j label_60 + label_59: + li $v0 4 + la $a0 data_26 + syscall + li $v0 10 + syscall + label_60: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 52($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -104($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -100($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -96($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -92($fp) + lw $t0 -104($fp) + lw $t1 -100($fp) + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_61 + lw $t0 -104($fp) + lw $t1 -96($fp) + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_62 + lw $t0 -104($fp) + lw $t1 -92($fp) + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_63 + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -76($fp) + seq $t0 $t0 $t1 + sw $t0 -84($fp) + j label_64 + label_61: + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -108($fp) + lw $t0 -112($fp) + lw $t1 -108($fp) + seq $t0 $t0 $t1 + sw $t0 -84($fp) + j label_64 + label_62: + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -108($fp) + lw $t0 -112($fp) + move $a0 $t0 + lw $t0 -108($fp) + move $a1 $t0 + jal equal_str + sw $v0 -84($fp) + j label_64 + label_63: + lw $t4 4($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -76($fp) + lw $t1 12($t0) + sw $t1 -108($fp) + lw $t0 -112($fp) + lw $t1 -108($fp) + seq $t0 $t0 $t1 + sw $t0 -84($fp) + j label_64 + label_64: + lw $t0 -84($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -116($fp) + lw $t0 -116($fp) + lw $t1 12($t0) + sw $t1 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_65 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -124($fp) + j label_74 + label_65: + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_66 + j label_67 + label_66: + li $v0 4 + la $a0 data_27 + syscall + li $v0 10 + syscall + label_67: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 56($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -48($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -44($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -40($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -36($fp) + lw $t0 -48($fp) + lw $t1 -44($fp) + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_68 + lw $t0 -48($fp) + lw $t1 -40($fp) + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_69 + lw $t0 -48($fp) + lw $t1 -36($fp) + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_70 + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 -20($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + j label_71 + label_68: + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + j label_71 + label_69: + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + move $a0 $t0 + lw $t0 -52($fp) + move $a1 $t0 + jal equal_str + sw $v0 -28($fp) + j label_71 + label_70: + lw $t4 4($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) + seq $t0 $t0 $t1 + sw $t0 -28($fp) + j label_71 + label_71: + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 -60($fp) + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_72 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -68($fp) + j label_73 + label_72: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -68($fp) + label_73: + lw $t0 -68($fp) + sw $t0 -124($fp) + label_74: + lw $v0 -124($fp) + addi $sp $sp 124 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_x_value_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_y_value_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t4 0($fp) + lw $t4 16($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $v0 0($sp) + addi $sp $sp 4 + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Complex: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 6 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Complex + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + 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 000000000..00e588a4f --- /dev/null +++ b/tests/codegen/palindrome.mips @@ -0,0 +1,1871 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz " +" +.word 0 +data_8: .asciiz "" +.word 0 +data_9: .asciiz "Abort called from class " +.word 0 +data_10: .asciiz "Substring out of range" +.word 0 +data_11: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_12: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_13: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_14: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_15: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_16: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_17: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_18: .asciiz "enter a string\n" +.word 0 +data_19: .asciiz "that was not a palindrome\n" +.word 0 +data_20: .asciiz "that was a palindrome\n" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_main_at_Main + .word function_pal_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_6_prototype: + .word 5 + .word 5 + .word type_6_dispatch + .word 0 + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_9 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_7 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_10 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + lw $t1 -12($fp) + sw $t1 12($t0) + lw $v0 0($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_pal_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -272 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -232($fp) + lw $t0 -232($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_11 + syscall + li $v0 10 + syscall + label_4: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -228($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -224($fp) + lw $t0 -228($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -256($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -252($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -248($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -244($fp) + lw $t0 -256($fp) + lw $t1 -252($fp) + seq $t0 $t0 $t1 + sw $t0 -240($fp) + lw $t0 -240($fp) + bne $t0 $zero label_5 + lw $t0 -256($fp) + lw $t1 -248($fp) + seq $t0 $t0 $t1 + sw $t0 -240($fp) + lw $t0 -240($fp) + bne $t0 $zero label_6 + lw $t0 -256($fp) + lw $t1 -244($fp) + seq $t0 $t0 $t1 + sw $t0 -240($fp) + lw $t0 -240($fp) + bne $t0 $zero label_7 + lw $t0 -228($fp) + lw $t1 -224($fp) + seq $t0 $t0 $t1 + sw $t0 -236($fp) + j label_8 + label_5: + lw $t0 -228($fp) + lw $t1 12($t0) + sw $t1 -264($fp) + lw $t0 -224($fp) + lw $t1 12($t0) + sw $t1 -260($fp) + lw $t0 -264($fp) + lw $t1 -260($fp) + seq $t0 $t0 $t1 + sw $t0 -236($fp) + j label_8 + label_6: + lw $t0 -228($fp) + lw $t1 12($t0) + sw $t1 -264($fp) + lw $t0 -224($fp) + lw $t1 12($t0) + sw $t1 -260($fp) + lw $t0 -264($fp) + move $a0 $t0 + lw $t0 -260($fp) + move $a1 $t0 + jal equal_str + sw $v0 -236($fp) + j label_8 + label_7: + lw $t0 -228($fp) + lw $t1 12($t0) + sw $t1 -264($fp) + lw $t0 -224($fp) + lw $t1 12($t0) + sw $t1 -260($fp) + lw $t0 -264($fp) + lw $t1 -260($fp) + seq $t0 $t0 $t1 + sw $t0 -236($fp) + j label_8 + label_8: + lw $t0 -236($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -268($fp) + lw $t0 -268($fp) + lw $t1 12($t0) + sw $t1 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_33 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_12 + syscall + li $v0 10 + syscall + label_10: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -172($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -168($fp) + lw $t0 -172($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -200($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -196($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -192($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -188($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + seq $t0 $t0 $t1 + sw $t0 -184($fp) + lw $t0 -184($fp) + bne $t0 $zero label_11 + lw $t0 -200($fp) + lw $t1 -192($fp) + seq $t0 $t0 $t1 + sw $t0 -184($fp) + lw $t0 -184($fp) + bne $t0 $zero label_12 + lw $t0 -200($fp) + lw $t1 -188($fp) + seq $t0 $t0 $t1 + sw $t0 -184($fp) + lw $t0 -184($fp) + bne $t0 $zero label_13 + lw $t0 -172($fp) + lw $t1 -168($fp) + seq $t0 $t0 $t1 + sw $t0 -180($fp) + j label_14 + label_11: + lw $t0 -172($fp) + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -168($fp) + lw $t1 12($t0) + sw $t1 -204($fp) + lw $t0 -208($fp) + lw $t1 -204($fp) + seq $t0 $t0 $t1 + sw $t0 -180($fp) + j label_14 + label_12: + lw $t0 -172($fp) + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -168($fp) + lw $t1 12($t0) + sw $t1 -204($fp) + lw $t0 -208($fp) + move $a0 $t0 + lw $t0 -204($fp) + move $a1 $t0 + jal equal_str + sw $v0 -180($fp) + j label_14 + label_13: + lw $t0 -172($fp) + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -168($fp) + lw $t1 12($t0) + sw $t1 -204($fp) + lw $t0 -208($fp) + lw $t1 -204($fp) + seq $t0 $t0 $t1 + sw $t0 -180($fp) + j label_14 + label_14: + lw $t0 -180($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -212($fp) + lw $t0 -212($fp) + lw $t1 12($t0) + sw $t1 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_31 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -120($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -116($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_13 + syscall + li $v0 10 + syscall + label_16: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -120($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -116($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -108($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_17 + j label_18 + label_17: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_18: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -84($fp) + lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + lw $t1 12($t0) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) + sub $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -104($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_19 + j label_20 + label_19: + li $v0 4 + la $a0 data_15 + syscall + li $v0 10 + syscall + label_20: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -104($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -76($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -68($fp) + lw $t0 -108($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -144($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -140($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -136($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -132($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_21 + lw $t0 -144($fp) + lw $t1 -136($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_22 + lw $t0 -144($fp) + lw $t1 -132($fp) + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_23 + lw $t0 -108($fp) + lw $t1 -68($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + j label_24 + label_21: + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -152($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + j label_24 + label_22: + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -152($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -152($fp) + move $a0 $t0 + lw $t0 -148($fp) + move $a1 $t0 + jal equal_str + sw $v0 -124($fp) + j label_24 + label_23: + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -152($fp) + lw $t0 -68($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + j label_24 + label_24: + lw $t0 -124($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -156($fp) + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_25 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + sw $t0 -164($fp) + j label_30 + label_25: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -56($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_26 + j label_27 + label_26: + li $v0 4 + la $a0 data_16 + syscall + li $v0 10 + syscall + label_27: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 12($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -48($fp) + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + lw $t0 -48($fp) + lw $t1 -44($fp) + sub $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_28 + j label_29 + label_28: + li $v0 4 + la $a0 data_17 + syscall + li $v0 10 + syscall + label_29: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -20($fp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -60($fp) + lw $t0 -60($fp) + sw $t0 -164($fp) + label_30: + lw $t0 -164($fp) + sw $t0 -220($fp) + j label_32 + label_31: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -16($fp) + lw $t0 -16($fp) + sw $t0 -220($fp) + label_32: + lw $t0 -220($fp) + sw $t0 -276($fp) + j label_34 + label_33: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -276($fp) + label_34: + lw $v0 -276($fp) + addi $sp $sp 272 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -72 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -72($fp) + not $t0 $t0 + addi $t0 $t0 1 + sw $t0 -68($fp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + lw $t1 0($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + la $t0 data_18 + sw $t0 -56($fp) + lw $t0 -56($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -60($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 16($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 32($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -40($fp) + lw $t0 -40($fp) + lw $t1 12($t0) + sw $t1 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_35 + la $t0 data_19 + sw $t0 -28($fp) + lw $t0 -28($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -24($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -48($fp) + j label_36 + label_35: + la $t0 data_20 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -48($fp) + label_36: + lw $v0 -48($fp) + addi $sp $sp 72 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + 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 000000000..9aac79288 --- /dev/null +++ b/tests/codegen/primes.mips @@ -0,0 +1,1735 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz " +" +.word 0 +data_8: .asciiz "" +.word 0 +data_9: .asciiz "Abort called from class " +.word 0 +data_10: .asciiz "Substring out of range" +.word 0 +data_11: .asciiz "2 is trivially prime.\n" +.word 0 +data_12: .asciiz "RuntimeError: Division by zero" +.word 0 +data_13: .asciiz " is prime.\n" +.word 0 +data_14: .asciiz "continue" +.word 0 +data_15: .asciiz "halt" +.word 0 +data_16: .asciiz "RuntimeError: Function call in a void instance" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_6_prototype: + .word 5 + .word 9 + .word type_6_dispatch + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_9 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_7 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_10 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -376 + la $t0 data_11 + sw $t0 -356($fp) + lw $t0 -356($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -352($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -352($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -360($fp) + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -348($fp) + lw $t0 -348($fp) + sw $t0 -364($fp) + lw $t0 0($fp) + lw $t1 -364($fp) + sw $t1 20($t0) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + sw $t0 -344($fp) + lw $t0 0($fp) + lw $t1 -344($fp) + sw $t1 28($t0) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -340($fp) + lw $t0 0($fp) + lw $t1 -340($fp) + sw $t1 12($t0) + li $t0 500 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -332($fp) + lw $t0 -332($fp) + sw $t0 -336($fp) + lw $t0 0($fp) + lw $t1 -336($fp) + sw $t1 24($t0) + label_3: + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -320($fp) + lw $t0 -320($fp) + lw $t1 12($t0) + sw $t1 -324($fp) + lw $t0 -324($fp) + bne $t0 $zero label_4 + j label_24 + label_4: + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -312($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -300($fp) + lw $t0 -300($fp) + lw $t1 12($t0) + sw $t1 -308($fp) + lw $t0 -312($fp) + lw $t1 -308($fp) + add $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -316($fp) + lw $t0 -316($fp) + lw $t1 0($fp) + addi $t1 $t1 28 + sw $t0 0($t1) + li $t0 2 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -296($fp) + lw $t0 -296($fp) + lw $t1 0($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + label_5: + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -260($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -256($fp) + lw $t0 -260($fp) + lw $t1 -256($fp) + mul $t0 $t0 $t1 + sw $t0 -252($fp) + lw $t0 -252($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -264($fp) + lw $t0 -264($fp) + lw $t1 12($t0) + sw $t1 -272($fp) + lw $t0 -276($fp) + lw $t1 -272($fp) + slt $t1 $t0 $t1 + sw $t1 -268($fp) + lw $t0 -268($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -280($fp) + lw $t0 -280($fp) + lw $t1 12($t0) + sw $t1 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_14 + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -200($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -184($fp) + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -168($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -156($fp) + lw $t0 -156($fp) + lw $t1 12($t0) + sw $t1 -156($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -164($fp) + lw $t0 -156($fp) + lw $t1 -164($fp) + seq $t0 $t0 $t1 + sw $t0 -156($fp) + lw $t0 -156($fp) + bne $t0 $zero label_6 + j label_7 + label_6: + li $v0 4 + la $a0 data_12 + syscall + li $v0 10 + syscall + label_7: + lw $t0 -168($fp) + lw $t1 -164($fp) + div $t0 $t1 + mflo $t0 + sw $t0 -160($fp) + lw $t0 -160($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -172($fp) + lw $t0 -172($fp) + lw $t1 12($t0) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) + mul $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -188($fp) + lw $t0 -188($fp) + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) + sub $t0 $t0 $t1 + sw $t0 -192($fp) + lw $t0 -192($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -204($fp) + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -152($fp) + lw $t0 -204($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -228($fp) + la $t0 types_table + addi $t0 $t0 12 + lw $t0 0($t0) + sw $t0 -224($fp) + la $t0 types_table + addi $t0 $t0 8 + lw $t0 0($t0) + sw $t0 -220($fp) + la $t0 types_table + addi $t0 $t0 16 + lw $t0 0($t0) + sw $t0 -216($fp) + lw $t0 -228($fp) + lw $t1 -224($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_8 + lw $t0 -228($fp) + lw $t1 -220($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_9 + lw $t0 -228($fp) + lw $t1 -216($fp) + seq $t0 $t0 $t1 + sw $t0 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_10 + lw $t0 -204($fp) + lw $t1 -152($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + j label_11 + label_8: + lw $t0 -204($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -236($fp) + lw $t1 -232($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + j label_11 + label_9: + lw $t0 -204($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -236($fp) + move $a0 $t0 + lw $t0 -232($fp) + move $a1 $t0 + jal equal_str + sw $v0 -208($fp) + j label_11 + label_10: + lw $t0 -204($fp) + lw $t1 12($t0) + sw $t1 -236($fp) + lw $t0 -152($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -236($fp) + lw $t1 -232($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + j label_11 + label_11: + lw $t0 -208($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -240($fp) + lw $t0 -240($fp) + lw $t1 12($t0) + sw $t1 -244($fp) + lw $t0 -244($fp) + bne $t0 $zero label_12 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -148($fp) + lw $t0 -148($fp) + sw $t0 -248($fp) + j label_13 + label_12: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -144($fp) + lw $t0 -144($fp) + sw $t0 -248($fp) + label_13: + lw $t0 -248($fp) + sw $t0 -288($fp) + j label_15 + label_14: + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -140($fp) + lw $t0 -140($fp) + sw $t0 -288($fp) + label_15: + lw $t0 -288($fp) + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -292($fp) + bne $t0 $zero label_16 + j label_17 + label_16: + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -132($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -120($fp) + lw $t0 -120($fp) + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) + add $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -136($fp) + lw $t0 -136($fp) + lw $t1 0($fp) + addi $t1 $t1 12 + sw $t0 0($t1) + j label_5 + label_17: + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -104($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t4 0($fp) + lw $t4 12($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -84($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) + mul $t0 $t0 $t1 + sw $t0 -80($fp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + lw $t1 12($t0) + sw $t1 -100($fp) + lw $t0 -104($fp) + lw $t1 -100($fp) + slt $t1 $t0 $t1 + sw $t1 -96($fp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -108($fp) + lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_18 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -76($fp) + lw $t0 -76($fp) + sw $t0 -116($fp) + j label_19 + label_18: + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 0($fp) + addi $t1 $t1 20 + sw $t0 0($t1) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t4 0($fp) + lw $t4 20($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -72($fp) + la $t0 data_13 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -116($fp) + label_19: + lw $t4 0($fp) + lw $t4 24($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -44($fp) + lw $t4 0($fp) + lw $t4 28($t4) + addi $sp $sp -4 + sw $t4 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) + sle $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -48($fp) + lw $t0 -48($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_20 + la $t0 data_14 + sw $t0 -32($fp) + lw $t0 -32($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -56($fp) + j label_23 + label_20: + la $t0 data_15 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -20($fp) + lw $t0 -20($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_21 + j label_22 + label_21: + li $v0 4 + la $a0 data_16 + syscall + li $v0 10 + syscall + label_22: + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 0($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -56($fp) + label_23: + j label_3 + label_24: + sw $zero -328($fp) + lw $t0 0($fp) + lw $t1 -328($fp) + sw $t1 16($t0) + lw $v0 0($fp) + addi $sp $sp 376 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + li $t0 0 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -28 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 28 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + jr $ra + \ No newline at end of file diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips new file mode 100644 index 000000000..beff04dd7 --- /dev/null +++ b/tests/codegen/print-cool.mips @@ -0,0 +1,1082 @@ +.data +default_str: .asciiz "" +.word 0 +data_1: .asciiz "Object" +.word 0 +data_2: .asciiz "IO" +.word 0 +data_3: .asciiz "String" +.word 0 +data_4: .asciiz "Int" +.word 0 +data_5: .asciiz "Bool" +.word 0 +data_6: .asciiz "Main" +.word 0 +data_7: .asciiz " +" +.word 0 +data_8: .asciiz "" +.word 0 +data_9: .asciiz "Abort called from class " +.word 0 +data_10: .asciiz "Substring out of range" + + +types_table: + .word data_1 + .word data_2 + .word data_3 + .word data_4 + .word data_5 + .word data_6 + +prototype_table: + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + +type_1_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Object + +type_1_prototype: + .word 0 + .word 4 + .word type_1_dispatch + .word -1 + + +type_2_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_out_string_at_IO + .word function_out_int_at_IO + .word function_in_string_at_IO + .word function_in_int_at_IO + .word __init_at_IO + +type_2_prototype: + .word 1 + .word 4 + .word type_2_dispatch + .word -1 + + +type_3_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word function_length_at_String + .word function_concat_at_String + .word function_substr_at_String + .word __init_at_String + +type_3_prototype: + .word 2 + .word 6 + .word type_3_dispatch + .word 0 + .word 0 + .word -1 + + +type_4_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Int + +type_4_prototype: + .word 3 + .word 5 + .word type_4_dispatch + .word 0 + .word -1 + + +type_5_dispatch: + .word function_abort_at_Object + .word function_type_name_at_Object + .word function_copy_at_Object + .word __init_at_Bool + +type_5_prototype: + .word 4 + .word 5 + .word type_5_dispatch + .word 0 + .word -1 + + +type_6_dispatch: + .word function_abort_at_Object + .word function_copy_at_Object + .word function_type_name_at_Object + .word function_in_int_at_IO + .word function_in_string_at_IO + .word function_out_int_at_IO + .word function_out_string_at_IO + .word function_main_at_Main + .word __init_attr_at_Main + .word __init_at_Main + +type_6_prototype: + .word 5 + .word 4 + .word type_6_dispatch + .word -1 + + +.text +.globl main +main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + jal __init_at_Main + sw $v0 -12($fp) + lw $t0 -12($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal function_main_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + li $v0 0 + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + li $v0 10 + syscall + +__init_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 0 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_abort_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + la $t0 data_9 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + la $t0 data_7 + sw $t0 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + li $v0 10 + syscall + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_type_name_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + lw $t0 0($fp) + lw $t1 0($t0) + sll $t1 $t1 2 + la $t0 types_table + add $t0 $t0 $t1 + lw $t1 0($t0) + sw $t1 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_copy_at_Object: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $a0 4($t0) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t0 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 1 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 4 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_out_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -12($fp) + li $v0 1 + lw $a0 -12($fp) + syscall + lw $v0 4($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_string_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + jal read_string + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_in_int_at_IO: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $v0 5 + syscall + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -12 + li $t0 2 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -20($fp) + lw $t0 -20($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $a0 0($fp) + jal length + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -12($fp) + lw $t0 -20($fp) + lw $t1 -12($fp) + sw $t1 16($t0) + lw $v0 -20($fp) + addi $sp $sp 12 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_length_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_concat_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -24 + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -32($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 4($fp) + lw $t1 16($t0) + sw $t1 -24($fp) + lw $t0 0($fp) + lw $t1 16($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 12($t0) + sw $t1 -24($fp) + lw $t0 -20($fp) + lw $t1 12($t0) + sw $t1 -20($fp) + lw $t0 -24($fp) + lw $t1 -20($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $a0 -32($fp) + lw $a1 -28($fp) + lw $a2 -24($fp) + jal concat + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 24 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_substr_at_String: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -36 + lw $t0 8($fp) + lw $t1 12($t0) + sw $t1 -16($fp) + lw $t0 4($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 0($fp) + lw $t1 12($t0) + sw $t1 -36($fp) + lw $t0 8($fp) + lw $t1 16($t0) + sw $t1 -32($fp) + lw $t0 -32($fp) + lw $t1 12($t0) + sw $t1 -28($fp) + lw $t0 -36($fp) + lw $t1 -40($fp) + add $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -28($fp) + lw $t1 -24($fp) + slt $t1 $t0 $t1 + sw $t1 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_1 + j label_2 + label_1: + li $v0 4 + la $a0 data_10 + syscall + li $v0 10 + syscall + label_2: + lw $a0 -16($fp) + lw $a1 -40($fp) + lw $a2 -36($fp) + jal substr + sw $v0 -44($fp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 36 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Int: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 3 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Bool: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -4 + li $t0 4 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -12($fp) + lw $t0 -12($fp) + lw $t1 0($fp) + sw $t1 12($t0) + lw $v0 -12($fp) + addi $sp $sp 4 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_attr_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp 0 + lw $v0 0($fp) + addi $sp $sp 0 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +function_main_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -16 + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -24($fp) + li $t0 3 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -20($fp) + addi $sp $sp 16 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + +__init_at_Main: + addi $sp $sp -4 + sw $ra 0($sp) + addi $sp $sp -4 + sw $fp 0($sp) + addi $fp $sp 8 + addi $sp $sp -8 + li $t0 5 + sll $t0 $t0 2 + la $t1 prototype_table + add $t1 $t1 $t0 + lw $t1 0($t1) + lw $a0 4($t1) + sll $a0 $a0 2 + jal malloc + move $a2 $a0 + move $a0 $t1 + move $a1 $v0 + jal copy + sw $v0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_attr_at_Main + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 8 + lw $fp 0($sp) + addi $sp $sp 4 + lw $ra 0($sp) + addi $sp $sp 4 + jr $ra + + + + +# Args: +# $a0 size to alloc +# Return: +# $v0 address of allocated block + +malloc: + addiu $sp $sp -12 # Save content of registers in sp + sw $a0 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + + li $t0 4 + div $a0 $t0 # Size of string / wordsize + mfhi $t1 # t2 holds remainder of division + + sub $t0 $t0 $t1 # Convert t1 to multiple of 4 + add $a0 $a0 $t0 + + li $v0 9 + syscall + + lw $a0 0($sp) # Return original content to registers + lw $t0 4($sp) + lw $t1 8($sp) + addiu $sp $sp 12 + jr $ra + + +# COPY +# $a0 address from +# $a1 address to +# $a2 size + +copy: + addiu $sp $sp -16 # Save content of registers in sp + sw $a0 0($sp) + sw $a1 4($sp) + sw $a2 8($sp) + sw $t0 12($sp) + +copy_loop: + beq $a2 $zero copy_end # Copy finished (copy size is 0) + lw $t0 0($a0) # Load in t0 content of source address a0 + sw $t0 0($a1) # Save in destiny a1 content of t0 + addiu $a0 $a0 4 # Increase source address a0 + addiu $a1 $a1 4 # Increase destiny addres a1 + addi $a2 $a2 -4 # Decrease copy size + j copy_loop + +copy_end: + lw $a0 0($sp) # Return original content to registers + lw $a1 4($sp) + lw $a2 8($sp) + lw $t0 12($sp) + addiu $sp $sp 16 + + jr $ra + + + + +# LEN +# a0 begin address +# return size in v0 +length: + # Save content of registers + addiu $sp $sp -8 + sw $t0 0($sp) + sw $t1 4($sp) + + move $t0 $a0 # Move to t0 the address to begin + move $v0 $zero # Set v0 to zero + +len_loop: + lb $t1 0($t0) # Save in t1 first byte of address + beq $t1 $zero len_end # Finish object if t1 is zero + addi $v0 $v0 1 # Increase count in v0 + addiu $t0 $t0 1 # Increase address pointer + j len_loop # Finish loop + +len_end: + # Return original content to registers + lw $t0 0($sp) + lw $t1 4($sp) + addiu $sp $sp 8 + + jr $ra + + +# SUBSTRING +# a0 Pointer to beginning of string +# a1 Pointer to beginning of substring +# a2 Size of substring + + +substr: + # Save content of registers + addiu $sp $sp -32 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $t3 12($sp) + sw $a0 16($sp) + sw $a1 20($sp) + sw $a2 24($sp) + sw $ra 28($sp) + + move $t0 $a0 # t0 points to beginning o string + add $t0 $t0 $a1 + li $t1 4 # t1 Word size + + div $a2 $t1 # Size of substring / wordsize + mfhi $t2 # t2 holds remainder of division + + bne $t2 $zero substr_allign_size # Branch if division is not exact + move $t1 $a2 # t1 size of substring + j substr_new_block + +substr_allign_size: + sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... + add $t1 $t1 $a2 # reserve memory via malloc + +substr_new_block: + move $a0 $t1 # Store in a0 size of space to reserve via malloc + jal malloc # Malloc + move $t3 $v0 # Pointer to beginning of reserved space + move $t1 $zero # Count + +substr_copy_loop: + beq $t1 $a2 substr_end # Copy finished + lb $t2 0($t0) # Load byte from string into t2 temporal + sb $t2 0($t3) # Savebyte from t2 into t3 + addiu $t0 $t0 1 # Increase pointer to string + addiu $t3 $t3 1 # Increase pointer to reserved space + addiu $t1 $t1 1 # Increase count + j substr_copy_loop + +substr_end: + sb $zero 0($t3) # Set next byte of substring to zero + + # Return original values to registers + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $t3 12($sp) + lw $a0 16($sp) + lw $a1 20($sp) + lw $a2 24($sp) + lw $ra 28($sp) + addiu $sp $sp 32 + + jr $ra + + + +# CONCAT +# a0 pointer to string 1 +# a1 pointer to string 2 +# a2 size of string 1 + size of string 2 + +concat: + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $t2 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $ra 20($sp) + + move $t0 $a0 # t0 pointer to string 1 + move $t1 $a1 # t1 pointer to string 2 + + + addiu $a0 $a2 1 # Save in a0 size in a2 + 1 + li $t2 4 # t2 = 4 + div $a0 $t2 # a0 / t2 + mfhi $a0 # a0 remainder of division + bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 + addiu $a0 $a2 1 # Add 1 t size + j concat_size_alligned + +concat_allign_size: + sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... + add $a0 $a2 $t2 # reserve memory via malloc + addiu $a0 $a0 1 # Add 1 t size + +concat_size_alligned: + jal malloc # a0 stores size to reserve + move $t2 $v0 # t2 is pointer to empty space + j concat_copy_first_loop + +concat_copy_first_loop: + lb $a0 0($t0) # move to a0 content of t0 + beq $a0 $zero concat_copy_second_loop # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t0 $t0 1 # Increase t0 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_first_loop + +concat_copy_second_loop: + lb $a0 0($t1) # move to a0 content of t1 + beq $a0 $zero concat_end # a0 == 0 finish + sb $a0 0($t2) # move to t2 content of a0 + addiu $t1 $t1 1 # Increase t1 pointer + addiu $t2 $t2 1 # Increase t2 pointer + j concat_copy_second_loop + +concat_end: + # Return original values to registers + sb $zero 0($t2) + lw $t0 0($sp) + lw $t1 4($sp) + lw $t2 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $ra 20($sp) + addiu $sp $sp 24 + + jr $ra + +read_string: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $a0 12($sp) + sw $a1 16($sp) + sw $a2 20($sp) + sw $t2 24($sp) + + li $t0 8 + + addi $a0 $t0 4 + jal malloc + move $t1 $v0 + move $t2 $zero + + read_string_loop: + + addu $a0 $t1 $t2 + subu $a1 $t0 $t2 + addu $t2 $t2 $a1 + jal read_string_up_to + + beq $v0 $zero read_string_not_finished + move $v0 $t1 + j read_string_finished + + read_string_not_finished: + sll $t0 $t0 1 + + addi $a0 $t0 4 + jal malloc + + move $a0 $t1 + move $t1 $v0 + move $a1 $v0 + move $a2 $t2 + jal copy + + j read_string_loop + + read_string_finished: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $a0 12($sp) + lw $a1 16($sp) + lw $a2 20($sp) + lw $t2 24($sp) + addiu $sp $sp 28 + jr $ra + +# Lee a lo sumo $a1 caracteres y los guarda en la direccion +# a la que apunta $a0, $a1 debe ser divisible por 4 +# retorna en $v0 1 si se leyo un + +read_string_up_to: + addiu $sp $sp -28 + sw $ra 0($sp) + sw $t0 4($sp) + sw $t1 8($sp) + sw $t2 12($sp) + sw $t3 16($sp) + sw $t4 20($sp) + sw $t5 24($sp) + + move $t0 $a0 + move $t1 $zero + li $t2 10 + addu $t3 $t0 $a1 + addiu $a1 $a1 1 + + li $v0 8 + syscall + lw $a0 0($a0) + beq $a0 $zero eol_terminated + + li $v0 0 + + eol_check: + beq $t0 $t3 read_loop_continue + + lb $t1 0($t0) + beq $t1 $t2 eol_terminated + + addiu $t0 $t0 1 + j eol_check + + eol_terminated: + sb $zero 0($t0) # put null character at the end of string + li $v0 1 + read_loop_continue: + + lw $ra 0($sp) + lw $t0 4($sp) + lw $t1 8($sp) + lw $t2 12($sp) + lw $t3 16($sp) + lw $t4 20($sp) + lw $t5 24($sp) + addiu $sp $sp 28 + jr $ra + + +# EQUAL STRING + +equal_str: + # a0 pointer to string 1 + # a1 pointer to string 2 + # v0 answer + + # Save content of registers + addiu $sp $sp -24 + sw $t0 0($sp) + sw $t1 4($sp) + sw $a0 8($sp) + sw $a1 12($sp) + sw $t2 16($sp) + sw $t3 20($sp) + + move $t0 $a0 + move $t1 $a1 + +equal_str_loop: + lb $t2 0($t0) + lb $t3 0($t1) + bne $t2 $t3 equal_str_different_strings + beq $t2 $zero equal_str_finished_first + beq $t3 $zero equal_str_finished_second + addi $t1 $t1 1 + addi $t0 $t0 1 + j equal_str_loop + +equal_str_different_strings: + move $v0 $zero + j equal_str_end + +equal_str_finished_first: + beq $t3 $zero equal_str_finished_second + move $v0 $zero + j equal_str_end + +equal_str_finished_second: + li $v0 1 + +equal_str_end: + lw $t0 0($sp) + lw $t1 4($sp) + lw $a0 8($sp) + lw $a1 12($sp) + lw $t2 16($sp) + lw $t3 20($sp) + addiu $sp $sp 24 + + jr $ra + \ No newline at end of file diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips deleted file mode 100644 index bc6bc022d..000000000 --- a/tests/codegen/sort-list.mips +++ /dev/null @@ -1,2714 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "List" -.word 0 -data_7: .asciiz "Cons" -.word 0 -data_8: .asciiz "Nil" -.word 0 -data_9: .asciiz "Main" -.word 0 -data_10: .asciiz " -" -.word 0 -data_11: .asciiz "" -.word 0 -data_12: .asciiz "Abort called from class " -.word 0 -data_13: .asciiz "Substring out of range" -.word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_24: .asciiz "\n" -.word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_28: .asciiz "How many numbers to sort? " -.word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_30: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_31: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_List - .word function_cdr_at_List - .word function_cons_at_List - .word function_insert_at_List - .word function_isNil_at_List - .word function_print_list_at_List - .word function_rcons_at_List - .word function_rev_at_List - .word function_sort_at_List - .word __init_attr_at_List - .word __init_at_List - -type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_Cons - .word function_cdr_at_Cons - .word function_cons_at_List - .word function_insert_at_Cons - .word function_isNil_at_Cons - .word function_print_list_at_Cons - .word function_rcons_at_Cons - .word function_rev_at_Cons - .word function_sort_at_Cons - .word function_init_at_Cons - .word __init_attr_at_Cons - .word __init_at_Cons - -type_7_prototype: - .word 6 - .word 6 - .word type_7_dispatch - .word 0 - .word 0 - .word -1 - - -type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_List - .word function_cdr_at_List - .word function_cons_at_List - .word function_insert_at_Nil - .word function_isNil_at_Nil - .word function_print_list_at_Nil - .word function_rcons_at_Nil - .word function_rev_at_Nil - .word function_sort_at_Nil - .word __init_attr_at_Nil - .word __init_at_Nil - -type_8_prototype: - .word 7 - .word 4 - .word type_8_dispatch - .word -1 - - -type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_iota_at_Main - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_9_prototype: - .word 8 - .word 5 - .word type_9_dispatch - .word 0 - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_12 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_10 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cons_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -24($fp) - lw $t0 -24($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_4: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_car_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cdr_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - jal __init_at_List - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_rev_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_sort_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_insert_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_rcons_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_list_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -20($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_car_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cdr_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_rev_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_6: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_sort_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_10: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 60($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_12: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_insert_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -64 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - slt $t1 $t0 $t1 - sw $t1 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_17 - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_14: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - jal __init_at_Cons - sw $v0 -32($fp) - lw $t0 -32($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_16: - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -64($fp) - j label_20 - label_17: - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_18 - j label_19 - label_18: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_19: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -64($fp) - label_20: - lw $v0 -64($fp) - addi $sp $sp 64 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_rcons_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_22: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -24($fp) - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_24: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_list_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -32 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -32($fp) - la $t0 data_24 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_25 - j label_26 - label_25: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_26: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 32 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Cons - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_rev_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_sort_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_insert_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_rcons_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_28: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_list_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Nil - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_iota_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -68 - jal __init_at_Nil - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - sw $t0 -68($fp) - label_29: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - slt $t1 $t0 $t1 - sw $t1 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_30 - j label_33 - label_30: - jal __init_at_Cons - sw $v0 -40($fp) - lw $t0 -40($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_31 - j label_32 - label_31: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_32: - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -68($fp) - j label_29 - label_33: - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 68 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -48 - la $t0 data_28 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_34 - j label_35 - label_34: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_35: - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_36 - j label_37 - label_36: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_37: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 60($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_38 - j label_39 - label_38: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_39: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - addi $sp $sp 48 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file From 95bcf8ee08d01e96597bf79b127f52f3c1853021 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Sun, 27 Feb 2022 21:11:48 -0500 Subject: [PATCH 76/93] preparing to add the cil2mips code --- src/__main__.py | 108 +- src/pipeline.py | 55 +- src/visitors/Checker.py | 68 +- src/visitors/CooltoCil.py | 1379 +-- src/visitors/CooltoCilA.py | 672 -- src/visitors/CooltoCilM.py | 1153 --- tests/codegen/arith.mips | 8818 +++++++++++--------- tests/codegen/atoi.mips | 3812 +++++---- tests/codegen/book_list.mips | 601 +- tests/codegen/cells.mips | 1292 +-- tests/codegen/complex.mips | 614 +- tests/codegen/fib.mips | 154 +- tests/codegen/graph.mips | 3758 +++++---- tests/codegen/hairyscary.mips | 634 +- tests/codegen/hello_world.mips | 32 +- tests/codegen/io.mips | 202 +- tests/codegen/life.mips | 6714 ++++++++------- tests/codegen/list.mips | 438 +- tests/codegen/new_complex.mips | 872 +- tests/codegen/palindrome.mips | 610 +- tests/codegen/primes.mips | 526 +- tests/codegen/print-cool.mips | 265 +- tests/codegen/{d => }/sort-list.cl | 0 tests/codegen/{d => }/sort-list.mips | 498 +- tests/codegen/{d => }/sort-list_input.txt | 0 tests/codegen/{d => }/sort-list_output.txt | 0 tests/lexer_test.py | 30 +- tests/parser_test.py | 26 +- tests/semantic_test.py | 24 +- 29 files changed, 18124 insertions(+), 15231 deletions(-) delete mode 100644 src/visitors/CooltoCilA.py delete mode 100644 src/visitors/CooltoCilM.py rename tests/codegen/{d => }/sort-list.cl (100%) rename tests/codegen/{d => }/sort-list.mips (91%) rename tests/codegen/{d => }/sort-list_input.txt (100%) rename tests/codegen/{d => }/sort-list_output.txt (100%) diff --git a/src/__main__.py b/src/__main__.py index 7999ecb6d..cdb151dad 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -3,119 +3,17 @@ import c_parser.parser as parser from pipeline import Pipeline -# with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/semantic/self4.cl') as f: -# with open('./tests/codegen/hello_world.cl') as f: -# program = f.read() - -# coolLexer = lexer.CoolLexer() -# coolLexer.build() -# tokens = coolLexer.input(program) -# # for error in coolLexer.errors: -# # print(error) -# Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) -# coolParser = parser.CoolParser() - -# ast = coolParser.parse(lexer.CoolLexer(), program) -# for lexing_error in coolParser.lexer.errors: -# print(lexing_error) -# for parsing_error in coolParser.errors: -# print(parsing_error) -# a = 0 - -# if __name__ == '__main__': -# # with open('examles/hello_world.cl', 'r') as fd: -# with open(f'{sys.argv[1]}', 'r') as fd: -# program = '' -# temp = fd.read() -# while temp: -# program += temp -# temp = fd.read() -# coolLexer = lexer.CoolLexer() -# coolLexer.build() -# tokens = coolLexer.input(program) -# # for error in coolLexer.errors: -# # print(error) -# Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) -# coolParser = parser.CoolParser() - -# ast = coolParser.parse(lexer.CoolLexer(), program) -# if len(coolParser.lexer.errors) == 0 and len(coolParser.errors) == 0: -# exit(0) -# else: -# for lexing_error in coolParser.lexer.errors: -# print(lexing_error) -# for parsing_error in coolParser.errors: -# print(parsing_error) -# exit(1) - - # parser_object = parser.make_parser() - # ast = parser_object.parse(inp) - # semantic_object = check_semantic.CheckSemantic() - # cil_object = cil.Cool2cil() - # scope_root = semantic_object.visit(ast, None) - # cil_object.visit(ast, scope_root) - # mips_object = MIPS(cil_object) - # mips_object.generate_mips() - # inp = '' - # with open('src/staticMipsCode.asm', 'r') as fd: - # temp = fd.read() - # while temp: - # inp += temp - # temp = fd.read() - # with open(f'{argv[2]}', 'w') as fd: - # fd.write(inp) - # fd.write("\n") - # fd.write("# Start Mips Generated Code") - # fd.write("\n") - # for line in mips_object.mips_code: - # fd.write("\n" + line) - - def main(): if len(sys.argv) > 1: input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] else: - input_file = "./tests/codegen/print-cool.cl"#"debbuging/tests/Auto/call1.cl" - # raise Exception("Incorrect number of arguments") - # try: - # program_file = open(input_file) - # program = program_file.read() - # program_file.close() - - # # coolLexer = lexer.CoolLexer() - # # coolLexer.build() - # # tokens = coolLexer.input(program) - # # if coolLexer.errors: - # # for error in coolLexer.errors: - # # print(error.__str__()) - # # exit(1) - - # pipe = Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) - # if pipe.errors: - # for error in pipe.errors: - # print(error) - # exit(1) - # else: - # out_file = input_file.split(".") - # out_file[-1] = "mips" - # out_file = ".".join(out_file) - - # with open(out_file, 'w') as f: - # f.write(pipe.mipsCode) - # except Exception as e: - # print(e) - # exit(1) + input_file = "./tests/codegen/arith.cl"#"debbuging/tests/Auto/call1.cl" program_file = open(input_file) program = program_file.read() program_file.close() - # coolLexer = lexer.CoolLexer() - # coolLexer.build() - # tokens = coolLexer.input(program) - # if coolLexer.errors: - # for error in coolLexer.errors: - # print(error.__str__()) - # exit(1) + + pipe = Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) if pipe.errors: for error in pipe.errors: diff --git a/src/pipeline.py b/src/pipeline.py index 1ac38fd94..06e8ffaca 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -5,16 +5,9 @@ from visitors.Checker import TypeChecker from visitors.Inferencer import Inferencer from visitors.Executor import Executor, RuntimeException -# from visitors.CooltoCil import COOLToCILVisitor -from visitors.CooltoCilM import COOLToCILVisitor +from visitors.CooltoCil import COOLToCILVisitor from visitors.CilDepicter import get_formatter -# from visitors.CiltoMips import CiltoMipsVisitor -from cil_ast.cil_ast import get_formatter -from mmips.CilToMipsVisitor import CILToMIPSVisitor -from mmips.MIPSAstFormatter import MIPSAstFormatter - -# from visitors.Cil2MipsCurrent import CILToMipsVisitor class Pipeline(): def __init__(self, program, lexer, parser, verbose=False): @@ -25,15 +18,6 @@ def __init__(self, program, lexer, parser, verbose=False): self.lexer = lexer self.parser = parser - # current_position = 0 - # for char in self.program: - - # self.tokens = self.lexer.lexer(self.program) - - # self.tokens = [ token for token in self.tokens if token.token_type not in ['space', 'newLine', 'chunkComment', 'lineComment', 'tab']] - - # derivations, operations = self.parser.Parser(self.tokens, True) - self.ast = self.parser.parse(lexer, program)#= evaluate_reverse_parse(derivations, operations, self.tokens) self.errors = self.lexer.errors + self.parser.errors if len(self.errors) != 0: @@ -60,39 +44,4 @@ def __init__(self, program, lexer, parser, verbose=False): self.coolToCil = COOLToCILVisitor(self.context) cil_ast = self.coolToCil.visit(self.ast, scope) __a = 0 - # print(get_formatter(cil_ast)) - # self.cilToMips = CiltoMipsVisitor(self.context) - # self.cilToMips.visit(cil_ast) - # with open('out', 'w') as f: - # mips_code = self.cilToMips.data + self.cilToMips.code - # for line in mips_code: - # f.write(line+'\n') - MIPSVisitor = CILToMIPSVisitor() - MIPSAst = MIPSVisitor.visit(cil_ast) - MIPSFormatter = MIPSAstFormatter() - mipsCode = MIPSFormatter.visit(MIPSAst) - # MIPSVisitor = CILToMipsVisitor() - # mipsCode = MIPSVisitor.visit(cil_ast) - self.mipsCode = mipsCode - # with open('asd.mips', 'w') as f: - # f.write(mipsCode) - # f.close() - - if verbose: - print('This is after infering types:') - print() - print(self.depicter.visit(self.ast,0)) - print() - # self.executor = Executor(self.context) - - # if len(self.errors) == 0: - # try: - # executorScope = Scope() - # self.executor.visit(self.ast,executorScope) - # print() - # print('Done!!') - # except RuntimeException as e: - # print(e) - # print() - # for error in self.errors: - # print(error) \ No newline at end of file + self.mipsCode = '' \ No newline at end of file diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py index 6c5815806..332d1ca29 100755 --- a/src/visitors/Checker.py +++ b/src/visitors/Checker.py @@ -66,7 +66,7 @@ def visit(self, node, scope): else: self.visit(feature, scope.create_child()) - + node.type = self.current_type @visitor.when(FuncDeclarationNode) def visit(self, node, scope): @@ -104,6 +104,7 @@ def visit(self, node, scope): rType = self.current_type exprType = self.visit(node.body, scope) + node.type = self.current_method.return_type if not exprType.conforms_to(rType): self.errors.append(_TypeError %(node.body.token_list[0].lineno, node.body.token_list[0].col, f'Infered return type {exprType.name} of method {node.id} does not conform to declared return type {rType.name}.')) @@ -119,8 +120,10 @@ def visit(self, node, scope): # self.errors.append(f"Can't convert {ifT.name} to Bool.") self.errors.append(_TypeError % (node.ifChunk.token_list[0].lineno, node.ifChunk.token_list[0].col,f"Predicate of 'if' does not have type Bool.")) try: - return thenT.join(elseT) + node.type = thenT.join(elseT) + return node.type except: + node.type = ErrorType() return ErrorType() @visitor.when(LetInNode) @@ -163,7 +166,9 @@ def visit(self, node, scope): # var_type = expr scope.define_variable(_id, var_type) iteration+=1 - return self.visit(node.expression, scope.create_child()) + expr_type = self.visit(node.expression, scope.create_child()) + node.type = expr_type #node.expression.type + return node.type @visitor.when(AttrDeclarationNode) def visit(self, node, scope): @@ -178,9 +183,11 @@ def visit(self, node, scope): self.errors.append(_SemanticError %(node.token_list[0].lineno, node.token_list[0].col, f"Attribute names must not be capitalized.")) if node.type != 'SELF_TYPE': - attrType = self.context.get_type(node.type) + attrType = self.context.get_type(node.type) + node.type = attrType else: attrType = self.current_type + node.type = self.current_type if node.value is not None: value_t = self.visit(node.value, scope.create_child()) @@ -200,7 +207,8 @@ def visit(self, node, scope): var_info = scope.find_variable(node.id) exprType = self.visit(node.expr, scope.create_child()) - + node.type = exprType + if node.id == 'self': self.errors.append(_SemanticError % (node.token_list[1].lineno, node.token_list[1].col, f"Cannot assign to 'self'.")) return ErrorType() @@ -224,7 +232,8 @@ def visit(self, node, scope): self.errors.append(_TypeError %(node.condition.token_list[0].lineno, node.condition.token_list[0].col, f'Loop condition does not have type Bool.')) self.visit(node.loopChunk, scope.create_child()) - return self.context.get_type('Object') + node.type = self.context.get_type('Object') + return node.type @visitor.when(ChunkNode) def visit(self, node, scope): @@ -233,6 +242,8 @@ def visit(self, node, scope): for expr in node.chunk: return_type = self.visit(expr, scope.create_child()) + + node.type = return_type return return_type @visitor.when(SwitchCaseNode) @@ -260,7 +271,8 @@ def visit(self, node, scope): types.append(self.visit(e, child_scope)) - return Type.multi_join(types) + node.type = Type.multi_join(types) + return node.type @visitor.when(PlusNode) @@ -271,9 +283,11 @@ def visit(self, node, scope): intType = self.context.get_type('Int') if lt == rt == intType: + node.type = intType return intType self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' + '+str(rt.name))) # self.errors.append(f'Undefined operation "+" between {lt.name} and {rt.name}.') + node.type = ErrorType() return ErrorType() @visitor.when(MinusNode) @@ -284,9 +298,11 @@ def visit(self, node, scope): intType = self.context.get_type('Int') if lt == rt == intType: + node.type = intType return intType self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' - '+str(rt.name))) # self.errors.append(f'Undefined operation "-" between {lt.name} and {rt.name}.') + node.type = ErrorType() return ErrorType() @visitor.when(StarNode) @@ -297,9 +313,11 @@ def visit(self, node, scope): intType = self.context.get_type('Int') if lt == rt == intType: + node.type = intType return intType self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' * '+str(rt.name))) # self.errors.append(f'Undefined operation "*" between {lt.name} and {rt.name}.') + node.type = ErrorType() return ErrorType() @visitor.when(DivNode) @@ -310,9 +328,11 @@ def visit(self, node, scope): intType = self.context.get_type('Int') if lt == rt == intType: + node.type = intType return intType self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' / '+str(rt.name))) # self.errors.append(f'Undefined operation "/" between {lt.name} and {rt.name}.') + node.type = ErrorType() return ErrorType() @visitor.when(CallNode) @@ -365,19 +385,23 @@ def visit(self, node, scope): @visitor.when(ConstantNumNode) def visit(self, node, scope): - return self.context.get_type('Int') + node.type = self.context.get_type('Int') + return node.type @visitor.when(StringNode) def visit(self, node, scope): - return self.context.get_type('String') + node.type = self.context.get_type('String') + return node.type @visitor.when(TrueNode) def visit(self, node, scope): - return self.context.get_type('Bool') + node.type = self.context.get_type('Bool') + return node.type @visitor.when(FalseNode) def visit(self, node, scope): - return self.context.get_type('Bool') + node.type = self.context.get_type('Bool') + return node.type @visitor.when(VariableNode) def visit(self, node, scope): @@ -394,7 +418,9 @@ def visit(self, node, scope): if variable is None: # self.errors.append(f'Variable {node.lex} is not defined in {self.current_method.name}.') self.errors.append(_NameError % (node.token_list[0].lineno, node.token_list[0].col, f"Undeclared identifier {node.lex}.")) + node.type = ErrorType() return ErrorType() + node.type = variable.type return variable.type @visitor.when(InstantiateNode) @@ -409,30 +435,36 @@ def visit(self, node, scope): except SemanticError as e: self.errors.append(_TypeError % (node.token_list[1].lineno, node.token_list[1].col, f"'new' used with undefined class {node.lex}.")) # self.errors.append(e.text) + node.errors = ErrorType return ErrorType() @visitor.when(NotNode) def visit(self, node, scope): tp = self.visit(node.expression, scope.create_child()) if tp == self.context.get_type('Bool'): + node.type = tp return tp self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f"Argument of 'not' has type {tp.name} instead of Bool.")) # self.errors.append(f'Undefined operation "not" for {tp.name}.') + node.type = ErrorType() return ErrorType() @visitor.when(ComplementNode) def visit(self, node, scope): tp = self.visit(node.expr, scope) if tp == self.context.get_type('Int'): + node.type = tp return tp self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f"Argument of '~' has type {tp.name} instead of Int.")) # self.errors.append(f'Undefined operation "~" for {tp.name}.') + node.type = ErrorType() return ErrorType() @visitor.when(IsVoidNode) def visit(self, node, scope): - self.visit(node.method, scope) - return self.context.get_type('Bool') + self.visit(node.method, scope.create_child()) + node.type = self.context.get_type('Bool') + return node.type @visitor.when(LeqNode) def visit(self, node, scope): @@ -443,9 +475,11 @@ def visit(self, node, scope): boolType = self.context.get_type('Bool') if lt == rt == intType: + node.type = boolType return boolType self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' <= '+str(rt.name))) # self.errors.append(f'Undefined operation "<=" for {lt.name} and {rt.name}.') + node.type = ErrorType() return ErrorType() @visitor.when(LessNode) @@ -456,6 +490,7 @@ def visit(self, node, scope): intType = self.context.get_type('Int') boolType = self.context.get_type('Bool') if lt == rt == intType: + node.type = boolType return boolType self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' < '+str(rt.name))) # self.errors.append(f'Undefined operation "<" for {lt.name} and {rt.name}.') @@ -465,10 +500,13 @@ def visit(self, node, scope): def visit(self, node, scope): lt = self.visit(node.left, scope) rt = self.visit(node.right, scope) + boolType = self.context.get_type('Bool') # quite self type de los basicos aqui if lt.name not in ("Int", "String", "Bool", "IO", "Object") and rt.name not in ("Int", "String", "Bool", "IO", "Object"): - return self.context.get_type('Bool') + node.type = boolType + return node.type if lt == rt: - return self.context.get_type('Bool') + node.type = boolType + return node.type self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f'Illegal comparison with a basic type.')) return ErrorType() \ No newline at end of file diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 31886704b..abcd8f981 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -13,26 +13,45 @@ def __init__(self, context): self.current_type = None self.current_method = None self.current_function = None + self.context = context - self.id = 0 + self.vself = VariableInfo('self', None) + self.value_types = ['String', 'Int', 'Bool'] - self.locals = {} - self.attrs = {}#set() - self.parameters = set() - self.instances = [] + self.var_names = {} + self.ctrs = {} + self.types_map = {} - self.dfunc = {} - self.cattrs = {} - self.dparents = {'Object': None} + self.breakline_data = self.register_data('\n') + self.emptystring_data = self.register_data('') + + self.locals = {} - self.builtin_types = ['Object', 'IO', 'Int', 'Bool', 'String'] - self.ctrs = {} def transform_to_keys(self, xtype, keys): for i, key in enumerate(keys): xtype.attrs[key] = i return xtype.attrs + def build_type(self, node): + self.types_map[node.id.lex] = type = self.register_type(node.id) + iter_type = self.context.get_type(node.id.lex) + + generation = [] + while iter_type is not None: + generation.append(iter_type) + iter_type = iter_type.parent + + generation.reverse() + for i in generation: + methods = sorted(i.methods) + attributes = sorted(i.attributes) + for meth in methods: + type.methods[meth] = self.to_function_name(meth, i.name) + for attr in attributes: + type.attributes[attr.name] = cil.AttributeNode(attr.name, i.name) + + @property def params(self): return self.current_function.params @@ -45,21 +64,28 @@ def localvars(self): def instructions(self): return self.current_function.instructions + + def register_param(self, vinfo): + name = f'local_param_{self.current_function.name}_{vinfo.name}_{len(self.params)}' + param_node = cil.ParamNode(name) + self.params.append(param_node) + self.var_names[vinfo.name] = cil.VarNode(name) + return self.var_names[vinfo.name] + def register_local(self, vinfo): + name = vinfo.name vinfo.name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' local_node = cil.LocalNode(vinfo.name) self.localvars.append(local_node) - return vinfo.name - - def register_label(self): - label = 'label' + str(self.id) - self.id += 1 - return label + self.var_names[name] = cil.VarNode(vinfo.name) + return self.var_names[name] # indexar en vinfo.name y quitar la 1ra linea + def register_attribute(self, name, type): + name = f'attr_{type}_{name}' + return cil.AttributeNode(name, type) - def define_internal_local(self, name='internal'): - vinfo = VariableInfo(name, None) - self.id += 1 + def define_internal_local(self): + vinfo = VariableInfo('internal', None) return self.register_local(vinfo) def register_instruction(self, instruction): @@ -70,16 +96,13 @@ def to_function_name(self, method_name, type_name): return f'function_{method_name}_at_{type_name}' def register_function(self, function_name): - # try: - # self.dfunc[self.current_type.name].append(function_name) - # except: - # self.dfunc[self.current_type.name] = [function_name] function_node = cil.FunctionNode(function_name, [], [], []) self.dotcode.append(function_node) return function_node def register_type(self, name): type_node = cil.TypeNode(name) + self.types_map[name] = type_node self.dottypes.append(type_node) return type_node @@ -89,146 +112,235 @@ def register_data(self, value): self.dotdata.append(data_node) return data_node + def register_label(self, label): + lname = f'{label}_{self.current_function.labels_count}' + self.current_function.labels_count += 1 + return cil.LabelNode(lname) + + def init_name(self, name): + return f'__init_at_{name}' + + def init_attr_name(self, name): + return f'__init_attr_at_{name}' + + def create_ctr(self, class_node, scope): - if self.current_type in self.builtin_types: - return attrs = [att for att in class_node.features if isinstance(att, AttrDeclarationNode)] - while True: # we may need to search for te attributes of the ancestors + while True: break self.current_function = self.register_function(self.to_function_name('ctor', self.current_type.name)) - local_self = self.define_internal_local(self.instances[-1]) - self.register_instruction(cil.AllocateNode(self.current_type.name, local_self)) + self.register_instruction(cil.ParamNode('self')) for i, attr in enumerate(attrs): set_attr_node = self.visit(attr, scope) set_attr_node.index = i self.register_instruction(set_attr_node) - self.register_instruction(cil.ReturnNode(local_self)) + self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) - def build_prerreq(self, programNode): - functions = {} - attr_counts = {} - parents = {} - - def add_builtin_types(self): - def build_Object(): - type = self.register_type('Object') - self.dparents['Object'] = None - self.cattrs['Object'] = 0 - self.current_type = type - self.dfunc['Object'] = ['function_abort_at_Object', 'function_type_name_at_Object', 'function_copy_at_Object'] - - self.current_function = self.register_function(self.to_function_name('abort', self.current_type.name)) - self.current_function.params.append(cil.ParamNode('self') ) - self.register_instruction(cil.AbortNode()) - - self.current_function = self.register_function(self.to_function_name('copy', self.current_type.name)) - self.current_function.params.append(cil.ParamNode('self')) - self.register_instruction(cil.AbortNode()) - # self.register_instruction(cil.CopyNode(1,1)) - - self.current_function = self.register_function(self.to_function_name('type_name', self.current_type.name)) - self.current_function.params.append(cil.ParamNode('self')) - dest = self.define_internal_local() - self.register_instruction(cil.TypeOfNode('self', dest)) - str_store = self.define_internal_local() - self.register_instruction(cil.AllocateNode('String', str_store)) - self.register_instruction(cil.SetAttribNode(str_store, 0, dest)) - self.register_instruction(cil.ReturnNode(str_store)) - - def build_String(): - type = self.register_type('String') - self.cattrs['String'] = 1 - self.dparents['String'] = 'Object' - self.current_type = type - self.dfunc['String'] = ['function_abort_at_Object', 'function_type_name_at_Object', 'function_copy_at_Object', 'function_length_at_String', 'function_substr_at_String', 'function_concat_at_String' ] - - self.current_function = self.register_function(self.to_function_name('concat', self.current_type.name)) - self.current_function.params.append(cil.ParamNode('self')) - self.current_function.params.append(cil.ParamNode('suffix')) - dest = self.define_internal_local() # variable para guardar el resultado de la concatenación - self.register_instruction(cil.ConcatNode(dest, 'self', 'suffix')) # agregar el nodo concat al ast de las instrucciones - str_store = self.define_internal_local() # nueva instancia de string donde guardar el resultado y retornarla - self.register_instruction(cil.AllocateNode('String', str_store)) - self.register_instruction(cil.SetAttribNode(str_store, 0, dest)) - self.register_instruction(cil.ReturnNode(str_store)) - - self.current_function = self.register_function(self.to_function_name('length', self.current_type.name)) - self.current_function.params.append(cil.ParamNode('self')) - dest = self.define_internal_local() - self.register_instruction(cil.LengthNode(dest, 'self')) - int_store = self.define_internal_local() - self.register_instruction(cil.AllocateNode('Int', int_store)) - self.register_instruction(cil.SetAttribNode(int_store, 0, dest)) - self.register_instruction(cil.ReturnNode(int_store)) - - self.current_function = self.register_function(self.to_function_name('substr', self.current_type.name)) - self.current_function.params.append(cil.ParamNode('self')) - self.current_function.params.append(cil.ParamNode('index')) - self.current_function.params.append(cil.ParamNode('length')) - dest = self.define_internal_local() - self.register_instruction(cil.SubstringNode(dest, 'self', 'index', 'length')) - str_store = self.define_internal_local() - self.register_instruction(cil.AllocateNode('String', str_store)) - self.register_instruction(cil.SetAttribNode(str_store, 0, dest)) - self.register_instruction(cil.ReturnNode(str_store)) - - def build_IO(): - type = self.register_type('IO') - self.cattrs['IO'] = 0 - self.dparents['IO'] = 'Object' - self.current_type = type - self.dfunc['IO'] = ['function_abort_at_Object', 'function_type_name_at_Object', 'function_copy_at_Object', 'function_in_string_at_IO', 'function_out_string_at_IO', 'function_in_int_at_IO', 'function_out_int_at_IO'] - - self.current_function = self.register_function(self.to_function_name('out_string', self.current_type.name)) - self.current_function.params.append(cil.ParamNode('self')) - self.current_function.params.append(cil.ParamNode('str_addr')) - self.register_instruction(cil.PrintStrNode('str_addr')) - self.register_instruction(cil.ReturnNode('self')) - - self.current_function = self.register_function(self.to_function_name('in_string', self.current_type.name)) - self.current_function.params.append(cil.ParamNode('self')) - dest = self.define_internal_local() - self.register_instruction(cil.ReadStrNode(dest)) - str_store = self.define_internal_local() - self.register_instruction(cil.AllocateNode('String', str_store)) - self.register_instruction(cil.SetAttribNode(str_store, 0, dest)) - self.register_instruction(cil.ReturnNode(str_store)) - - - self.current_function = self.register_function(self.to_function_name('out_int', self.current_type.name)) - self.current_function.params.append(cil.ParamNode('self')) - self.current_function.params.append(cil.ParamNode('int_addr')) - self.register_instruction(cil.PrintIntNode('int_addr')) - self.register_instruction(cil.ReturnNode('self')) - - self.current_function = self.register_function(self.to_function_name('in_int', self.current_type.name)) - self.current_function.params.append(cil.ParamNode('self')) - dest = self.define_internal_local() - self.register_instruction(cil.ReadIntNode(dest)) - int_store = self.define_internal_local() - self.register_instruction(cil.AllocateNode('Int', int_store)) - self.register_instruction(cil.SetAttribNode(int_store, 0, dest)) - self.register_instruction(cil.ReturnNode(int_store)) - - def build_Int(): - type = self.register_type('Int') - self.cattrs['Int'] = 1 - self.dparents['Int'] = 'Object' - self.dfunc['Int'] = ['function_abort_at_Object', 'function_type_name_at_Object', 'function_copy_at_Object'] - - def build_Bool(): - type = self.register_type('Bool') - self.cattrs['Bool'] = 1 - self.dparents['Bool'] = 'Object' - self.dfunc['Bool'] = ['function_abort_at_Object', 'function_type_name_at_Object', 'function_copy_at_Object'] - - build_Object() - build_String() - build_IO() - build_Int() - build_Bool() + def register_runtime_error(self, condition, msg): + error_node = self.register_label('error_label') + continue_node = self.register_label('continue_label') + self.register_instruction(cil.GotoIfNode(condition, error_node.label)) + self.register_instruction(cil.GotoNode(continue_node.label)) + self.register_instruction(error_node) + data_node = self.register_data(msg) + self.register_instruction(cil.ErrorNode(data_node)) + self.register_instruction(continue_node) + + def register_builtin(self): + # Object + line, column = 0, 0 + type_node = self.register_type('Object') + + self.current_function = self.register_function(self.init_name('Object')) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Object', instance)) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('abort', 'Object')) + self_param = self.register_param(self.vself) + vname = self.define_internal_local() + abort_data = self.register_data('Abort called from class ') + self.register_instruction(cil.LoadNode(vname, abort_data)) + self.register_instruction(cil.PrintStringNode(vname)) + self.register_instruction(cil.TypeOfNode(vname, self_param)) + self.register_instruction(cil.PrintStringNode(vname)) + self.register_instruction(cil.LoadNode(vname, self.breakline_data)) + self.register_instruction(cil.PrintStringNode(vname)) + self.register_instruction(cil.ExitNode()) + + self.current_function = self.register_function(self.to_function_name('type_name', 'Object')) + self_param = self.register_param(self.vself) + result = self.define_internal_local() + self.register_instruction(cil.TypeOfNode(result, self_param)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('copy', 'Object')) + self_param = self.register_param(self.vself) + result = self.define_internal_local() + self.register_instruction(cil.CopyNode(result, self_param)) + self.register_instruction(cil.ReturnNode(result)) + + type_node.methods = {name: self.to_function_name(name, 'Object') for name in ['abort', 'type_name', 'copy']} + type_node.methods['init'] = self.init_name('Object') + obj_methods = ['abort', 'type_name', 'copy'] + + # IO + type_node = self.register_type('IO') + + self.current_function = self.register_function(self.init_name('IO')) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('IO', instance)) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('out_string', 'IO')) + self_param = self.register_param(self.vself) + x = self.register_param(VariableInfo('x', None)) + vname = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(vname, x, 'value', 'String')) + self.register_instruction(cil.PrintStringNode(vname)) + self.register_instruction(cil.ReturnNode(self_param)) + + self.current_function = self.register_function(self.to_function_name('out_int', 'IO')) + self_param = self.register_param(self.vself) + x = self.register_param(VariableInfo('x', None)) + vname = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(vname, x, 'value', 'Int')) + self.register_instruction(cil.PrintIntNode(vname)) + self.register_instruction(cil.ReturnNode(self_param)) + + self.current_function = self.register_function(self.to_function_name('in_string', 'IO')) + self_param = self.register_param(self.vself) + result = self.define_internal_local() + self.register_instruction(cil.ReadStringNode(result)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) + self.register_instruction(cil.ReturnNode(value=instance)) + + self.current_function = self.register_function(self.to_function_name('in_int', 'IO')) + self_param = self.register_param(self.vself) + result = self.define_internal_local() + self.register_instruction(cil.ReadIntNode(result)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} + type_node.methods.update({name: self.to_function_name(name, 'IO') for name in + ['out_string', 'out_int', 'in_string', 'in_int']}) + type_node.methods['init'] = self.init_name('IO') + + # String + type_node = self.register_type('String') + type_node.attributes = {name:self.register_attribute(name, 'String') for name in ['value', 'length']} + + self.current_function = self.register_function(self.init_name('String')) + val = self.register_param(VariableInfo('val', None)) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('String', instance)) + self.register_instruction(cil.SetAttribNode(instance, 'value', val, 'String')) + result = self.define_internal_local() + self.register_instruction(cil.LengthNode(result, val)) + attr = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), attr)) + self.register_instruction(cil.SetAttribNode(instance, 'length', attr, 'String')) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('length', 'String')) + self_param = self.register_param(self.vself) + result = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(result, self_param, 'length', 'String')) + self.register_instruction(cil.ReturnNode(result)) + + self.current_function = self.register_function(self.to_function_name('concat', 'String')) + self_param = self.register_param(self.vself) + s = self.register_param(VariableInfo('s', None)) + str_1 = self.define_internal_local() + str_2 = self.define_internal_local() + length_1 = self.define_internal_local() + length_2 = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(str_1, self_param, 'value', 'String')) + self.register_instruction(cil.GetAttribNode(str_2, s, 'value', 'String')) + self.register_instruction(cil.GetAttribNode(length_1, self_param, 'length', 'String')) + self.register_instruction(cil.GetAttribNode(length_2, s, 'length', 'String')) + self.register_instruction(cil.GetAttribNode(length_1, length_1, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(length_2, length_2, 'value', 'Int')) + self.register_instruction(cil.PlusNode(length_1, length_1, length_2)) + + result = self.define_internal_local() + self.register_instruction(cil.ConcatNode(result, str_1, str_2, length_1)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + self.current_function = self.register_function(self.to_function_name('substr', 'String')) + self_param = self.register_param(self.vself) + i = self.register_param(VariableInfo('i', None)) + l = self.register_param(VariableInfo('l', None)) + result = self.define_internal_local() + index_value = self.define_internal_local() + length_value = self.define_internal_local() + length_wrapper = self.define_internal_local() + length_attr = self.define_internal_local() + length_substr = self.define_internal_local() + less_value = self.define_internal_local() + str_value = self.define_internal_local() + self.register_instruction(cil.GetAttribNode(str_value, self_param, 'value', 'String')) + self.register_instruction(cil.GetAttribNode(index_value, i, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(length_value, l, 'value', 'Int')) + # Check Out of range error + self.register_instruction(cil.GetAttribNode(length_wrapper, self_param, 'length', 'String')) + self.register_instruction(cil.GetAttribNode(length_attr, length_wrapper, 'value', 'Int')) + self.register_instruction(cil.PlusNode(length_substr, length_value, index_value)) + self.register_instruction(cil.LessNode(less_value, length_attr, length_substr)) + self.register_runtime_error(less_value, 'Substring out of range') + self.register_instruction(cil.SubstringNode(result, str_value, index_value, length_value)) + instance = self.define_internal_local() + self.register_instruction(cil.ArgNode(result)) + self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) + self.register_instruction(cil.ReturnNode(instance)) + + type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} + type_node.methods.update({name: self.to_function_name(name, 'String') for name in ['length', 'concat', 'substr']}) + type_node.methods['init'] = self.init_name('String') + + # Int + type_node = self.register_type('Int') + type_node.attributes = {name:self.register_attribute(name, 'Int') for name in ['value']} + + self.current_function = self.register_function(self.init_name('Int')) + val = self.register_param(VariableInfo('val', None)) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Int', instance)) + self.register_instruction(cil.SetAttribNode(instance, 'value', val, 'Int')) + self.register_instruction(cil.ReturnNode(instance)) + + type_node.methods = {method:self.to_function_name(method, 'Object') for method in obj_methods} + type_node.methods['init'] = self.init_name('Int') + + # Bool + type_node = self.register_type('Bool') + type_node.attributes = {name:self.register_attribute(name, 'Bool') for name in ['value']} + + self.current_function = self.register_function(self.init_name('Bool')) + val = self.register_param(VariableInfo('val', None)) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode('Bool', instance)) + self.register_instruction(cil.SetAttribNode(instance, 'value', val, 'Bool')) + self.register_instruction(cil.ReturnNode(instance)) + + type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} + type_node.methods['init'] = self.init_name('Bool') + + class COOLToCILVisitor(BaseCOOLToCILVisitor): @@ -249,48 +361,53 @@ def features_from_context(self, type): return feats + + def collect_types(self, node): + self.types_map[node.id] = type = self.register_type(node.id) + # Guardar métodos de las clases padres + iter_type = self.context.get_type(node.id) + + generation = [] + while iter_type is not None: + generation.append(iter_type) + iter_type = iter_type.parent + + generation.reverse() + for i in generation: + a = 0 + methods = [m.name for m in i.methods] + _attributes = i.attributes + attributes = [x.name for x in _attributes] + methods.sort() + attributes.sort() + for meth in methods: + type.methods[meth] = self.to_function_name(meth, i.name) + for attr in attributes: + type.attributes[attr] = cil.AttributeNode(attr, i.name) + + @visitor.when(ProgramNode) def visit(self, node, scope): ###################################################### # node.declarations -> [ ClassDeclarationNode ... ] ###################################################### - - # class_nodes = [self.class_node_from_context(c) for c in self.context.types] - # built_in_classes = [self.class_node_from_context(self.context.types[c]) for c in self.context.types if c in self.builtin_types] - # for built_in_class in built_in_classes: - # self.visit(built_in_class, scope) - - - # self.current_function = self.register_function('entry') - function_node = cil.FunctionNode('main', [], [], []) - self.dotcode.append(function_node) - self.current_function = function_node - - vinfo = VariableInfo(f'local_main_internal_{len(self.localvars)}',None) - local_node = cil.LocalNode(vinfo.name) - self.localvars.append(local_node) - - instance = vinfo.name - self.instances.append(instance) - result = self.define_internal_local() - main_method_name = self.to_function_name('main', 'Main') - self.register_instruction(cil.AllocateNode('Main', instance)) - self.register_instruction(cil.ArgNode(instance)) - self.register_instruction(cil.StaticCallNode(main_method_name, result)) - self.register_instruction(cil.EndNode()) + self.current_function = self.register_function('entry') + main_instance = self.define_internal_local() + self.register_instruction(cil.StaticCallNode(self.init_name('Main'), main_instance)) + self.register_instruction(cil.ArgNode(main_instance)) + self.register_instruction(cil.StaticCallNode(self.to_function_name('main', 'Main'),main_instance)) + self.register_instruction(cil.ReturnNode(value=0)) + + self.register_builtin() self.current_function = None - self.add_builtin_types() - - for declaration, child_scope in zip(node.declarations, scope.children): - self.visit(declaration, child_scope) + for x in node.declarations: + self.collect_types(x) + + for x, y in zip(node.declarations, scope.children): + self.visit(x, y) - self.instances.pop() + return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) - programNode = cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) - programNode.dfunc = self.dfunc - programNode.cattrs = self.cattrs - programNode.dparents = self.dparents - return programNode @visitor.when(ClassDeclarationNode) def visit(self, node, scope): @@ -301,60 +418,60 @@ def visit(self, node, scope): #################################################################### self.current_type = self.context.get_type(node.id) - - if node.parent: - self.dparents[node.id] = node.parent - else: - self.dparents[node.id] = 'Object' - self.cattrs[node.id] = 0 + type = self.types_map[node.id] + + self.current_function = self.register_function(self.init_attr_name(node.id)) + type.methods['__init_attr'] = self.current_function.name + self_param = self.register_param(self.vself) + self.localvars.extend(type.attributes.values()) + self.var_names.update({i:cil.AttributeNode(j.name, type.name) + for i,j in type.attributes.items()}) + + self.vself.name = self_param + # Inicializando los atributos de la clase y llamando al constructor del padre + if self.current_type.parent.name not in ('Object', 'IO'): + variable = self.define_internal_local() + self.register_instruction(cil.ArgNode(self_param)) + self.register_instruction(cil.StaticCallNode( + self.init_attr_name(self.current_type.parent.name), variable)) + + # Inicializando los atributos de la clase + for i, feat in enumerate(node.features): + if isinstance(feat, AttrDeclarationNode): + # try: + self.visit(feat, scope.children[i]) + self.register_instruction(cil.SetAttribNode(self_param, feat.id, feat.ret_expr, node.id,)) + # except Exception as e: + # _ = 0 + self.register_instruction(cil.ReturnNode(self_param)) + + # TypeNode de la clase + # type = self.types_map[node.id.lex] + # type.attributes = [i.name for i in self.current_type.attributes] + + # Visitar funciones dentro de la clase + for feat, child in zip(node.features, scope.children): + if isinstance(feat, FuncDeclarationNode): + try: + self.visit(feat, child) + except Exception as e: + _ = 0 + self.vself.name = 'self' + + # Allocate de la clase + self.current_function = self.register_function(self.init_name(node.id)) + type.methods['__init'] = self.current_function.name + self.localvars.extend(type.attributes.values()) + instance = self.define_internal_local() + self.register_instruction(cil.AllocateNode(node.id, instance)) + + variable = self.define_internal_local() + self.register_instruction(cil.ArgNode(instance)) + self.register_instruction(cil.StaticCallNode(self.init_attr_name(node.id), variable)) - # Your code here!!! (Handle all the .TYPE section) - type_node = self.register_type(node.id) + self.register_instruction(cil.ReturnNode(value=variable)) - attributes = [] - methods = [] - # self.attrs.clear() - self.attrs = {} - - current_type = self.current_type - while True: - attr_temp = [] - method_temp = [] - for attr in current_type.attributes: - # self.attrs.add(attr.name) - # self.attrs[attr.name] = [] - attr_temp.append(attr.name) - - for method in current_type.methods: - method_temp.append((method.name, self.to_function_name(method.name, current_type.name))) - - attributes = attr_temp + attributes - methods = method_temp + methods - - if current_type.parent is None: - break - - current_type = current_type.parent - - self.attrs = self.transform_to_keys(type_node, attributes)# type_node.attributes = attributes - self.cattrs[node.id] = len(attributes) - type_node.methods = methods - self.dfunc[node.id] = [i[1] for i in methods] - self.create_ctr(node, scope) - - # attributes - # for feature, child_scope in zip(node.features, scope.children): - # if isinstance(feature, FuncDeclarationNode): - # continue - # self.visit(feature, child_scope) - - # func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) - for feature, child_scope in zip(node.features, scope.children): - if isinstance(feature, FuncDeclarationNode): - self.visit(feature, child_scope) - - #falta visitar los atributos - + self.current_function = None self.current_type = None @visitor.when(AttrDeclarationNode) @@ -374,30 +491,28 @@ def default_value_init(type): return StringNode("") else: return VoidNode('void') - if node.value: - value = self.visit(node.value, scope) - else: - default_value = default_value_init(node.type) - if isinstance(default_value, VoidNode): - value = 'void' + variable = self.define_internal_local() + if node.value: + self.visit(node.value, scope.children[0]) + self.register_instruction(cil.AssignNode(variable, node.value.ret_expr)) + elif node.type.name in self.value_types: + if node.type.name == 'SELF_TYPE': + stype = self.current_type.name else: - value = self.visit(default_value, scope) - self_ref = VariableInfo(self.instances[-1], self.current_type) - self_ref.index = 0 - return cil.SetAttribNode(self_ref, node.id, value) - - ## old code - # elif node.type in ["Int", "String", "Object", "IO", "Bool"]: - # value = self.define_internal_local() - # self.register_instruction(cil.AllocateNode(node.type, value)) - # else: - # value = self.define_internal_local() - # self.register_instruction(cil.AllocateNode("Void", value)) - # #revisar que poner como el attr del SettAttribnode - - # attr = self.attrs[node.id] - # self.register_instruction(cil.SetAttribNode(self.instances[-1], attr, value)) + stype = node.type.name + + if stype == 'Int': + self.register_instruction(cil.ArgNode(0)) + elif stype == 'Bool': + self.register_instruction(cil.ArgNode(0)) + elif stype == 'String': + data = self.emptystring_data + self.register_instruction(cil.LoadNode(variable, data)) + self.register_instruction(cil.ArgNode(variable)) + self.register_instruction(cil.StaticCallNode(self.init_name(stype), variable, + )) + node.ret_expr = variable @visitor.when(FuncDeclarationNode) def visit(self, node, scope): @@ -407,31 +522,22 @@ def visit(self, node, scope): # node.type -> str # node.body -> [ ExpressionNode ... ] ############################### - # if self.current_type.name in self.builtin_types: - # return - self.current_function = self.current_type.get_method(node.id, self.current_type, False) - - # Your code here!!! (Handle PARAMS) - self.current_function = self.register_function(self.to_function_name(node.id, self.current_type.name)) - - self.parameters.clear() - self.current_function.params.append(cil.ParamNode(self.instances[-1])) - for arg_name, ptype in node.params: - self.parameters.add((arg_name, ptype)) - self.params.append(cil.ParamNode(arg_name)) - self.register_instruction(cil.ParamNode(arg_name)) - - self.locals.clear() - return_value = self.visit(node.body, scope) - - if node.body and 'Void' != node.type: - self.register_instruction(cil.ReturnNode(return_value)) - else: - result = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Void", result)) - self.register_instruction(cil.ReturnNode(result)) - - self.current_function = None + self.current_method = self.current_type.get_method(node.id, self.current_type, False) + type = self.types_map[self.current_type.name] + self.current_function = self.register_function(self.to_function_name(self.current_method.name, + self.current_type.name), + ) + self.localvars.extend(type.attributes.values()) + + self_param = self.register_param(self.vself) + self.vself.name = self_param + for param, type in node.params: + self.register_param(VariableInfo(param, type)) + + self.visit(node.body, scope) + self.register_instruction(cil.ReturnNode(value=node.body.ret_expr)) + self.current_method = None + self.vself.name = 'self' @visitor.when(VarDeclarationNode) # AssignNode def visit(self, node, scope): @@ -447,11 +553,11 @@ def visit(self, node, scope): source = self.visit(node.expr, scope) else: # asignar valor por default - if node.type.lower() == 'int': + if node.type.name.lower() == 'int': source = 0 - elif node.type.lower() == 'string': + elif node.type.name.lower() == 'string': source = '' - elif node.type.lower() == 'bool': + elif node.type.name.lower() == 'bool': source = False else: source = None @@ -464,24 +570,10 @@ def visit(self, node, scope): # node.id -> str # node.expr -> ExpressionNode ############################### - source = self.visit(node.expr, scope) - - if node.id in self.locals: - dest = self.locals[node.id] - self.register_instruction(cil.AssignNode(dest, source)) - return dest - elif node.id in self.attrs.keys(): - attr = self.attrs[node.id] - var = self.define_internal_local() - self.register_instruction(cil.SetAttribNode(self.instances[-1], attr, source)) - self.register_instruction(cil.GetAttribNode(var, self.instances[-1], attr)) - return var - else: - for (p_name, p_type) in self.parameters: - if node.id == p_name: - dest = VariableInfo(p_name, p_type) - self.register_instruction(cil.AssignNode(dest, source)) - return dest + var = self.var_names[node.id] + self.visit(node.expr, scope.children[0]) + self.register_instruction(cil.AssignNode(var, node.expr.ret_expr)) + node.ret_expr = var @visitor.when(CallNode) def visit(self, node, scope): @@ -490,92 +582,123 @@ def visit(self, node, scope): # node.method -> str # node.args -> [ ExpressionNode ... ] ############################### - dest = self.define_internal_local() - args = [] - for arg in node.args: - args.append(cil.ArgNode(self.visit(arg,scope))) - if node.obj is not None and node.obj.lex != 'self': # dynamic - obj = self.visit(node.obj, scope) - self.instances.append(obj) - if isinstance(node.obj, InstantiateNode): - obj_type = node.obj.lex + if isinstance(node.obj, CallNode) : + _ = 0 + try: + if node.method == 'type_name': + _ = 0 + except: + pass + if node.obj: + args = [] + # for arg, child in zip(node.args, scope.children[1:]): + for arg in node.args: + self.visit(arg, scope) + args.append(cil.ArgNode(arg.ret_expr)) + + self.visit(node.obj, scope) + + + void = cil.VoidNode() + isvoid = self.define_internal_local() + self.register_instruction(cil.EqualNode(isvoid, node.obj.ret_expr, void)) + self.register_runtime_error(isvoid, 'RuntimeError: Function call in a void instance') + + self.register_instruction(cil.ArgNode(node.obj.ret_expr)) + for arg in args: self.register_instruction(arg) + ret = self.define_internal_local() + + stype = node.obj.type.name + # if isinstance(node.obj, InstantiateNode): + # stype = node.obj.lex + # elif isinstance(node.obj, CallNode): + # stype = node.type.name + # else: + # stype = scope.find_variable(node.obj.lex) + # if stype is None: + # if isinstance(node.obj, StringNode): + # stype = 'String' + # else: + # raise Exception("calling a function in a variable not found that is not a string wtf :D") + # else: + # stype = stype.type.name + + if node.parent is not None: + # stype = node.type.lex + nodefunc = self.types_map[node.parent].methods[node.method] + if nodefunc == '__init_at_type Object {\n\t[method] abort(): Object;\n\t[method] type_name(): String;\n\t[method] copy(): SELF_TYPE;\n}\n': + _ = 0 + self.register_instruction(cil.StaticCallNode(self.types_map[node.parent].methods[node.method], ret)) else: - obj_type = scope.find_variable(node.obj.lex).type.name - - local = self.define_internal_local() - self.register_instruction(cil.TypeOfNode(obj, local)) - - error_label = self.define_internal_local() - condition = self.define_internal_local() - self.register_instruction(cil.IsTypeNode(condition, local, "Void")) - self.register_instruction(cil.GotoIfNode(error_label, condition)) - - self.register_instruction(cil.ArgNode(obj)) - for arg in args: - self.register_instruction(arg) - - obj_type = obj_type if node.parent == None else node.parent - self.register_instruction(cil.DynamicCallNode(local, self.to_function_name(node.method, obj_type), dest)) - self.instances.pop() - self.register_instruction(cil.LabelNode(error_label)) - else: # static - self.register_instruction(cil.ArgNode(self.instances[-1])) - for arg in args: - self.register_instruction(arg) - - fname = self.get_function_name(self.current_type.name, node.method, self.dottypes[-1].methods, True) - self.register_instruction(cil.StaticCallNode(fname , dest)) - - return dest + # stype = node.obj.static_type.name + self.register_instruction(cil.ArgNode(node.obj.ret_expr)) + self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.method], ret)) + - def get_function_name(_, type_name, call_name, method_lists, static=True): - if static: - name = None - for method in method_lists: - (m, m_name) = method - if call_name == m: - name = m_name - return name # returns always the last one found, wich should be the overriden one + node.ret_expr = ret + else: - name = None - for method in method_lists: - (m, m_name) = method - if call_name == m: - spl = m_name.split('_') - if spl[-1] == type_name: - return m_name + ret = self.define_internal_local() + + args = [] + # for arg, child in zip(node.args, scope.children): + for arg in node.args: + self.visit(arg, scope) + args.append(cil.ArgNode(arg.ret_expr)) + + self.register_instruction(cil.ArgNode(self.vself.name)) + for arg in args: self.register_instruction(arg) + self.register_instruction(cil.ArgNode(self.vself.name)) + + stype = self.current_type.name + self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.method], ret)) + node.ret_expr = ret + @visitor.when(ConstantNumNode) def visit(self, node, scope): ############################### # node.lex -> str ############################### - constant = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Int", constant)) - self.register_instruction(cil.SetAttribNode(constant, 0, int(node.lex))) - return constant + ret = self.define_internal_local() + + self.register_instruction(cil.ArgNode(node.lex)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) + node.ret_expr = ret @visitor.when(VariableNode) def visit(self, node, scope): ############################### # node.lex -> str ############################### - var = self.define_internal_local() - if node.lex in self.locals: - var_aux = self.locals[node.lex].name - self.register_instruction(cil.AssignNode(var, var_aux)) - elif node.lex in self.attrs.keys(): - self.register_instruction(cil.GetAttribNode(var, self.instances[-1], self.attrs[node.lex])) - return var + if node.lex == 'self': + node.ret_expr = self.vself.name + else: + node.ret_expr = self.var_names[node.lex] @visitor.when(InstantiateNode) def visit(self, node, scope): ############################### # node.lex -> str ############################### - dest = self.define_internal_local() - self.register_instruction(cil.AllocateNode(node.lex, dest)) - return dest + ret = self.define_internal_local() + + if node.type.name == 'SELF_TYPE': + stype = self.current_type.name + else: + stype = node.type.name + + if stype == 'Int': + self.register_instruction(cil.ArgNode(0)) + elif stype == 'Bool': + self.register_instruction(cil.ArgNode(0)) + elif stype == 'String': + data = self.emptystring_data + variable = self.define_internal_local() + self.register_instruction(cil.LoadNode(variable, data)) + self.register_instruction(cil.ArgNode(variable)) + self.register_instruction(cil.StaticCallNode(self.init_name(stype), ret)) + node.ret_expr = ret @visitor.when(PlusNode) def visit(self, node, scope): @@ -583,11 +706,21 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.PlusNode(dest, left, right)) - return dest + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + + self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.visit(node.right, scope) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.PlusNode(value, left, right)) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret,)) + + node.ret_expr = ret @visitor.when(MinusNode) def visit(self, node, scope): @@ -595,11 +728,21 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.MinusNode(dest, left, right)) - return dest + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + + self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.visit(node.right, scope) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.MinusNode(value, left, right)) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) + + node.ret_expr = ret @visitor.when(StarNode) def visit(self, node, scope): @@ -607,11 +750,20 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.StarNode(dest, left, right)) - return dest + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + + self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.visit(node.right, scope) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.StarNode(value, left, right)) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) + node.ret_expr = ret @visitor.when(DivNode) def visit(self, node, scope): @@ -619,21 +771,40 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.DivNode(dest, left, right)) - return dest + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + zero = self.define_internal_local() + + self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.visit(node.right, scope) + + self.register_instruction(cil.ArgNode(0)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), zero)) + self.register_instruction(cil.GetAttribNode(zero, zero, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.EqualNode(zero, zero, right, + )) + self.register_runtime_error(zero, 'RuntimeError: Division by zero') + + self.register_instruction(cil.DivNode(value, left, right)) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) + node.ret_expr = ret @visitor.when(ChunkNode) def visit(self, node, scope): ############################### # node.chunk -> [ ExpressionNode... ] ############################### - value = None - for expression in node.chunk: - value = self.visit(expression, scope.children[0]) - return value + + for i, expr in enumerate(node.chunk): + self.visit(expr, scope.children[i]) + node.ret_expr = node.chunk[-1].ret_expr + @visitor.when(ConditionalNode) def visit(self, node, scope): @@ -642,29 +813,30 @@ def visit(self, node, scope): # node.thenChunk -> ExpressionNode # node.elseChunk -> ExpressionNode ############################### - var = self.define_internal_local() - # then_label = self.define_internal_local() - # else_label = self.define_internal_local() - then_label = self.register_label() - else_label = self.register_label() - ifexpr = self.visit(node.ifChunk, scope.children[0]) - self.register_instruction(cil.GotoIfNode(then_label, ifexpr)) + ret = self.define_internal_local() + condition = self.define_internal_local() + + then_label = self.register_label('then_label') + continue_label = self.register_label('continue_label') + + # IF + self.visit(node.ifChunk, scope.children[0]) + self.register_instruction(cil.GetAttribNode(condition, node.ifChunk.ret_expr, 'value', 'Bool')) + self.register_instruction(cil.GotoIfNode(condition, then_label.label)) - # else - elseexpr = self.visit(node.elseChunk, scope.children[2]) - self.register_instruction(cil.CopyNode(var, elseexpr)) - # self.register_instruction(cil.AssignNode(var, elseexpr)) - self.register_instruction(cil.GotoNode(else_label)) + # ELSE + self.visit(node.elseChunk, scope.children[2]) + self.register_instruction(cil.AssignNode(ret, node.elseChunk.ret_expr)) + self.register_instruction(cil.GotoNode(continue_label.label)) - # then - self.register_instruction(cil.LabelNode(then_label)) - thenexpr = self.visit(node.thenChunk, scope.children[1]) - self.register_instruction(cil.CopyNode(var, thenexpr)) - # self.register_instruction(cil.AssignNode(var, thenexpr)) + # THEN + self.register_instruction(then_label) + self.visit(node.thenChunk, scope.children[1]) + self.register_instruction(cil.AssignNode(ret, node.thenChunk.ret_expr)) - self.register_instruction(cil.LabelNode(else_label)) - return var + self.register_instruction(continue_label) + node.ret_expr = ret @visitor.when(LetInNode) def visit(self, node, scope): @@ -673,86 +845,106 @@ def visit(self, node, scope): # node.expression -> ExpressionNode ############################### + # for (id, type, expr), child in zip(node.let_body, scope.children[:-1]): + # for decl, child in zip(node.decl_list, scope.children[:-1]): + i = 0 for decl in node.decl_list: - # var = self.visit(decl, scope) - self.visit(decl, scope) - - value = self.visit(node.expression, scope) - - return value + id = decl.id + type = decl.type + variable = self.register_local(VariableInfo(id, type)) + if decl.expr: + self.visit(decl.expr, scope.children[i]) + self.register_instruction(cil.AssignNode(variable, decl.expr.ret_expr)) + i += 1 + elif type in self.value_types: + if type == 'SELF_TYPE': + stype = self.current_type.name + else: + stype = type + if stype == 'Int': + self.register_instruction(cil.ArgNode(0)) + elif stype == 'Bool': + self.register_instruction(cil.ArgNode(0)) + elif stype == 'String': + data = self.emptystring_data + self.register_instruction(cil.LoadNode(variable, data)) + self.register_instruction(cil.ArgNode(variable)) + self.register_instruction(cil.StaticCallNode(self.init_name(stype), variable, + )) + + self.visit(node.expression, scope.children[-1]) + node.ret_expr = node.expression.ret_expr @visitor.when(WhileNode) def visit(self, node, scope): - while_label = self.define_internal_local() - loop_label = self.define_internal_local() - end_label = self.define_internal_local() + while_label = self.register_label('while_label') + loop_label = self.register_label('loop_label') + pool_label = self.register_label('pool_label') + condition = self.define_internal_local() - self.register_instruction(cil.LabelNode(while_label)) + self.register_instruction(while_label) + self.visit(node.condition, scope.children[0]) + self.register_instruction(cil.GetAttribNode(condition, node.condition.ret_expr, 'value', 'Bool')) + self.register_instruction(cil.GotoIfNode(condition, loop_label.label)) + self.register_instruction(cil.GotoNode(pool_label.label)) - while_expr = self.visit(node.condition, scope) - self.register_instruction(cil.GotoIfNode(loop_label, while_expr)) - - self.register_instruction(cil.GotoNode(end_label)) - self.register_instruction(cil.LabelNode(loop_label)) + self.register_instruction(loop_label) + self.visit(node.loopChunk, scope.children[1]) + self.register_instruction( + cil.GotoNode(while_label.label)) - self.visit(node.loopChunk, scope) - self.register_instruction(cil.GotoNode(while_label)) - - self.register_instruction(cil.LabelNode(end_label)) - - result = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Void", result)) - return result + self.register_instruction(pool_label) + node.ret_expr = cil.VoidNode() @visitor.when(NotNode) def visit(self, node, scope): ############################### # node.expression -> ExpressionNode ############################### - bool_instance = self.visit(node.expression, scope) - - one = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Int", one)) - self.register_instruction(cil.SetAttribNode(one, 0, 1)) - - bool_value = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Int", bool_value)) + ret = self.define_internal_local() + value = self.define_internal_local() + neg_value = self.define_internal_local() - var = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(var, bool_instance, 0)) - self.register_instruction(cil.SetAttribNode(bool_value, 0, var)) - - new_var = self.define_internal_local() - self.register_instruction(cil.MinusNode(new_var, one, bool_value)) - self.register_instruction(cil.SetAttribNode(bool_instance, 0, new_var)) - - return bool_instance + self.visit(node.expression, scope.children[0]) + self.register_instruction(cil.GetAttribNode(value, node.expression.ret_expr, 'value', 'Bool')) + self.register_instruction(cil.NotNode(neg_value, value)) + self.register_instruction(cil.ArgNode(neg_value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + + node.ret_expr = ret @visitor.when(IsVoidNode) def visit(self, node, scope): ############################### # node.method -> ExpressionNode ############################### - expr_value = self.visit(node.method, scope) - var = self.define_internal_local() - self.register_instruction(cil.IsTypeNode(var, expr_value, "Void")) - result = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Bool", result)) - self.register_instruction(cil.SetAttribNode(result, 0, var)) - return result + ret = self.define_internal_local() + answer = self.define_internal_local() + + void = cil.VoidNode() + self.visit(node.method, scope.children[0]) + self.register_instruction(cil.EqualNode(answer, node.method.ret_expr, void)) + + self.register_instruction(cil.ArgNode(answer)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + node.ret_expr = ret @visitor.when(ComplementNode) def visit(self, node, scope): ############################### # node.expr -> ExpressionNode ############################### - value = self.visit(node.expr, scope) - var = self.define_internal_local() - zero = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Int", zero)) - self.register_instruction(cil.MinusNode(var, zero, value)) - self.regster_instruction(cil.SetAttribNode(value, 0, var)) - return value + ret = self.define_internal_local() + value = self.define_internal_local() + answer = self.define_internal_local() + + self.visit(node.expr, scope) + self.register_instruction(cil.GetAttribNode(value, node.expr.ret_expr, 'value', 'Int')) + self.register_instruction(cil.ComplementNode(answer, value)) + + self.register_instruction(cil.ArgNode(answer)) + self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) + node.ret_expr = ret @visitor.when(SwitchCaseNode) def visit(self, node, scope): @@ -760,77 +952,101 @@ def visit(self, node, scope): # node.expr -> ExpressionNode # node.case_list = [ (id, type, expr)... ] ############################### - start_case_label = self.define_internal_local() - end_case_label = self.define_internal_local() - error_label = self.define_internal_local() - - obj = self.visit(node.expr, scope) - obj_type = self.define_internal_local() - self.register_instruction(cil.TypeOfNode(obj, obj_type)) - - result = self.define_internal_local() - self.register_instruction(cil.LabelNode(start_case_label)) - - condition = self.define_internal_local() - self.register_instruction(cil.IsTypeNode( condition, obj_type, 'Void')) - self.register_instruction(cil.GotoIfNode(error_label, condition)) - - for case in node.case_list: - case_id, case_type, case_expr = case - current_label = self.define_internal_local() - next_label = self.define_internal_local() - - condition = self.define_internal_local() - self.register_instruction(cil.IsTypeNode(condition, obj_type, case_type)) - self.register_instruction(cil.GotoIfNode(current_label, condition)) - - self.register_instruction(cil.GotoNode(next_label)) - self.register_instruction(cil.LabelNode(current_label)) - - info = VariableInfo(case_id, case_type) - var = self.locals[case_id] = self.register_local(info) - self.register_instruction(cil.AssignNode(var, obj)) - - result_expr = self.visit(case_expr, scope) - self.register_instruction(cil.AssignNode( result, result_expr)) - self.register_instruction(cil.GotoNode(end_case_label)) - - self.register_instruction(next_label) + ret = self.define_internal_local() + vtype = self.define_internal_local() + cond = self.define_internal_local() + + self.visit(node.expr, scope) + self.register_instruction(cil.TypeOfNode(vtype, node.expr.ret_expr)) + + isvoid = self.define_internal_local() + self.register_instruction(cil.EqualNode(isvoid, node.expr.ret_expr, cil.VoidNode())) + self.register_runtime_error(isvoid, 'RuntimeError: void in switch case') + + end_label = self.register_label('case_end_label') + + branch_type = self.define_internal_local() + seen = [] + labels = [] + branches = sorted(node.case_list, key=lambda x: self.context.get_type(x[1]).depth, reverse=True) + # for p, (id, type, expr) in enumerate(branches): + for p, case in enumerate(branches): + id = case[0] + type = case[1] + expr = case[2] + labels.append(self.register_label(f'case_label_{p}')) + + for t in self.context.subtree(type): + if t not in seen: + seen.append(t) + self.register_instruction(cil.NameNode(branch_type, t.name)) + self.register_instruction(cil.EqualNode(cond, branch_type, vtype)) + self.register_instruction(cil.GotoIfNode(cond, labels[-1].label)) + + data = self.register_data('RuntimeError: Case statement without a match branch') + self.register_instruction(cil.ErrorNode(data)) + + for p, label in enumerate(labels): + id = branches[p][0] + type = branches[p][1] + expr = branches[p][2] + # id, type, expr = branches[p] + sc = scope.children[p] + + self.register_instruction(label) + var = self.register_local(VariableInfo(id, vtype)) + self.register_instruction(cil.AssignNode(var, node.expr.ret_expr)) + self.visit(expr, sc) + self.register_instruction(cil.AssignNode(ret, expr.ret_expr)) + self.register_instruction(cil.GotoNode(end_label.label)) + + self.register_instruction(end_label) + node.ret_expr = ret - var = self.define_internal_local() - self.register_instruction(cil.ParentTypeNode(var, obj_type)) - self.register_instruction(cil.AssignNode(obj_type, var)) + # var = self.define_internal_local() + # self.register_instruction(cil.ParentTypeNode(var, obj_type)) + # self.register_instruction(cil.AssignNode(obj_type, var)) - self.register_instruction(cil.GotoNode(start_case_label)) + # self.register_instruction(cil.GotoNode(start_case_label)) - self.register_instruction(cil.LabelNode(error_label)) - self.register_instruction(cil.ParamNode(self.instances[-1])) - self.regster_instruction(cil.DynamicCallNode(var, self.to_function_name("abort", self.current_type.name), result)) + # self.register_instruction(cil.LabelNode(error_label)) + # self.register_instruction(cil.ParamNode(self.instances[-1])) + # self.regster_instruction(cil.DynamicCallNode(var, self.to_function_name("abort", self.current_type.name), result)) - self.register_instruction(cil.GotoNode(end_case_label)) - return result + # self.register_instruction(cil.GotoNode(end_case_label)) + # return result @visitor.when(TrueNode) def visit(self, node, scope): - var = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Bool", var)) - self.register_instruction(cil.SetAttribNode(var, 0, 1)) - return var + ret = self.define_internal_local() + + self.register_instruction(cil.ArgNode(1)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + node.ret_expr = ret @visitor.when(FalseNode) def visit(self, node, scope): - var = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Bool", var)) - return var + ret = self.define_internal_local() + + self.register_instruction(cil.ArgNode(0)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + node.ret_expr = ret @visitor.when(StringNode) def visit(self, node, scope): - data_node = self.register_data(node.lex) - var = self.define_internal_local() - data_node.name = var - self.register_instruction(cil.AllocateNode('String', var)) - self.register_instruction(cil.LoadNode(var, data_node)) - return data_node.name + try: + data = [i for i in self.dotdata if i.value == node.lex][0] + except IndexError: + data = self.register_data(node.lex[1:-1]) + + variable = self.define_internal_local() + ret = self.define_internal_local() + + self.register_instruction(cil.LoadNode(variable, data)) + self.register_instruction(cil.ArgNode(variable)) + self.register_instruction(cil.StaticCallNode(self.init_name('String'), ret)) + node.ret_expr = ret + @visitor.when(LessNode) def visit(self, node, scope): @@ -838,11 +1054,21 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.LessNode(dest, left, right)) - return dest + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + + self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.visit(node.right, scope) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.LessNode(value, left, right)) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + + node.ret_expr = ret @visitor.when(LeqNode) def visit(self, node, scope): @@ -850,11 +1076,21 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.LeqNode(dest, left, right)) - return dest + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + value = self.define_internal_local() + + self.visit(node.left, scope) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.visit(node.right, scope) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.LessEqualNode(value, left, right)) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + + node.ret_expr = ret @visitor.when(EqualNode) def visit(self, node, scope): @@ -862,18 +1098,59 @@ def visit(self, node, scope): # node.left -> ExpressionNode # node.right -> ExpressionNode ############################### - # bool_inst = self.define_internal_local() - - dest = self.define_internal_local() - self.register_instruction(cil.AllocateNode('Bool', dest)) - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - - self.register_instruction(cil.StringEqualNode(dest, left, right) if isinstance(node.right, StringNode) and isinstance(node.left, StringNode) else cil.EqualNode(dest, left, right)) - ## equivalent to: - # if isinstance(node.right, StringNode) and isinstance(node.left, StringNode): - # self.register_instruction(cil.StringEqualNode(dest, left, right)) - # else: - # self.register_instruction(cil.EqualNode(dest, left, right)) - - return dest \ No newline at end of file + ret = self.define_internal_local() + left = self.define_internal_local() + right = self.define_internal_local() + type_left = self.define_internal_local() + type_int = self.define_internal_local() + type_string = self.define_internal_local() + type_bool = self.define_internal_local() + equal = self.define_internal_local() + value = self.define_internal_local() + + int_comparisson = self.register_label('int_comparisson') + string_comparisson = self.register_label('string_comparisson') + bool_comparisson = self.register_label('bool_comparisson') + continue_label = self.register_label('continue_label') + + self.visit(node.left, scope) + self.visit(node.right, scope) + + self.register_instruction(cil.TypeOfNode(type_left, node.left.ret_expr)) + self.register_instruction(cil.NameNode(type_int, 'Int')) + self.register_instruction(cil.NameNode(type_string, 'String')) + self.register_instruction(cil.NameNode(type_bool, 'Bool')) + + self.register_instruction(cil.EqualNode(equal, type_left, type_int)) + self.register_instruction(cil.GotoIfNode(equal, int_comparisson.label)) + self.register_instruction(cil.EqualNode(equal, type_left, type_string)) + self.register_instruction(cil.GotoIfNode(equal, string_comparisson.label)) + self.register_instruction(cil.EqualNode(equal, type_left, type_bool)) + self.register_instruction(cil.GotoIfNode(equal, bool_comparisson.label)) + + self.register_instruction(cil.EqualNode(value, node.left.ret_expr, node.right.ret_expr)) + self.register_instruction(cil.GotoNode(continue_label.label)) + + self.register_instruction(int_comparisson) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) + self.register_instruction(cil.EqualNode(value, left, right)) + self.register_instruction(cil.GotoNode(continue_label.label)) + + self.register_instruction(string_comparisson) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'String')) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'String')) + self.register_instruction(cil.EqualStringNode(value, left, right)) + self.register_instruction(cil.GotoNode(continue_label.label)) + + self.register_instruction(bool_comparisson) + self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Bool')) + self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Bool')) + self.register_instruction(cil.EqualNode(value, left, right)) + self.register_instruction(cil.GotoNode(continue_label.label)) + + self.register_instruction(continue_label) + + self.register_instruction(cil.ArgNode(value)) + self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) + node.ret_expr = ret \ No newline at end of file diff --git a/src/visitors/CooltoCilA.py b/src/visitors/CooltoCilA.py deleted file mode 100644 index c7a73793a..000000000 --- a/src/visitors/CooltoCilA.py +++ /dev/null @@ -1,672 +0,0 @@ -from distutils.log import error -from cool_ast.cool_ast import * -import cil_ast.cil_ast as cil -from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo -import visitors.visitor as visitor -# from utils.errors import _TypeError, _NameError, _SemanticError, _AtributeError - -class BaseCOOLToCILVisitor: - 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.locals = {} - self.attrs = {}#set() - self.parameters = set() - self.instances = [] - - self.ctrs = {} - - def transform_to_keys(self, xtype, keys): - for i, key in enumerate(keys): - xtype.attrs[key] = i - return xtype.attrs - - @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 register_local(self, vinfo): - vinfo.name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' - local_node = cil.LocalNode(vinfo.name) - self.localvars.append(local_node) - return vinfo.name - - def define_internal_local(self): - vinfo = VariableInfo('internal', None) - return self.register_local(vinfo) - - def register_instruction(self, instruction): - self.instructions.append(instruction) - return instruction - - def to_function_name(self, method_name, type_name): - return f'function_{method_name}_at_{type_name}' - - def register_function(self, function_name): - function_node = cil.FunctionNode(function_name, [], [], []) - self.dotcode.append(function_node) - return function_node - - def register_type(self, name): - type_node = cil.TypeNode(name) - self.dottypes.append(type_node) - return type_node - - def register_data(self, value): - vname = f'data_{len(self.dotdata)}' - data_node = cil.DataNode(vname, value) - self.dotdata.append(data_node) - return data_node - - def create_ctr(self, class_node, scope): - attrs = [att for att in class_node.features if isinstance(att, AttrDeclarationNode)] - while True: - break - self.current_function = self.register_function(self.to_function_name('ctor', self.current_type.name)) - self.register_instruction(cil.ParamNode('self')) - - for i, attr in enumerate(attrs): - set_attr_node = self.visit(attr, scope) - set_attr_node.index = i - self.register_instruction(set_attr_node) - self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) - -class COOLToCILVisitor(BaseCOOLToCILVisitor): - @visitor.on('node') - def visit(self, node): - pass - - def class_node_from_context(self, type): - idx = type.name - features = self.features_from_context(type) - parent = 'Object' if idx not in ['Object', 'Void'] else None - return ClassDeclarationNode(idx, features, parent) - - def features_from_context(self, type): - feats = [AttrDeclarationNode(feat.name, feat.type) for feat in type.attributes] - for func in type.methods: - feats.append(FuncDeclarationNode(func.name, func.param_names, func.return_type, None)) - - return feats - - @visitor.when(ProgramNode) - def visit(self, node, scope): - ###################################################### - # node.declarations -> [ ClassDeclarationNode ... ] - ###################################################### - - - basic_classes.Build(self.astCIL.code_section, self.astCIL.type_section) - func = 'main' - f = AST_CIL.Function(func) - - self_instance = 'self' #crear instancia de un valor entero - false_local = 'false' - - intr = AST_CIL.Call(self_instance, 'function_Main___init__') - - intr2 = AST_CIL.Arg(self_instance) - intr3 = AST_CIL.Call(false_local, 'function_Main_main') - intr4 = AST_CIL.Exit() - - f.instructions += [intr, intr2, intr3, intr4] - f.localvars += [false_local, self_instance] - self.astCIL.code_section.insert(0, f) - - for c in program.classes: - self.visit(c, programCIL) - - @visitor.when(ClassDeclarationNode) - def visit(self, node, scope): - #################################################################### - # node.id -> str - # node.parent -> str - # node.features -> [ FuncDeclarationNode/AttrDeclarationNode ... ] - #################################################################### - - self.current_type = self.context.get_type(node.id) - - # Your code here!!! (Handle all the .TYPE section) - type_node = self.register_type(node.id) - - attributes = [] - methods = [] - # self.attrs.clear() - self.attrs = {} - - current_type = self.current_type - while True: - attr_temp = [] - method_temp = [] - for attr in current_type.attributes: - # self.attrs.add(attr.name) - # self.attrs[attr.name] = [] - attr_temp.append(attr.name) - - for method in current_type.methods: - method_temp.append((method.name, self.to_function_name(method.name, current_type.name))) - - attributes = attr_temp + attributes - methods = method_temp + methods - - if current_type.parent is None: - break - - current_type = current_type.parent - - self.attrs = self.transform_to_keys(type_node, attributes)# type_node.attributes = attributes - type_node.methods = methods - self.create_ctr(node, scope) - - # attributes - # for feature, child_scope in zip(node.features, scope.children): - # if isinstance(feature, FuncDeclarationNode): - # continue - # self.visit(feature, child_scope) - - # func_declarations = (f for f in node.features if isinstance(f, FuncDeclarationNode)) - for feature, child_scope in zip(node.features, scope.children): - if isinstance(feature, FuncDeclarationNode): - self.visit(feature, child_scope) - - #falta visitar los atributos - - self.current_type = None - - @visitor.when(AttrDeclarationNode) - def visit(self, node, scope): - ############################### - # node.id -> str - # node.type -> str - # node.value = ExpressionNode - ############################### - # local function to determine the default value of an attribute given its type - def default_value_init(type): - if type == 'Int': - return ConstantNumNode(0) - elif type == 'Bool': - return FalseNode() - elif type == 'String': - return StringNode("") - else: - return VoidNode('void') - if node.value: - value = self.visit(node.value, scope) - - else: - default_value = default_value_init(node.type) - if isinstance(default_value, VoidNode): - value = 'void' - else: - value = self.visit(default_value, scope) - self_ref = VariableInfo('self', self.current_type) - self_ref.index = 0 - return cil.SetAttribNode(self_ref, node.id, value) - - ## old code - # elif node.type in ["Int", "String", "Object", "IO", "Bool"]: - # value = self.define_internal_local() - # self.register_instruction(cil.AllocateNode(node.type, value)) - # else: - # value = self.define_internal_local() - # self.register_instruction(cil.AllocateNode("Void", value)) - # #revisar que poner como el attr del SettAttribnode - - # attr = self.attrs[node.id] - # self.register_instruction(cil.SetAttribNode(self.instances[-1], attr, value)) - - @visitor.when(FuncDeclarationNode) - def visit(self, node, scope): - ############################### - # node.id -> str - # node.params -> [ (str, str) ... ] - # node.type -> str - # node.body -> [ ExpressionNode ... ] - ############################### - - self.current_method = self.current_type.get_method(node.id, self.current_type, False) - - # Your code here!!! (Handle PARAMS) - self.current_function = self.register_function(self.to_function_name(node.id, self.current_type.name)) - - self.parameters.clear() - self.params.append(cil.ParamNode('self')) - for arg_name, ptype in node.params: - self.parameters.add((arg_name, ptype)) - self.params.append(cil.ParamNode(arg_name)) - self.register_instruction(cil.ParamNode(arg_name)) - - self.locals.clear() - return_value = self.visit(node.body, scope) - - if node.body and 'Void' != node.type: - self.register_instruction(cil.ReturnNode(return_value)) - else: - result = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Void", result)) - self.register_instruction(cil.ReturnNode(result)) - - self.current_method = None - - @visitor.when(VarDeclarationNode) # AssignNode - def visit(self, node, scope): - ############################### - # node.id -> str - # node.type -> str - # node.expr -> ExpressionNode - ############################### - var = scope.find_variable(node.id) - dest = self.locals[var.name] = self.register_local(var) - - if node.expr is not None: - source = self.visit(node.expr, scope) - else: - # asignar valor por default - if node.type.lower() == 'int': - source = 0 - elif node.type.lower() == 'string': - source = '' - elif node.type.lower() == 'bool': - source = False - else: - source = None - self.register_instruction(cil.AssignNode(dest, source)) - return dest - - @visitor.when(AssignNode) # - def visit(self, node, scope): - ############################### - # node.id -> str - # node.expr -> ExpressionNode - ############################### - source = self.visit(node.expr, scope) - - if node.id in self.locals: - dest = self.locals[node.id] - self.register_instruction(cil.AssignNode(dest, source)) - return dest - elif node.id in self.attrs.keys(): - attr = self.attrs[node.id] - var = self.define_internal_local() - self.register_instruction(cil.SetAttribNode(self.instances[-1], attr, source)) - self.register_instruction(cil.GetAttribNode(var, self.instances[-1], attr)) - return var - else: - for (p_name, p_type) in self.parameters: - if node.id == p_name: - dest = VariableInfo(p_name, p_type) - self.register_instruction(cil.AssignNode(dest, source)) - return dest - - @visitor.when(CallNode) - def visit(self, node, scope): - ############################### - # node.obj -> AtomicNode - # node.method -> str - # node.args -> [ ExpressionNode ... ] - ############################### - error_label = self.define_internal_local() - dest = self.define_internal_local() - if node.obj is not None: # dynamic - obj = self.visit(node.obj, scope) - self.instances.append(obj) - if isinstance(node.obj, InstantiateNode): - obj_type = node.obj.lex - else: - obj_type = scope.find_variable(node.obj.lex).type.name - - local = self.define_internal_local() - self.register_instruction(cil.TypeOfNode(obj, local)) - - condition = self.define_internal_local() - self.register_instruction(cil.IsTypeNode(condition, local, "Void")) - self.register_instruction(cil.GotoIfNode(error_label, condition)) - - self.register_instruction(cil.ArgNode(obj)) - for arg in node.args: - self.register_instruction(cil.ArgNode(self.visit(arg, scope))) - - obj_type = obj_type if node.parent == None else node.parent - self.register_instruction(cil.DynamicCallNode(local, self.to_function_name(node.method, obj_type), dest)) - else: # static - self.register_instruction(cil.ArgNode(self.instances[-1])) - for arg in node.args: - self.register_instruction(cil.ArgNode(self.visit(arg, scope))) - - self.register_instruction(cil.StaticCallNode(self.to_function_name(node.method, self.current_type.type.name), dest)) - - self.register_instruction(cil.LabelNode(error_label)) - self.instances.pop() - return dest - - @visitor.when(ConstantNumNode) - def visit(self, node, scope): - ############################### - # node.lex -> str - ############################### - constant = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Int", constant)) - self.register_instruction(cil.SetAttribNode(constant, 0, int(node.lex))) - return constant - - @visitor.when(VariableNode) - def visit(self, node, scope): - ############################### - # node.lex -> str - ############################### - var = self.define_internal_local() - if node.lex in self.locals: - var_aux = self.locals[node.lex].name - self.register_instruction(cil.AssignNode(var, var_aux)) - elif node.lex in self.attrs.keys(): - self.register_instruction(cil.GetAttribNode(var, self.instances[-1], self.attrs[node.lex])) - return var - - @visitor.when(InstantiateNode) - def visit(self, node, scope): - ############################### - # node.lex -> str - ############################### - dest = self.define_internal_local() - self.register_instruction(cil.AllocateNode(node.lex, dest)) - return dest - - @visitor.when(PlusNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.PlusNode(dest, left, right)) - return dest - - @visitor.when(MinusNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.MinusNode(dest, left, right)) - return dest - - @visitor.when(StarNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.StarNode(dest, left, right)) - return dest - - @visitor.when(DivNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.DivNode(dest, left, right)) - return dest - - @visitor.when(ChunkNode) - def visit(self, node, scope): - ############################### - # node.chunk -> [ ExpressionNode... ] - ############################### - value = None - for expression in node.chunk: - value = self.visit(expression, scope.children[0]) - return value - - @visitor.when(ConditionalNode) - def visit(self, node, scope): - ############################### - # node.ifChunk -> ExpressionNode - # node.thenChunk -> ExpressionNode - # node.elseChunk -> ExpressionNode - ############################### - - var = self.define_internal_local() - then_label = self.define_internal_local() - else_label = self.define_internal_local() - - ifexpr = self.visit(node.ifChunk, scope.children[0]) - self.register_instruction(cil.GotoIfNode(then_label, ifexpr)) - - # else - elseexpr = self.visit(node.elseChunk, scope.children[2]) - self.register_instruction(cil.AssignNode(var, elseexpr)) - self.register_instruction(cil.GotoNode(else_label)) - - # then - self.register_instruction(cil.LabelNode(then_label)) - thenexpr = self.visit(node.thenChunk, scope.children[1]) - self.register_instruction(cil.AssignNode(var, thenexpr)) - - self.register_instruction(cil.LabelNode(else_label)) - return var - - @visitor.when(LetInNode) - def visit(self, node, scope): - ############################### - # node.decl_list -> [ DeclarationNode... ] - # node.expression -> ExpressionNode - ############################### - - for decl in node.decl_list: - # var = self.visit(decl, scope) - self.visit(decl, scope) - - value = self.visit(node.expression, scope) - - return value - - @visitor.when(WhileNode) - def visit(self, node, scope): - while_label = self.define_internal_local() - loop_label = self.define_internal_local() - end_label = self.define_internal_local() - - self.register_instruction(cil.LabelNode(while_label)) - - while_expr = self.visit(node.condition, scope) - self.register_instruction(cil.GotoIfNode(loop_label, while_expr)) - - self.register_instruction(cil.GotoNode(end_label)) - self.register_instruction(cil.LabelNode(loop_label)) - - self.visit(node.loopChunk, scope) - self.register_instruction(cil.GotoNode(while_label)) - - self.register_instruction(cil.LabelNode(end_label)) - - result = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Void", result)) - return result - - @visitor.when(NotNode) - def visit(self, node, scope): - ############################### - # node.expression -> ExpressionNode - ############################### - bool_instance = self.visit(node.expression, scope) - - one = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Int", one)) - self.register_instruction(cil.SetAttribNode(one, 0, 1)) - - bool_value = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Int", bool_value)) - - var = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(var, bool_instance, 0)) - self.register_instruction(cil.SetAttribNode(bool_value, 0, var)) - - new_var = self.define_internal_local() - self.register_instruction(cil.MinusNode(new_var, one, bool_value)) - self.register_instruction(cil.SetAttribNode(bool_instance, 0, new_var)) - - return bool_instance - - @visitor.when(IsVoidNode) - def visit(self, node, scope): - ############################### - # node.method -> ExpressionNode - ############################### - expr_value = self.visit(node.method, scope) - var = self.define_internal_local() - self.register_instruction(cil.IsTypeNode(var, expr_value, "Void")) - result = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Bool", result)) - self.register_instruction(cil.SetAttribNode(result, 0, var)) - return result - - @visitor.when(ComplementNode) - def visit(self, node, scope): - ############################### - # node.expr -> ExpressionNode - ############################### - value = self.visit(node.expr, scope) - var = self.define_internal_local() - zero = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Int", zero)) - self.register_instruction(cil.MinusNode(var, zero, value)) - self.regster_instruction(cil.SetAttribNode(value, 0, var)) - return value - - @visitor.when(SwitchCaseNode) - def visit(self, node, scope): - ############################### - # node.expr -> ExpressionNode - # node.case_list = [ (id, type, expr)... ] - ############################### - start_case_label = self.define_internal_local() - end_case_label = self.define_internal_local() - error_label = self.define_internal_local() - - obj = self.visit(node.expr, scope) - obj_type = self.define_internal_local() - self.register_instruction(cil.TypeOfNode(obj, obj_type)) - - result = self.define_internal_local() - self.register_instruction(cil.LabelNode(start_case_label)) - - condition = self.define_internal_local() - self.register_instruction(cil.IsTypeNode( condition, obj_type, 'Void')) - self.register_instruction(cil.GotoIfNode(error_label, condition)) - - for case in node.case_list: - case_id, case_type, case_expr = case - current_label = self.define_internal_local() - next_label = self.define_internal_local() - - condition = self.define_internal_local() - self.register_instruction(cil.IsTypeNode(condition, obj_type, case_type)) - self.register_instruction(cil.GotoIfNode(current_label, condition)) - - self.register_instruction(cil.GotoNode(next_label)) - self.register_instruction(cil.LabelNode(current_label)) - - info = VariableInfo(case_id, case_type) - var = self.locals[case_id] = self.register_local(info) - self.register_instruction(cil.AssignNode(var, obj)) - - result_expr = self.visit(case_expr, scope) - self.register_instruction(cil.AssignNode( result, result_expr)) - self.register_instruction(cil.GotoNode(end_case_label)) - - self.register_instruction(next_label) - - var = self.define_internal_local() - self.register_instruction(cil.ParentTypeNode(var, obj_type)) - self.register_instruction(cil.AssignNode(obj_type, var)) - - self.register_instruction(cil.GotoNode(start_case_label)) - - self.register_instruction(cil.LabelNode(error_label)) - self.register_instruction(cil.ParamNode(self.instances[-1])) - self.regster_instruction(cil.DynamicCallNode(var, self.to_function_name("abort", self.current_type.name), result)) - - self.register_instruction(cil.GotoNode(end_case_label)) - return result - - @visitor.when(TrueNode) - def visit(self, node, scope): - var = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Bool", var)) - self.register_instruction(cil.SetAttribNode(var, 0, 1)) - return var - - @visitor.when(FalseNode) - def visit(self, node, scope): - var = self.define_internal_local() - self.register_instruction(cil.AllocateNode("Bool", var)) - return var - - @visitor.when(StringNode) - def visit(self, node, scope): - data_node = self.register_data(node.lex) - var = self.define_internal_local() - self.register_instruction(cil.LoadNode(var, data_node)) - return data_node.name - - @visitor.when(LessNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.LessNode(dest, left, right)) - return dest - - @visitor.when(LeqNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.LeqNode(dest, left, right)) - return dest - - @visitor.when(EqualNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - dest = self.define_internal_local() - left = self.visit(node.left, scope) - right = self.visit(node.right, scope) - self.register_instruction(cil.EqualNode(dest, left, right)) - return dest diff --git a/src/visitors/CooltoCilM.py b/src/visitors/CooltoCilM.py deleted file mode 100644 index bb8d1fbc8..000000000 --- a/src/visitors/CooltoCilM.py +++ /dev/null @@ -1,1153 +0,0 @@ -from distutils.log import error -from cool_ast.cool_ast import * -import cil_ast.cil_ast as cil -from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo -import visitors.visitor as visitor -# from utils.errors import _TypeError, _NameError, _SemanticError, _AtributeError - -class BaseCOOLToCILVisitor: - 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.vself = VariableInfo('self', None) - self.value_types = ['String', 'Int', 'Bool'] - - self.var_names = {} - self.ctrs = {} - self.types_map = {} - - self.breakline_data = self.register_data('\n') - self.emptystring_data = self.register_data('') - - self.locals = {} - - - def transform_to_keys(self, xtype, keys): - for i, key in enumerate(keys): - xtype.attrs[key] = i - return xtype.attrs - - def build_type(self, node): - self.types_map[node.id.lex] = type = self.register_type(node.id) - iter_type = self.context.get_type(node.id.lex) - - generation = [] - while iter_type is not None: - generation.append(iter_type) - iter_type = iter_type.parent - - generation.reverse() - for i in generation: - methods = sorted(i.methods) - attributes = sorted(i.attributes) - for meth in methods: - type.methods[meth] = self.to_function_name(meth, i.name) - for attr in attributes: - type.attributes[attr.name] = cil.AttributeNode(attr.name, i.name) - - - @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 register_param(self, vinfo): - name = f'local_param_{self.current_function.name}_{vinfo.name}_{len(self.params)}' - param_node = cil.ParamNode(name) - self.params.append(param_node) - self.var_names[vinfo.name] = cil.VarNode(name) - return self.var_names[vinfo.name] - - def register_local(self, vinfo): - name = vinfo.name - vinfo.name = f'local_{self.current_function.name[9:]}_{vinfo.name}_{len(self.localvars)}' - local_node = cil.LocalNode(vinfo.name) - self.localvars.append(local_node) - self.var_names[name] = cil.VarNode(vinfo.name) - return self.var_names[name] # indexar en vinfo.name y quitar la 1ra linea - - def register_attribute(self, name, type): - name = f'attr_{type}_{name}' - return cil.AttributeNode(name, type) - - def define_internal_local(self): - vinfo = VariableInfo('internal', None) - return self.register_local(vinfo) - - def register_instruction(self, instruction): - self.instructions.append(instruction) - return instruction - - def to_function_name(self, method_name, type_name): - return f'function_{method_name}_at_{type_name}' - - def register_function(self, function_name): - function_node = cil.FunctionNode(function_name, [], [], []) - self.dotcode.append(function_node) - return function_node - - def register_type(self, name): - type_node = cil.TypeNode(name) - self.types_map[name] = type_node - self.dottypes.append(type_node) - return type_node - - def register_data(self, value): - vname = f'data_{len(self.dotdata)}' - data_node = cil.DataNode(vname, value) - self.dotdata.append(data_node) - return data_node - - def register_label(self, label): - lname = f'{label}_{self.current_function.labels_count}' - self.current_function.labels_count += 1 - return cil.LabelNode(lname) - - def init_name(self, name): - return f'__init_at_{name}' - - def init_attr_name(self, name): - return f'__init_attr_at_{name}' - - - def create_ctr(self, class_node, scope): - attrs = [att for att in class_node.features if isinstance(att, AttrDeclarationNode)] - while True: - break - self.current_function = self.register_function(self.to_function_name('ctor', self.current_type.name)) - self.register_instruction(cil.ParamNode('self')) - - for i, attr in enumerate(attrs): - set_attr_node = self.visit(attr, scope) - set_attr_node.index = i - self.register_instruction(set_attr_node) - self.register_instruction(cil.ReturnNode(VariableInfo('self', self.current_type))) - - - def register_runtime_error(self, condition, msg): - error_node = self.register_label('error_label') - continue_node = self.register_label('continue_label') - self.register_instruction(cil.GotoIfNode(condition, error_node.label)) - self.register_instruction(cil.GotoNode(continue_node.label)) - self.register_instruction(error_node) - data_node = self.register_data(msg) - self.register_instruction(cil.ErrorNode(data_node)) - self.register_instruction(continue_node) - - def register_builtin(self): - # Object - line, column = 0, 0 - type_node = self.register_type('Object') - - self.current_function = self.register_function(self.init_name('Object')) - instance = self.define_internal_local() - self.register_instruction(cil.AllocateNode('Object', instance)) - self.register_instruction(cil.ReturnNode(instance)) - - self.current_function = self.register_function(self.to_function_name('abort', 'Object')) - self_param = self.register_param(self.vself) - vname = self.define_internal_local() - abort_data = self.register_data('Abort called from class ') - self.register_instruction(cil.LoadNode(vname, abort_data)) - self.register_instruction(cil.PrintStringNode(vname)) - self.register_instruction(cil.TypeOfNode(vname, self_param)) - self.register_instruction(cil.PrintStringNode(vname)) - self.register_instruction(cil.LoadNode(vname, self.breakline_data)) - self.register_instruction(cil.PrintStringNode(vname)) - self.register_instruction(cil.ExitNode()) - - self.current_function = self.register_function(self.to_function_name('type_name', 'Object')) - self_param = self.register_param(self.vself) - result = self.define_internal_local() - self.register_instruction(cil.TypeOfNode(result, self_param)) - instance = self.define_internal_local() - self.register_instruction(cil.ArgNode(result)) - self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) - self.register_instruction(cil.ReturnNode(instance)) - - self.current_function = self.register_function(self.to_function_name('copy', 'Object')) - self_param = self.register_param(self.vself) - result = self.define_internal_local() - self.register_instruction(cil.CopyNode(result, self_param)) - self.register_instruction(cil.ReturnNode(result)) - - type_node.methods = {name: self.to_function_name(name, 'Object') for name in ['abort', 'type_name', 'copy']} - type_node.methods['init'] = self.init_name('Object') - obj_methods = ['abort', 'type_name', 'copy'] - - # IO - type_node = self.register_type('IO') - - self.current_function = self.register_function(self.init_name('IO')) - instance = self.define_internal_local() - self.register_instruction(cil.AllocateNode('IO', instance)) - self.register_instruction(cil.ReturnNode(instance)) - - self.current_function = self.register_function(self.to_function_name('out_string', 'IO')) - self_param = self.register_param(self.vself) - x = self.register_param(VariableInfo('x', None)) - vname = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(vname, x, 'value', 'String')) - self.register_instruction(cil.PrintStringNode(vname)) - self.register_instruction(cil.ReturnNode(self_param)) - - self.current_function = self.register_function(self.to_function_name('out_int', 'IO')) - self_param = self.register_param(self.vself) - x = self.register_param(VariableInfo('x', None)) - vname = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(vname, x, 'value', 'Int')) - self.register_instruction(cil.PrintIntNode(vname)) - self.register_instruction(cil.ReturnNode(self_param)) - - self.current_function = self.register_function(self.to_function_name('in_string', 'IO')) - self_param = self.register_param(self.vself) - result = self.define_internal_local() - self.register_instruction(cil.ReadStringNode(result)) - instance = self.define_internal_local() - self.register_instruction(cil.ArgNode(result)) - self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) - self.register_instruction(cil.ReturnNode(value=instance)) - - self.current_function = self.register_function(self.to_function_name('in_int', 'IO')) - self_param = self.register_param(self.vself) - result = self.define_internal_local() - self.register_instruction(cil.ReadIntNode(result)) - instance = self.define_internal_local() - self.register_instruction(cil.ArgNode(result)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), instance)) - self.register_instruction(cil.ReturnNode(instance)) - - type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} - type_node.methods.update({name: self.to_function_name(name, 'IO') for name in - ['out_string', 'out_int', 'in_string', 'in_int']}) - type_node.methods['init'] = self.init_name('IO') - - # String - type_node = self.register_type('String') - type_node.attributes = {name:self.register_attribute(name, 'String') for name in ['value', 'length']} - - self.current_function = self.register_function(self.init_name('String')) - val = self.register_param(VariableInfo('val', None)) - instance = self.define_internal_local() - self.register_instruction(cil.AllocateNode('String', instance)) - self.register_instruction(cil.SetAttribNode(instance, 'value', val, 'String')) - result = self.define_internal_local() - self.register_instruction(cil.LengthNode(result, val)) - attr = self.define_internal_local() - self.register_instruction(cil.ArgNode(result)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), attr)) - self.register_instruction(cil.SetAttribNode(instance, 'length', attr, 'String')) - self.register_instruction(cil.ReturnNode(instance)) - - self.current_function = self.register_function(self.to_function_name('length', 'String')) - self_param = self.register_param(self.vself) - result = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(result, self_param, 'length', 'String')) - self.register_instruction(cil.ReturnNode(result)) - - self.current_function = self.register_function(self.to_function_name('concat', 'String')) - self_param = self.register_param(self.vself) - s = self.register_param(VariableInfo('s', None)) - str_1 = self.define_internal_local() - str_2 = self.define_internal_local() - length_1 = self.define_internal_local() - length_2 = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(str_1, self_param, 'value', 'String')) - self.register_instruction(cil.GetAttribNode(str_2, s, 'value', 'String')) - self.register_instruction(cil.GetAttribNode(length_1, self_param, 'length', 'String')) - self.register_instruction(cil.GetAttribNode(length_2, s, 'length', 'String')) - self.register_instruction(cil.GetAttribNode(length_1, length_1, 'value', 'Int')) - self.register_instruction(cil.GetAttribNode(length_2, length_2, 'value', 'Int')) - self.register_instruction(cil.PlusNode(length_1, length_1, length_2)) - - result = self.define_internal_local() - self.register_instruction(cil.ConcatNode(result, str_1, str_2, length_1)) - instance = self.define_internal_local() - self.register_instruction(cil.ArgNode(result)) - self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) - self.register_instruction(cil.ReturnNode(instance)) - - self.current_function = self.register_function(self.to_function_name('substr', 'String')) - self_param = self.register_param(self.vself) - i = self.register_param(VariableInfo('i', None)) - l = self.register_param(VariableInfo('l', None)) - result = self.define_internal_local() - index_value = self.define_internal_local() - length_value = self.define_internal_local() - length_wrapper = self.define_internal_local() - length_attr = self.define_internal_local() - length_substr = self.define_internal_local() - less_value = self.define_internal_local() - str_value = self.define_internal_local() - self.register_instruction(cil.GetAttribNode(str_value, self_param, 'value', 'String')) - self.register_instruction(cil.GetAttribNode(index_value, i, 'value', 'Int')) - self.register_instruction(cil.GetAttribNode(length_value, l, 'value', 'Int')) - # Check Out of range error - self.register_instruction(cil.GetAttribNode(length_wrapper, self_param, 'length', 'String')) - self.register_instruction(cil.GetAttribNode(length_attr, length_wrapper, 'value', 'Int')) - self.register_instruction(cil.PlusNode(length_substr, length_value, index_value)) - self.register_instruction(cil.LessNode(less_value, length_attr, length_substr)) - self.register_runtime_error(less_value, 'Substring out of range') - self.register_instruction(cil.SubstringNode(result, str_value, index_value, length_value)) - instance = self.define_internal_local() - self.register_instruction(cil.ArgNode(result)) - self.register_instruction(cil.StaticCallNode(self.init_name('String'), instance)) - self.register_instruction(cil.ReturnNode(instance)) - - type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} - type_node.methods.update({name: self.to_function_name(name, 'String') for name in ['length', 'concat', 'substr']}) - type_node.methods['init'] = self.init_name('String') - - # Int - type_node = self.register_type('Int') - type_node.attributes = {name:self.register_attribute(name, 'Int') for name in ['value']} - - self.current_function = self.register_function(self.init_name('Int')) - val = self.register_param(VariableInfo('val', None)) - instance = self.define_internal_local() - self.register_instruction(cil.AllocateNode('Int', instance)) - self.register_instruction(cil.SetAttribNode(instance, 'value', val, 'Int')) - self.register_instruction(cil.ReturnNode(instance)) - - type_node.methods = {method:self.to_function_name(method, 'Object') for method in obj_methods} - type_node.methods['init'] = self.init_name('Int') - - # Bool - type_node = self.register_type('Bool') - type_node.attributes = {name:self.register_attribute(name, 'Bool') for name in ['value']} - - self.current_function = self.register_function(self.init_name('Bool')) - val = self.register_param(VariableInfo('val', None)) - instance = self.define_internal_local() - self.register_instruction(cil.AllocateNode('Bool', instance)) - self.register_instruction(cil.SetAttribNode(instance, 'value', val, 'Bool')) - self.register_instruction(cil.ReturnNode(instance)) - - type_node.methods = {method: self.to_function_name(method, 'Object') for method in obj_methods} - type_node.methods['init'] = self.init_name('Bool') - - - - -class COOLToCILVisitor(BaseCOOLToCILVisitor): - @visitor.on('node') - def visit(self, node): - pass - - def class_node_from_context(self, type): - idx = type.name - features = self.features_from_context(type) - parent = 'Object' if idx not in ['Object', 'Void'] else None - return ClassDeclarationNode(idx, features, parent) - - def features_from_context(self, type): - feats = [AttrDeclarationNode(feat.name, feat.type) for feat in type.attributes] - for func in type.methods: - feats.append(FuncDeclarationNode(func.name, func.param_names, func.return_type, None)) - - return feats - - - def collect_types(self, node): - self.types_map[node.id] = type = self.register_type(node.id) - # Guardar métodos de las clases padres - iter_type = self.context.get_type(node.id) - - generation = [] - while iter_type is not None: - generation.append(iter_type) - iter_type = iter_type.parent - - generation.reverse() - for i in generation: - a = 0 - methods = [m.name for m in i.methods] - _attributes = i.attributes - attributes = [x.name for x in _attributes] - methods.sort() - attributes.sort() - for meth in methods: - type.methods[meth] = self.to_function_name(meth, i.name) - for attr in attributes: - type.attributes[attr] = cil.AttributeNode(attr, i.name) - - - @visitor.when(ProgramNode) - def visit(self, node, scope): - ###################################################### - # node.declarations -> [ ClassDeclarationNode ... ] - ###################################################### - self.current_function = self.register_function('entry') - main_instance = self.define_internal_local() - self.register_instruction(cil.StaticCallNode(self.init_name('Main'), main_instance)) - self.register_instruction(cil.ArgNode(main_instance)) - self.register_instruction(cil.StaticCallNode(self.to_function_name('main', 'Main'),main_instance)) - self.register_instruction(cil.ReturnNode(value=0)) - - self.register_builtin() - self.current_function = None - for x in node.declarations: - self.collect_types(x) - - for x, y in zip(node.declarations, scope.children): - self.visit(x, y) - - return cil.ProgramNode(self.dottypes, self.dotdata, self.dotcode) - - - @visitor.when(ClassDeclarationNode) - def visit(self, node, scope): - #################################################################### - # node.id -> str - # node.parent -> str - # node.features -> [ FuncDeclarationNode/AttrDeclarationNode ... ] - #################################################################### - - self.current_type = self.context.get_type(node.id) - type = self.types_map[node.id] - - self.current_function = self.register_function(self.init_attr_name(node.id)) - type.methods['__init_attr'] = self.current_function.name - self_param = self.register_param(self.vself) - self.localvars.extend(type.attributes.values()) - self.var_names.update({i:cil.AttributeNode(j.name, type.name) - for i,j in type.attributes.items()}) - - self.vself.name = self_param - # Inicializando los atributos de la clase y llamando al constructor del padre - if self.current_type.parent.name not in ('Object', 'IO'): - variable = self.define_internal_local() - self.register_instruction(cil.ArgNode(self_param)) - self.register_instruction(cil.StaticCallNode( - self.init_attr_name(self.current_type.parent.name), variable)) - - # Inicializando los atributos de la clase - for i, feat in enumerate(node.features): - if isinstance(feat, AttrDeclarationNode): - # try: - self.visit(feat, scope.children[i]) - self.register_instruction(cil.SetAttribNode(self_param, feat.id, feat.ret_expr, node.id,)) - # except Exception as e: - # _ = 0 - self.register_instruction(cil.ReturnNode(self_param)) - - # TypeNode de la clase - # type = self.types_map[node.id.lex] - # type.attributes = [i.name for i in self.current_type.attributes] - - # Visitar funciones dentro de la clase - for feat, child in zip(node.features, scope.children): - if isinstance(feat, FuncDeclarationNode): - try: - self.visit(feat, child) - except Exception as e: - _ = 0 - self.vself.name = 'self' - - # Allocate de la clase - self.current_function = self.register_function(self.init_name(node.id)) - type.methods['__init'] = self.current_function.name - self.localvars.extend(type.attributes.values()) - instance = self.define_internal_local() - self.register_instruction(cil.AllocateNode(node.id, instance)) - - variable = self.define_internal_local() - self.register_instruction(cil.ArgNode(instance)) - self.register_instruction(cil.StaticCallNode(self.init_attr_name(node.id), variable)) - - self.register_instruction(cil.ReturnNode(value=variable)) - - self.current_function = None - self.current_type = None - - @visitor.when(AttrDeclarationNode) - def visit(self, node, scope): - ############################### - # node.id -> str - # node.type -> str - # node.value = ExpressionNode - ############################### - # local function to determine the default value of an attribute given its type - def default_value_init(type): - if type == 'Int': - return ConstantNumNode(0) - elif type == 'Bool': - return FalseNode() - elif type == 'String': - return StringNode("") - else: - return VoidNode('void') - - variable = self.define_internal_local() - if node.value: - self.visit(node.value, scope.children[0]) - self.register_instruction(cil.AssignNode(variable, node.value.ret_expr)) - elif node.type in self.value_types: - if node.type == 'SELF_TYPE': - stype = self.current_type.name - else: - stype = node.type - - if stype == 'Int': - self.register_instruction(cil.ArgNode(0)) - elif stype == 'Bool': - self.register_instruction(cil.ArgNode(0)) - elif stype == 'String': - data = self.emptystring_data - self.register_instruction(cil.LoadNode(variable, data)) - self.register_instruction(cil.ArgNode(variable)) - self.register_instruction(cil.StaticCallNode(self.init_name(stype), variable, - )) - node.ret_expr = variable - - @visitor.when(FuncDeclarationNode) - def visit(self, node, scope): - ############################### - # node.id -> str - # node.params -> [ (str, str) ... ] - # node.type -> str - # node.body -> [ ExpressionNode ... ] - ############################### - self.current_method = self.current_type.get_method(node.id, self.current_type, False) - type = self.types_map[self.current_type.name] - self.current_function = self.register_function(self.to_function_name(self.current_method.name, - self.current_type.name), - ) - self.localvars.extend(type.attributes.values()) - - self_param = self.register_param(self.vself) - self.vself.name = self_param - for param, type in node.params: - self.register_param(VariableInfo(param, type)) - - self.visit(node.body, scope) - self.register_instruction(cil.ReturnNode(value=node.body.ret_expr)) - self.current_method = None - self.vself.name = 'self' - - @visitor.when(VarDeclarationNode) # AssignNode - def visit(self, node, scope): - ############################### - # node.id -> str - # node.type -> str - # node.expr -> ExpressionNode - ############################### - var = scope.find_variable(node.id) - dest = self.locals[var.name] = self.register_local(var) - - if node.expr is not None: - source = self.visit(node.expr, scope) - else: - # asignar valor por default - if node.type.lower() == 'int': - source = 0 - elif node.type.lower() == 'string': - source = '' - elif node.type.lower() == 'bool': - source = False - else: - source = None - self.register_instruction(cil.AssignNode(dest, source)) - return dest - - @visitor.when(AssignNode) # - def visit(self, node, scope): - ############################### - # node.id -> str - # node.expr -> ExpressionNode - ############################### - var = self.var_names[node.id] - self.visit(node.expr, scope.children[0]) - self.register_instruction(cil.AssignNode(var, node.expr.ret_expr)) - node.ret_expr = var - - @visitor.when(CallNode) - def visit(self, node, scope): - ############################### - # node.obj -> AtomicNode - # node.method -> str - # node.args -> [ ExpressionNode ... ] - ############################### - if isinstance(node.obj, CallNode) : - _ = 0 - try: - if node.obj.lex == 'self': - node.obj = None - except: - pass - if node.obj: - args = [] - # for arg, child in zip(node.args, scope.children[1:]): - for arg in node.args: - self.visit(arg, scope) - args.append(cil.ArgNode(arg.ret_expr)) - - self.visit(node.obj, scope) - - - void = cil.VoidNode() - isvoid = self.define_internal_local() - self.register_instruction(cil.EqualNode(isvoid, node.obj.ret_expr, void)) - self.register_runtime_error(isvoid, 'RuntimeError: Function call in a void instance') - - self.register_instruction(cil.ArgNode(node.obj.ret_expr)) - for arg in args: self.register_instruction(arg) - ret = self.define_internal_local() - - - if isinstance(node.obj, InstantiateNode): - stype = node.obj.lex - elif isinstance(node.obj, CallNode): - stype = node.type.name - else: - stype = scope.find_variable(node.obj.lex) - if stype is None: - if isinstance(node.obj, StringNode): - stype = 'String' - else: - raise Exception("calling a function in a variable not found that is not a string wtf :D") - else: - stype = stype.type.name - - if node.parent is not None: - # stype = node.type.lex - self.register_instruction(cil.StaticCallNode(self.types_map[node.parent].methods[node.method], ret)) - else: - # stype = node.obj.static_type.name - self.register_instruction(cil.ArgNode(node.obj.ret_expr)) - self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.method], ret)) - - - node.ret_expr = ret - - else: - ret = self.define_internal_local() - - args = [] - # for arg, child in zip(node.args, scope.children): - for arg in node.args: - self.visit(arg, scope) - args.append(cil.ArgNode(arg.ret_expr)) - - self.register_instruction(cil.ArgNode(self.vself.name)) - for arg in args: self.register_instruction(arg) - self.register_instruction(cil.ArgNode(self.vself.name)) - - stype = self.current_type.name - self.register_instruction(cil.DynamicCallNode(stype, self.types_map[stype].methods[node.method], ret)) - node.ret_expr = ret - - - @visitor.when(ConstantNumNode) - def visit(self, node, scope): - ############################### - # node.lex -> str - ############################### - ret = self.define_internal_local() - - self.register_instruction(cil.ArgNode(node.lex)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) - node.ret_expr = ret - - @visitor.when(VariableNode) - def visit(self, node, scope): - ############################### - # node.lex -> str - ############################### - if node.lex == 'self': - node.ret_expr = self.vself.name - else: - node.ret_expr = self.var_names[node.lex] - - @visitor.when(InstantiateNode) - def visit(self, node, scope): - ############################### - # node.lex -> str - ############################### - ret = self.define_internal_local() - - if node.type == 'SELF_TYPE': - stype = self.current_type.name - else: - stype = node.type - - if stype == 'Int': - self.register_instruction(cil.ArgNode(0)) - elif stype == 'Bool': - self.register_instruction(cil.ArgNode(0)) - elif stype == 'String': - data = self.emptystring_data - variable = self.define_internal_local() - self.register_instruction(cil.LoadNode(variable, data)) - self.register_instruction(cil.ArgNode(variable)) - self.register_instruction(cil.StaticCallNode(self.init_name(stype), ret)) - node.ret_expr = ret - - @visitor.when(PlusNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - ret = self.define_internal_local() - left = self.define_internal_local() - right = self.define_internal_local() - value = self.define_internal_local() - - self.visit(node.left, scope) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.visit(node.right, scope) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) - self.register_instruction(cil.PlusNode(value, left, right)) - - self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret,)) - - node.ret_expr = ret - - @visitor.when(MinusNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - ret = self.define_internal_local() - left = self.define_internal_local() - right = self.define_internal_local() - value = self.define_internal_local() - - self.visit(node.left, scope) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.visit(node.right, scope) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) - self.register_instruction(cil.MinusNode(value, left, right)) - - self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) - - node.ret_expr = ret - - @visitor.when(StarNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - ret = self.define_internal_local() - left = self.define_internal_local() - right = self.define_internal_local() - value = self.define_internal_local() - - self.visit(node.left, scope) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.visit(node.right, scope) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) - self.register_instruction(cil.StarNode(value, left, right)) - - self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) - node.ret_expr = ret - - @visitor.when(DivNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - ret = self.define_internal_local() - left = self.define_internal_local() - right = self.define_internal_local() - value = self.define_internal_local() - zero = self.define_internal_local() - - self.visit(node.left, scope) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.visit(node.right, scope) - - self.register_instruction(cil.ArgNode(0)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), zero)) - self.register_instruction(cil.GetAttribNode(zero, zero, 'value', 'Int')) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) - self.register_instruction(cil.EqualNode(zero, zero, right, - )) - self.register_runtime_error(zero, 'RuntimeError: Division by zero') - - self.register_instruction(cil.DivNode(value, left, right)) - - self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) - node.ret_expr = ret - - @visitor.when(ChunkNode) - def visit(self, node, scope): - ############################### - # node.chunk -> [ ExpressionNode... ] - ############################### - - for i, expr in enumerate(node.chunk): - self.visit(expr, scope.children[i]) - node.ret_expr = node.chunk[-1].ret_expr - - - @visitor.when(ConditionalNode) - def visit(self, node, scope): - ############################### - # node.ifChunk -> ExpressionNode - # node.thenChunk -> ExpressionNode - # node.elseChunk -> ExpressionNode - ############################### - - ret = self.define_internal_local() - condition = self.define_internal_local() - - then_label = self.register_label('then_label') - continue_label = self.register_label('continue_label') - - # IF - self.visit(node.ifChunk, scope.children[0]) - self.register_instruction(cil.GetAttribNode(condition, node.ifChunk.ret_expr, 'value', 'Bool')) - self.register_instruction(cil.GotoIfNode(condition, then_label.label)) - - # ELSE - self.visit(node.elseChunk, scope.children[2]) - self.register_instruction(cil.AssignNode(ret, node.elseChunk.ret_expr)) - self.register_instruction(cil.GotoNode(continue_label.label)) - - # THEN - self.register_instruction(then_label) - self.visit(node.thenChunk, scope.children[1]) - self.register_instruction(cil.AssignNode(ret, node.thenChunk.ret_expr)) - - self.register_instruction(continue_label) - node.ret_expr = ret - - @visitor.when(LetInNode) - def visit(self, node, scope): - ############################### - # node.decl_list -> [ DeclarationNode... ] - # node.expression -> ExpressionNode - ############################### - - # for (id, type, expr), child in zip(node.let_body, scope.children[:-1]): - # for decl, child in zip(node.decl_list, scope.children[:-1]): - i = 0 - for decl in node.decl_list: - id = decl.id - type = decl.type - variable = self.register_local(VariableInfo(id, type)) - if decl.expr: - self.visit(decl.expr, scope.children[i]) - self.register_instruction(cil.AssignNode(variable, decl.expr.ret_expr)) - i += 1 - elif type in self.value_types: - if type == 'SELF_TYPE': - stype = self.current_type.name - else: - stype = type - if stype == 'Int': - self.register_instruction(cil.ArgNode(0)) - elif stype == 'Bool': - self.register_instruction(cil.ArgNode(0)) - elif stype == 'String': - data = self.emptystring_data - self.register_instruction(cil.LoadNode(variable, data)) - self.register_instruction(cil.ArgNode(variable)) - self.register_instruction(cil.StaticCallNode(self.init_name(stype), variable, - )) - - self.visit(node.expression, scope.children[-1]) - node.ret_expr = node.expression.ret_expr - - @visitor.when(WhileNode) - def visit(self, node, scope): - while_label = self.register_label('while_label') - loop_label = self.register_label('loop_label') - pool_label = self.register_label('pool_label') - condition = self.define_internal_local() - - self.register_instruction(while_label) - self.visit(node.condition, scope.children[0]) - self.register_instruction(cil.GetAttribNode(condition, node.condition.ret_expr, 'value', 'Bool')) - self.register_instruction(cil.GotoIfNode(condition, loop_label.label)) - self.register_instruction(cil.GotoNode(pool_label.label)) - - self.register_instruction(loop_label) - self.visit(node.loopChunk, scope.children[1]) - self.register_instruction( - cil.GotoNode(while_label.label)) - - self.register_instruction(pool_label) - node.ret_expr = cil.VoidNode() - - @visitor.when(NotNode) - def visit(self, node, scope): - ############################### - # node.expression -> ExpressionNode - ############################### - ret = self.define_internal_local() - value = self.define_internal_local() - neg_value = self.define_internal_local() - - self.visit(node.expression, scope.children[0]) - self.register_instruction(cil.GetAttribNode(value, node.expression.ret_expr, 'value', 'Bool')) - self.register_instruction(cil.NotNode(neg_value, value)) - self.register_instruction(cil.ArgNode(neg_value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) - - node.ret_expr = ret - - @visitor.when(IsVoidNode) - def visit(self, node, scope): - ############################### - # node.method -> ExpressionNode - ############################### - ret = self.define_internal_local() - answer = self.define_internal_local() - - void = cil.VoidNode() - self.visit(node.expression, scope.children[0]) - self.register_instruction(cil.EqualNode(answer, node.expression.ret_expr, void)) - - self.register_instruction(cil.ArgNode(answer)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) - node.ret_expr = ret - - @visitor.when(ComplementNode) - def visit(self, node, scope): - ############################### - # node.expr -> ExpressionNode - ############################### - ret = self.define_internal_local() - value = self.define_internal_local() - answer = self.define_internal_local() - - self.visit(node.expr, scope) - self.register_instruction(cil.GetAttribNode(value, node.expr.ret_expr, 'value', 'Int')) - self.register_instruction(cil.ComplementNode(answer, value)) - - self.register_instruction(cil.ArgNode(answer)) - self.register_instruction(cil.StaticCallNode(self.init_name('Int'), ret)) - node.ret_expr = ret - - @visitor.when(SwitchCaseNode) - def visit(self, node, scope): - ############################### - # node.expr -> ExpressionNode - # node.case_list = [ (id, type, expr)... ] - ############################### - ret = self.define_internal_local() - vtype = self.define_internal_local() - cond = self.define_internal_local() - - self.visit(node.expr, scope) - self.register_instruction(cil.TypeOfNode(vtype, node.expr.ret_expr)) - - isvoid = self.define_internal_local() - self.register_instruction(cil.EqualNode(isvoid, node.expr.ret_expr, cil.VoidNode())) - self.register_runtime_error(isvoid, 'RuntimeError: void in switch case') - - end_label = self.register_label('case_end_label') - - branch_type = self.define_internal_local() - seen = [] - labels = [] - branches = sorted(node.case_list, key=lambda x: self.context.get_type(x[1]).depth, reverse=True) - # for p, (id, type, expr) in enumerate(branches): - for p, case in enumerate(branches): - id = case[0] - type = case[1] - expr = case[2] - labels.append(self.register_label(f'case_label_{p}')) - - for t in self.context.subtree(type): - if t not in seen: - seen.append(t) - self.register_instruction(cil.NameNode(branch_type, t.name)) - self.register_instruction(cil.EqualNode(cond, branch_type, vtype)) - self.register_instruction(cil.GotoIfNode(cond, labels[-1].label)) - - data = self.register_data('RuntimeError: Case statement without a match branch') - self.register_instruction(cil.ErrorNode(data)) - - for p, label in enumerate(labels): - id = branches[p][0] - type = branches[p][1] - expr = branches[p][2] - # id, type, expr = branches[p] - sc = scope.children[p] - - self.register_instruction(label) - var = self.register_local(VariableInfo(id, vtype)) - self.register_instruction(cil.AssignNode(var, node.expr.ret_expr)) - self.visit(expr, sc) - self.register_instruction(cil.AssignNode(ret, expr.ret_expr)) - self.register_instruction(cil.GotoNode(end_label.label)) - - self.register_instruction(end_label) - node.ret_expr = ret - - # var = self.define_internal_local() - # self.register_instruction(cil.ParentTypeNode(var, obj_type)) - # self.register_instruction(cil.AssignNode(obj_type, var)) - - # self.register_instruction(cil.GotoNode(start_case_label)) - - # self.register_instruction(cil.LabelNode(error_label)) - # self.register_instruction(cil.ParamNode(self.instances[-1])) - # self.regster_instruction(cil.DynamicCallNode(var, self.to_function_name("abort", self.current_type.name), result)) - - # self.register_instruction(cil.GotoNode(end_case_label)) - # return result - - @visitor.when(TrueNode) - def visit(self, node, scope): - ret = self.define_internal_local() - - self.register_instruction(cil.ArgNode(1)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) - node.ret_expr = ret - - @visitor.when(FalseNode) - def visit(self, node, scope): - ret = self.define_internal_local() - - self.register_instruction(cil.ArgNode(0)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) - node.ret_expr = ret - - @visitor.when(StringNode) - def visit(self, node, scope): - try: - data = [i for i in self.dotdata if i.value == node.lex][0] - except IndexError: - data = self.register_data(node.lex[1:-1]) - - variable = self.define_internal_local() - ret = self.define_internal_local() - - self.register_instruction(cil.LoadNode(variable, data)) - self.register_instruction(cil.ArgNode(variable)) - self.register_instruction(cil.StaticCallNode(self.init_name('String'), ret)) - node.ret_expr = ret - - - @visitor.when(LessNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - ret = self.define_internal_local() - left = self.define_internal_local() - right = self.define_internal_local() - value = self.define_internal_local() - - self.visit(node.left, scope) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.visit(node.right, scope) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) - self.register_instruction(cil.LessNode(value, left, right)) - - self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) - - node.ret_expr = ret - - @visitor.when(LeqNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - ret = self.define_internal_local() - left = self.define_internal_local() - right = self.define_internal_local() - value = self.define_internal_local() - - self.visit(node.left, scope) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.visit(node.right, scope) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) - self.register_instruction(cil.LessEqualNode(value, left, right)) - - self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) - - node.ret_expr = ret - - @visitor.when(EqualNode) - def visit(self, node, scope): - ############################### - # node.left -> ExpressionNode - # node.right -> ExpressionNode - ############################### - ret = self.define_internal_local() - left = self.define_internal_local() - right = self.define_internal_local() - type_left = self.define_internal_local() - type_int = self.define_internal_local() - type_string = self.define_internal_local() - type_bool = self.define_internal_local() - equal = self.define_internal_local() - value = self.define_internal_local() - - int_comparisson = self.register_label('int_comparisson') - string_comparisson = self.register_label('string_comparisson') - bool_comparisson = self.register_label('bool_comparisson') - continue_label = self.register_label('continue_label') - - self.visit(node.left, scope) - self.visit(node.right, scope) - - self.register_instruction(cil.TypeOfNode(type_left, node.left.ret_expr)) - self.register_instruction(cil.NameNode(type_int, 'Int')) - self.register_instruction(cil.NameNode(type_string, 'String')) - self.register_instruction(cil.NameNode(type_bool, 'Bool')) - - self.register_instruction(cil.EqualNode(equal, type_left, type_int)) - self.register_instruction(cil.GotoIfNode(equal, int_comparisson.label)) - self.register_instruction(cil.EqualNode(equal, type_left, type_string)) - self.register_instruction(cil.GotoIfNode(equal, string_comparisson.label)) - self.register_instruction(cil.EqualNode(equal, type_left, type_bool)) - self.register_instruction(cil.GotoIfNode(equal, bool_comparisson.label)) - - self.register_instruction(cil.EqualNode(value, node.left.ret_expr, node.right.ret_expr)) - self.register_instruction(cil.GotoNode(continue_label.label)) - - self.register_instruction(int_comparisson) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Int')) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Int')) - self.register_instruction(cil.EqualNode(value, left, right)) - self.register_instruction(cil.GotoNode(continue_label.label)) - - self.register_instruction(string_comparisson) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'String')) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'String')) - self.register_instruction(cil.EqualStringNode(value, left, right)) - self.register_instruction(cil.GotoNode(continue_label.label)) - - self.register_instruction(bool_comparisson) - self.register_instruction(cil.GetAttribNode(left, node.left.ret_expr, 'value', 'Bool')) - self.register_instruction(cil.GetAttribNode(right, node.right.ret_expr, 'value', 'Bool')) - self.register_instruction(cil.EqualNode(value, left, right)) - self.register_instruction(cil.GotoNode(continue_label.label)) - - self.register_instruction(continue_label) - - self.register_instruction(cil.ArgNode(value)) - self.register_instruction(cil.StaticCallNode(self.init_name('Bool'), ret)) - node.ret_expr = ret \ No newline at end of file diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index 87cc00aec..a20bbb01d 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -50,211 +50,211 @@ data_23: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_24: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_25: .asciiz "RuntimeError: Division by zero" +data_25: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_26: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_27: .asciiz "0" +data_27: .asciiz "RuntimeError: Division by zero" .word 0 -data_28: .asciiz "1" +data_28: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_29: .asciiz "2" +data_29: .asciiz "0" .word 0 -data_30: .asciiz "3" +data_30: .asciiz "1" .word 0 -data_31: .asciiz "4" +data_31: .asciiz "2" .word 0 -data_32: .asciiz "5" +data_32: .asciiz "3" .word 0 -data_33: .asciiz "6" +data_33: .asciiz "4" .word 0 -data_34: .asciiz "7" +data_34: .asciiz "5" .word 0 -data_35: .asciiz "8" +data_35: .asciiz "6" .word 0 -data_36: .asciiz "9" +data_36: .asciiz "7" .word 0 -data_37: .asciiz "" +data_37: .asciiz "8" .word 0 data_38: .asciiz "9" .word 0 -data_39: .asciiz "8" +data_39: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_40: .asciiz "7" +data_40: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_41: .asciiz "6" +data_41: .asciiz "" .word 0 -data_42: .asciiz "5" +data_42: .asciiz "9" .word 0 -data_43: .asciiz "4" +data_43: .asciiz "8" .word 0 -data_44: .asciiz "3" +data_44: .asciiz "7" .word 0 -data_45: .asciiz "2" +data_45: .asciiz "6" .word 0 -data_46: .asciiz "1" +data_46: .asciiz "5" .word 0 -data_47: .asciiz "0" +data_47: .asciiz "4" .word 0 -data_48: .asciiz "RuntimeError: Function call in a void instance" +data_48: .asciiz "3" .word 0 -data_49: .asciiz "RuntimeError: Function call in a void instance" +data_49: .asciiz "2" .word 0 -data_50: .asciiz "-" +data_50: .asciiz "1" .word 0 -data_51: .asciiz "RuntimeError: Function call in a void instance" +data_51: .asciiz "0" .word 0 -data_52: .asciiz "+" +data_52: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_53: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_54: .asciiz "RuntimeError: Function call in a void instance" +data_54: .asciiz "-" .word 0 data_55: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_56: .asciiz "RuntimeError: Function call in a void instance" +data_56: .asciiz "+" .word 0 data_57: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_58: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_59: .asciiz "-" +data_59: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_60: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_61: .asciiz "0" +data_61: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_62: .asciiz "RuntimeError: Division by zero" +data_62: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_63: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_64: .asciiz "" +data_64: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_65: .asciiz "\n\tTo add a number to " +data_65: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_66: .asciiz "...enter a:\n" +data_66: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_67: .asciiz "\tTo negate " +data_67: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_68: .asciiz "...enter b:\n" +data_68: .asciiz "-" .word 0 -data_69: .asciiz "\tTo find the difference between " +data_69: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_70: .asciiz "and another number...enter c:\n" +data_70: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_71: .asciiz "\tTo find the factorial of " +data_71: .asciiz "0" .word 0 -data_72: .asciiz "...enter d:\n" +data_72: .asciiz "RuntimeError: Division by zero" .word 0 -data_73: .asciiz "\tTo square " +data_73: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_74: .asciiz "...enter e:\n" +data_74: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_75: .asciiz "\tTo cube " +data_75: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_76: .asciiz "...enter f:\n" +data_76: .asciiz "" .word 0 -data_77: .asciiz "\tTo find out if " +data_77: .asciiz "\n\tTo add a number to " .word 0 -data_78: .asciiz "is a multiple of 3...enter g:\n" +data_78: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_79: .asciiz "\tTo divide " +data_79: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_80: .asciiz "by 8...enter h:\n" +data_80: .asciiz "...enter a:\n" .word 0 -data_81: .asciiz "\tTo get a new number...enter j:\n" +data_81: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_82: .asciiz "\tTo quit...enter q:\n\n" +data_82: .asciiz "\tTo negate " .word 0 -data_83: .asciiz "\n" +data_83: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_84: .asciiz "Please enter a number... " +data_84: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_85: .asciiz "RuntimeError: Function call in a void instance" +data_85: .asciiz "...enter b:\n" .word 0 -data_86: .asciiz "RuntimeError: void in switch case" +data_86: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_87: .asciiz "RuntimeError: Case statement without a match branch" +data_87: .asciiz "\tTo find the difference between " .word 0 -data_88: .asciiz "Class type is now E\n" +data_88: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_89: .asciiz "Class type is now C\n" +data_89: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_90: .asciiz "Class type is now D\n" +data_90: .asciiz "and another number...enter c:\n" .word 0 -data_91: .asciiz "Class type is now B\n" +data_91: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_92: .asciiz "Class type is now A\n" +data_92: .asciiz "\tTo find the factorial of " .word 0 -data_93: .asciiz "Oooops\n" +data_93: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_94: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_95: .asciiz "RuntimeError: Function call in a void instance" +data_95: .asciiz "...enter d:\n" .word 0 -data_96: .asciiz " " +data_96: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_97: .asciiz "number " +data_97: .asciiz "\tTo square " .word 0 data_98: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_99: .asciiz "is odd!\n" +data_99: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_100: .asciiz "is even!\n" +data_100: .asciiz "...enter e:\n" .word 0 -data_101: .asciiz "a" +data_101: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_102: .asciiz "b" +data_102: .asciiz "\tTo cube " .word 0 -data_103: .asciiz "c" +data_103: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_104: .asciiz "d" +data_104: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_105: .asciiz "e" +data_105: .asciiz "...enter f:\n" .word 0 -data_106: .asciiz "f" +data_106: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_107: .asciiz "g" +data_107: .asciiz "\tTo find out if " .word 0 -data_108: .asciiz "h" +data_108: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_109: .asciiz "j" +data_109: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_110: .asciiz "q" +data_110: .asciiz "is a multiple of 3...enter g:\n" .word 0 data_111: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_112: .asciiz "RuntimeError: Function call in a void instance" +data_112: .asciiz "\tTo divide " .word 0 data_113: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_114: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_115: .asciiz "RuntimeError: Function call in a void instance" +data_115: .asciiz "by 8...enter h:\n" .word 0 data_116: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_117: .asciiz "number " +data_117: .asciiz "\tTo get a new number...enter j:\n" .word 0 -data_118: .asciiz "is equal to " +data_118: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_119: .asciiz "times 8 with a remainder of " +data_119: .asciiz "\tTo quit...enter q:\n\n" .word 0 data_120: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_121: .asciiz "\n" +data_121: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_122: .asciiz "RuntimeError: Function call in a void instance" +data_122: .asciiz "\n" .word 0 data_123: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_124: .asciiz "number " +data_124: .asciiz "Please enter a number... " .word 0 -data_125: .asciiz "is not divisible by 3.\n" +data_125: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_126: .asciiz "number " +data_126: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_127: .asciiz "is divisible by 3.\n" +data_127: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_128: .asciiz "RuntimeError: Function call in a void instance" .word 0 @@ -262,33 +262,33 @@ data_129: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_130: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_131: .asciiz "RuntimeError: Function call in a void instance" +data_131: .asciiz "RuntimeError: void in switch case" .word 0 -data_132: .asciiz "RuntimeError: Function call in a void instance" +data_132: .asciiz "RuntimeError: Case statement without a match branch" .word 0 -data_133: .asciiz "RuntimeError: Function call in a void instance" +data_133: .asciiz "Class type is now E\n" .word 0 data_134: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_135: .asciiz "RuntimeError: Function call in a void instance" +data_135: .asciiz "Class type is now C\n" .word 0 data_136: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_137: .asciiz "RuntimeError: Function call in a void instance" +data_137: .asciiz "Class type is now D\n" .word 0 -data_138: .asciiz "RuntimeError: void in switch case" +data_138: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_139: .asciiz "RuntimeError: Case statement without a match branch" +data_139: .asciiz "Class type is now B\n" .word 0 data_140: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_141: .asciiz "RuntimeError: Function call in a void instance" +data_141: .asciiz "Class type is now A\n" .word 0 data_142: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_143: .asciiz "RuntimeError: Function call in a void instance" +data_143: .asciiz "Oooops\n" .word 0 -data_144: .asciiz "Oooops\n" +data_144: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_145: .asciiz "RuntimeError: Function call in a void instance" .word 0 @@ -296,7 +296,161 @@ data_146: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_147: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_148: .asciiz "RuntimeError: Function call in a void instance" +data_148: .asciiz " " +.word 0 +data_149: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_150: .asciiz "number " +.word 0 +data_151: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_152: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_153: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_154: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_155: .asciiz "is odd!\n" +.word 0 +data_156: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_157: .asciiz "is even!\n" +.word 0 +data_158: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_159: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_160: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_161: .asciiz "a" +.word 0 +data_162: .asciiz "b" +.word 0 +data_163: .asciiz "c" +.word 0 +data_164: .asciiz "d" +.word 0 +data_165: .asciiz "e" +.word 0 +data_166: .asciiz "f" +.word 0 +data_167: .asciiz "g" +.word 0 +data_168: .asciiz "h" +.word 0 +data_169: .asciiz "j" +.word 0 +data_170: .asciiz "q" +.word 0 +data_171: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_172: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_173: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_174: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_175: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_176: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_177: .asciiz "number " +.word 0 +data_178: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_179: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_180: .asciiz "is equal to " +.word 0 +data_181: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_182: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_183: .asciiz "times 8 with a remainder of " +.word 0 +data_184: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_185: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_186: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_187: .asciiz "\n" +.word 0 +data_188: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_189: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_190: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_191: .asciiz "number " +.word 0 +data_192: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_193: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_194: .asciiz "is not divisible by 3.\n" +.word 0 +data_195: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_196: .asciiz "number " +.word 0 +data_197: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_198: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_199: .asciiz "is divisible by 3.\n" +.word 0 +data_200: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_201: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_202: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_203: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_204: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_205: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_206: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_207: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_208: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_209: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_210: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_211: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_212: .asciiz "RuntimeError: void in switch case" +.word 0 +data_213: .asciiz "RuntimeError: Case statement without a match branch" +.word 0 +data_214: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_215: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_216: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_217: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_218: .asciiz "Oooops\n" +.word 0 +data_219: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_220: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_221: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_222: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_223: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_224: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_225: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -1957,356 +2111,370 @@ function_method7_at_D: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -232 + addi $sp $sp -240 lw $t0 0($fp) - sw $t0 -236($fp) - lw $t0 -236($fp) + sw $t0 -244($fp) + lw $t0 -244($fp) lw $t1 12($t0) - sw $t1 -220($fp) + sw $t1 -228($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -208($fp) - lw $t0 -208($fp) + sw $v0 -216($fp) + lw $t0 -216($fp) lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - lw $t1 -216($fp) + sw $t1 -224($fp) + lw $t0 -228($fp) + lw $t1 -224($fp) slt $t1 $t0 $t1 - sw $t1 -212($fp) - lw $t0 -212($fp) + sw $t1 -220($fp) + lw $t0 -220($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -224($fp) - lw $t0 -224($fp) + sw $v0 -232($fp) + lw $t0 -232($fp) lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_42 + sw $t1 -236($fp) + lw $t0 -236($fp) + bne $t0 $zero label_44 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -160($fp) + sw $v0 -168($fp) + lw $t0 -168($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -184($fp) + sw $t1 -192($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -180($fp) + sw $t0 -188($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -176($fp) + sw $t0 -184($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -172($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) + sw $t0 -180($fp) + lw $t0 -192($fp) + lw $t1 -188($fp) seq $t0 $t0 $t1 - sw $t0 -168($fp) - lw $t0 -168($fp) + sw $t0 -176($fp) + lw $t0 -176($fp) bne $t0 $zero label_24 - lw $t0 -184($fp) - lw $t1 -176($fp) + lw $t0 -192($fp) + lw $t1 -184($fp) seq $t0 $t0 $t1 - sw $t0 -168($fp) - lw $t0 -168($fp) + sw $t0 -176($fp) + lw $t0 -176($fp) bne $t0 $zero label_25 - lw $t0 -184($fp) - lw $t1 -172($fp) + lw $t0 -192($fp) + lw $t1 -180($fp) seq $t0 $t0 $t1 - sw $t0 -168($fp) - lw $t0 -168($fp) + sw $t0 -176($fp) + lw $t0 -176($fp) bne $t0 $zero label_26 - lw $t0 -160($fp) - lw $t1 -236($fp) + lw $t0 -168($fp) + lw $t1 -244($fp) seq $t0 $t0 $t1 - sw $t0 -164($fp) + sw $t0 -172($fp) j label_27 label_24: - lw $t0 -160($fp) + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -236($fp) + sw $t1 -200($fp) + lw $t0 -244($fp) lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) seq $t0 $t0 $t1 - sw $t0 -164($fp) + sw $t0 -172($fp) j label_27 label_25: - lw $t0 -160($fp) + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -236($fp) + sw $t1 -200($fp) + lw $t0 -244($fp) lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -192($fp) + sw $t1 -196($fp) + lw $t0 -200($fp) move $a0 $t0 - lw $t0 -188($fp) + lw $t0 -196($fp) move $a1 $t0 jal equal_str - sw $v0 -164($fp) + sw $v0 -172($fp) j label_27 label_26: - lw $t0 -160($fp) + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -236($fp) + sw $t1 -200($fp) + lw $t0 -244($fp) lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) seq $t0 $t0 $t1 - sw $t0 -164($fp) + sw $t0 -172($fp) j label_27 label_27: - lw $t0 -164($fp) + lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -196($fp) - lw $t0 -196($fp) + sw $v0 -204($fp) + lw $t0 -204($fp) lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -200($fp) - bne $t0 $zero label_40 + sw $t1 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_42 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) + sw $v0 -120($fp) + lw $t0 -120($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -136($fp) + sw $t1 -144($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -132($fp) + sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -128($fp) + sw $t0 -136($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -124($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) bne $t0 $zero label_28 - lw $t0 -136($fp) - lw $t1 -128($fp) + lw $t0 -144($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) bne $t0 $zero label_29 - lw $t0 -136($fp) - lw $t1 -124($fp) + lw $t0 -144($fp) + lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) bne $t0 $zero label_30 - lw $t0 -112($fp) - lw $t1 -236($fp) + lw $t0 -120($fp) + lw $t1 -244($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) + sw $t0 -124($fp) j label_31 label_28: - lw $t0 -112($fp) + lw $t0 -120($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -236($fp) + sw $t1 -152($fp) + lw $t0 -244($fp) lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) + sw $t0 -124($fp) j label_31 label_29: - lw $t0 -112($fp) + lw $t0 -120($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -236($fp) + sw $t1 -152($fp) + lw $t0 -244($fp) lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) move $a0 $t0 - lw $t0 -140($fp) + lw $t0 -148($fp) move $a1 $t0 jal equal_str - sw $v0 -116($fp) + sw $v0 -124($fp) j label_31 label_30: - lw $t0 -112($fp) + lw $t0 -120($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -236($fp) + sw $t1 -152($fp) + lw $t0 -244($fp) lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) + sw $t0 -124($fp) j label_31 label_31: - lw $t0 -116($fp) + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) + sw $v0 -156($fp) + lw $t0 -156($fp) lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -152($fp) - bne $t0 $zero label_38 + sw $t1 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_40 li $t0 2 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) + sw $v0 -72($fp) + lw $t0 -72($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -88($fp) + sw $t1 -96($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -84($fp) + sw $t0 -92($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -80($fp) + sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -76($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) + sw $t0 -84($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) + sw $t0 -80($fp) + lw $t0 -80($fp) bne $t0 $zero label_32 - lw $t0 -88($fp) - lw $t1 -80($fp) + lw $t0 -96($fp) + lw $t1 -88($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) + sw $t0 -80($fp) + lw $t0 -80($fp) bne $t0 $zero label_33 - lw $t0 -88($fp) - lw $t1 -76($fp) + lw $t0 -96($fp) + lw $t1 -84($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) + sw $t0 -80($fp) + lw $t0 -80($fp) bne $t0 $zero label_34 - lw $t0 -64($fp) - lw $t1 -236($fp) + lw $t0 -72($fp) + lw $t1 -244($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) + sw $t0 -76($fp) j label_35 label_32: - lw $t0 -64($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -236($fp) + sw $t1 -104($fp) + lw $t0 -244($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -100($fp) + lw $t0 -104($fp) + lw $t1 -100($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) + sw $t0 -76($fp) j label_35 label_33: - lw $t0 -64($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -236($fp) + sw $t1 -104($fp) + lw $t0 -244($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) + sw $t1 -100($fp) + lw $t0 -104($fp) move $a0 $t0 - lw $t0 -92($fp) + lw $t0 -100($fp) move $a1 $t0 jal equal_str - sw $v0 -68($fp) + sw $v0 -76($fp) j label_35 label_34: - lw $t0 -64($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -236($fp) + sw $t1 -104($fp) + lw $t0 -244($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -100($fp) + lw $t0 -104($fp) + lw $t1 -100($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) + sw $t0 -76($fp) j label_35 label_35: - lw $t0 -68($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) + sw $v0 -108($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_36 - lw $t0 -236($fp) + sw $t1 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_38 + lw $t0 -244($fp) lw $t1 12($t0) - sw $t1 -52($fp) + sw $t1 -64($fp) li $t0 3 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - lw $t1 12($t0) - sw $t1 -48($fp) + sw $v0 -52($fp) lw $t0 -52($fp) - lw $t1 -48($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) sub $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) + sw $t0 -56($fp) + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -56($fp) + sw $v0 -68($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_36 + j label_37 + label_36: + li $v0 4 + la $a0 data_25 + syscall + li $v0 10 + syscall + label_37: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -56($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -2318,22 +2486,9 @@ function_method7_at_D: lw $t0 40($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -108($fp) - j label_37 - label_36: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -108($fp) - label_37: - lw $t0 -108($fp) - sw $t0 -156($fp) + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -116($fp) j label_39 label_38: li $t0 0 @@ -2341,44 +2496,71 @@ function_method7_at_D: sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -156($fp) + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -116($fp) label_39: - lw $t0 -156($fp) - sw $t0 -204($fp) + lw $t0 -116($fp) + sw $t0 -164($fp) j label_41 label_40: - li $t0 1 + li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -204($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -164($fp) label_41: - lw $t0 -204($fp) - sw $t0 -232($fp) + lw $t0 -164($fp) + sw $t0 -212($fp) j label_43 label_42: - lw $t0 -236($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -212($fp) + label_43: + lw $t0 -212($fp) + sw $t0 -240($fp) + j label_47 + label_44: + lw $t0 -244($fp) lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) + sw $t1 -24($fp) + lw $t0 -24($fp) not $t0 $t0 addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) + sw $t0 -20($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -20($fp) + sw $v0 -28($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_45 + j label_46 + label_45: + li $v0 4 + la $a0 data_26 + syscall + li $v0 10 + syscall + label_46: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -20($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -2390,12 +2572,12 @@ function_method7_at_D: lw $t0 40($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -232($fp) - label_43: - lw $v0 -232($fp) - addi $sp $sp 232 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -240($fp) + label_47: + lw $v0 -240($fp) + addi $sp $sp 240 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2496,15 +2678,15 @@ function_method6_at_E: seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_44 - j label_45 - label_44: + bne $t0 $zero label_48 + j label_49 + label_48: li $v0 4 - la $a0 data_25 + la $a0 data_27 syscall li $v0 10 syscall - label_45: + label_49: lw $t0 -40($fp) lw $t1 -36($fp) div $t0 $t1 @@ -2525,15 +2707,15 @@ function_method6_at_E: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_46 - j label_47 - label_46: + bne $t0 $zero label_50 + j label_51 + label_50: li $v0 4 - la $a0 data_26 + la $a0 data_28 syscall li $v0 10 syscall - label_47: + label_51: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2613,1007 +2795,1021 @@ function_c2i_at_A2I: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -568 - la $t0 data_27 - sw $t0 -532($fp) - lw $t0 -532($fp) + addi $sp $sp -572 + la $t0 data_29 + sw $t0 -536($fp) + lw $t0 -536($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -528($fp) + sw $v0 -532($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -556($fp) + sw $t1 -560($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -552($fp) + sw $t0 -556($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -548($fp) + sw $t0 -552($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -548($fp) + lw $t0 -560($fp) + lw $t1 -556($fp) + seq $t0 $t0 $t1 sw $t0 -544($fp) - lw $t0 -556($fp) + lw $t0 -544($fp) + bne $t0 $zero label_52 + lw $t0 -560($fp) lw $t1 -552($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) - bne $t0 $zero label_48 - lw $t0 -556($fp) + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_53 + lw $t0 -560($fp) lw $t1 -548($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) - bne $t0 $zero label_49 - lw $t0 -556($fp) - lw $t1 -544($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) - bne $t0 $zero label_50 + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_54 lw $t0 0($fp) - lw $t1 -528($fp) + lw $t1 -532($fp) seq $t0 $t0 $t1 - sw $t0 -536($fp) - j label_51 - label_48: + sw $t0 -540($fp) + j label_55 + label_52: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -528($fp) + sw $t1 -568($fp) + lw $t0 -532($fp) lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) + sw $t1 -564($fp) + lw $t0 -568($fp) + lw $t1 -564($fp) seq $t0 $t0 $t1 - sw $t0 -536($fp) - j label_51 - label_49: + sw $t0 -540($fp) + j label_55 + label_53: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -528($fp) + sw $t1 -568($fp) + lw $t0 -532($fp) lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) + sw $t1 -564($fp) + lw $t0 -568($fp) move $a0 $t0 - lw $t0 -560($fp) + lw $t0 -564($fp) move $a1 $t0 jal equal_str - sw $v0 -536($fp) - j label_51 - label_50: + sw $v0 -540($fp) + j label_55 + label_54: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -528($fp) + sw $t1 -568($fp) + lw $t0 -532($fp) lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) + sw $t1 -564($fp) + lw $t0 -568($fp) + lw $t1 -564($fp) seq $t0 $t0 $t1 - sw $t0 -536($fp) - j label_51 - label_51: - lw $t0 -536($fp) + sw $t0 -540($fp) + j label_55 + label_55: + lw $t0 -540($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -568($fp) - lw $t0 -568($fp) - lw $t1 12($t0) - sw $t1 -572($fp) + sw $v0 -572($fp) lw $t0 -572($fp) - bne $t0 $zero label_106 - la $t0 data_28 - sw $t0 -480($fp) - lw $t0 -480($fp) + lw $t1 12($t0) + sw $t1 -576($fp) + lw $t0 -576($fp) + bne $t0 $zero label_112 + la $t0 data_30 + sw $t0 -484($fp) + lw $t0 -484($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -476($fp) + sw $v0 -480($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -504($fp) + sw $t1 -508($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -500($fp) + sw $t0 -504($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -496($fp) + sw $t0 -500($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -496($fp) + lw $t0 -508($fp) + lw $t1 -504($fp) + seq $t0 $t0 $t1 sw $t0 -492($fp) - lw $t0 -504($fp) + lw $t0 -492($fp) + bne $t0 $zero label_56 + lw $t0 -508($fp) lw $t1 -500($fp) seq $t0 $t0 $t1 - sw $t0 -488($fp) - lw $t0 -488($fp) - bne $t0 $zero label_52 - lw $t0 -504($fp) + sw $t0 -492($fp) + lw $t0 -492($fp) + bne $t0 $zero label_57 + lw $t0 -508($fp) lw $t1 -496($fp) seq $t0 $t0 $t1 - sw $t0 -488($fp) - lw $t0 -488($fp) - bne $t0 $zero label_53 - lw $t0 -504($fp) - lw $t1 -492($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - lw $t0 -488($fp) - bne $t0 $zero label_54 + sw $t0 -492($fp) + lw $t0 -492($fp) + bne $t0 $zero label_58 lw $t0 0($fp) - lw $t1 -476($fp) + lw $t1 -480($fp) seq $t0 $t0 $t1 - sw $t0 -484($fp) - j label_55 - label_52: + sw $t0 -488($fp) + j label_59 + label_56: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -476($fp) + sw $t1 -516($fp) + lw $t0 -480($fp) lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -512($fp) - lw $t1 -508($fp) + sw $t1 -512($fp) + lw $t0 -516($fp) + lw $t1 -512($fp) seq $t0 $t0 $t1 - sw $t0 -484($fp) - j label_55 - label_53: + sw $t0 -488($fp) + j label_59 + label_57: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -476($fp) + sw $t1 -516($fp) + lw $t0 -480($fp) lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -512($fp) + sw $t1 -512($fp) + lw $t0 -516($fp) move $a0 $t0 - lw $t0 -508($fp) + lw $t0 -512($fp) move $a1 $t0 jal equal_str - sw $v0 -484($fp) - j label_55 - label_54: + sw $v0 -488($fp) + j label_59 + label_58: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -476($fp) + sw $t1 -516($fp) + lw $t0 -480($fp) lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -512($fp) - lw $t1 -508($fp) + sw $t1 -512($fp) + lw $t0 -516($fp) + lw $t1 -512($fp) seq $t0 $t0 $t1 - sw $t0 -484($fp) - j label_55 - label_55: - lw $t0 -484($fp) + sw $t0 -488($fp) + j label_59 + label_59: + lw $t0 -488($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -516($fp) - lw $t0 -516($fp) - lw $t1 12($t0) - sw $t1 -520($fp) + sw $v0 -520($fp) lw $t0 -520($fp) - bne $t0 $zero label_104 - la $t0 data_29 - sw $t0 -428($fp) - lw $t0 -428($fp) + lw $t1 12($t0) + sw $t1 -524($fp) + lw $t0 -524($fp) + bne $t0 $zero label_110 + la $t0 data_31 + sw $t0 -432($fp) + lw $t0 -432($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -424($fp) + sw $v0 -428($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -452($fp) + sw $t1 -456($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -448($fp) + sw $t0 -452($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -444($fp) + sw $t0 -448($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -444($fp) + lw $t0 -456($fp) + lw $t1 -452($fp) + seq $t0 $t0 $t1 sw $t0 -440($fp) - lw $t0 -452($fp) + lw $t0 -440($fp) + bne $t0 $zero label_60 + lw $t0 -456($fp) lw $t1 -448($fp) seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_56 - lw $t0 -452($fp) + sw $t0 -440($fp) + lw $t0 -440($fp) + bne $t0 $zero label_61 + lw $t0 -456($fp) lw $t1 -444($fp) seq $t0 $t0 $t1 + sw $t0 -440($fp) + lw $t0 -440($fp) + bne $t0 $zero label_62 + lw $t0 0($fp) + lw $t1 -428($fp) + seq $t0 $t0 $t1 sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_57 - lw $t0 -452($fp) - lw $t1 -440($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_58 - lw $t0 0($fp) - lw $t1 -424($fp) - seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_59 - label_56: + j label_63 + label_60: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -424($fp) + sw $t1 -464($fp) + lw $t0 -428($fp) lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - lw $t1 -456($fp) + sw $t1 -460($fp) + lw $t0 -464($fp) + lw $t1 -460($fp) seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_59 - label_57: + sw $t0 -436($fp) + j label_63 + label_61: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -424($fp) + sw $t1 -464($fp) + lw $t0 -428($fp) lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) + sw $t1 -460($fp) + lw $t0 -464($fp) move $a0 $t0 - lw $t0 -456($fp) + lw $t0 -460($fp) move $a1 $t0 jal equal_str - sw $v0 -432($fp) - j label_59 - label_58: + sw $v0 -436($fp) + j label_63 + label_62: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -424($fp) + sw $t1 -464($fp) + lw $t0 -428($fp) lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - lw $t1 -456($fp) + sw $t1 -460($fp) + lw $t0 -464($fp) + lw $t1 -460($fp) seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_59 - label_59: - lw $t0 -432($fp) + sw $t0 -436($fp) + j label_63 + label_63: + lw $t0 -436($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -464($fp) - lw $t0 -464($fp) - lw $t1 12($t0) - sw $t1 -468($fp) + sw $v0 -468($fp) lw $t0 -468($fp) - bne $t0 $zero label_102 - la $t0 data_30 - sw $t0 -376($fp) - lw $t0 -376($fp) + lw $t1 12($t0) + sw $t1 -472($fp) + lw $t0 -472($fp) + bne $t0 $zero label_108 + la $t0 data_32 + sw $t0 -380($fp) + lw $t0 -380($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -372($fp) + sw $v0 -376($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -400($fp) + sw $t1 -404($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -396($fp) + sw $t0 -400($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -392($fp) + sw $t0 -396($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -392($fp) + lw $t0 -404($fp) + lw $t1 -400($fp) + seq $t0 $t0 $t1 sw $t0 -388($fp) - lw $t0 -400($fp) + lw $t0 -388($fp) + bne $t0 $zero label_64 + lw $t0 -404($fp) lw $t1 -396($fp) seq $t0 $t0 $t1 - sw $t0 -384($fp) - lw $t0 -384($fp) - bne $t0 $zero label_60 - lw $t0 -400($fp) + sw $t0 -388($fp) + lw $t0 -388($fp) + bne $t0 $zero label_65 + lw $t0 -404($fp) lw $t1 -392($fp) seq $t0 $t0 $t1 - sw $t0 -384($fp) - lw $t0 -384($fp) - bne $t0 $zero label_61 - lw $t0 -400($fp) - lw $t1 -388($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - lw $t0 -384($fp) - bne $t0 $zero label_62 + sw $t0 -388($fp) + lw $t0 -388($fp) + bne $t0 $zero label_66 lw $t0 0($fp) - lw $t1 -372($fp) + lw $t1 -376($fp) seq $t0 $t0 $t1 - sw $t0 -380($fp) - j label_63 - label_60: + sw $t0 -384($fp) + j label_67 + label_64: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -372($fp) + sw $t1 -412($fp) + lw $t0 -376($fp) lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -408($fp) - lw $t1 -404($fp) + sw $t1 -408($fp) + lw $t0 -412($fp) + lw $t1 -408($fp) seq $t0 $t0 $t1 - sw $t0 -380($fp) - j label_63 - label_61: + sw $t0 -384($fp) + j label_67 + label_65: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -372($fp) + sw $t1 -412($fp) + lw $t0 -376($fp) lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -408($fp) + sw $t1 -408($fp) + lw $t0 -412($fp) move $a0 $t0 - lw $t0 -404($fp) + lw $t0 -408($fp) move $a1 $t0 jal equal_str - sw $v0 -380($fp) - j label_63 - label_62: + sw $v0 -384($fp) + j label_67 + label_66: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -372($fp) + sw $t1 -412($fp) + lw $t0 -376($fp) lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -408($fp) - lw $t1 -404($fp) + sw $t1 -408($fp) + lw $t0 -412($fp) + lw $t1 -408($fp) seq $t0 $t0 $t1 - sw $t0 -380($fp) - j label_63 - label_63: - lw $t0 -380($fp) + sw $t0 -384($fp) + j label_67 + label_67: + lw $t0 -384($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -412($fp) - lw $t0 -412($fp) - lw $t1 12($t0) - sw $t1 -416($fp) + sw $v0 -416($fp) lw $t0 -416($fp) - bne $t0 $zero label_100 - la $t0 data_31 - sw $t0 -324($fp) - lw $t0 -324($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -420($fp) + bne $t0 $zero label_106 + la $t0 data_33 + sw $t0 -328($fp) + lw $t0 -328($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -320($fp) + sw $v0 -324($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -348($fp) + sw $t1 -352($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -344($fp) + sw $t0 -348($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -340($fp) + sw $t0 -344($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -340($fp) + lw $t0 -352($fp) + lw $t1 -348($fp) + seq $t0 $t0 $t1 sw $t0 -336($fp) - lw $t0 -348($fp) + lw $t0 -336($fp) + bne $t0 $zero label_68 + lw $t0 -352($fp) lw $t1 -344($fp) seq $t0 $t0 $t1 - sw $t0 -332($fp) - lw $t0 -332($fp) - bne $t0 $zero label_64 - lw $t0 -348($fp) + sw $t0 -336($fp) + lw $t0 -336($fp) + bne $t0 $zero label_69 + lw $t0 -352($fp) lw $t1 -340($fp) seq $t0 $t0 $t1 - sw $t0 -332($fp) - lw $t0 -332($fp) - bne $t0 $zero label_65 - lw $t0 -348($fp) - lw $t1 -336($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - lw $t0 -332($fp) - bne $t0 $zero label_66 + sw $t0 -336($fp) + lw $t0 -336($fp) + bne $t0 $zero label_70 lw $t0 0($fp) - lw $t1 -320($fp) + lw $t1 -324($fp) seq $t0 $t0 $t1 - sw $t0 -328($fp) - j label_67 - label_64: + sw $t0 -332($fp) + j label_71 + label_68: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -320($fp) + sw $t1 -360($fp) + lw $t0 -324($fp) lw $t1 12($t0) - sw $t1 -352($fp) - lw $t0 -356($fp) - lw $t1 -352($fp) + sw $t1 -356($fp) + lw $t0 -360($fp) + lw $t1 -356($fp) seq $t0 $t0 $t1 - sw $t0 -328($fp) - j label_67 - label_65: + sw $t0 -332($fp) + j label_71 + label_69: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -320($fp) + sw $t1 -360($fp) + lw $t0 -324($fp) lw $t1 12($t0) - sw $t1 -352($fp) - lw $t0 -356($fp) + sw $t1 -356($fp) + lw $t0 -360($fp) move $a0 $t0 - lw $t0 -352($fp) + lw $t0 -356($fp) move $a1 $t0 jal equal_str - sw $v0 -328($fp) - j label_67 - label_66: + sw $v0 -332($fp) + j label_71 + label_70: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -320($fp) + sw $t1 -360($fp) + lw $t0 -324($fp) lw $t1 12($t0) - sw $t1 -352($fp) - lw $t0 -356($fp) - lw $t1 -352($fp) + sw $t1 -356($fp) + lw $t0 -360($fp) + lw $t1 -356($fp) seq $t0 $t0 $t1 - sw $t0 -328($fp) - j label_67 - label_67: - lw $t0 -328($fp) + sw $t0 -332($fp) + j label_71 + label_71: + lw $t0 -332($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -360($fp) - lw $t0 -360($fp) - lw $t1 12($t0) - sw $t1 -364($fp) + sw $v0 -364($fp) lw $t0 -364($fp) - bne $t0 $zero label_98 - la $t0 data_32 - sw $t0 -272($fp) - lw $t0 -272($fp) + lw $t1 12($t0) + sw $t1 -368($fp) + lw $t0 -368($fp) + bne $t0 $zero label_104 + la $t0 data_34 + sw $t0 -276($fp) + lw $t0 -276($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -268($fp) + sw $v0 -272($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -296($fp) + sw $t1 -300($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -292($fp) + sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -288($fp) + sw $t0 -292($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -288($fp) + lw $t0 -300($fp) + lw $t1 -296($fp) + seq $t0 $t0 $t1 sw $t0 -284($fp) - lw $t0 -296($fp) + lw $t0 -284($fp) + bne $t0 $zero label_72 + lw $t0 -300($fp) lw $t1 -292($fp) seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_68 - lw $t0 -296($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_73 + lw $t0 -300($fp) lw $t1 -288($fp) seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_69 - lw $t0 -296($fp) - lw $t1 -284($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_70 + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_74 lw $t0 0($fp) - lw $t1 -268($fp) + lw $t1 -272($fp) seq $t0 $t0 $t1 - sw $t0 -276($fp) - j label_71 - label_68: + sw $t0 -280($fp) + j label_75 + label_72: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -268($fp) + sw $t1 -308($fp) + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -304($fp) - lw $t1 -300($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) seq $t0 $t0 $t1 - sw $t0 -276($fp) - j label_71 - label_69: + sw $t0 -280($fp) + j label_75 + label_73: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -268($fp) + sw $t1 -308($fp) + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -304($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) move $a0 $t0 - lw $t0 -300($fp) + lw $t0 -304($fp) move $a1 $t0 jal equal_str - sw $v0 -276($fp) - j label_71 - label_70: + sw $v0 -280($fp) + j label_75 + label_74: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -268($fp) + sw $t1 -308($fp) + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -304($fp) - lw $t1 -300($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) seq $t0 $t0 $t1 - sw $t0 -276($fp) - j label_71 - label_71: - lw $t0 -276($fp) + sw $t0 -280($fp) + j label_75 + label_75: + lw $t0 -280($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -308($fp) - lw $t0 -308($fp) - lw $t1 12($t0) - sw $t1 -312($fp) + sw $v0 -312($fp) lw $t0 -312($fp) - bne $t0 $zero label_96 - la $t0 data_33 - sw $t0 -220($fp) - lw $t0 -220($fp) + lw $t1 12($t0) + sw $t1 -316($fp) + lw $t0 -316($fp) + bne $t0 $zero label_102 + la $t0 data_35 + sw $t0 -224($fp) + lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -216($fp) + sw $v0 -220($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -244($fp) + sw $t1 -248($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -240($fp) + sw $t0 -244($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -236($fp) + sw $t0 -240($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -236($fp) + lw $t0 -248($fp) + lw $t1 -244($fp) + seq $t0 $t0 $t1 sw $t0 -232($fp) - lw $t0 -244($fp) + lw $t0 -232($fp) + bne $t0 $zero label_76 + lw $t0 -248($fp) lw $t1 -240($fp) seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_72 - lw $t0 -244($fp) + sw $t0 -232($fp) + lw $t0 -232($fp) + bne $t0 $zero label_77 + lw $t0 -248($fp) lw $t1 -236($fp) seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_73 - lw $t0 -244($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_74 + sw $t0 -232($fp) + lw $t0 -232($fp) + bne $t0 $zero label_78 lw $t0 0($fp) - lw $t1 -216($fp) + lw $t1 -220($fp) seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_75 - label_72: + sw $t0 -228($fp) + j label_79 + label_76: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -216($fp) + sw $t1 -256($fp) + lw $t0 -220($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) + sw $t1 -252($fp) + lw $t0 -256($fp) + lw $t1 -252($fp) seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_75 - label_73: + sw $t0 -228($fp) + j label_79 + label_77: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -216($fp) + sw $t1 -256($fp) + lw $t0 -220($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) + sw $t1 -252($fp) + lw $t0 -256($fp) move $a0 $t0 - lw $t0 -248($fp) + lw $t0 -252($fp) move $a1 $t0 jal equal_str - sw $v0 -224($fp) - j label_75 - label_74: + sw $v0 -228($fp) + j label_79 + label_78: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -216($fp) + sw $t1 -256($fp) + lw $t0 -220($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) + sw $t1 -252($fp) + lw $t0 -256($fp) + lw $t1 -252($fp) seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_75 - label_75: - lw $t0 -224($fp) + sw $t0 -228($fp) + j label_79 + label_79: + lw $t0 -228($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -260($fp) + sw $v0 -260($fp) lw $t0 -260($fp) - bne $t0 $zero label_94 - la $t0 data_34 - sw $t0 -168($fp) - lw $t0 -168($fp) + lw $t1 12($t0) + sw $t1 -264($fp) + lw $t0 -264($fp) + bne $t0 $zero label_100 + la $t0 data_36 + sw $t0 -172($fp) + lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -164($fp) + sw $v0 -168($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -192($fp) + sw $t1 -196($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -188($fp) + sw $t0 -192($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -184($fp) + sw $t0 -188($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -184($fp) + lw $t0 -196($fp) + lw $t1 -192($fp) + seq $t0 $t0 $t1 sw $t0 -180($fp) - lw $t0 -192($fp) + lw $t0 -180($fp) + bne $t0 $zero label_80 + lw $t0 -196($fp) lw $t1 -188($fp) seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_76 - lw $t0 -192($fp) + sw $t0 -180($fp) + lw $t0 -180($fp) + bne $t0 $zero label_81 + lw $t0 -196($fp) lw $t1 -184($fp) seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_77 - lw $t0 -192($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_78 + sw $t0 -180($fp) + lw $t0 -180($fp) + bne $t0 $zero label_82 lw $t0 0($fp) - lw $t1 -164($fp) + lw $t1 -168($fp) seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_79 - label_76: + sw $t0 -176($fp) + j label_83 + label_80: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -164($fp) + sw $t1 -204($fp) + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) + sw $t1 -200($fp) + lw $t0 -204($fp) + lw $t1 -200($fp) seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_79 - label_77: + sw $t0 -176($fp) + j label_83 + label_81: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -164($fp) + sw $t1 -204($fp) + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) + sw $t1 -200($fp) + lw $t0 -204($fp) move $a0 $t0 - lw $t0 -196($fp) + lw $t0 -200($fp) move $a1 $t0 jal equal_str - sw $v0 -172($fp) - j label_79 - label_78: + sw $v0 -176($fp) + j label_83 + label_82: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -164($fp) + sw $t1 -204($fp) + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) + sw $t1 -200($fp) + lw $t0 -204($fp) + lw $t1 -200($fp) seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_79 - label_79: - lw $t0 -172($fp) + sw $t0 -176($fp) + j label_83 + label_83: + lw $t0 -176($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) + sw $v0 -208($fp) lw $t0 -208($fp) - bne $t0 $zero label_92 - la $t0 data_35 - sw $t0 -116($fp) - lw $t0 -116($fp) + lw $t1 12($t0) + sw $t1 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_98 + la $t0 data_37 + sw $t0 -120($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -112($fp) + sw $v0 -116($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -140($fp) + sw $t1 -144($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -136($fp) + sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -132($fp) + sw $t0 -136($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -132($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) + seq $t0 $t0 $t1 sw $t0 -128($fp) - lw $t0 -140($fp) + lw $t0 -128($fp) + bne $t0 $zero label_84 + lw $t0 -144($fp) lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_80 - lw $t0 -140($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_85 + lw $t0 -144($fp) lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_81 - lw $t0 -140($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_82 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_86 lw $t0 0($fp) - lw $t1 -112($fp) + lw $t1 -116($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_83 - label_80: + sw $t0 -124($fp) + j label_87 + label_84: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -112($fp) + sw $t1 -152($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_83 - label_81: + sw $t0 -124($fp) + j label_87 + label_85: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -112($fp) + sw $t1 -152($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) move $a0 $t0 - lw $t0 -144($fp) + lw $t0 -148($fp) move $a1 $t0 jal equal_str - sw $v0 -120($fp) - j label_83 - label_82: + sw $v0 -124($fp) + j label_87 + label_86: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -112($fp) + sw $t1 -152($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_83 - label_83: - lw $t0 -120($fp) + sw $t0 -124($fp) + j label_87 + label_87: + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -156($fp) + sw $v0 -156($fp) lw $t0 -156($fp) - bne $t0 $zero label_90 - la $t0 data_36 - sw $t0 -64($fp) - lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_96 + la $t0 data_38 + sw $t0 -68($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -60($fp) + sw $v0 -64($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -88($fp) + sw $t1 -92($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -84($fp) + sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -80($fp) + sw $t0 -84($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -80($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + seq $t0 $t0 $t1 sw $t0 -76($fp) - lw $t0 -88($fp) + lw $t0 -76($fp) + bne $t0 $zero label_88 + lw $t0 -92($fp) lw $t1 -84($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_84 - lw $t0 -88($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_89 + lw $t0 -92($fp) lw $t1 -80($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_85 - lw $t0 -88($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_86 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_90 lw $t0 0($fp) - lw $t1 -60($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_87 - label_84: + sw $t0 -72($fp) + j label_91 + label_88: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_87 - label_85: + sw $t0 -72($fp) + j label_91 + label_89: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) move $a0 $t0 - lw $t0 -92($fp) + lw $t0 -96($fp) move $a1 $t0 jal equal_str - sw $v0 -68($fp) - j label_87 - label_86: + sw $v0 -72($fp) + j label_91 + label_90: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_87 - label_87: - lw $t0 -68($fp) + sw $t0 -72($fp) + j label_91 + label_91: + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) + sw $v0 -104($fp) lw $t0 -104($fp) - bne $t0 $zero label_88 + lw $t1 12($t0) + sw $t1 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_94 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_92 + j label_93 + label_92: + li $v0 4 + la $a0 data_39 + syscall + li $v0 10 + syscall + label_93: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -3634,9 +3830,9 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) - sw $t0 -108($fp) - j label_89 - label_88: + sw $t0 -112($fp) + j label_95 + label_94: li $t0 9 addi $sp $sp -4 sw $t0 0($sp) @@ -3644,12 +3840,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -48($fp) lw $t0 -48($fp) - sw $t0 -108($fp) - label_89: - lw $t0 -108($fp) - sw $t0 -160($fp) - j label_91 - label_90: + sw $t0 -112($fp) + label_95: + lw $t0 -112($fp) + sw $t0 -164($fp) + j label_97 + label_96: li $t0 8 addi $sp $sp -4 sw $t0 0($sp) @@ -3657,12 +3853,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) - sw $t0 -160($fp) - label_91: - lw $t0 -160($fp) - sw $t0 -212($fp) - j label_93 - label_92: + sw $t0 -164($fp) + label_97: + lw $t0 -164($fp) + sw $t0 -216($fp) + j label_99 + label_98: li $t0 7 addi $sp $sp -4 sw $t0 0($sp) @@ -3670,12 +3866,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -40($fp) lw $t0 -40($fp) - sw $t0 -212($fp) - label_93: - lw $t0 -212($fp) - sw $t0 -264($fp) - j label_95 - label_94: + sw $t0 -216($fp) + label_99: + lw $t0 -216($fp) + sw $t0 -268($fp) + j label_101 + label_100: li $t0 6 addi $sp $sp -4 sw $t0 0($sp) @@ -3683,12 +3879,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) - sw $t0 -264($fp) - label_95: - lw $t0 -264($fp) - sw $t0 -316($fp) - j label_97 - label_96: + sw $t0 -268($fp) + label_101: + lw $t0 -268($fp) + sw $t0 -320($fp) + j label_103 + label_102: li $t0 5 addi $sp $sp -4 sw $t0 0($sp) @@ -3696,12 +3892,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) - sw $t0 -316($fp) - label_97: - lw $t0 -316($fp) - sw $t0 -368($fp) - j label_99 - label_98: + sw $t0 -320($fp) + label_103: + lw $t0 -320($fp) + sw $t0 -372($fp) + j label_105 + label_104: li $t0 4 addi $sp $sp -4 sw $t0 0($sp) @@ -3709,12 +3905,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) - sw $t0 -368($fp) - label_99: - lw $t0 -368($fp) - sw $t0 -420($fp) - j label_101 - label_100: + sw $t0 -372($fp) + label_105: + lw $t0 -372($fp) + sw $t0 -424($fp) + j label_107 + label_106: li $t0 3 addi $sp $sp -4 sw $t0 0($sp) @@ -3722,12 +3918,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -24($fp) lw $t0 -24($fp) - sw $t0 -420($fp) - label_101: - lw $t0 -420($fp) - sw $t0 -472($fp) - j label_103 - label_102: + sw $t0 -424($fp) + label_107: + lw $t0 -424($fp) + sw $t0 -476($fp) + j label_109 + label_108: li $t0 2 addi $sp $sp -4 sw $t0 0($sp) @@ -3735,12 +3931,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -472($fp) - label_103: - lw $t0 -472($fp) - sw $t0 -524($fp) - j label_105 - label_104: + sw $t0 -476($fp) + label_109: + lw $t0 -476($fp) + sw $t0 -528($fp) + j label_111 + label_110: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) @@ -3748,12 +3944,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) - sw $t0 -524($fp) - label_105: - lw $t0 -524($fp) - sw $t0 -576($fp) - j label_107 - label_106: + sw $t0 -528($fp) + label_111: + lw $t0 -528($fp) + sw $t0 -580($fp) + j label_113 + label_112: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -3761,10 +3957,10 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -576($fp) - label_107: - lw $v0 -576($fp) - addi $sp $sp 568 + sw $t0 -580($fp) + label_113: + lw $v0 -580($fp) + addi $sp $sp 572 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3777,987 +3973,1001 @@ function_i2c_at_A2I: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -572 + addi $sp $sp -576 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -536($fp) + sw $v0 -540($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -560($fp) + sw $t1 -564($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -556($fp) + sw $t0 -560($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -552($fp) + sw $t0 -556($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -552($fp) + lw $t0 -564($fp) + lw $t1 -560($fp) + seq $t0 $t0 $t1 sw $t0 -548($fp) - lw $t0 -560($fp) + lw $t0 -548($fp) + bne $t0 $zero label_114 + lw $t0 -564($fp) lw $t1 -556($fp) seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_108 - lw $t0 -560($fp) + sw $t0 -548($fp) + lw $t0 -548($fp) + bne $t0 $zero label_115 + lw $t0 -564($fp) lw $t1 -552($fp) seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_109 - lw $t0 -560($fp) - lw $t1 -548($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_110 + sw $t0 -548($fp) + lw $t0 -548($fp) + bne $t0 $zero label_116 lw $t0 0($fp) - lw $t1 -536($fp) + lw $t1 -540($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_111 - label_108: + sw $t0 -544($fp) + j label_117 + label_114: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -536($fp) + sw $t1 -572($fp) + lw $t0 -540($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) + sw $t1 -568($fp) + lw $t0 -572($fp) + lw $t1 -568($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_111 - label_109: + sw $t0 -544($fp) + j label_117 + label_115: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -536($fp) + sw $t1 -572($fp) + lw $t0 -540($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) + sw $t1 -568($fp) + lw $t0 -572($fp) move $a0 $t0 - lw $t0 -564($fp) + lw $t0 -568($fp) move $a1 $t0 jal equal_str - sw $v0 -540($fp) - j label_111 - label_110: + sw $v0 -544($fp) + j label_117 + label_116: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -536($fp) + sw $t1 -572($fp) + lw $t0 -540($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) + sw $t1 -568($fp) + lw $t0 -572($fp) + lw $t1 -568($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_111 - label_111: - lw $t0 -540($fp) + sw $t0 -544($fp) + j label_117 + label_117: + lw $t0 -544($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -572($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -576($fp) + sw $v0 -576($fp) lw $t0 -576($fp) - bne $t0 $zero label_166 + lw $t1 12($t0) + sw $t1 -580($fp) + lw $t0 -580($fp) + bne $t0 $zero label_174 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -488($fp) + sw $v0 -492($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -512($fp) + sw $t1 -516($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -508($fp) + sw $t0 -512($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -504($fp) + sw $t0 -508($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -504($fp) + lw $t0 -516($fp) + lw $t1 -512($fp) + seq $t0 $t0 $t1 sw $t0 -500($fp) - lw $t0 -512($fp) + lw $t0 -500($fp) + bne $t0 $zero label_118 + lw $t0 -516($fp) lw $t1 -508($fp) seq $t0 $t0 $t1 - sw $t0 -496($fp) - lw $t0 -496($fp) - bne $t0 $zero label_112 - lw $t0 -512($fp) + sw $t0 -500($fp) + lw $t0 -500($fp) + bne $t0 $zero label_119 + lw $t0 -516($fp) lw $t1 -504($fp) seq $t0 $t0 $t1 - sw $t0 -496($fp) - lw $t0 -496($fp) - bne $t0 $zero label_113 - lw $t0 -512($fp) - lw $t1 -500($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - lw $t0 -496($fp) - bne $t0 $zero label_114 + sw $t0 -500($fp) + lw $t0 -500($fp) + bne $t0 $zero label_120 lw $t0 0($fp) - lw $t1 -488($fp) + lw $t1 -492($fp) seq $t0 $t0 $t1 - sw $t0 -492($fp) - j label_115 - label_112: + sw $t0 -496($fp) + j label_121 + label_118: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -488($fp) + sw $t1 -524($fp) + lw $t0 -492($fp) lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -520($fp) - lw $t1 -516($fp) + sw $t1 -520($fp) + lw $t0 -524($fp) + lw $t1 -520($fp) seq $t0 $t0 $t1 - sw $t0 -492($fp) - j label_115 - label_113: + sw $t0 -496($fp) + j label_121 + label_119: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -488($fp) + sw $t1 -524($fp) + lw $t0 -492($fp) lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -520($fp) + sw $t1 -520($fp) + lw $t0 -524($fp) move $a0 $t0 - lw $t0 -516($fp) + lw $t0 -520($fp) move $a1 $t0 jal equal_str - sw $v0 -492($fp) - j label_115 - label_114: + sw $v0 -496($fp) + j label_121 + label_120: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -488($fp) + sw $t1 -524($fp) + lw $t0 -492($fp) lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -520($fp) - lw $t1 -516($fp) + sw $t1 -520($fp) + lw $t0 -524($fp) + lw $t1 -520($fp) seq $t0 $t0 $t1 - sw $t0 -492($fp) - j label_115 - label_115: - lw $t0 -492($fp) + sw $t0 -496($fp) + j label_121 + label_121: + lw $t0 -496($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -524($fp) - lw $t0 -524($fp) - lw $t1 12($t0) - sw $t1 -528($fp) + sw $v0 -528($fp) lw $t0 -528($fp) - bne $t0 $zero label_164 + lw $t1 12($t0) + sw $t1 -532($fp) + lw $t0 -532($fp) + bne $t0 $zero label_172 li $t0 2 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -440($fp) + sw $v0 -444($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -464($fp) + sw $t1 -468($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -460($fp) + sw $t0 -464($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -456($fp) + sw $t0 -460($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -456($fp) + lw $t0 -468($fp) + lw $t1 -464($fp) + seq $t0 $t0 $t1 sw $t0 -452($fp) - lw $t0 -464($fp) + lw $t0 -452($fp) + bne $t0 $zero label_122 + lw $t0 -468($fp) lw $t1 -460($fp) seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_116 - lw $t0 -464($fp) + sw $t0 -452($fp) + lw $t0 -452($fp) + bne $t0 $zero label_123 + lw $t0 -468($fp) lw $t1 -456($fp) seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_117 - lw $t0 -464($fp) - lw $t1 -452($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_118 + sw $t0 -452($fp) + lw $t0 -452($fp) + bne $t0 $zero label_124 lw $t0 0($fp) - lw $t1 -440($fp) + lw $t1 -444($fp) seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_119 - label_116: + sw $t0 -448($fp) + j label_125 + label_122: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -440($fp) + sw $t1 -476($fp) + lw $t0 -444($fp) lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - lw $t1 -468($fp) + sw $t1 -472($fp) + lw $t0 -476($fp) + lw $t1 -472($fp) seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_119 - label_117: + sw $t0 -448($fp) + j label_125 + label_123: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -440($fp) + sw $t1 -476($fp) + lw $t0 -444($fp) lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) + sw $t1 -472($fp) + lw $t0 -476($fp) move $a0 $t0 - lw $t0 -468($fp) + lw $t0 -472($fp) move $a1 $t0 jal equal_str - sw $v0 -444($fp) - j label_119 - label_118: + sw $v0 -448($fp) + j label_125 + label_124: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -440($fp) + sw $t1 -476($fp) + lw $t0 -444($fp) lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - lw $t1 -468($fp) + sw $t1 -472($fp) + lw $t0 -476($fp) + lw $t1 -472($fp) seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_119 - label_119: - lw $t0 -444($fp) + sw $t0 -448($fp) + j label_125 + label_125: + lw $t0 -448($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -476($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -480($fp) + sw $v0 -480($fp) lw $t0 -480($fp) - bne $t0 $zero label_162 + lw $t1 12($t0) + sw $t1 -484($fp) + lw $t0 -484($fp) + bne $t0 $zero label_170 li $t0 3 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -392($fp) + sw $v0 -396($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -416($fp) + sw $t1 -420($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -412($fp) + sw $t0 -416($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -408($fp) + sw $t0 -412($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -408($fp) + lw $t0 -420($fp) + lw $t1 -416($fp) + seq $t0 $t0 $t1 sw $t0 -404($fp) - lw $t0 -416($fp) + lw $t0 -404($fp) + bne $t0 $zero label_126 + lw $t0 -420($fp) lw $t1 -412($fp) seq $t0 $t0 $t1 - sw $t0 -400($fp) - lw $t0 -400($fp) - bne $t0 $zero label_120 - lw $t0 -416($fp) + sw $t0 -404($fp) + lw $t0 -404($fp) + bne $t0 $zero label_127 + lw $t0 -420($fp) lw $t1 -408($fp) seq $t0 $t0 $t1 - sw $t0 -400($fp) - lw $t0 -400($fp) - bne $t0 $zero label_121 - lw $t0 -416($fp) - lw $t1 -404($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - lw $t0 -400($fp) - bne $t0 $zero label_122 + sw $t0 -404($fp) + lw $t0 -404($fp) + bne $t0 $zero label_128 lw $t0 0($fp) - lw $t1 -392($fp) + lw $t1 -396($fp) seq $t0 $t0 $t1 - sw $t0 -396($fp) - j label_123 - label_120: + sw $t0 -400($fp) + j label_129 + label_126: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -392($fp) + sw $t1 -428($fp) + lw $t0 -396($fp) lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -424($fp) - lw $t1 -420($fp) + sw $t1 -424($fp) + lw $t0 -428($fp) + lw $t1 -424($fp) seq $t0 $t0 $t1 - sw $t0 -396($fp) - j label_123 - label_121: + sw $t0 -400($fp) + j label_129 + label_127: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -392($fp) + sw $t1 -428($fp) + lw $t0 -396($fp) lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -424($fp) + sw $t1 -424($fp) + lw $t0 -428($fp) move $a0 $t0 - lw $t0 -420($fp) + lw $t0 -424($fp) move $a1 $t0 jal equal_str - sw $v0 -396($fp) - j label_123 - label_122: + sw $v0 -400($fp) + j label_129 + label_128: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -392($fp) + sw $t1 -428($fp) + lw $t0 -396($fp) lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -424($fp) - lw $t1 -420($fp) + sw $t1 -424($fp) + lw $t0 -428($fp) + lw $t1 -424($fp) seq $t0 $t0 $t1 - sw $t0 -396($fp) - j label_123 - label_123: - lw $t0 -396($fp) + sw $t0 -400($fp) + j label_129 + label_129: + lw $t0 -400($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -432($fp) + sw $v0 -432($fp) lw $t0 -432($fp) - bne $t0 $zero label_160 + lw $t1 12($t0) + sw $t1 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_168 li $t0 4 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -344($fp) + sw $v0 -348($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -368($fp) + sw $t1 -372($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -364($fp) + sw $t0 -368($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -360($fp) + sw $t0 -364($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -360($fp) + lw $t0 -372($fp) + lw $t1 -368($fp) + seq $t0 $t0 $t1 sw $t0 -356($fp) - lw $t0 -368($fp) + lw $t0 -356($fp) + bne $t0 $zero label_130 + lw $t0 -372($fp) lw $t1 -364($fp) seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_124 - lw $t0 -368($fp) + sw $t0 -356($fp) + lw $t0 -356($fp) + bne $t0 $zero label_131 + lw $t0 -372($fp) lw $t1 -360($fp) seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_125 - lw $t0 -368($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_126 + sw $t0 -356($fp) + lw $t0 -356($fp) + bne $t0 $zero label_132 lw $t0 0($fp) - lw $t1 -344($fp) + lw $t1 -348($fp) seq $t0 $t0 $t1 - sw $t0 -348($fp) - j label_127 - label_124: + sw $t0 -352($fp) + j label_133 + label_130: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -344($fp) + sw $t1 -380($fp) + lw $t0 -348($fp) lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -376($fp) - lw $t1 -372($fp) + sw $t1 -376($fp) + lw $t0 -380($fp) + lw $t1 -376($fp) seq $t0 $t0 $t1 - sw $t0 -348($fp) - j label_127 - label_125: + sw $t0 -352($fp) + j label_133 + label_131: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -344($fp) + sw $t1 -380($fp) + lw $t0 -348($fp) lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -376($fp) + sw $t1 -376($fp) + lw $t0 -380($fp) move $a0 $t0 - lw $t0 -372($fp) + lw $t0 -376($fp) move $a1 $t0 jal equal_str - sw $v0 -348($fp) - j label_127 - label_126: + sw $v0 -352($fp) + j label_133 + label_132: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -344($fp) + sw $t1 -380($fp) + lw $t0 -348($fp) lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -376($fp) - lw $t1 -372($fp) + sw $t1 -376($fp) + lw $t0 -380($fp) + lw $t1 -376($fp) seq $t0 $t0 $t1 - sw $t0 -348($fp) - j label_127 - label_127: - lw $t0 -348($fp) + sw $t0 -352($fp) + j label_133 + label_133: + lw $t0 -352($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -380($fp) - lw $t0 -380($fp) - lw $t1 12($t0) - sw $t1 -384($fp) + sw $v0 -384($fp) lw $t0 -384($fp) - bne $t0 $zero label_158 + lw $t1 12($t0) + sw $t1 -388($fp) + lw $t0 -388($fp) + bne $t0 $zero label_166 li $t0 5 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -296($fp) + sw $v0 -300($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -320($fp) + sw $t1 -324($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -316($fp) + sw $t0 -320($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -312($fp) + sw $t0 -316($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -312($fp) + lw $t0 -324($fp) + lw $t1 -320($fp) + seq $t0 $t0 $t1 sw $t0 -308($fp) - lw $t0 -320($fp) + lw $t0 -308($fp) + bne $t0 $zero label_134 + lw $t0 -324($fp) lw $t1 -316($fp) seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_128 - lw $t0 -320($fp) + sw $t0 -308($fp) + lw $t0 -308($fp) + bne $t0 $zero label_135 + lw $t0 -324($fp) lw $t1 -312($fp) seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_129 - lw $t0 -320($fp) - lw $t1 -308($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_130 + sw $t0 -308($fp) + lw $t0 -308($fp) + bne $t0 $zero label_136 lw $t0 0($fp) - lw $t1 -296($fp) + lw $t1 -300($fp) seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_131 - label_128: + sw $t0 -304($fp) + j label_137 + label_134: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -296($fp) + sw $t1 -332($fp) + lw $t0 -300($fp) lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - lw $t1 -324($fp) + sw $t1 -328($fp) + lw $t0 -332($fp) + lw $t1 -328($fp) seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_131 - label_129: + sw $t0 -304($fp) + j label_137 + label_135: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -296($fp) + sw $t1 -332($fp) + lw $t0 -300($fp) lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) + sw $t1 -328($fp) + lw $t0 -332($fp) move $a0 $t0 - lw $t0 -324($fp) + lw $t0 -328($fp) move $a1 $t0 jal equal_str - sw $v0 -300($fp) - j label_131 - label_130: + sw $v0 -304($fp) + j label_137 + label_136: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -296($fp) + sw $t1 -332($fp) + lw $t0 -300($fp) lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - lw $t1 -324($fp) + sw $t1 -328($fp) + lw $t0 -332($fp) + lw $t1 -328($fp) seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_131 - label_131: - lw $t0 -300($fp) + sw $t0 -304($fp) + j label_137 + label_137: + lw $t0 -304($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -332($fp) - lw $t0 -332($fp) - lw $t1 12($t0) - sw $t1 -336($fp) + sw $v0 -336($fp) lw $t0 -336($fp) - bne $t0 $zero label_156 + lw $t1 12($t0) + sw $t1 -340($fp) + lw $t0 -340($fp) + bne $t0 $zero label_164 li $t0 6 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -248($fp) + sw $v0 -252($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -272($fp) + sw $t1 -276($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -268($fp) + sw $t0 -272($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -264($fp) + sw $t0 -268($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -264($fp) + lw $t0 -276($fp) + lw $t1 -272($fp) + seq $t0 $t0 $t1 sw $t0 -260($fp) - lw $t0 -272($fp) + lw $t0 -260($fp) + bne $t0 $zero label_138 + lw $t0 -276($fp) lw $t1 -268($fp) seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_132 - lw $t0 -272($fp) + sw $t0 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_139 + lw $t0 -276($fp) lw $t1 -264($fp) seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_133 - lw $t0 -272($fp) - lw $t1 -260($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_134 + sw $t0 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_140 lw $t0 0($fp) - lw $t1 -248($fp) + lw $t1 -252($fp) seq $t0 $t0 $t1 - sw $t0 -252($fp) - j label_135 - label_132: + sw $t0 -256($fp) + j label_141 + label_138: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -248($fp) + sw $t1 -284($fp) + lw $t0 -252($fp) lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -280($fp) - lw $t1 -276($fp) + sw $t1 -280($fp) + lw $t0 -284($fp) + lw $t1 -280($fp) seq $t0 $t0 $t1 - sw $t0 -252($fp) - j label_135 - label_133: + sw $t0 -256($fp) + j label_141 + label_139: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -248($fp) + sw $t1 -284($fp) + lw $t0 -252($fp) lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -280($fp) + sw $t1 -280($fp) + lw $t0 -284($fp) move $a0 $t0 - lw $t0 -276($fp) + lw $t0 -280($fp) move $a1 $t0 jal equal_str - sw $v0 -252($fp) - j label_135 - label_134: + sw $v0 -256($fp) + j label_141 + label_140: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -248($fp) + sw $t1 -284($fp) + lw $t0 -252($fp) lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -280($fp) - lw $t1 -276($fp) + sw $t1 -280($fp) + lw $t0 -284($fp) + lw $t1 -280($fp) seq $t0 $t0 $t1 - sw $t0 -252($fp) - j label_135 - label_135: - lw $t0 -252($fp) + sw $t0 -256($fp) + j label_141 + label_141: + lw $t0 -256($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -284($fp) - lw $t0 -284($fp) - lw $t1 12($t0) - sw $t1 -288($fp) + sw $v0 -288($fp) lw $t0 -288($fp) - bne $t0 $zero label_154 + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -292($fp) + bne $t0 $zero label_162 li $t0 7 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -200($fp) + sw $v0 -204($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -224($fp) + sw $t1 -228($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -220($fp) + sw $t0 -224($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -216($fp) + sw $t0 -220($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -216($fp) + lw $t0 -228($fp) + lw $t1 -224($fp) + seq $t0 $t0 $t1 sw $t0 -212($fp) - lw $t0 -224($fp) + lw $t0 -212($fp) + bne $t0 $zero label_142 + lw $t0 -228($fp) lw $t1 -220($fp) seq $t0 $t0 $t1 - sw $t0 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_136 - lw $t0 -224($fp) + sw $t0 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_143 + lw $t0 -228($fp) lw $t1 -216($fp) seq $t0 $t0 $t1 - sw $t0 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_137 - lw $t0 -224($fp) - lw $t1 -212($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_138 + sw $t0 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_144 lw $t0 0($fp) - lw $t1 -200($fp) + lw $t1 -204($fp) seq $t0 $t0 $t1 - sw $t0 -204($fp) - j label_139 - label_136: + sw $t0 -208($fp) + j label_145 + label_142: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -200($fp) + sw $t1 -236($fp) + lw $t0 -204($fp) lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -232($fp) - lw $t1 -228($fp) + sw $t1 -232($fp) + lw $t0 -236($fp) + lw $t1 -232($fp) seq $t0 $t0 $t1 - sw $t0 -204($fp) - j label_139 - label_137: + sw $t0 -208($fp) + j label_145 + label_143: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -232($fp) + sw $t1 -236($fp) + lw $t0 -204($fp) + lw $t1 12($t0) + sw $t1 -232($fp) + lw $t0 -236($fp) move $a0 $t0 - lw $t0 -228($fp) + lw $t0 -232($fp) move $a1 $t0 jal equal_str - sw $v0 -204($fp) - j label_139 - label_138: + sw $v0 -208($fp) + j label_145 + label_144: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -200($fp) + sw $t1 -236($fp) + lw $t0 -204($fp) lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -232($fp) - lw $t1 -228($fp) + sw $t1 -232($fp) + lw $t0 -236($fp) + lw $t1 -232($fp) seq $t0 $t0 $t1 - sw $t0 -204($fp) - j label_139 - label_139: - lw $t0 -204($fp) + sw $t0 -208($fp) + j label_145 + label_145: + lw $t0 -208($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -236($fp) - lw $t0 -236($fp) - lw $t1 12($t0) - sw $t1 -240($fp) + sw $v0 -240($fp) lw $t0 -240($fp) - bne $t0 $zero label_152 + lw $t1 12($t0) + sw $t1 -244($fp) + lw $t0 -244($fp) + bne $t0 $zero label_160 li $t0 8 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -152($fp) + sw $v0 -156($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -176($fp) + sw $t1 -180($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -172($fp) + sw $t0 -176($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -168($fp) + sw $t0 -172($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -168($fp) + lw $t0 -180($fp) + lw $t1 -176($fp) + seq $t0 $t0 $t1 sw $t0 -164($fp) - lw $t0 -176($fp) + lw $t0 -164($fp) + bne $t0 $zero label_146 + lw $t0 -180($fp) lw $t1 -172($fp) seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_140 - lw $t0 -176($fp) + sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_147 + lw $t0 -180($fp) lw $t1 -168($fp) seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_141 - lw $t0 -176($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_142 + sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_148 lw $t0 0($fp) - lw $t1 -152($fp) + lw $t1 -156($fp) seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_143 - label_140: + sw $t0 -160($fp) + j label_149 + label_146: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -152($fp) + sw $t1 -188($fp) + lw $t0 -156($fp) lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) + sw $t1 -184($fp) + lw $t0 -188($fp) + lw $t1 -184($fp) seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_143 - label_141: + sw $t0 -160($fp) + j label_149 + label_147: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -152($fp) + sw $t1 -188($fp) + lw $t0 -156($fp) lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) + sw $t1 -184($fp) + lw $t0 -188($fp) move $a0 $t0 - lw $t0 -180($fp) + lw $t0 -184($fp) move $a1 $t0 jal equal_str - sw $v0 -156($fp) - j label_143 - label_142: + sw $v0 -160($fp) + j label_149 + label_148: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -152($fp) + sw $t1 -188($fp) + lw $t0 -156($fp) lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) + sw $t1 -184($fp) + lw $t0 -188($fp) + lw $t1 -184($fp) seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_143 - label_143: - lw $t0 -156($fp) + sw $t0 -160($fp) + j label_149 + label_149: + lw $t0 -160($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -192($fp) + sw $v0 -192($fp) lw $t0 -192($fp) - bne $t0 $zero label_150 + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -196($fp) + bne $t0 $zero label_158 li $t0 9 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -104($fp) + sw $v0 -108($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -128($fp) + sw $t1 -132($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -124($fp) + sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -120($fp) + sw $t0 -124($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 sw $t0 -116($fp) - lw $t0 -128($fp) + lw $t0 -116($fp) + bne $t0 $zero label_150 + lw $t0 -132($fp) lw $t1 -124($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_144 - lw $t0 -128($fp) + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_151 + lw $t0 -132($fp) lw $t1 -120($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_145 - lw $t0 -128($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_146 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_152 lw $t0 0($fp) - lw $t1 -104($fp) + lw $t1 -108($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_147 - label_144: + sw $t0 -112($fp) + j label_153 + label_150: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) + sw $t1 -140($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_147 - label_145: + sw $t0 -112($fp) + j label_153 + label_151: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) + sw $t1 -140($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) move $a0 $t0 - lw $t0 -132($fp) + lw $t0 -136($fp) move $a1 $t0 jal equal_str - sw $v0 -108($fp) - j label_147 - label_146: + sw $v0 -112($fp) + j label_153 + label_152: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) + sw $t1 -140($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_147 - label_147: - lw $t0 -108($fp) + sw $t0 -112($fp) + j label_153 + label_153: + lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -144($fp) + sw $v0 -144($fp) lw $t0 -144($fp) - bne $t0 $zero label_148 + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_156 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_154 + j label_155 + label_154: + li $v0 4 + la $a0 data_40 + syscall + li $v0 10 + syscall + label_155: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -4771,7 +4981,7 @@ function_i2c_at_A2I: jalr $ra $t0 addi $sp $sp 4 sw $v0 -100($fp) - la $t0 data_37 + la $t0 data_41 sw $t0 -96($fp) lw $t0 -96($fp) addi $sp $sp -4 @@ -4780,10 +4990,10 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -92($fp) lw $t0 -92($fp) - sw $t0 -148($fp) - j label_149 - label_148: - la $t0 data_38 + sw $t0 -152($fp) + j label_157 + label_156: + la $t0 data_42 sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 @@ -4792,13 +5002,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) - sw $t0 -148($fp) - label_149: - lw $t0 -148($fp) - sw $t0 -196($fp) - j label_151 - label_150: - la $t0 data_39 + sw $t0 -152($fp) + label_157: + lw $t0 -152($fp) + sw $t0 -200($fp) + j label_159 + label_158: + la $t0 data_43 sw $t0 -80($fp) lw $t0 -80($fp) addi $sp $sp -4 @@ -4807,13 +5017,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -76($fp) lw $t0 -76($fp) - sw $t0 -196($fp) - label_151: - lw $t0 -196($fp) - sw $t0 -244($fp) - j label_153 - label_152: - la $t0 data_40 + sw $t0 -200($fp) + label_159: + lw $t0 -200($fp) + sw $t0 -248($fp) + j label_161 + label_160: + la $t0 data_44 sw $t0 -72($fp) lw $t0 -72($fp) addi $sp $sp -4 @@ -4822,13 +5032,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -68($fp) - sw $t0 -244($fp) - label_153: - lw $t0 -244($fp) - sw $t0 -292($fp) - j label_155 - label_154: - la $t0 data_41 + sw $t0 -248($fp) + label_161: + lw $t0 -248($fp) + sw $t0 -296($fp) + j label_163 + label_162: + la $t0 data_45 sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 @@ -4837,13 +5047,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) - sw $t0 -292($fp) - label_155: - lw $t0 -292($fp) - sw $t0 -340($fp) - j label_157 - label_156: - la $t0 data_42 + sw $t0 -296($fp) + label_163: + lw $t0 -296($fp) + sw $t0 -344($fp) + j label_165 + label_164: + la $t0 data_46 sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 @@ -4852,13 +5062,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) - sw $t0 -340($fp) - label_157: - lw $t0 -340($fp) - sw $t0 -388($fp) - j label_159 - label_158: - la $t0 data_43 + sw $t0 -344($fp) + label_165: + lw $t0 -344($fp) + sw $t0 -392($fp) + j label_167 + label_166: + la $t0 data_47 sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 @@ -4867,13 +5077,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) - sw $t0 -388($fp) - label_159: - lw $t0 -388($fp) - sw $t0 -436($fp) - j label_161 - label_160: - la $t0 data_44 + sw $t0 -392($fp) + label_167: + lw $t0 -392($fp) + sw $t0 -440($fp) + j label_169 + label_168: + la $t0 data_48 sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 @@ -4882,13 +5092,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) - sw $t0 -436($fp) - label_161: - lw $t0 -436($fp) - sw $t0 -484($fp) - j label_163 - label_162: - la $t0 data_45 + sw $t0 -440($fp) + label_169: + lw $t0 -440($fp) + sw $t0 -488($fp) + j label_171 + label_170: + la $t0 data_49 sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 @@ -4897,13 +5107,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) - sw $t0 -484($fp) - label_163: - lw $t0 -484($fp) - sw $t0 -532($fp) - j label_165 - label_164: - la $t0 data_46 + sw $t0 -488($fp) + label_171: + lw $t0 -488($fp) + sw $t0 -536($fp) + j label_173 + label_172: + la $t0 data_50 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -4912,13 +5122,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -532($fp) - label_165: - lw $t0 -532($fp) - sw $t0 -580($fp) - j label_167 - label_166: - la $t0 data_47 + sw $t0 -536($fp) + label_173: + lw $t0 -536($fp) + sw $t0 -584($fp) + j label_175 + label_174: + la $t0 data_51 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -4927,10 +5137,10 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -580($fp) - label_167: - lw $v0 -580($fp) - addi $sp $sp 572 + sw $t0 -584($fp) + label_175: + lw $v0 -584($fp) + addi $sp $sp 576 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -4943,21 +5153,21 @@ function_a2i_at_A2I: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -300 + addi $sp $sp -312 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -264($fp) - lw $t0 -264($fp) - bne $t0 $zero label_168 - j label_169 - label_168: + sw $t0 -276($fp) + lw $t0 -276($fp) + bne $t0 $zero label_176 + j label_177 + label_176: li $v0 4 - la $a0 data_48 + la $a0 data_52 syscall li $v0 10 syscall - label_169: + label_177: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -4970,138 +5180,138 @@ function_a2i_at_A2I: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -260($fp) + sw $v0 -272($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -260($fp) + sw $v0 -268($fp) + lw $t0 -272($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -288($fp) + sw $t1 -300($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -284($fp) + sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -280($fp) + sw $t0 -292($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -276($fp) - lw $t0 -288($fp) - lw $t1 -284($fp) + sw $t0 -288($fp) + lw $t0 -300($fp) + lw $t1 -296($fp) seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_170 - lw $t0 -288($fp) - lw $t1 -280($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_178 + lw $t0 -300($fp) + lw $t1 -292($fp) seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_171 - lw $t0 -288($fp) - lw $t1 -276($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_179 + lw $t0 -300($fp) + lw $t1 -288($fp) seq $t0 $t0 $t1 - sw $t0 -272($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_180 lw $t0 -272($fp) - bne $t0 $zero label_172 - lw $t0 -260($fp) - lw $t1 -256($fp) + lw $t1 -268($fp) seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_173 - label_170: - lw $t0 -260($fp) + sw $t0 -280($fp) + j label_181 + label_178: + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -256($fp) + sw $t1 -308($fp) + lw $t0 -268($fp) lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_173 - label_171: - lw $t0 -260($fp) + sw $t0 -280($fp) + j label_181 + label_179: + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -256($fp) + sw $t1 -308($fp) + lw $t0 -268($fp) lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) move $a0 $t0 - lw $t0 -292($fp) + lw $t0 -304($fp) move $a1 $t0 jal equal_str - sw $v0 -268($fp) - j label_173 - label_172: - lw $t0 -260($fp) + sw $v0 -280($fp) + j label_181 + label_180: + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -256($fp) + sw $t1 -308($fp) + lw $t0 -268($fp) lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_173 - label_173: - lw $t0 -268($fp) + sw $t0 -280($fp) + j label_181 + label_181: + lw $t0 -280($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 -300($fp) + sw $v0 -312($fp) + lw $t0 -312($fp) lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_198 + sw $t1 -316($fp) + lw $t0 -316($fp) + bne $t0 $zero label_212 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -208($fp) + sw $v0 -220($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -204($fp) + sw $v0 -216($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -200($fp) - lw $t0 -200($fp) - bne $t0 $zero label_174 - j label_175 - label_174: + sw $t0 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_182 + j label_183 + label_182: li $v0 4 - la $a0 data_49 + la $a0 data_53 syscall li $v0 10 syscall - label_175: + label_183: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -208($fp) + lw $t0 -220($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -204($fp) + lw $t0 -216($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -5113,140 +5323,140 @@ function_a2i_at_A2I: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -196($fp) - la $t0 data_50 - sw $t0 -192($fp) - lw $t0 -192($fp) + sw $v0 -208($fp) + la $t0 data_54 + sw $t0 -204($fp) + lw $t0 -204($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -196($fp) + sw $v0 -200($fp) + lw $t0 -208($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -232($fp) + sw $t1 -244($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -228($fp) + sw $t0 -240($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -224($fp) + sw $t0 -236($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -220($fp) - lw $t0 -232($fp) - lw $t1 -228($fp) + sw $t0 -232($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_176 - lw $t0 -232($fp) - lw $t1 -224($fp) + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_184 + lw $t0 -244($fp) + lw $t1 -236($fp) seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_177 - lw $t0 -232($fp) - lw $t1 -220($fp) + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_185 + lw $t0 -244($fp) + lw $t1 -232($fp) seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_178 - lw $t0 -196($fp) - lw $t1 -188($fp) + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_186 + lw $t0 -208($fp) + lw $t1 -200($fp) seq $t0 $t0 $t1 - sw $t0 -212($fp) - j label_179 - label_176: - lw $t0 -196($fp) + sw $t0 -224($fp) + j label_187 + label_184: + lw $t0 -208($fp) lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -188($fp) + sw $t1 -252($fp) + lw $t0 -200($fp) lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -240($fp) - lw $t1 -236($fp) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) seq $t0 $t0 $t1 - sw $t0 -212($fp) - j label_179 - label_177: - lw $t0 -196($fp) + sw $t0 -224($fp) + j label_187 + label_185: + lw $t0 -208($fp) lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -188($fp) + sw $t1 -252($fp) + lw $t0 -200($fp) lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -240($fp) + sw $t1 -248($fp) + lw $t0 -252($fp) move $a0 $t0 - lw $t0 -236($fp) + lw $t0 -248($fp) move $a1 $t0 jal equal_str - sw $v0 -212($fp) - j label_179 - label_178: - lw $t0 -196($fp) + sw $v0 -224($fp) + j label_187 + label_186: + lw $t0 -208($fp) lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -188($fp) + sw $t1 -252($fp) + lw $t0 -200($fp) lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -240($fp) - lw $t1 -236($fp) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) seq $t0 $t0 $t1 - sw $t0 -212($fp) - j label_179 - label_179: - lw $t0 -212($fp) + sw $t0 -224($fp) + j label_187 + label_187: + lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -244($fp) - lw $t0 -244($fp) + sw $v0 -256($fp) + lw $t0 -256($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -248($fp) - bne $t0 $zero label_192 + sw $t1 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_204 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -140($fp) + sw $v0 -152($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -136($fp) + sw $v0 -148($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_180 - j label_181 - label_180: + sw $t0 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_188 + j label_189 + label_188: li $v0 4 - la $a0 data_51 + la $a0 data_55 syscall li $v0 10 syscall - label_181: + label_189: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -140($fp) + lw $t0 -152($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -136($fp) + lw $t0 -148($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -5258,107 +5468,121 @@ function_a2i_at_A2I: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -128($fp) - la $t0 data_52 - sw $t0 -124($fp) - lw $t0 -124($fp) + sw $v0 -140($fp) + la $t0 data_56 + sw $t0 -136($fp) + lw $t0 -136($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -128($fp) + sw $v0 -132($fp) + lw $t0 -140($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -164($fp) + sw $t1 -176($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -160($fp) + sw $t0 -172($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -156($fp) + sw $t0 -168($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -152($fp) - lw $t0 -164($fp) - lw $t1 -160($fp) + sw $t0 -164($fp) + lw $t0 -176($fp) + lw $t1 -172($fp) seq $t0 $t0 $t1 - sw $t0 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_182 - lw $t0 -164($fp) - lw $t1 -156($fp) + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_190 + lw $t0 -176($fp) + lw $t1 -168($fp) seq $t0 $t0 $t1 - sw $t0 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_183 - lw $t0 -164($fp) - lw $t1 -152($fp) + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_191 + lw $t0 -176($fp) + lw $t1 -164($fp) seq $t0 $t0 $t1 - sw $t0 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_184 - lw $t0 -128($fp) - lw $t1 -120($fp) + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_192 + lw $t0 -140($fp) + lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -144($fp) - j label_185 - label_182: - lw $t0 -128($fp) + sw $t0 -156($fp) + j label_193 + label_190: + lw $t0 -140($fp) lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -120($fp) + sw $t1 -184($fp) + lw $t0 -132($fp) lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -172($fp) - lw $t1 -168($fp) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) seq $t0 $t0 $t1 - sw $t0 -144($fp) - j label_185 - label_183: - lw $t0 -128($fp) + sw $t0 -156($fp) + j label_193 + label_191: + lw $t0 -140($fp) lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -120($fp) + sw $t1 -184($fp) + lw $t0 -132($fp) lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -172($fp) + sw $t1 -180($fp) + lw $t0 -184($fp) move $a0 $t0 - lw $t0 -168($fp) + lw $t0 -180($fp) move $a1 $t0 jal equal_str - sw $v0 -144($fp) - j label_185 - label_184: - lw $t0 -128($fp) + sw $v0 -156($fp) + j label_193 + label_192: + lw $t0 -140($fp) lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -120($fp) + sw $t1 -184($fp) + lw $t0 -132($fp) lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -172($fp) - lw $t1 -168($fp) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) seq $t0 $t0 $t1 - sw $t0 -144($fp) - j label_185 - label_185: - lw $t0 -144($fp) + sw $t0 -156($fp) + j label_193 + label_193: + lw $t0 -156($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -176($fp) - lw $t0 -176($fp) + sw $v0 -188($fp) + lw $t0 -188($fp) lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_186 + sw $t1 -192($fp) + lw $t0 -192($fp) + bne $t0 $zero label_196 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_194 + j label_195 + label_194: + li $v0 4 + la $a0 data_57 + syscall + li $v0 10 + syscall + label_195: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5374,31 +5598,31 @@ function_a2i_at_A2I: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -116($fp) - lw $t0 -116($fp) - sw $t0 -184($fp) - j label_191 - label_186: + sw $v0 -124($fp) + lw $t0 -124($fp) + sw $t0 -196($fp) + j label_203 + label_196: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -108($fp) + sw $v0 -120($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_187 - j label_188 - label_187: + sw $t0 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_197 + j label_198 + label_197: li $v0 4 - la $a0 data_53 + la $a0 data_58 syscall li $v0 10 syscall - label_188: + label_198: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5411,50 +5635,50 @@ function_a2i_at_A2I: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) + sw $v0 -96($fp) + lw $t0 -96($fp) lw $t1 12($t0) - sw $t1 -100($fp) + sw $t1 -112($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) + sw $v0 -92($fp) + lw $t0 -92($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) + sw $t1 -108($fp) + lw $t0 -112($fp) + lw $t1 -108($fp) sub $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) + sw $t0 -104($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -104($fp) + sw $v0 -116($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_189 - j label_190 - label_189: + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_199 + j label_200 + label_199: li $v0 4 - la $a0 data_54 + la $a0 data_59 syscall li $v0 10 syscall - label_190: + label_200: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -108($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -104($fp) + lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -5466,11 +5690,25 @@ function_a2i_at_A2I: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -72($fp) + sw $v0 -84($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_201 + j label_202 + label_201: + li $v0 4 + la $a0 data_60 + syscall + li $v0 10 + syscall + label_202: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -72($fp) + lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -5482,34 +5720,34 @@ function_a2i_at_A2I: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -184($fp) - label_191: - lw $t0 -184($fp) - sw $t0 -252($fp) - j label_197 - label_192: + sw $v0 -76($fp) + lw $t0 -76($fp) + sw $t0 -196($fp) + label_203: + lw $t0 -196($fp) + sw $t0 -264($fp) + j label_211 + label_204: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) + sw $v0 -60($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_193 - j label_194 - label_193: + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_205 + j label_206 + label_205: li $v0 4 - la $a0 data_55 + la $a0 data_61 syscall li $v0 10 syscall - label_194: + label_206: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5522,50 +5760,50 @@ function_a2i_at_A2I: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -44($fp) + sw $t1 -52($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) + sw $v0 -32($fp) + lw $t0 -32($fp) lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) sub $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) + sw $t0 -44($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -48($fp) + sw $v0 -56($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_195 - j label_196 - label_195: + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_207 + j label_208 + label_207: li $v0 4 - la $a0 data_56 + la $a0 data_62 syscall li $v0 10 syscall - label_196: + label_208: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -48($fp) + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -5577,11 +5815,25 @@ function_a2i_at_A2I: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -16($fp) + sw $v0 -24($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_209 + j label_210 + label_209: + li $v0 4 + la $a0 data_63 + syscall + li $v0 10 + syscall + label_210: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -16($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -5593,27 +5845,27 @@ function_a2i_at_A2I: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -56($fp) - lw $t0 -56($fp) + sw $v0 -16($fp) + lw $t0 -16($fp) lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) + sw $t1 -68($fp) + lw $t0 -68($fp) not $t0 $t0 addi $t0 $t0 1 - sw $t0 -60($fp) - lw $t0 -60($fp) + sw $t0 -64($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -252($fp) - label_197: - lw $t0 -252($fp) - sw $t0 -308($fp) - j label_199 - label_198: + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -264($fp) + label_211: + lw $t0 -264($fp) + sw $t0 -320($fp) + j label_213 + label_212: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -5621,10 +5873,10 @@ function_a2i_at_A2I: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -308($fp) - label_199: - lw $v0 -308($fp) - addi $sp $sp 300 + sw $t0 -320($fp) + label_213: + lw $v0 -320($fp) + addi $sp $sp 312 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -5637,29 +5889,29 @@ function_a2i_aux_at_A2I: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -120 + addi $sp $sp -124 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -124($fp) - sw $t0 -128($fp) + sw $v0 -128($fp) + lw $t0 -128($fp) + sw $t0 -132($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_200 - j label_201 - label_200: + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_214 + j label_215 + label_214: li $v0 4 - la $a0 data_57 + la $a0 data_64 syscall li $v0 10 syscall - label_201: + label_215: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5672,93 +5924,93 @@ function_a2i_aux_at_A2I: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -120($fp) + sw $v0 -116($fp) + lw $t0 -116($fp) + sw $t0 -124($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - sw $t0 -108($fp) - label_202: + sw $v0 -108($fp) lw $t0 -108($fp) + sw $t0 -112($fp) + label_216: + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -120($fp) + sw $t1 -96($fp) + lw $t0 -124($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) slt $t1 $t0 $t1 - sw $t1 -84($fp) - lw $t0 -84($fp) + sw $t1 -88($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -100($fp) + sw $v0 -100($fp) lw $t0 -100($fp) - bne $t0 $zero label_203 - j label_206 - label_203: - lw $t0 -128($fp) lw $t1 12($t0) - sw $t1 -60($fp) + sw $t1 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_217 + j label_222 + label_217: + lw $t0 -132($fp) + lw $t1 12($t0) + sw $t1 -64($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) + sw $v0 -52($fp) + lw $t0 -52($fp) lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) + sw $t1 -60($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) mul $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) + sw $t0 -56($fp) + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) + sw $v0 -68($fp) + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -76($fp) + sw $t1 -80($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -40($fp) + sw $v0 -48($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_204 - j label_205 - label_204: + sw $t0 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_218 + j label_219 + label_218: li $v0 4 - la $a0 data_58 + la $a0 data_65 syscall li $v0 10 syscall - label_205: + label_219: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -108($fp) + lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -40($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -5770,11 +6022,25 @@ function_a2i_aux_at_A2I: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -32($fp) + sw $v0 -40($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_220 + j label_221 + label_220: + li $v0 4 + la $a0 data_66 + syscall + li $v0 10 + syscall + label_221: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -5786,23 +6052,23 @@ function_a2i_aux_at_A2I: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) + sw $v0 -32($fp) + lw $t0 -32($fp) lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) add $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) + sw $t0 -72($fp) + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -128($fp) - lw $t0 -108($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) + sw $t0 -132($fp) + lw $t0 -112($fp) lw $t1 12($t0) sw $t1 -24($fp) li $t0 1 @@ -5825,11 +6091,11 @@ function_a2i_aux_at_A2I: addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) - sw $t0 -108($fp) - j label_202 - label_206: - lw $v0 -128($fp) - addi $sp $sp 120 + sw $t0 -112($fp) + j label_216 + label_222: + lw $v0 -132($fp) + addi $sp $sp 124 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -5842,171 +6108,185 @@ function_i2a_at_A2I: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -140 + addi $sp $sp -148 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -104($fp) + sw $v0 -112($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -128($fp) + sw $t1 -136($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -124($fp) + sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -120($fp) + sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -128($fp) - lw $t1 -124($fp) + sw $t0 -124($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_207 - lw $t0 -128($fp) - lw $t1 -120($fp) + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_223 + lw $t0 -136($fp) + lw $t1 -128($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_208 - lw $t0 -128($fp) - lw $t1 -116($fp) + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_224 + lw $t0 -136($fp) + lw $t1 -124($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_209 + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_225 lw $t0 0($fp) - lw $t1 -104($fp) + lw $t1 -112($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_210 - label_207: + sw $t0 -116($fp) + j label_226 + label_223: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) + sw $t1 -144($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) + sw $t1 -140($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_210 - label_208: + sw $t0 -116($fp) + j label_226 + label_224: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) + sw $t1 -144($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) + sw $t1 -140($fp) + lw $t0 -144($fp) move $a0 $t0 - lw $t0 -132($fp) + lw $t0 -140($fp) move $a1 $t0 jal equal_str - sw $v0 -108($fp) - j label_210 - label_209: + sw $v0 -116($fp) + j label_226 + label_225: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) + sw $t1 -144($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) + sw $t1 -140($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_210 - label_210: - lw $t0 -108($fp) + sw $t0 -116($fp) + j label_226 + label_226: + lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) + sw $v0 -148($fp) + lw $t0 -148($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_215 + sw $t1 -152($fp) + lw $t0 -152($fp) + bne $t0 $zero label_235 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) lw $t1 12($t0) - sw $t1 -88($fp) + sw $t1 -96($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) slt $t1 $t0 $t1 - sw $t1 -80($fp) - lw $t0 -80($fp) + sw $t1 -88($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) + sw $v0 -100($fp) + lw $t0 -100($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_213 + sw $t1 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_231 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -64($fp) + sw $t1 -76($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) + sw $v0 -52($fp) + lw $t0 -52($fp) lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -48($fp) + sw $t1 -60($fp) + lw $t0 -60($fp) not $t0 $t0 addi $t0 $t0 1 - sw $t0 -44($fp) - lw $t0 -44($fp) + sw $t0 -56($fp) + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) + sw $v0 -64($fp) lw $t0 -64($fp) - lw $t1 -60($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) mul $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) + sw $t0 -68($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -68($fp) + sw $v0 -80($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_227 + j label_228 + label_227: + li $v0 4 + la $a0 data_67 + syscall + li $v0 10 + syscall + label_228: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -68($fp) + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -6018,36 +6298,36 @@ function_i2a_at_A2I: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -72($fp) - la $t0 data_59 - sw $t0 -36($fp) - lw $t0 -36($fp) + sw $v0 -44($fp) + la $t0 data_68 + sw $t0 -40($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_211 - j label_212 - label_211: + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_229 + j label_230 + label_229: li $v0 4 - la $a0 data_60 + la $a0 data_69 syscall li $v0 10 syscall - label_212: - lw $t0 -32($fp) + label_230: + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -72($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -6056,11 +6336,25 @@ function_i2a_at_A2I: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -24($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -108($fp) + j label_234 + label_231: + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) lw $t0 -24($fp) - sw $t0 -100($fp) - j label_214 - label_213: + bne $t0 $zero label_232 + j label_233 + label_232: + li $v0 4 + la $a0 data_70 + syscall + li $v0 10 + syscall + label_233: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6078,13 +6372,13 @@ function_i2a_at_A2I: addi $sp $sp 8 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -100($fp) - label_214: - lw $t0 -100($fp) - sw $t0 -148($fp) - j label_216 - label_215: - la $t0 data_61 + sw $t0 -108($fp) + label_234: + lw $t0 -108($fp) + sw $t0 -156($fp) + j label_236 + label_235: + la $t0 data_71 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -6093,10 +6387,10 @@ function_i2a_at_A2I: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -148($fp) - label_216: - lw $v0 -148($fp) - addi $sp $sp 140 + sw $t0 -156($fp) + label_236: + lw $v0 -156($fp) + addi $sp $sp 148 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -6109,195 +6403,209 @@ function_i2a_aux_at_A2I: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -136 + addi $sp $sp -144 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -100($fp) + sw $v0 -108($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -124($fp) + sw $t1 -132($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -120($fp) + sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -116($fp) + sw $t0 -124($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -112($fp) - lw $t0 -124($fp) - lw $t1 -120($fp) + sw $t0 -120($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_217 - lw $t0 -124($fp) - lw $t1 -116($fp) + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_237 + lw $t0 -132($fp) + lw $t1 -124($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_218 - lw $t0 -124($fp) - lw $t1 -112($fp) + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_238 + lw $t0 -132($fp) + lw $t1 -120($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_219 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_239 lw $t0 0($fp) - lw $t1 -100($fp) + lw $t1 -108($fp) seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_220 - label_217: + sw $t0 -112($fp) + j label_240 + label_237: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -100($fp) + sw $t1 -140($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_220 - label_218: + sw $t0 -112($fp) + j label_240 + label_238: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -100($fp) + sw $t1 -140($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) move $a0 $t0 - lw $t0 -128($fp) + lw $t0 -136($fp) move $a1 $t0 jal equal_str - sw $v0 -104($fp) - j label_220 - label_219: + sw $v0 -112($fp) + j label_240 + label_239: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -100($fp) + sw $t1 -140($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_220 - label_220: - lw $t0 -104($fp) + sw $t0 -112($fp) + j label_240 + label_240: + lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 -136($fp) + sw $v0 -144($fp) + lw $t0 -144($fp) lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_225 + sw $t1 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_249 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -88($fp) + sw $t1 -96($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -72($fp) + sw $v0 -80($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -72($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) lw $t1 12($t0) sw $t1 -84($fp) - lw $t0 -76($fp) - lw $t1 -84($fp) + lw $t0 -80($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -84($fp) + lw $t1 -92($fp) seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_221 - j label_222 - label_221: + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_241 + j label_242 + label_241: li $v0 4 - la $a0 data_62 + la $a0 data_72 syscall li $v0 10 syscall - label_222: - lw $t0 -88($fp) - lw $t1 -84($fp) + label_242: + lw $t0 -96($fp) + lw $t1 -92($fp) div $t0 $t1 mflo $t0 - sw $t0 -80($fp) - lw $t0 -80($fp) + sw $t0 -88($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -96($fp) + sw $v0 -100($fp) + lw $t0 -100($fp) + sw $t0 -104($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -96($fp) + sw $t1 -72($fp) + lw $t0 -104($fp) lw $t1 12($t0) - sw $t1 -44($fp) + sw $t1 -56($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -40($fp) + sw $v0 -44($fp) lw $t0 -44($fp) - lw $t1 -40($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) mul $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) + sw $t0 -48($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -56($fp) + sw $v0 -60($fp) lw $t0 -60($fp) - lw $t1 -56($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t0 -72($fp) + lw $t1 -68($fp) sub $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) + sw $t0 -64($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -64($fp) + sw $v0 -76($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_243 + j label_244 + label_243: + li $v0 4 + la $a0 data_73 + syscall + li $v0 10 + syscall + label_244: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -64($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -6309,11 +6617,25 @@ function_i2a_aux_at_A2I: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -68($fp) + sw $v0 -36($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_245 + j label_246 + label_245: + li $v0 4 + la $a0 data_74 + syscall + li $v0 10 + syscall + label_246: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -96($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -6331,19 +6653,19 @@ function_i2a_aux_at_A2I: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_223 - j label_224 - label_223: + bne $t0 $zero label_247 + j label_248 + label_247: li $v0 4 - la $a0 data_63 + la $a0 data_75 syscall li $v0 10 syscall - label_224: + label_248: lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -68($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 -28($fp) @@ -6357,10 +6679,10 @@ function_i2a_aux_at_A2I: addi $sp $sp 8 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -144($fp) - j label_226 - label_225: - la $t0 data_64 + sw $t0 -152($fp) + j label_250 + label_249: + la $t0 data_76 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -6369,10 +6691,10 @@ function_i2a_aux_at_A2I: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -144($fp) - label_226: - lw $v0 -144($fp) - addi $sp $sp 136 + sw $t0 -152($fp) + label_250: + lw $v0 -152($fp) + addi $sp $sp 144 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -6462,19 +6784,33 @@ function_menu_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -268 - la $t0 data_65 - sw $t0 -256($fp) - lw $t0 -256($fp) + addi $sp $sp -376 + la $t0 data_77 + sw $t0 -368($fp) + lw $t0 -368($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -252($fp) + sw $v0 -364($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -360($fp) + lw $t0 -360($fp) + bne $t0 $zero label_251 + j label_252 + label_251: + li $v0 4 + la $a0 data_78 + syscall + li $v0 10 + syscall + label_252: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -252($fp) + lw $t0 -364($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6486,7 +6822,21 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -260($fp) + sw $v0 -356($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -352($fp) + lw $t0 -352($fp) + bne $t0 $zero label_253 + j label_254 + label_253: + li $v0 4 + la $a0 data_79 + syscall + li $v0 10 + syscall + label_254: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6507,19 +6857,33 @@ function_menu_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -248($fp) - la $t0 data_66 - sw $t0 -240($fp) - lw $t0 -240($fp) + sw $v0 -348($fp) + la $t0 data_80 + sw $t0 -344($fp) + lw $t0 -344($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -236($fp) + sw $v0 -340($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -336($fp) + lw $t0 -336($fp) + bne $t0 $zero label_255 + j label_256 + label_255: + li $v0 4 + la $a0 data_81 + syscall + li $v0 10 + syscall + label_256: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -236($fp) + lw $t0 -340($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6531,19 +6895,33 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -244($fp) - la $t0 data_67 - sw $t0 -228($fp) - lw $t0 -228($fp) + sw $v0 -332($fp) + la $t0 data_82 + sw $t0 -328($fp) + lw $t0 -328($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -224($fp) + sw $v0 -324($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -320($fp) + lw $t0 -320($fp) + bne $t0 $zero label_257 + j label_258 + label_257: + li $v0 4 + la $a0 data_83 + syscall + li $v0 10 + syscall + label_258: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -224($fp) + lw $t0 -324($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6555,7 +6933,21 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -232($fp) + sw $v0 -316($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -312($fp) + lw $t0 -312($fp) + bne $t0 $zero label_259 + j label_260 + label_259: + li $v0 4 + la $a0 data_84 + syscall + li $v0 10 + syscall + label_260: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6576,19 +6968,33 @@ function_menu_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -220($fp) - la $t0 data_68 - sw $t0 -212($fp) - lw $t0 -212($fp) + sw $v0 -308($fp) + la $t0 data_85 + sw $t0 -304($fp) + lw $t0 -304($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -208($fp) + sw $v0 -300($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -296($fp) + lw $t0 -296($fp) + bne $t0 $zero label_261 + j label_262 + label_261: + li $v0 4 + la $a0 data_86 + syscall + li $v0 10 + syscall + label_262: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -208($fp) + lw $t0 -300($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6600,19 +7006,33 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -216($fp) - la $t0 data_69 - sw $t0 -200($fp) - lw $t0 -200($fp) + sw $v0 -292($fp) + la $t0 data_87 + sw $t0 -288($fp) + lw $t0 -288($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -196($fp) + sw $v0 -284($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_263 + j label_264 + label_263: + li $v0 4 + la $a0 data_88 + syscall + li $v0 10 + syscall + label_264: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -196($fp) + lw $t0 -284($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6624,7 +7044,21 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -204($fp) + sw $v0 -276($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_265 + j label_266 + label_265: + li $v0 4 + la $a0 data_89 + syscall + li $v0 10 + syscall + label_266: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6645,19 +7079,33 @@ function_menu_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -192($fp) - la $t0 data_70 - sw $t0 -184($fp) - lw $t0 -184($fp) + sw $v0 -268($fp) + la $t0 data_90 + sw $t0 -264($fp) + lw $t0 -264($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -180($fp) + sw $v0 -260($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -256($fp) + lw $t0 -256($fp) + bne $t0 $zero label_267 + j label_268 + label_267: + li $v0 4 + la $a0 data_91 + syscall + li $v0 10 + syscall + label_268: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -180($fp) + lw $t0 -260($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6669,19 +7117,33 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -188($fp) - la $t0 data_71 - sw $t0 -172($fp) - lw $t0 -172($fp) + sw $v0 -252($fp) + la $t0 data_92 + sw $t0 -248($fp) + lw $t0 -248($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -168($fp) + sw $v0 -244($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -240($fp) + lw $t0 -240($fp) + bne $t0 $zero label_269 + j label_270 + label_269: + li $v0 4 + la $a0 data_93 + syscall + li $v0 10 + syscall + label_270: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -168($fp) + lw $t0 -244($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6693,7 +7155,21 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -176($fp) + sw $v0 -236($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -232($fp) + lw $t0 -232($fp) + bne $t0 $zero label_271 + j label_272 + label_271: + li $v0 4 + la $a0 data_94 + syscall + li $v0 10 + syscall + label_272: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6714,19 +7190,33 @@ function_menu_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -164($fp) - la $t0 data_72 - sw $t0 -156($fp) - lw $t0 -156($fp) + sw $v0 -228($fp) + la $t0 data_95 + sw $t0 -224($fp) + lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -152($fp) + sw $v0 -220($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_273 + j label_274 + label_273: + li $v0 4 + la $a0 data_96 + syscall + li $v0 10 + syscall + label_274: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -152($fp) + lw $t0 -220($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6738,19 +7228,33 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -160($fp) - la $t0 data_73 - sw $t0 -144($fp) - lw $t0 -144($fp) + sw $v0 -212($fp) + la $t0 data_97 + sw $t0 -208($fp) + lw $t0 -208($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -140($fp) + sw $v0 -204($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -200($fp) + lw $t0 -200($fp) + bne $t0 $zero label_275 + j label_276 + label_275: + li $v0 4 + la $a0 data_98 + syscall + li $v0 10 + syscall + label_276: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -140($fp) + lw $t0 -204($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6762,7 +7266,21 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -148($fp) + sw $v0 -196($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -192($fp) + lw $t0 -192($fp) + bne $t0 $zero label_277 + j label_278 + label_277: + li $v0 4 + la $a0 data_99 + syscall + li $v0 10 + syscall + label_278: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6783,19 +7301,33 @@ function_menu_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -136($fp) - la $t0 data_74 - sw $t0 -128($fp) - lw $t0 -128($fp) + sw $v0 -188($fp) + la $t0 data_100 + sw $t0 -184($fp) + lw $t0 -184($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -124($fp) + sw $v0 -180($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_279 + j label_280 + label_279: + li $v0 4 + la $a0 data_101 + syscall + li $v0 10 + syscall + label_280: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -124($fp) + lw $t0 -180($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6807,19 +7339,33 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -132($fp) - la $t0 data_75 - sw $t0 -116($fp) - lw $t0 -116($fp) + sw $v0 -172($fp) + la $t0 data_102 + sw $t0 -168($fp) + lw $t0 -168($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -112($fp) + sw $v0 -164($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_281 + j label_282 + label_281: + li $v0 4 + la $a0 data_103 + syscall + li $v0 10 + syscall + label_282: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -112($fp) + lw $t0 -164($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6831,7 +7377,21 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -120($fp) + sw $v0 -156($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -152($fp) + lw $t0 -152($fp) + bne $t0 $zero label_283 + j label_284 + label_283: + li $v0 4 + la $a0 data_104 + syscall + li $v0 10 + syscall + label_284: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6852,19 +7412,33 @@ function_menu_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -108($fp) - la $t0 data_76 - sw $t0 -100($fp) - lw $t0 -100($fp) + sw $v0 -148($fp) + la $t0 data_105 + sw $t0 -144($fp) + lw $t0 -144($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -96($fp) + sw $v0 -140($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -136($fp) + lw $t0 -136($fp) + bne $t0 $zero label_285 + j label_286 + label_285: + li $v0 4 + la $a0 data_106 + syscall + li $v0 10 + syscall + label_286: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -96($fp) + lw $t0 -140($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6876,19 +7450,33 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -104($fp) - la $t0 data_77 - sw $t0 -88($fp) - lw $t0 -88($fp) + sw $v0 -132($fp) + la $t0 data_107 + sw $t0 -128($fp) + lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -84($fp) + sw $v0 -124($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_287 + j label_288 + label_287: + li $v0 4 + la $a0 data_108 + syscall + li $v0 10 + syscall + label_288: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -84($fp) + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6900,7 +7488,21 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -92($fp) + sw $v0 -116($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_289 + j label_290 + label_289: + li $v0 4 + la $a0 data_109 + syscall + li $v0 10 + syscall + label_290: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6921,19 +7523,33 @@ function_menu_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -80($fp) - la $t0 data_78 - sw $t0 -72($fp) - lw $t0 -72($fp) + sw $v0 -108($fp) + la $t0 data_110 + sw $t0 -104($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -68($fp) + sw $v0 -100($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_291 + j label_292 + label_291: + li $v0 4 + la $a0 data_111 + syscall + li $v0 10 + syscall + label_292: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -68($fp) + lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6945,19 +7561,33 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -76($fp) - la $t0 data_79 - sw $t0 -60($fp) - lw $t0 -60($fp) + sw $v0 -92($fp) + la $t0 data_112 + sw $t0 -88($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -56($fp) + sw $v0 -84($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_293 + j label_294 + label_293: + li $v0 4 + la $a0 data_113 + syscall + li $v0 10 + syscall + label_294: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -56($fp) + lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6969,7 +7599,21 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -64($fp) + sw $v0 -76($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_295 + j label_296 + label_295: + li $v0 4 + la $a0 data_114 + syscall + li $v0 10 + syscall + label_296: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6990,19 +7634,33 @@ function_menu_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -52($fp) - la $t0 data_80 - sw $t0 -44($fp) - lw $t0 -44($fp) + sw $v0 -68($fp) + la $t0 data_115 + sw $t0 -64($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -40($fp) + sw $v0 -60($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_297 + j label_298 + label_297: + li $v0 4 + la $a0 data_116 + syscall + li $v0 10 + syscall + label_298: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -40($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -7014,19 +7672,33 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -48($fp) - la $t0 data_81 - sw $t0 -32($fp) - lw $t0 -32($fp) + sw $v0 -52($fp) + la $t0 data_117 + sw $t0 -48($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -28($fp) + sw $v0 -44($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_299 + j label_300 + label_299: + li $v0 4 + la $a0 data_118 + syscall + li $v0 10 + syscall + label_300: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -28($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -7039,18 +7711,32 @@ function_menu_at_Main: jalr $ra $t0 addi $sp $sp 8 sw $v0 -36($fp) - la $t0 data_82 - sw $t0 -20($fp) - lw $t0 -20($fp) + la $t0 data_119 + sw $t0 -32($fp) + lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -16($fp) + sw $v0 -28($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_301 + j label_302 + label_301: + li $v0 4 + la $a0 data_120 + syscall + li $v0 10 + syscall + label_302: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -16($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -7062,7 +7748,21 @@ function_menu_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -24($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_303 + j label_304 + label_303: + li $v0 4 + la $a0 data_121 + syscall + li $v0 10 + syscall + label_304: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7077,7 +7777,7 @@ function_menu_at_Main: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 268 + addi $sp $sp 376 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -7090,19 +7790,33 @@ function_prompt_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -44 - la $t0 data_83 - sw $t0 -32($fp) - lw $t0 -32($fp) + addi $sp $sp -56 + la $t0 data_122 + sw $t0 -48($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -28($fp) + sw $v0 -44($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_305 + j label_306 + label_305: + li $v0 4 + la $a0 data_123 + syscall + li $v0 10 + syscall + label_306: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -28($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -7115,18 +7829,32 @@ function_prompt_at_Main: jalr $ra $t0 addi $sp $sp 8 sw $v0 -36($fp) - la $t0 data_84 - sw $t0 -20($fp) - lw $t0 -20($fp) + la $t0 data_124 + sw $t0 -32($fp) + lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -16($fp) + sw $v0 -28($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_307 + j label_308 + label_307: + li $v0 4 + la $a0 data_125 + syscall + li $v0 10 + syscall + label_308: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -16($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -7138,7 +7866,21 @@ function_prompt_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -24($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_309 + j label_310 + label_309: + li $v0 4 + la $a0 data_126 + syscall + li $v0 10 + syscall + label_310: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7153,7 +7895,7 @@ function_prompt_at_Main: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 44 + addi $sp $sp 56 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -7166,11 +7908,25 @@ function_get_int_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -40 + addi $sp $sp -44 jal __init_at_A2I - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -32($fp) + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -36($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_311 + j label_312 + label_311: + li $v0 4 + la $a0 data_127 + syscall + li $v0 10 + syscall + label_312: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7185,28 +7941,28 @@ function_get_int_at_Main: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -24($fp) - lw $t0 -32($fp) + sw $t0 -28($fp) + lw $t0 -36($fp) li $t1 0 seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_227 - j label_228 - label_227: + bne $t0 $zero label_313 + j label_314 + label_313: li $v0 4 - la $a0 data_85 + la $a0 data_128 syscall li $v0 10 syscall - label_228: - lw $t0 -32($fp) + label_314: + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -24($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -7217,7 +7973,7 @@ function_get_int_at_Main: addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 40 + addi $sp $sp 44 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -7230,258 +7986,272 @@ function_is_even_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -192 + addi $sp $sp -200 lw $t0 0($fp) - sw $t0 -184($fp) - lw $t0 -184($fp) + sw $t0 -192($fp) + lw $t0 -192($fp) lw $t1 12($t0) - sw $t1 -168($fp) + sw $t1 -176($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) + sw $v0 -164($fp) + lw $t0 -164($fp) lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -168($fp) - lw $t1 -164($fp) + sw $t1 -172($fp) + lw $t0 -176($fp) + lw $t1 -172($fp) slt $t1 $t0 $t1 - sw $t1 -160($fp) - lw $t0 -160($fp) + sw $t1 -168($fp) + lw $t0 -168($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -172($fp) - lw $t0 -172($fp) + sw $v0 -180($fp) + lw $t0 -180($fp) lw $t1 12($t0) - sw $t1 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_241 + sw $t1 -184($fp) + lw $t0 -184($fp) + bne $t0 $zero label_329 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) + sw $v0 -116($fp) + lw $t0 -116($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -132($fp) + sw $t1 -140($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -128($fp) + sw $t0 -136($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -124($fp) + sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) + sw $t0 -128($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_229 - lw $t0 -132($fp) - lw $t1 -124($fp) + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_315 + lw $t0 -140($fp) + lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_230 - lw $t0 -132($fp) - lw $t1 -120($fp) + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_316 + lw $t0 -140($fp) + lw $t1 -128($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_317 lw $t0 -116($fp) - bne $t0 $zero label_231 - lw $t0 -108($fp) - lw $t1 -184($fp) + lw $t1 -192($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_232 - label_229: - lw $t0 -108($fp) + sw $t0 -120($fp) + j label_318 + label_315: + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -184($fp) + sw $t1 -148($fp) + lw $t0 -192($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_232 - label_230: - lw $t0 -108($fp) + sw $t0 -120($fp) + j label_318 + label_316: + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -184($fp) + sw $t1 -148($fp) + lw $t0 -192($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) + sw $t1 -144($fp) + lw $t0 -148($fp) move $a0 $t0 - lw $t0 -136($fp) + lw $t0 -144($fp) move $a1 $t0 jal equal_str - sw $v0 -112($fp) - j label_232 - label_231: - lw $t0 -108($fp) + sw $v0 -120($fp) + j label_318 + label_317: + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -184($fp) + sw $t1 -148($fp) + lw $t0 -192($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_232 - label_232: - lw $t0 -112($fp) + sw $t0 -120($fp) + j label_318 + label_318: + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) + sw $v0 -152($fp) + lw $t0 -152($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_239 + sw $t1 -156($fp) + lw $t0 -156($fp) + bne $t0 $zero label_327 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) + sw $v0 -68($fp) + lw $t0 -68($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -84($fp) + sw $t1 -92($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -80($fp) + sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -76($fp) + sw $t0 -84($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -72($fp) - lw $t0 -84($fp) + sw $t0 -80($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_319 + lw $t0 -92($fp) + lw $t1 -84($fp) + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_320 + lw $t0 -92($fp) lw $t1 -80($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_233 - lw $t0 -84($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -68($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_321 lw $t0 -68($fp) - bne $t0 $zero label_234 - lw $t0 -84($fp) - lw $t1 -72($fp) + lw $t1 -192($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) + sw $t0 -72($fp) + j label_322 + label_319: lw $t0 -68($fp) - bne $t0 $zero label_235 - lw $t0 -60($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -64($fp) - j label_236 - label_233: - lw $t0 -60($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -184($fp) + sw $t1 -100($fp) + lw $t0 -192($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -64($fp) - j label_236 - label_234: - lw $t0 -60($fp) + sw $t0 -72($fp) + j label_322 + label_320: + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -184($fp) + sw $t1 -100($fp) + lw $t0 -192($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) move $a0 $t0 - lw $t0 -88($fp) + lw $t0 -96($fp) move $a1 $t0 jal equal_str - sw $v0 -64($fp) - j label_236 - label_235: - lw $t0 -60($fp) + sw $v0 -72($fp) + j label_322 + label_321: + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -184($fp) + sw $t1 -100($fp) + lw $t0 -192($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -64($fp) - j label_236 - label_236: - lw $t0 -64($fp) + sw $t0 -72($fp) + j label_322 + label_322: + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) + sw $v0 -104($fp) + lw $t0 -104($fp) lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_237 - lw $t0 -184($fp) + sw $t1 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_325 + lw $t0 -192($fp) lw $t1 12($t0) - sw $t1 -48($fp) + sw $t1 -60($fp) li $t0 2 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -44($fp) + sw $v0 -48($fp) lw $t0 -48($fp) - lw $t1 -44($fp) + lw $t1 12($t0) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) sub $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) + sw $t0 -52($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) + sw $v0 -64($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_323 + j label_324 + label_323: + li $v0 4 + la $a0 data_129 + syscall + li $v0 10 + syscall + label_324: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -7493,54 +8263,68 @@ function_is_even_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -56($fp) - lw $t0 -56($fp) - sw $t0 -104($fp) - j label_238 - label_237: + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -112($fp) + j label_326 + label_325: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -104($fp) - label_238: - lw $t0 -104($fp) - sw $t0 -152($fp) - j label_240 - label_239: + sw $v0 -36($fp) + lw $t0 -36($fp) + sw $t0 -112($fp) + label_326: + lw $t0 -112($fp) + sw $t0 -160($fp) + j label_328 + label_327: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -152($fp) - label_240: - lw $t0 -152($fp) - sw $t0 -180($fp) - j label_242 - label_241: - lw $t0 -184($fp) + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -160($fp) + label_328: + lw $t0 -160($fp) + sw $t0 -188($fp) + j label_332 + label_329: + lw $t0 -192($fp) lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) + sw $t1 -24($fp) + lw $t0 -24($fp) not $t0 $t0 addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) + sw $t0 -20($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -20($fp) + sw $v0 -28($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_330 + j label_331 + label_330: + li $v0 4 + la $a0 data_130 + syscall + li $v0 10 + syscall + label_331: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -20($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -7552,12 +8336,12 @@ function_is_even_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -180($fp) - label_242: - lw $v0 -180($fp) - addi $sp $sp 192 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -188($fp) + label_332: + lw $v0 -188($fp) + addi $sp $sp 200 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -7570,168 +8354,182 @@ function_class_type_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -132 + addi $sp $sp -156 lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -120($fp) + sw $t1 -144($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_243 - j label_244 - label_243: + sw $t0 -136($fp) + lw $t0 -136($fp) + bne $t0 $zero label_333 + j label_334 + label_333: li $v0 4 - la $a0 data_86 + la $a0 data_131 syscall li $v0 10 syscall - label_244: + label_334: la $t0 types_table addi $t0 $t0 36 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_245 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_335 la $t0 types_table addi $t0 $t0 28 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_246 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_338 la $t0 types_table addi $t0 $t0 32 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_247 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_341 la $t0 types_table addi $t0 $t0 24 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_248 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_344 la $t0 types_table addi $t0 $t0 20 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_249 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_347 la $t0 types_table addi $t0 $t0 0 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_250 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_350 la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_250 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_350 la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_250 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_350 la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_250 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_350 la $t0 types_table addi $t0 $t0 4 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_250 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_350 la $t0 types_table addi $t0 $t0 40 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_250 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_350 la $t0 types_table addi $t0 $t0 44 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_250 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_350 li $v0 4 - la $a0 data_87 + la $a0 data_132 syscall li $v0 10 syscall - label_245: + label_335: lw $t0 0($fp) - sw $t0 -104($fp) - la $t0 data_88 - sw $t0 -96($fp) - lw $t0 -96($fp) + sw $t0 -128($fp) + la $t0 data_133 + sw $t0 -124($fp) + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -92($fp) + sw $v0 -120($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_336 + j label_337 + label_336: + li $v0 4 + la $a0 data_134 + syscall + li $v0 10 + syscall + label_337: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -92($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -7743,25 +8541,39 @@ function_class_type_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -124($fp) - j label_251 - label_246: + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -148($fp) + j label_353 + label_338: lw $t0 0($fp) - sw $t0 -88($fp) - la $t0 data_89 - sw $t0 -80($fp) - lw $t0 -80($fp) + sw $t0 -108($fp) + la $t0 data_135 + sw $t0 -104($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -76($fp) + sw $v0 -100($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_339 + j label_340 + label_339: + li $v0 4 + la $a0 data_136 + syscall + li $v0 10 + syscall + label_340: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -76($fp) + lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -7773,25 +8585,39 @@ function_class_type_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -124($fp) - j label_251 - label_247: + sw $v0 -92($fp) + lw $t0 -92($fp) + sw $t0 -148($fp) + j label_353 + label_341: lw $t0 0($fp) - sw $t0 -72($fp) - la $t0 data_90 - sw $t0 -64($fp) - lw $t0 -64($fp) + sw $t0 -88($fp) + la $t0 data_137 + sw $t0 -84($fp) + lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -60($fp) + sw $v0 -80($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_342 + j label_343 + label_342: + li $v0 4 + la $a0 data_138 + syscall + li $v0 10 + syscall + label_343: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -60($fp) + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -7803,25 +8629,39 @@ function_class_type_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -124($fp) - j label_251 - label_248: + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -148($fp) + j label_353 + label_344: lw $t0 0($fp) - sw $t0 -56($fp) - la $t0 data_91 - sw $t0 -48($fp) - lw $t0 -48($fp) + sw $t0 -68($fp) + la $t0 data_139 + sw $t0 -64($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -44($fp) + sw $v0 -60($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_345 + j label_346 + label_345: + li $v0 4 + la $a0 data_140 + syscall + li $v0 10 + syscall + label_346: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -44($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -7835,23 +8675,37 @@ function_class_type_at_Main: addi $sp $sp 8 sw $v0 -52($fp) lw $t0 -52($fp) - sw $t0 -124($fp) - j label_251 - label_249: + sw $t0 -148($fp) + j label_353 + label_347: lw $t0 0($fp) - sw $t0 -40($fp) - la $t0 data_92 - sw $t0 -32($fp) - lw $t0 -32($fp) + sw $t0 -48($fp) + la $t0 data_141 + sw $t0 -44($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -28($fp) + sw $v0 -40($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_348 + j label_349 + label_348: + li $v0 4 + la $a0 data_142 + syscall + li $v0 10 + syscall + label_349: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -28($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -7863,25 +8717,39 @@ function_class_type_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -124($fp) - j label_251 - label_250: + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -148($fp) + j label_353 + label_350: lw $t0 0($fp) + sw $t0 -28($fp) + la $t0 data_143 sw $t0 -24($fp) - la $t0 data_93 - sw $t0 -16($fp) - lw $t0 -16($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_351 + j label_352 + label_351: + li $v0 4 + la $a0 data_144 + syscall + li $v0 10 + syscall + label_352: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -7893,13 +8761,13 @@ function_class_type_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -124($fp) - j label_251 - label_251: - lw $v0 -124($fp) - addi $sp $sp 132 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -148($fp) + j label_353 + label_353: + lw $v0 -148($fp) + addi $sp $sp 156 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -7912,25 +8780,25 @@ function_print_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -56 + addi $sp $sp -64 jal __init_at_A2I - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -48($fp) + sw $v0 -52($fp) + lw $t0 -52($fp) + sw $t0 -56($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_252 - j label_253 - label_252: + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_354 + j label_355 + label_354: li $v0 4 - la $a0 data_94 + la $a0 data_145 syscall li $v0 10 syscall - label_253: + label_355: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7943,28 +8811,28 @@ function_print_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -48($fp) + sw $v0 -44($fp) + lw $t0 -56($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_254 - j label_255 - label_254: + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_356 + j label_357 + label_356: li $v0 4 - la $a0 data_95 + la $a0 data_146 syscall li $v0 10 syscall - label_255: - lw $t0 -48($fp) + label_357: + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -48($fp) + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -7973,11 +8841,25 @@ function_print_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -24($fp) + sw $v0 -36($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_358 + j label_359 + label_358: + li $v0 4 + la $a0 data_147 + syscall + li $v0 10 + syscall + label_359: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -24($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -7989,19 +8871,33 @@ function_print_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -40($fp) - la $t0 data_96 - sw $t0 -16($fp) - lw $t0 -16($fp) + sw $v0 -28($fp) + la $t0 data_148 + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_360 + j label_361 + label_360: + li $v0 4 + la $a0 data_149 + syscall + li $v0 10 + syscall + label_361: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -8013,9 +8909,9 @@ function_print_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $v0 -20($fp) - addi $sp $sp 56 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 64 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -8028,14 +8924,14 @@ function_main_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -1112 + addi $sp $sp -1208 jal __init_at_A - sw $v0 -1104($fp) - lw $t0 -1104($fp) + sw $v0 -1200($fp) + lw $t0 -1200($fp) lw $t1 0($fp) addi $t1 $t1 16 sw $t0 0($t1) - label_256: + label_362: lw $t4 0($fp) lw $t4 24($t4) addi $sp $sp -4 @@ -8043,23 +8939,37 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -1100($fp) - lw $t0 -1100($fp) - bne $t0 $zero label_257 - j label_384 - label_257: - la $t0 data_97 - sw $t0 -1092($fp) - lw $t0 -1092($fp) + sw $t1 -1196($fp) + lw $t0 -1196($fp) + bne $t0 $zero label_363 + j label_538 + label_363: + la $t0 data_150 + sw $t0 -1192($fp) + lw $t0 -1192($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1088($fp) + sw $v0 -1188($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1184($fp) + lw $t0 -1184($fp) + bne $t0 $zero label_364 + j label_365 + label_364: + li $v0 4 + la $a0 data_151 + syscall + li $v0 10 + syscall + label_365: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1088($fp) + lw $t0 -1188($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -8071,7 +8981,21 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1096($fp) + sw $v0 -1180($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1176($fp) + lw $t0 -1176($fp) + bne $t0 $zero label_366 + j label_367 + label_366: + li $v0 4 + la $a0 data_152 + syscall + li $v0 10 + syscall + label_367: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8092,7 +9016,7 @@ function_main_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1084($fp) + sw $v0 -1172($fp) lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -8101,17 +9025,17 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -1068($fp) - lw $t0 -1068($fp) - bne $t0 $zero label_258 - j label_259 - label_258: + sw $t0 -1160($fp) + lw $t0 -1160($fp) + bne $t0 $zero label_368 + j label_369 + label_368: li $v0 4 - la $a0 data_98 + la $a0 data_153 syscall li $v0 10 syscall - label_259: + label_369: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -8134,11 +9058,25 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -1064($fp) + sw $v0 -1156($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1152($fp) + lw $t0 -1152($fp) + bne $t0 $zero label_370 + j label_371 + label_370: + li $v0 4 + la $a0 data_154 + syscall + li $v0 10 + syscall + label_371: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1064($fp) + lw $t0 -1156($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -8150,24 +9088,38 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1072($fp) - lw $t0 -1072($fp) + sw $v0 -1148($fp) + lw $t0 -1148($fp) lw $t1 12($t0) - sw $t1 -1076($fp) - lw $t0 -1076($fp) - bne $t0 $zero label_260 - la $t0 data_99 - sw $t0 -1056($fp) - lw $t0 -1056($fp) + sw $t1 -1164($fp) + lw $t0 -1164($fp) + bne $t0 $zero label_374 + la $t0 data_155 + sw $t0 -1144($fp) + lw $t0 -1144($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1052($fp) + sw $v0 -1140($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1136($fp) + lw $t0 -1136($fp) + bne $t0 $zero label_372 + j label_373 + label_372: + li $v0 4 + la $a0 data_156 + syscall + li $v0 10 + syscall + label_373: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1052($fp) + lw $t0 -1140($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -8179,23 +9131,37 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1060($fp) - lw $t0 -1060($fp) - sw $t0 -1080($fp) - j label_261 - label_260: - la $t0 data_100 - sw $t0 -1044($fp) - lw $t0 -1044($fp) + sw $v0 -1132($fp) + lw $t0 -1132($fp) + sw $t0 -1168($fp) + j label_377 + label_374: + la $t0 data_157 + sw $t0 -1128($fp) + lw $t0 -1128($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1040($fp) + sw $v0 -1124($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1120($fp) + lw $t0 -1120($fp) + bne $t0 $zero label_375 + j label_376 + label_375: + li $v0 4 + la $a0 data_158 + syscall + li $v0 10 + syscall + label_376: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1040($fp) + lw $t0 -1124($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -8207,10 +9173,24 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1048($fp) - lw $t0 -1048($fp) - sw $t0 -1080($fp) - label_261: + sw $v0 -1116($fp) + lw $t0 -1116($fp) + sw $t0 -1168($fp) + label_377: + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1112($fp) + lw $t0 -1112($fp) + bne $t0 $zero label_378 + j label_379 + label_378: + li $v0 4 + la $a0 data_159 + syscall + li $v0 10 + syscall + label_379: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8231,7 +9211,21 @@ function_main_at_Main: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1036($fp) + sw $v0 -1108($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1104($fp) + lw $t0 -1104($fp) + bne $t0 $zero label_380 + j label_381 + label_380: + li $v0 4 + la $a0 data_160 + syscall + li $v0 10 + syscall + label_381: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8244,19 +9238,19 @@ function_main_at_Main: lw $t0 44($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -1032($fp) - lw $t0 -1032($fp) + sw $v0 -1100($fp) + lw $t0 -1100($fp) lw $t1 0($fp) addi $t1 $t1 20 sw $t0 0($t1) - la $t0 data_101 - sw $t0 -984($fp) - lw $t0 -984($fp) + la $t0 data_161 + sw $t0 -1052($fp) + lw $t0 -1052($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -980($fp) + sw $v0 -1048($fp) lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8268,48 +9262,48 @@ function_main_at_Main: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -1008($fp) + sw $t1 -1076($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -1004($fp) + sw $t0 -1072($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -1000($fp) + sw $t0 -1068($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -996($fp) - lw $t0 -1008($fp) - lw $t1 -1004($fp) + sw $t0 -1064($fp) + lw $t0 -1076($fp) + lw $t1 -1072($fp) seq $t0 $t0 $t1 - sw $t0 -992($fp) - lw $t0 -992($fp) - bne $t0 $zero label_262 - lw $t0 -1008($fp) - lw $t1 -1000($fp) + sw $t0 -1060($fp) + lw $t0 -1060($fp) + bne $t0 $zero label_382 + lw $t0 -1076($fp) + lw $t1 -1068($fp) seq $t0 $t0 $t1 - sw $t0 -992($fp) - lw $t0 -992($fp) - bne $t0 $zero label_263 - lw $t0 -1008($fp) - lw $t1 -996($fp) + sw $t0 -1060($fp) + lw $t0 -1060($fp) + bne $t0 $zero label_383 + lw $t0 -1076($fp) + lw $t1 -1064($fp) seq $t0 $t0 $t1 - sw $t0 -992($fp) - lw $t0 -992($fp) - bne $t0 $zero label_264 + sw $t0 -1060($fp) + lw $t0 -1060($fp) + bne $t0 $zero label_384 lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - lw $t1 -980($fp) + lw $t1 -1048($fp) seq $t0 $t0 $t1 - sw $t0 -988($fp) - j label_265 - label_262: + sw $t0 -1056($fp) + j label_385 + label_382: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8317,16 +9311,16 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -1016($fp) - lw $t0 -980($fp) + sw $t1 -1084($fp) + lw $t0 -1048($fp) lw $t1 12($t0) - sw $t1 -1012($fp) - lw $t0 -1016($fp) - lw $t1 -1012($fp) + sw $t1 -1080($fp) + lw $t0 -1084($fp) + lw $t1 -1080($fp) seq $t0 $t0 $t1 - sw $t0 -988($fp) - j label_265 - label_263: + sw $t0 -1056($fp) + j label_385 + label_383: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8334,18 +9328,18 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -1016($fp) - lw $t0 -980($fp) + sw $t1 -1084($fp) + lw $t0 -1048($fp) lw $t1 12($t0) - sw $t1 -1012($fp) - lw $t0 -1016($fp) + sw $t1 -1080($fp) + lw $t0 -1084($fp) move $a0 $t0 - lw $t0 -1012($fp) + lw $t0 -1080($fp) move $a1 $t0 jal equal_str - sw $v0 -988($fp) - j label_265 - label_264: + sw $v0 -1056($fp) + j label_385 + label_384: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8353,35 +9347,35 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -1016($fp) - lw $t0 -980($fp) + sw $t1 -1084($fp) + lw $t0 -1048($fp) lw $t1 12($t0) - sw $t1 -1012($fp) - lw $t0 -1016($fp) - lw $t1 -1012($fp) + sw $t1 -1080($fp) + lw $t0 -1084($fp) + lw $t1 -1080($fp) seq $t0 $t0 $t1 - sw $t0 -988($fp) - j label_265 - label_265: - lw $t0 -988($fp) + sw $t0 -1056($fp) + j label_385 + label_385: + lw $t0 -1056($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -1020($fp) - lw $t0 -1020($fp) + sw $v0 -1088($fp) + lw $t0 -1088($fp) lw $t1 12($t0) - sw $t1 -1024($fp) - lw $t0 -1024($fp) - bne $t0 $zero label_374 - la $t0 data_102 - sw $t0 -932($fp) - lw $t0 -932($fp) + sw $t1 -1092($fp) + lw $t0 -1092($fp) + bne $t0 $zero label_526 + la $t0 data_162 + sw $t0 -1000($fp) + lw $t0 -1000($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -928($fp) + sw $v0 -996($fp) lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8393,48 +9387,48 @@ function_main_at_Main: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -956($fp) + sw $t1 -1024($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -952($fp) + sw $t0 -1020($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -948($fp) + sw $t0 -1016($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -944($fp) - lw $t0 -956($fp) - lw $t1 -952($fp) + sw $t0 -1012($fp) + lw $t0 -1024($fp) + lw $t1 -1020($fp) seq $t0 $t0 $t1 - sw $t0 -940($fp) - lw $t0 -940($fp) - bne $t0 $zero label_266 - lw $t0 -956($fp) - lw $t1 -948($fp) + sw $t0 -1008($fp) + lw $t0 -1008($fp) + bne $t0 $zero label_386 + lw $t0 -1024($fp) + lw $t1 -1016($fp) seq $t0 $t0 $t1 - sw $t0 -940($fp) - lw $t0 -940($fp) - bne $t0 $zero label_267 - lw $t0 -956($fp) - lw $t1 -944($fp) + sw $t0 -1008($fp) + lw $t0 -1008($fp) + bne $t0 $zero label_387 + lw $t0 -1024($fp) + lw $t1 -1012($fp) seq $t0 $t0 $t1 - sw $t0 -940($fp) - lw $t0 -940($fp) - bne $t0 $zero label_268 + sw $t0 -1008($fp) + lw $t0 -1008($fp) + bne $t0 $zero label_388 lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - lw $t1 -928($fp) + lw $t1 -996($fp) seq $t0 $t0 $t1 - sw $t0 -936($fp) - j label_269 - label_266: + sw $t0 -1004($fp) + j label_389 + label_386: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8442,16 +9436,16 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -964($fp) - lw $t0 -928($fp) + sw $t1 -1032($fp) + lw $t0 -996($fp) lw $t1 12($t0) - sw $t1 -960($fp) - lw $t0 -964($fp) - lw $t1 -960($fp) + sw $t1 -1028($fp) + lw $t0 -1032($fp) + lw $t1 -1028($fp) seq $t0 $t0 $t1 - sw $t0 -936($fp) - j label_269 - label_267: + sw $t0 -1004($fp) + j label_389 + label_387: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8459,18 +9453,18 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -964($fp) - lw $t0 -928($fp) + sw $t1 -1032($fp) + lw $t0 -996($fp) lw $t1 12($t0) - sw $t1 -960($fp) - lw $t0 -964($fp) + sw $t1 -1028($fp) + lw $t0 -1032($fp) move $a0 $t0 - lw $t0 -960($fp) + lw $t0 -1028($fp) move $a1 $t0 jal equal_str - sw $v0 -936($fp) - j label_269 - label_268: + sw $v0 -1004($fp) + j label_389 + label_388: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8478,35 +9472,35 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -964($fp) - lw $t0 -928($fp) + sw $t1 -1032($fp) + lw $t0 -996($fp) lw $t1 12($t0) - sw $t1 -960($fp) - lw $t0 -964($fp) - lw $t1 -960($fp) + sw $t1 -1028($fp) + lw $t0 -1032($fp) + lw $t1 -1028($fp) seq $t0 $t0 $t1 - sw $t0 -936($fp) - j label_269 - label_269: - lw $t0 -936($fp) + sw $t0 -1004($fp) + j label_389 + label_389: + lw $t0 -1004($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -968($fp) - lw $t0 -968($fp) + sw $v0 -1036($fp) + lw $t0 -1036($fp) lw $t1 12($t0) - sw $t1 -972($fp) - lw $t0 -972($fp) - bne $t0 $zero label_358 - la $t0 data_103 - sw $t0 -880($fp) - lw $t0 -880($fp) + sw $t1 -1040($fp) + lw $t0 -1040($fp) + bne $t0 $zero label_506 + la $t0 data_163 + sw $t0 -948($fp) + lw $t0 -948($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -876($fp) + sw $v0 -944($fp) lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8518,48 +9512,48 @@ function_main_at_Main: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -904($fp) + sw $t1 -972($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -900($fp) + sw $t0 -968($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -896($fp) + sw $t0 -964($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -892($fp) - lw $t0 -904($fp) - lw $t1 -900($fp) + sw $t0 -960($fp) + lw $t0 -972($fp) + lw $t1 -968($fp) seq $t0 $t0 $t1 - sw $t0 -888($fp) - lw $t0 -888($fp) - bne $t0 $zero label_270 - lw $t0 -904($fp) - lw $t1 -896($fp) + sw $t0 -956($fp) + lw $t0 -956($fp) + bne $t0 $zero label_390 + lw $t0 -972($fp) + lw $t1 -964($fp) seq $t0 $t0 $t1 - sw $t0 -888($fp) - lw $t0 -888($fp) - bne $t0 $zero label_271 - lw $t0 -904($fp) - lw $t1 -892($fp) + sw $t0 -956($fp) + lw $t0 -956($fp) + bne $t0 $zero label_391 + lw $t0 -972($fp) + lw $t1 -960($fp) seq $t0 $t0 $t1 - sw $t0 -888($fp) - lw $t0 -888($fp) - bne $t0 $zero label_272 + sw $t0 -956($fp) + lw $t0 -956($fp) + bne $t0 $zero label_392 lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - lw $t1 -876($fp) + lw $t1 -944($fp) seq $t0 $t0 $t1 - sw $t0 -884($fp) - j label_273 - label_270: + sw $t0 -952($fp) + j label_393 + label_390: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8567,16 +9561,16 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -912($fp) - lw $t0 -876($fp) + sw $t1 -980($fp) + lw $t0 -944($fp) lw $t1 12($t0) - sw $t1 -908($fp) - lw $t0 -912($fp) - lw $t1 -908($fp) + sw $t1 -976($fp) + lw $t0 -980($fp) + lw $t1 -976($fp) seq $t0 $t0 $t1 - sw $t0 -884($fp) - j label_273 - label_271: + sw $t0 -952($fp) + j label_393 + label_391: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8584,18 +9578,18 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -912($fp) - lw $t0 -876($fp) + sw $t1 -980($fp) + lw $t0 -944($fp) lw $t1 12($t0) - sw $t1 -908($fp) - lw $t0 -912($fp) + sw $t1 -976($fp) + lw $t0 -980($fp) move $a0 $t0 - lw $t0 -908($fp) + lw $t0 -976($fp) move $a1 $t0 jal equal_str - sw $v0 -884($fp) - j label_273 - label_272: + sw $v0 -952($fp) + j label_393 + label_392: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8603,35 +9597,35 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -912($fp) - lw $t0 -876($fp) + sw $t1 -980($fp) + lw $t0 -944($fp) lw $t1 12($t0) - sw $t1 -908($fp) - lw $t0 -912($fp) - lw $t1 -908($fp) + sw $t1 -976($fp) + lw $t0 -980($fp) + lw $t1 -976($fp) seq $t0 $t0 $t1 - sw $t0 -884($fp) - j label_273 - label_273: - lw $t0 -884($fp) + sw $t0 -952($fp) + j label_393 + label_393: + lw $t0 -952($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -916($fp) - lw $t0 -916($fp) + sw $v0 -984($fp) + lw $t0 -984($fp) lw $t1 12($t0) - sw $t1 -920($fp) - lw $t0 -920($fp) - bne $t0 $zero label_348 - la $t0 data_104 - sw $t0 -828($fp) - lw $t0 -828($fp) + sw $t1 -988($fp) + lw $t0 -988($fp) + bne $t0 $zero label_494 + la $t0 data_164 + sw $t0 -896($fp) + lw $t0 -896($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -824($fp) + sw $v0 -892($fp) lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8643,48 +9637,48 @@ function_main_at_Main: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -852($fp) + sw $t1 -920($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -848($fp) + sw $t0 -916($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -844($fp) + sw $t0 -912($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -840($fp) - lw $t0 -852($fp) - lw $t1 -848($fp) + sw $t0 -908($fp) + lw $t0 -920($fp) + lw $t1 -916($fp) seq $t0 $t0 $t1 - sw $t0 -836($fp) - lw $t0 -836($fp) - bne $t0 $zero label_274 - lw $t0 -852($fp) - lw $t1 -844($fp) + sw $t0 -904($fp) + lw $t0 -904($fp) + bne $t0 $zero label_394 + lw $t0 -920($fp) + lw $t1 -912($fp) seq $t0 $t0 $t1 - sw $t0 -836($fp) - lw $t0 -836($fp) - bne $t0 $zero label_275 - lw $t0 -852($fp) - lw $t1 -840($fp) + sw $t0 -904($fp) + lw $t0 -904($fp) + bne $t0 $zero label_395 + lw $t0 -920($fp) + lw $t1 -908($fp) seq $t0 $t0 $t1 - sw $t0 -836($fp) - lw $t0 -836($fp) - bne $t0 $zero label_276 + sw $t0 -904($fp) + lw $t0 -904($fp) + bne $t0 $zero label_396 lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - lw $t1 -824($fp) + lw $t1 -892($fp) seq $t0 $t0 $t1 - sw $t0 -832($fp) - j label_277 - label_274: + sw $t0 -900($fp) + j label_397 + label_394: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8692,16 +9686,16 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -860($fp) - lw $t0 -824($fp) + sw $t1 -928($fp) + lw $t0 -892($fp) lw $t1 12($t0) - sw $t1 -856($fp) - lw $t0 -860($fp) - lw $t1 -856($fp) + sw $t1 -924($fp) + lw $t0 -928($fp) + lw $t1 -924($fp) seq $t0 $t0 $t1 - sw $t0 -832($fp) - j label_277 - label_275: + sw $t0 -900($fp) + j label_397 + label_395: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8709,18 +9703,18 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -860($fp) - lw $t0 -824($fp) + sw $t1 -928($fp) + lw $t0 -892($fp) lw $t1 12($t0) - sw $t1 -856($fp) - lw $t0 -860($fp) + sw $t1 -924($fp) + lw $t0 -928($fp) move $a0 $t0 - lw $t0 -856($fp) + lw $t0 -924($fp) move $a1 $t0 jal equal_str - sw $v0 -832($fp) - j label_277 - label_276: + sw $v0 -900($fp) + j label_397 + label_396: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8728,35 +9722,35 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -860($fp) - lw $t0 -824($fp) + sw $t1 -928($fp) + lw $t0 -892($fp) lw $t1 12($t0) - sw $t1 -856($fp) - lw $t0 -860($fp) - lw $t1 -856($fp) + sw $t1 -924($fp) + lw $t0 -928($fp) + lw $t1 -924($fp) seq $t0 $t0 $t1 - sw $t0 -832($fp) - j label_277 - label_277: - lw $t0 -832($fp) + sw $t0 -900($fp) + j label_397 + label_397: + lw $t0 -900($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -864($fp) - lw $t0 -864($fp) + sw $v0 -932($fp) + lw $t0 -932($fp) lw $t1 12($t0) - sw $t1 -868($fp) - lw $t0 -868($fp) - bne $t0 $zero label_342 - la $t0 data_105 - sw $t0 -776($fp) - lw $t0 -776($fp) + sw $t1 -936($fp) + lw $t0 -936($fp) + bne $t0 $zero label_488 + la $t0 data_165 + sw $t0 -844($fp) + lw $t0 -844($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -772($fp) + sw $v0 -840($fp) lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8768,48 +9762,48 @@ function_main_at_Main: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -800($fp) + sw $t1 -868($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -796($fp) + sw $t0 -864($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -792($fp) + sw $t0 -860($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -788($fp) - lw $t0 -800($fp) - lw $t1 -796($fp) + sw $t0 -856($fp) + lw $t0 -868($fp) + lw $t1 -864($fp) seq $t0 $t0 $t1 - sw $t0 -784($fp) - lw $t0 -784($fp) - bne $t0 $zero label_278 - lw $t0 -800($fp) - lw $t1 -792($fp) + sw $t0 -852($fp) + lw $t0 -852($fp) + bne $t0 $zero label_398 + lw $t0 -868($fp) + lw $t1 -860($fp) seq $t0 $t0 $t1 - sw $t0 -784($fp) - lw $t0 -784($fp) - bne $t0 $zero label_279 - lw $t0 -800($fp) - lw $t1 -788($fp) + sw $t0 -852($fp) + lw $t0 -852($fp) + bne $t0 $zero label_399 + lw $t0 -868($fp) + lw $t1 -856($fp) seq $t0 $t0 $t1 - sw $t0 -784($fp) - lw $t0 -784($fp) - bne $t0 $zero label_280 + sw $t0 -852($fp) + lw $t0 -852($fp) + bne $t0 $zero label_400 lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - lw $t1 -772($fp) + lw $t1 -840($fp) seq $t0 $t0 $t1 - sw $t0 -780($fp) - j label_281 - label_278: + sw $t0 -848($fp) + j label_401 + label_398: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8817,16 +9811,16 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -808($fp) - lw $t0 -772($fp) + sw $t1 -876($fp) + lw $t0 -840($fp) lw $t1 12($t0) - sw $t1 -804($fp) - lw $t0 -808($fp) - lw $t1 -804($fp) + sw $t1 -872($fp) + lw $t0 -876($fp) + lw $t1 -872($fp) seq $t0 $t0 $t1 - sw $t0 -780($fp) - j label_281 - label_279: + sw $t0 -848($fp) + j label_401 + label_399: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8834,18 +9828,18 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -808($fp) - lw $t0 -772($fp) + sw $t1 -876($fp) + lw $t0 -840($fp) lw $t1 12($t0) - sw $t1 -804($fp) - lw $t0 -808($fp) + sw $t1 -872($fp) + lw $t0 -876($fp) move $a0 $t0 - lw $t0 -804($fp) + lw $t0 -872($fp) move $a1 $t0 jal equal_str - sw $v0 -780($fp) - j label_281 - label_280: + sw $v0 -848($fp) + j label_401 + label_400: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8853,35 +9847,35 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -808($fp) - lw $t0 -772($fp) + sw $t1 -876($fp) + lw $t0 -840($fp) lw $t1 12($t0) - sw $t1 -804($fp) - lw $t0 -808($fp) - lw $t1 -804($fp) + sw $t1 -872($fp) + lw $t0 -876($fp) + lw $t1 -872($fp) seq $t0 $t0 $t1 - sw $t0 -780($fp) - j label_281 - label_281: - lw $t0 -780($fp) + sw $t0 -848($fp) + j label_401 + label_401: + lw $t0 -848($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -812($fp) - lw $t0 -812($fp) + sw $v0 -880($fp) + lw $t0 -880($fp) lw $t1 12($t0) - sw $t1 -816($fp) - lw $t0 -816($fp) - bne $t0 $zero label_336 - la $t0 data_106 - sw $t0 -724($fp) - lw $t0 -724($fp) + sw $t1 -884($fp) + lw $t0 -884($fp) + bne $t0 $zero label_482 + la $t0 data_166 + sw $t0 -792($fp) + lw $t0 -792($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -720($fp) + sw $v0 -788($fp) lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8893,48 +9887,48 @@ function_main_at_Main: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -748($fp) + sw $t1 -816($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -744($fp) + sw $t0 -812($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -740($fp) + sw $t0 -808($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -736($fp) - lw $t0 -748($fp) - lw $t1 -744($fp) + sw $t0 -804($fp) + lw $t0 -816($fp) + lw $t1 -812($fp) seq $t0 $t0 $t1 - sw $t0 -732($fp) - lw $t0 -732($fp) - bne $t0 $zero label_282 - lw $t0 -748($fp) - lw $t1 -740($fp) + sw $t0 -800($fp) + lw $t0 -800($fp) + bne $t0 $zero label_402 + lw $t0 -816($fp) + lw $t1 -808($fp) seq $t0 $t0 $t1 - sw $t0 -732($fp) - lw $t0 -732($fp) - bne $t0 $zero label_283 - lw $t0 -748($fp) - lw $t1 -736($fp) + sw $t0 -800($fp) + lw $t0 -800($fp) + bne $t0 $zero label_403 + lw $t0 -816($fp) + lw $t1 -804($fp) seq $t0 $t0 $t1 - sw $t0 -732($fp) - lw $t0 -732($fp) - bne $t0 $zero label_284 + sw $t0 -800($fp) + lw $t0 -800($fp) + bne $t0 $zero label_404 lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - lw $t1 -720($fp) + lw $t1 -788($fp) seq $t0 $t0 $t1 - sw $t0 -728($fp) - j label_285 - label_282: + sw $t0 -796($fp) + j label_405 + label_402: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8942,16 +9936,16 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -756($fp) - lw $t0 -720($fp) + sw $t1 -824($fp) + lw $t0 -788($fp) lw $t1 12($t0) - sw $t1 -752($fp) - lw $t0 -756($fp) - lw $t1 -752($fp) + sw $t1 -820($fp) + lw $t0 -824($fp) + lw $t1 -820($fp) seq $t0 $t0 $t1 - sw $t0 -728($fp) - j label_285 - label_283: + sw $t0 -796($fp) + j label_405 + label_403: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8959,18 +9953,18 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -756($fp) - lw $t0 -720($fp) + sw $t1 -824($fp) + lw $t0 -788($fp) lw $t1 12($t0) - sw $t1 -752($fp) - lw $t0 -756($fp) + sw $t1 -820($fp) + lw $t0 -824($fp) move $a0 $t0 - lw $t0 -752($fp) + lw $t0 -820($fp) move $a1 $t0 jal equal_str - sw $v0 -728($fp) - j label_285 - label_284: + sw $v0 -796($fp) + j label_405 + label_404: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -8978,35 +9972,35 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -756($fp) - lw $t0 -720($fp) + sw $t1 -824($fp) + lw $t0 -788($fp) lw $t1 12($t0) - sw $t1 -752($fp) - lw $t0 -756($fp) - lw $t1 -752($fp) + sw $t1 -820($fp) + lw $t0 -824($fp) + lw $t1 -820($fp) seq $t0 $t0 $t1 - sw $t0 -728($fp) - j label_285 - label_285: - lw $t0 -728($fp) + sw $t0 -796($fp) + j label_405 + label_405: + lw $t0 -796($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -760($fp) - lw $t0 -760($fp) + sw $v0 -828($fp) + lw $t0 -828($fp) lw $t1 12($t0) - sw $t1 -764($fp) - lw $t0 -764($fp) - bne $t0 $zero label_330 - la $t0 data_107 - sw $t0 -672($fp) - lw $t0 -672($fp) + sw $t1 -832($fp) + lw $t0 -832($fp) + bne $t0 $zero label_476 + la $t0 data_167 + sw $t0 -740($fp) + lw $t0 -740($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -668($fp) + sw $v0 -736($fp) lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9018,48 +10012,48 @@ function_main_at_Main: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -696($fp) + sw $t1 -764($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -692($fp) + sw $t0 -760($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -688($fp) + sw $t0 -756($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -684($fp) - lw $t0 -696($fp) - lw $t1 -692($fp) + sw $t0 -752($fp) + lw $t0 -764($fp) + lw $t1 -760($fp) seq $t0 $t0 $t1 - sw $t0 -680($fp) - lw $t0 -680($fp) - bne $t0 $zero label_286 - lw $t0 -696($fp) - lw $t1 -688($fp) + sw $t0 -748($fp) + lw $t0 -748($fp) + bne $t0 $zero label_406 + lw $t0 -764($fp) + lw $t1 -756($fp) seq $t0 $t0 $t1 - sw $t0 -680($fp) - lw $t0 -680($fp) - bne $t0 $zero label_287 - lw $t0 -696($fp) - lw $t1 -684($fp) + sw $t0 -748($fp) + lw $t0 -748($fp) + bne $t0 $zero label_407 + lw $t0 -764($fp) + lw $t1 -752($fp) seq $t0 $t0 $t1 - sw $t0 -680($fp) - lw $t0 -680($fp) - bne $t0 $zero label_288 + sw $t0 -748($fp) + lw $t0 -748($fp) + bne $t0 $zero label_408 lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - lw $t1 -668($fp) + lw $t1 -736($fp) seq $t0 $t0 $t1 - sw $t0 -676($fp) - j label_289 - label_286: + sw $t0 -744($fp) + j label_409 + label_406: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9067,16 +10061,16 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -704($fp) - lw $t0 -668($fp) + sw $t1 -772($fp) + lw $t0 -736($fp) lw $t1 12($t0) - sw $t1 -700($fp) - lw $t0 -704($fp) - lw $t1 -700($fp) + sw $t1 -768($fp) + lw $t0 -772($fp) + lw $t1 -768($fp) seq $t0 $t0 $t1 - sw $t0 -676($fp) - j label_289 - label_287: + sw $t0 -744($fp) + j label_409 + label_407: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9084,18 +10078,18 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -704($fp) - lw $t0 -668($fp) + sw $t1 -772($fp) + lw $t0 -736($fp) lw $t1 12($t0) - sw $t1 -700($fp) - lw $t0 -704($fp) + sw $t1 -768($fp) + lw $t0 -772($fp) move $a0 $t0 - lw $t0 -700($fp) + lw $t0 -768($fp) move $a1 $t0 jal equal_str - sw $v0 -676($fp) - j label_289 - label_288: + sw $v0 -744($fp) + j label_409 + label_408: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9103,35 +10097,35 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -704($fp) - lw $t0 -668($fp) + sw $t1 -772($fp) + lw $t0 -736($fp) lw $t1 12($t0) - sw $t1 -700($fp) - lw $t0 -704($fp) - lw $t1 -700($fp) + sw $t1 -768($fp) + lw $t0 -772($fp) + lw $t1 -768($fp) seq $t0 $t0 $t1 - sw $t0 -676($fp) - j label_289 - label_289: - lw $t0 -676($fp) + sw $t0 -744($fp) + j label_409 + label_409: + lw $t0 -744($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -708($fp) - lw $t0 -708($fp) + sw $v0 -776($fp) + lw $t0 -776($fp) lw $t1 12($t0) - sw $t1 -712($fp) - lw $t0 -712($fp) - bne $t0 $zero label_322 - la $t0 data_108 - sw $t0 -620($fp) - lw $t0 -620($fp) + sw $t1 -780($fp) + lw $t0 -780($fp) + bne $t0 $zero label_456 + la $t0 data_168 + sw $t0 -688($fp) + lw $t0 -688($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -616($fp) + sw $v0 -684($fp) lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9143,48 +10137,48 @@ function_main_at_Main: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -644($fp) + sw $t1 -712($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -640($fp) + sw $t0 -708($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -636($fp) + sw $t0 -704($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -632($fp) - lw $t0 -644($fp) - lw $t1 -640($fp) + sw $t0 -700($fp) + lw $t0 -712($fp) + lw $t1 -708($fp) seq $t0 $t0 $t1 - sw $t0 -628($fp) - lw $t0 -628($fp) - bne $t0 $zero label_290 - lw $t0 -644($fp) - lw $t1 -636($fp) + sw $t0 -696($fp) + lw $t0 -696($fp) + bne $t0 $zero label_410 + lw $t0 -712($fp) + lw $t1 -704($fp) seq $t0 $t0 $t1 - sw $t0 -628($fp) - lw $t0 -628($fp) - bne $t0 $zero label_291 - lw $t0 -644($fp) - lw $t1 -632($fp) + sw $t0 -696($fp) + lw $t0 -696($fp) + bne $t0 $zero label_411 + lw $t0 -712($fp) + lw $t1 -700($fp) seq $t0 $t0 $t1 - sw $t0 -628($fp) - lw $t0 -628($fp) - bne $t0 $zero label_292 + sw $t0 -696($fp) + lw $t0 -696($fp) + bne $t0 $zero label_412 lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - lw $t1 -616($fp) + lw $t1 -684($fp) seq $t0 $t0 $t1 - sw $t0 -624($fp) - j label_293 - label_290: + sw $t0 -692($fp) + j label_413 + label_410: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9192,16 +10186,16 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -652($fp) - lw $t0 -616($fp) + sw $t1 -720($fp) + lw $t0 -684($fp) lw $t1 12($t0) - sw $t1 -648($fp) - lw $t0 -652($fp) - lw $t1 -648($fp) + sw $t1 -716($fp) + lw $t0 -720($fp) + lw $t1 -716($fp) seq $t0 $t0 $t1 - sw $t0 -624($fp) - j label_293 - label_291: + sw $t0 -692($fp) + j label_413 + label_411: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9209,18 +10203,18 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -652($fp) - lw $t0 -616($fp) + sw $t1 -720($fp) + lw $t0 -684($fp) lw $t1 12($t0) - sw $t1 -648($fp) - lw $t0 -652($fp) + sw $t1 -716($fp) + lw $t0 -720($fp) move $a0 $t0 - lw $t0 -648($fp) + lw $t0 -716($fp) move $a1 $t0 jal equal_str - sw $v0 -624($fp) - j label_293 - label_292: + sw $v0 -692($fp) + j label_413 + label_412: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9228,35 +10222,35 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -652($fp) - lw $t0 -616($fp) + sw $t1 -720($fp) + lw $t0 -684($fp) lw $t1 12($t0) - sw $t1 -648($fp) - lw $t0 -652($fp) - lw $t1 -648($fp) + sw $t1 -716($fp) + lw $t0 -720($fp) + lw $t1 -716($fp) seq $t0 $t0 $t1 - sw $t0 -624($fp) - j label_293 - label_293: - lw $t0 -624($fp) + sw $t0 -692($fp) + j label_413 + label_413: + lw $t0 -692($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -656($fp) - lw $t0 -656($fp) + sw $v0 -724($fp) + lw $t0 -724($fp) lw $t1 12($t0) - sw $t1 -660($fp) - lw $t0 -660($fp) - bne $t0 $zero label_310 - la $t0 data_109 - sw $t0 -568($fp) - lw $t0 -568($fp) + sw $t1 -728($fp) + lw $t0 -728($fp) + bne $t0 $zero label_430 + la $t0 data_169 + sw $t0 -636($fp) + lw $t0 -636($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -564($fp) + sw $v0 -632($fp) lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9268,48 +10262,48 @@ function_main_at_Main: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -592($fp) + sw $t1 -660($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -588($fp) + sw $t0 -656($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -584($fp) + sw $t0 -652($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -580($fp) - lw $t0 -592($fp) - lw $t1 -588($fp) + sw $t0 -648($fp) + lw $t0 -660($fp) + lw $t1 -656($fp) seq $t0 $t0 $t1 - sw $t0 -576($fp) - lw $t0 -576($fp) - bne $t0 $zero label_294 - lw $t0 -592($fp) - lw $t1 -584($fp) + sw $t0 -644($fp) + lw $t0 -644($fp) + bne $t0 $zero label_414 + lw $t0 -660($fp) + lw $t1 -652($fp) seq $t0 $t0 $t1 - sw $t0 -576($fp) - lw $t0 -576($fp) - bne $t0 $zero label_295 - lw $t0 -592($fp) - lw $t1 -580($fp) + sw $t0 -644($fp) + lw $t0 -644($fp) + bne $t0 $zero label_415 + lw $t0 -660($fp) + lw $t1 -648($fp) seq $t0 $t0 $t1 - sw $t0 -576($fp) - lw $t0 -576($fp) - bne $t0 $zero label_296 + sw $t0 -644($fp) + lw $t0 -644($fp) + bne $t0 $zero label_416 lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - lw $t1 -564($fp) + lw $t1 -632($fp) seq $t0 $t0 $t1 - sw $t0 -572($fp) - j label_297 - label_294: + sw $t0 -640($fp) + j label_417 + label_414: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9317,16 +10311,16 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -600($fp) - lw $t0 -564($fp) + sw $t1 -668($fp) + lw $t0 -632($fp) lw $t1 12($t0) - sw $t1 -596($fp) - lw $t0 -600($fp) - lw $t1 -596($fp) + sw $t1 -664($fp) + lw $t0 -668($fp) + lw $t1 -664($fp) seq $t0 $t0 $t1 - sw $t0 -572($fp) - j label_297 - label_295: + sw $t0 -640($fp) + j label_417 + label_415: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9334,18 +10328,18 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -600($fp) - lw $t0 -564($fp) + sw $t1 -668($fp) + lw $t0 -632($fp) lw $t1 12($t0) - sw $t1 -596($fp) - lw $t0 -600($fp) + sw $t1 -664($fp) + lw $t0 -668($fp) move $a0 $t0 - lw $t0 -596($fp) + lw $t0 -664($fp) move $a1 $t0 jal equal_str - sw $v0 -572($fp) - j label_297 - label_296: + sw $v0 -640($fp) + j label_417 + label_416: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9353,35 +10347,35 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -600($fp) - lw $t0 -564($fp) + sw $t1 -668($fp) + lw $t0 -632($fp) lw $t1 12($t0) - sw $t1 -596($fp) - lw $t0 -600($fp) - lw $t1 -596($fp) + sw $t1 -664($fp) + lw $t0 -668($fp) + lw $t1 -664($fp) seq $t0 $t0 $t1 - sw $t0 -572($fp) - j label_297 - label_297: - lw $t0 -572($fp) + sw $t0 -640($fp) + j label_417 + label_417: + lw $t0 -640($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -604($fp) - lw $t0 -604($fp) + sw $v0 -672($fp) + lw $t0 -672($fp) lw $t1 12($t0) - sw $t1 -608($fp) - lw $t0 -608($fp) - bne $t0 $zero label_308 - la $t0 data_110 - sw $t0 -516($fp) - lw $t0 -516($fp) + sw $t1 -676($fp) + lw $t0 -676($fp) + bne $t0 $zero label_428 + la $t0 data_170 + sw $t0 -584($fp) + lw $t0 -584($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -512($fp) + sw $v0 -580($fp) lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9393,48 +10387,48 @@ function_main_at_Main: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -540($fp) + sw $t1 -608($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -536($fp) + sw $t0 -604($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -532($fp) + sw $t0 -600($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -528($fp) - lw $t0 -540($fp) - lw $t1 -536($fp) + sw $t0 -596($fp) + lw $t0 -608($fp) + lw $t1 -604($fp) seq $t0 $t0 $t1 - sw $t0 -524($fp) - lw $t0 -524($fp) - bne $t0 $zero label_298 - lw $t0 -540($fp) - lw $t1 -532($fp) + sw $t0 -592($fp) + lw $t0 -592($fp) + bne $t0 $zero label_418 + lw $t0 -608($fp) + lw $t1 -600($fp) seq $t0 $t0 $t1 - sw $t0 -524($fp) - lw $t0 -524($fp) - bne $t0 $zero label_299 - lw $t0 -540($fp) - lw $t1 -528($fp) + sw $t0 -592($fp) + lw $t0 -592($fp) + bne $t0 $zero label_419 + lw $t0 -608($fp) + lw $t1 -596($fp) seq $t0 $t0 $t1 - sw $t0 -524($fp) - lw $t0 -524($fp) - bne $t0 $zero label_300 + sw $t0 -592($fp) + lw $t0 -592($fp) + bne $t0 $zero label_420 lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - lw $t1 -512($fp) + lw $t1 -580($fp) seq $t0 $t0 $t1 - sw $t0 -520($fp) - j label_301 - label_298: + sw $t0 -588($fp) + j label_421 + label_418: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9442,16 +10436,16 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -548($fp) - lw $t0 -512($fp) + sw $t1 -616($fp) + lw $t0 -580($fp) lw $t1 12($t0) - sw $t1 -544($fp) - lw $t0 -548($fp) - lw $t1 -544($fp) + sw $t1 -612($fp) + lw $t0 -616($fp) + lw $t1 -612($fp) seq $t0 $t0 $t1 - sw $t0 -520($fp) - j label_301 - label_299: + sw $t0 -588($fp) + j label_421 + label_419: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9459,18 +10453,18 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -548($fp) - lw $t0 -512($fp) + sw $t1 -616($fp) + lw $t0 -580($fp) lw $t1 12($t0) - sw $t1 -544($fp) - lw $t0 -548($fp) + sw $t1 -612($fp) + lw $t0 -616($fp) move $a0 $t0 - lw $t0 -544($fp) + lw $t0 -612($fp) move $a1 $t0 jal equal_str - sw $v0 -520($fp) - j label_301 - label_300: + sw $v0 -588($fp) + j label_421 + label_420: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -9478,27 +10472,27 @@ function_main_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -548($fp) - lw $t0 -512($fp) + sw $t1 -616($fp) + lw $t0 -580($fp) lw $t1 12($t0) - sw $t1 -544($fp) - lw $t0 -548($fp) - lw $t1 -544($fp) + sw $t1 -612($fp) + lw $t0 -616($fp) + lw $t1 -612($fp) seq $t0 $t0 $t1 - sw $t0 -520($fp) - j label_301 - label_301: - lw $t0 -520($fp) + sw $t0 -588($fp) + j label_421 + label_421: + lw $t0 -588($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -552($fp) - lw $t0 -552($fp) + sw $v0 -620($fp) + lw $t0 -620($fp) lw $t1 12($t0) - sw $t1 -556($fp) - lw $t0 -556($fp) - bne $t0 $zero label_306 + sw $t1 -624($fp) + lw $t0 -624($fp) + bne $t0 $zero label_426 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -9507,17 +10501,17 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -508($fp) - lw $t0 -508($fp) - bne $t0 $zero label_302 - j label_303 - label_302: + sw $t0 -576($fp) + lw $t0 -576($fp) + bne $t0 $zero label_422 + j label_423 + label_422: li $v0 4 - la $a0 data_111 + la $a0 data_171 syscall li $v0 10 syscall - label_303: + label_423: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -9540,30 +10534,30 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -504($fp) + sw $v0 -572($fp) jal __init_at_A - sw $v0 -500($fp) - lw $t0 -500($fp) + sw $v0 -568($fp) + lw $t0 -568($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -496($fp) - lw $t0 -496($fp) - bne $t0 $zero label_304 - j label_305 - label_304: + sw $t0 -564($fp) + lw $t0 -564($fp) + bne $t0 $zero label_424 + j label_425 + label_424: li $v0 4 - la $a0 data_112 + la $a0 data_172 syscall li $v0 10 syscall - label_305: - lw $t0 -500($fp) + label_425: + lw $t0 -568($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -504($fp) + lw $t0 -572($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -500($fp) + lw $t0 -568($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -9572,8 +10566,8 @@ function_main_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -492($fp) - lw $t0 -492($fp) + sw $v0 -560($fp) + lw $t0 -560($fp) lw $t1 0($fp) addi $t1 $t1 16 sw $t0 0($t1) @@ -9583,16 +10577,16 @@ function_main_at_Main: sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -560($fp) - j label_307 - label_306: + sw $t0 -628($fp) + j label_427 + label_426: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -488($fp) - lw $t0 -488($fp) + sw $v0 -556($fp) + lw $t0 -556($fp) lw $t1 0($fp) addi $t1 $t1 24 sw $t0 0($t1) @@ -9602,15 +10596,15 @@ function_main_at_Main: sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -560($fp) - label_307: - lw $t0 -560($fp) - sw $t0 -612($fp) - j label_309 - label_308: + sw $t0 -628($fp) + label_427: + lw $t0 -628($fp) + sw $t0 -680($fp) + j label_429 + label_428: jal __init_at_A - sw $v0 -484($fp) - lw $t0 -484($fp) + sw $v0 -552($fp) + lw $t0 -552($fp) lw $t1 0($fp) addi $t1 $t1 16 sw $t0 0($t1) @@ -9620,12 +10614,12 @@ function_main_at_Main: sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -612($fp) - label_309: - lw $t0 -612($fp) - sw $t0 -664($fp) - j label_321 - label_310: + sw $t0 -680($fp) + label_429: + lw $t0 -680($fp) + sw $t0 -732($fp) + j label_455 + label_430: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -9634,17 +10628,17 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -476($fp) - lw $t0 -476($fp) - bne $t0 $zero label_311 - j label_312 - label_311: + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_431 + j label_432 + label_431: li $v0 4 - la $a0 data_113 + la $a0 data_173 syscall li $v0 10 syscall - label_312: + label_432: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -9667,30 +10661,30 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -472($fp) + sw $v0 -540($fp) jal __init_at_E - sw $v0 -468($fp) - lw $t0 -468($fp) + sw $v0 -536($fp) + lw $t0 -536($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -464($fp) - lw $t0 -464($fp) - bne $t0 $zero label_313 - j label_314 - label_313: + sw $t0 -532($fp) + lw $t0 -532($fp) + bne $t0 $zero label_433 + j label_434 + label_433: li $v0 4 - la $a0 data_114 + la $a0 data_174 syscall li $v0 10 syscall - label_314: - lw $t0 -468($fp) + label_434: + lw $t0 -536($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -472($fp) + lw $t0 -540($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -468($fp) + lw $t0 -536($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -9699,9 +10693,9 @@ function_main_at_Main: lw $t0 44($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -460($fp) - lw $t0 -460($fp) - sw $t0 -480($fp) + sw $v0 -528($fp) + lw $t0 -528($fp) + sw $t0 -548($fp) lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -9710,17 +10704,17 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_315 - j label_316 - label_315: + sw $t0 -504($fp) + lw $t0 -504($fp) + bne $t0 $zero label_435 + j label_436 + label_435: li $v0 4 - la $a0 data_115 + la $a0 data_175 syscall li $v0 10 syscall - label_316: + label_436: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -9743,28 +10737,28 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -432($fp) - lw $t0 -432($fp) + sw $v0 -500($fp) + lw $t0 -500($fp) lw $t1 12($t0) - sw $t1 -448($fp) - lw $t0 -480($fp) + sw $t1 -516($fp) + lw $t0 -548($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -412($fp) - lw $t0 -412($fp) - bne $t0 $zero label_317 - j label_318 - label_317: + sw $t0 -480($fp) + lw $t0 -480($fp) + bne $t0 $zero label_437 + j label_438 + label_437: li $v0 4 - la $a0 data_116 + la $a0 data_176 syscall li $v0 10 syscall - label_318: - lw $t0 -480($fp) + label_438: + lw $t0 -548($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -480($fp) + lw $t0 -548($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -9773,56 +10767,70 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -408($fp) - lw $t0 -408($fp) + sw $v0 -476($fp) + lw $t0 -476($fp) lw $t1 12($t0) - sw $t1 -424($fp) + sw $t1 -492($fp) li $t0 8 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -404($fp) - lw $t0 -404($fp) + sw $v0 -472($fp) + lw $t0 -472($fp) lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -424($fp) - lw $t1 -420($fp) + sw $t1 -488($fp) + lw $t0 -492($fp) + lw $t1 -488($fp) mul $t0 $t0 $t1 - sw $t0 -416($fp) - lw $t0 -416($fp) + sw $t0 -484($fp) + lw $t0 -484($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 -428($fp) + sw $v0 -496($fp) + lw $t0 -496($fp) lw $t1 12($t0) - sw $t1 -444($fp) - lw $t0 -448($fp) - lw $t1 -444($fp) + sw $t1 -512($fp) + lw $t0 -516($fp) + lw $t1 -512($fp) sub $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) + sw $t0 -508($fp) + lw $t0 -508($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -452($fp) - lw $t0 -452($fp) - sw $t0 -456($fp) - la $t0 data_117 - sw $t0 -396($fp) - lw $t0 -396($fp) + sw $v0 -520($fp) + lw $t0 -520($fp) + sw $t0 -524($fp) + la $t0 data_177 + sw $t0 -468($fp) + lw $t0 -468($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -392($fp) + sw $v0 -464($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -460($fp) + lw $t0 -460($fp) + bne $t0 $zero label_439 + j label_440 + label_439: + li $v0 4 + la $a0 data_178 + syscall + li $v0 10 + syscall + label_440: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -392($fp) + lw $t0 -464($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9834,7 +10842,21 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -400($fp) + sw $v0 -456($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -452($fp) + lw $t0 -452($fp) + bne $t0 $zero label_441 + j label_442 + label_441: + li $v0 4 + la $a0 data_179 + syscall + li $v0 10 + syscall + label_442: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -9855,19 +10877,33 @@ function_main_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -388($fp) - la $t0 data_118 - sw $t0 -380($fp) - lw $t0 -380($fp) + sw $v0 -448($fp) + la $t0 data_180 + sw $t0 -444($fp) + lw $t0 -444($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -376($fp) + sw $v0 -440($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_443 + j label_444 + label_443: + li $v0 4 + la $a0 data_181 + syscall + li $v0 10 + syscall + label_444: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -376($fp) + lw $t0 -440($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9879,11 +10915,25 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -384($fp) + sw $v0 -432($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -428($fp) + lw $t0 -428($fp) + bne $t0 $zero label_445 + j label_446 + label_445: + li $v0 4 + la $a0 data_182 + syscall + li $v0 10 + syscall + label_446: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -480($fp) + lw $t0 -548($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9895,19 +10945,33 @@ function_main_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -372($fp) - la $t0 data_119 - sw $t0 -364($fp) - lw $t0 -364($fp) + sw $v0 -424($fp) + la $t0 data_183 + sw $t0 -420($fp) + lw $t0 -420($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -360($fp) + sw $v0 -416($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -412($fp) + lw $t0 -412($fp) + bne $t0 $zero label_447 + j label_448 + label_447: + li $v0 4 + la $a0 data_184 + syscall + li $v0 10 + syscall + label_448: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -360($fp) + lw $t0 -416($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9919,32 +10983,32 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -368($fp) + sw $v0 -408($fp) jal __init_at_A2I - sw $v0 -352($fp) - lw $t0 -352($fp) - sw $t0 -356($fp) - lw $t0 -356($fp) + sw $v0 -400($fp) + lw $t0 -400($fp) + sw $t0 -404($fp) + lw $t0 -404($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -344($fp) - lw $t0 -344($fp) - bne $t0 $zero label_319 - j label_320 - label_319: + sw $t0 -396($fp) + lw $t0 -396($fp) + bne $t0 $zero label_449 + j label_450 + label_449: li $v0 4 - la $a0 data_120 + la $a0 data_185 syscall li $v0 10 syscall - label_320: - lw $t0 -356($fp) + label_450: + lw $t0 -404($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -456($fp) + lw $t0 -524($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -356($fp) + lw $t0 -404($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -9953,11 +11017,25 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -340($fp) + sw $v0 -392($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -388($fp) + lw $t0 -388($fp) + bne $t0 $zero label_451 + j label_452 + label_451: + li $v0 4 + la $a0 data_186 + syscall + li $v0 10 + syscall + label_452: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -340($fp) + lw $t0 -392($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9969,19 +11047,33 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -348($fp) - la $t0 data_121 - sw $t0 -332($fp) - lw $t0 -332($fp) + sw $v0 -384($fp) + la $t0 data_187 + sw $t0 -380($fp) + lw $t0 -380($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -328($fp) + sw $v0 -376($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -372($fp) + lw $t0 -372($fp) + bne $t0 $zero label_453 + j label_454 + label_453: + li $v0 4 + la $a0 data_188 + syscall + li $v0 10 + syscall + label_454: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -328($fp) + lw $t0 -376($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9993,8 +11085,8 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -336($fp) - lw $t0 -480($fp) + sw $v0 -368($fp) + lw $t0 -548($fp) lw $t1 0($fp) addi $t1 $t1 16 sw $t0 0($t1) @@ -10004,12 +11096,12 @@ function_main_at_Main: sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -664($fp) - label_321: - lw $t0 -664($fp) - sw $t0 -716($fp) - j label_329 - label_322: + sw $t0 -732($fp) + label_455: + lw $t0 -732($fp) + sw $t0 -784($fp) + j label_475 + label_456: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -10018,17 +11110,17 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_323 - j label_324 - label_323: + sw $t0 -356($fp) + lw $t0 -356($fp) + bne $t0 $zero label_457 + j label_458 + label_457: li $v0 4 - la $a0 data_122 + la $a0 data_189 syscall li $v0 10 syscall - label_324: + label_458: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -10051,30 +11143,30 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -312($fp) + sw $v0 -352($fp) jal __init_at_D - sw $v0 -308($fp) - lw $t0 -308($fp) + sw $v0 -348($fp) + lw $t0 -348($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_325 - j label_326 - label_325: + sw $t0 -344($fp) + lw $t0 -344($fp) + bne $t0 $zero label_459 + j label_460 + label_459: li $v0 4 - la $a0 data_123 + la $a0 data_190 syscall li $v0 10 syscall - label_326: - lw $t0 -308($fp) + label_460: + lw $t0 -348($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -312($fp) + lw $t0 -352($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -308($fp) + lw $t0 -348($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -10083,24 +11175,38 @@ function_main_at_Main: lw $t0 40($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -300($fp) - lw $t0 -300($fp) + sw $v0 -340($fp) + lw $t0 -340($fp) lw $t1 12($t0) - sw $t1 -320($fp) - lw $t0 -320($fp) - bne $t0 $zero label_327 - la $t0 data_124 - sw $t0 -292($fp) - lw $t0 -292($fp) + sw $t1 -360($fp) + lw $t0 -360($fp) + bne $t0 $zero label_467 + la $t0 data_191 + sw $t0 -336($fp) + lw $t0 -336($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -288($fp) + sw $v0 -332($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -328($fp) + lw $t0 -328($fp) + bne $t0 $zero label_461 + j label_462 + label_461: + li $v0 4 + la $a0 data_192 + syscall + li $v0 10 + syscall + label_462: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -288($fp) + lw $t0 -332($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -10112,7 +11218,21 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -296($fp) + sw $v0 -324($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -320($fp) + lw $t0 -320($fp) + bne $t0 $zero label_463 + j label_464 + label_463: + li $v0 4 + la $a0 data_193 + syscall + li $v0 10 + syscall + label_464: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -10133,19 +11253,33 @@ function_main_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -284($fp) - la $t0 data_125 - sw $t0 -276($fp) - lw $t0 -276($fp) + sw $v0 -316($fp) + la $t0 data_194 + sw $t0 -312($fp) + lw $t0 -312($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -272($fp) + sw $v0 -308($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_465 + j label_466 + label_465: + li $v0 4 + la $a0 data_195 + syscall + li $v0 10 + syscall + label_466: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -272($fp) + lw $t0 -308($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -10157,23 +11291,37 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -280($fp) - lw $t0 -280($fp) - sw $t0 -324($fp) - j label_328 - label_327: - la $t0 data_126 - sw $t0 -264($fp) - lw $t0 -264($fp) + sw $v0 -300($fp) + lw $t0 -300($fp) + sw $t0 -364($fp) + j label_474 + label_467: + la $t0 data_196 + sw $t0 -296($fp) + lw $t0 -296($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -260($fp) + sw $v0 -292($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -288($fp) + lw $t0 -288($fp) + bne $t0 $zero label_468 + j label_469 + label_468: + li $v0 4 + la $a0 data_197 + syscall + li $v0 10 + syscall + label_469: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -260($fp) + lw $t0 -292($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -10185,7 +11333,21 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -268($fp) + sw $v0 -284($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -280($fp) + lw $t0 -280($fp) + bne $t0 $zero label_470 + j label_471 + label_470: + li $v0 4 + la $a0 data_198 + syscall + li $v0 10 + syscall + label_471: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -10206,19 +11368,33 @@ function_main_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -256($fp) - la $t0 data_127 - sw $t0 -248($fp) - lw $t0 -248($fp) + sw $v0 -276($fp) + la $t0 data_199 + sw $t0 -272($fp) + lw $t0 -272($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -244($fp) + sw $v0 -268($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -264($fp) + lw $t0 -264($fp) + bne $t0 $zero label_472 + j label_473 + label_472: + li $v0 4 + la $a0 data_200 + syscall + li $v0 10 + syscall + label_473: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -244($fp) + lw $t0 -268($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -10230,17 +11406,17 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -252($fp) - lw $t0 -252($fp) - sw $t0 -324($fp) - label_328: - lw $t0 -324($fp) - sw $t0 -716($fp) - label_329: - lw $t0 -716($fp) - sw $t0 -768($fp) - j label_335 - label_330: + sw $v0 -260($fp) + lw $t0 -260($fp) + sw $t0 -364($fp) + label_474: + lw $t0 -364($fp) + sw $t0 -784($fp) + label_475: + lw $t0 -784($fp) + sw $t0 -836($fp) + j label_481 + label_476: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -10249,17 +11425,17 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -240($fp) - lw $t0 -240($fp) - bne $t0 $zero label_331 - j label_332 - label_331: + sw $t0 -256($fp) + lw $t0 -256($fp) + bne $t0 $zero label_477 + j label_478 + label_477: li $v0 4 - la $a0 data_128 + la $a0 data_201 syscall li $v0 10 syscall - label_332: + label_478: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -10282,33 +11458,33 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -236($fp) + sw $v0 -252($fp) jal __init_at_C - sw $v0 -232($fp) - lw $t0 -232($fp) + sw $v0 -248($fp) + lw $t0 -248($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_333 - j label_334 - label_333: + sw $t0 -244($fp) + lw $t0 -244($fp) + bne $t0 $zero label_479 + j label_480 + label_479: li $v0 4 - la $a0 data_129 + la $a0 data_202 syscall li $v0 10 syscall - label_334: - lw $t0 -232($fp) + label_480: + lw $t0 -248($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -236($fp) + lw $t0 -252($fp) addi $sp $sp -4 sw $t0 0($sp) jal function_method5_at_C addi $sp $sp 8 - sw $v0 -224($fp) - lw $t0 -224($fp) + sw $v0 -240($fp) + lw $t0 -240($fp) lw $t1 0($fp) addi $t1 $t1 16 sw $t0 0($t1) @@ -10318,12 +11494,12 @@ function_main_at_Main: sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -768($fp) - label_335: - lw $t0 -768($fp) - sw $t0 -820($fp) - j label_341 - label_336: + sw $t0 -836($fp) + label_481: + lw $t0 -836($fp) + sw $t0 -888($fp) + j label_487 + label_482: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -10332,17 +11508,17 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_337 - j label_338 - label_337: + sw $t0 -236($fp) + lw $t0 -236($fp) + bne $t0 $zero label_483 + j label_484 + label_483: li $v0 4 - la $a0 data_130 + la $a0 data_203 syscall li $v0 10 syscall - label_338: + label_484: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -10365,33 +11541,33 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -216($fp) + sw $v0 -232($fp) jal __init_at_C - sw $v0 -212($fp) - lw $t0 -212($fp) + sw $v0 -228($fp) + lw $t0 -228($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_339 - j label_340 - label_339: + sw $t0 -224($fp) + lw $t0 -224($fp) + bne $t0 $zero label_485 + j label_486 + label_485: li $v0 4 - la $a0 data_131 + la $a0 data_204 syscall li $v0 10 syscall - label_340: - lw $t0 -212($fp) + label_486: + lw $t0 -228($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -216($fp) + lw $t0 -232($fp) addi $sp $sp -4 sw $t0 0($sp) jal function_method5_at_B addi $sp $sp 8 - sw $v0 -204($fp) - lw $t0 -204($fp) + sw $v0 -220($fp) + lw $t0 -220($fp) lw $t1 0($fp) addi $t1 $t1 16 sw $t0 0($t1) @@ -10401,12 +11577,12 @@ function_main_at_Main: sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -820($fp) - label_341: - lw $t0 -820($fp) - sw $t0 -872($fp) - j label_347 - label_342: + sw $t0 -888($fp) + label_487: + lw $t0 -888($fp) + sw $t0 -940($fp) + j label_493 + label_488: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -10415,17 +11591,17 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -200($fp) - lw $t0 -200($fp) - bne $t0 $zero label_343 - j label_344 - label_343: + sw $t0 -216($fp) + lw $t0 -216($fp) + bne $t0 $zero label_489 + j label_490 + label_489: li $v0 4 - la $a0 data_132 + la $a0 data_205 syscall li $v0 10 syscall - label_344: + label_490: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -10448,33 +11624,33 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -196($fp) + sw $v0 -212($fp) jal __init_at_C - sw $v0 -192($fp) - lw $t0 -192($fp) + sw $v0 -208($fp) + lw $t0 -208($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -188($fp) - lw $t0 -188($fp) - bne $t0 $zero label_345 - j label_346 - label_345: + sw $t0 -204($fp) + lw $t0 -204($fp) + bne $t0 $zero label_491 + j label_492 + label_491: li $v0 4 - la $a0 data_133 + la $a0 data_206 syscall li $v0 10 syscall - label_346: - lw $t0 -192($fp) + label_492: + lw $t0 -208($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -196($fp) + lw $t0 -212($fp) addi $sp $sp -4 sw $t0 0($sp) jal function_method5_at_A addi $sp $sp 8 - sw $v0 -184($fp) - lw $t0 -184($fp) + sw $v0 -200($fp) + lw $t0 -200($fp) lw $t1 0($fp) addi $t1 $t1 16 sw $t0 0($t1) @@ -10484,12 +11660,26 @@ function_main_at_Main: sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -872($fp) - label_347: - lw $t0 -872($fp) - sw $t0 -924($fp) - j label_357 - label_348: + sw $t0 -940($fp) + label_493: + lw $t0 -940($fp) + sw $t0 -992($fp) + j label_505 + label_494: + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -196($fp) + lw $t0 -196($fp) + bne $t0 $zero label_495 + j label_496 + label_495: + li $v0 4 + la $a0 data_207 + syscall + li $v0 10 + syscall + label_496: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -10502,30 +11692,30 @@ function_main_at_Main: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -180($fp) + sw $v0 -192($fp) jal __init_at_A - sw $v0 -176($fp) - lw $t0 -176($fp) + sw $v0 -188($fp) + lw $t0 -188($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -172($fp) - lw $t0 -172($fp) - bne $t0 $zero label_349 - j label_350 - label_349: + sw $t0 -184($fp) + lw $t0 -184($fp) + bne $t0 $zero label_497 + j label_498 + label_497: li $v0 4 - la $a0 data_134 + la $a0 data_208 syscall li $v0 10 syscall - label_350: - lw $t0 -176($fp) + label_498: + lw $t0 -188($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -180($fp) + lw $t0 -192($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -176($fp) + lw $t0 -188($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -10534,8 +11724,8 @@ function_main_at_Main: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -168($fp) - lw $t0 -168($fp) + sw $v0 -180($fp) + lw $t0 -180($fp) lw $t1 0($fp) addi $t1 $t1 12 sw $t0 0($t1) @@ -10547,17 +11737,17 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_351 - j label_352 - label_351: + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_499 + j label_500 + label_499: li $v0 4 - la $a0 data_135 + la $a0 data_209 syscall li $v0 10 syscall - label_352: + label_500: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -10580,7 +11770,7 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -160($fp) + sw $v0 -172($fp) lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -10589,17 +11779,17 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -156($fp) - lw $t0 -156($fp) - bne $t0 $zero label_353 - j label_354 - label_353: + sw $t0 -168($fp) + lw $t0 -168($fp) + bne $t0 $zero label_501 + j label_502 + label_501: li $v0 4 - la $a0 data_136 + la $a0 data_210 syscall li $v0 10 syscall - label_354: + label_502: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -10622,33 +11812,33 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -152($fp) + sw $v0 -164($fp) jal __init_at_D - sw $v0 -148($fp) - lw $t0 -148($fp) + sw $v0 -160($fp) + lw $t0 -160($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_355 - j label_356 - label_355: + sw $t0 -156($fp) + lw $t0 -156($fp) + bne $t0 $zero label_503 + j label_504 + label_503: li $v0 4 - la $a0 data_137 + la $a0 data_211 syscall li $v0 10 syscall - label_356: - lw $t0 -148($fp) + label_504: + lw $t0 -160($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -160($fp) + lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -152($fp) + lw $t0 -164($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -148($fp) + lw $t0 -160($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -10657,8 +11847,8 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -140($fp) - lw $t0 -140($fp) + sw $v0 -152($fp) + lw $t0 -152($fp) lw $t1 0($fp) addi $t1 $t1 16 sw $t0 0($t1) @@ -10668,12 +11858,12 @@ function_main_at_Main: sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -924($fp) - label_357: - lw $t0 -924($fp) - sw $t0 -976($fp) - j label_373 - label_358: + sw $t0 -992($fp) + label_505: + lw $t0 -992($fp) + sw $t0 -1044($fp) + j label_525 + label_506: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -10685,7 +11875,7 @@ function_main_at_Main: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -132($fp) + sw $t1 -144($fp) lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -10694,168 +11884,168 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_359 - j label_360 - label_359: + sw $t0 -136($fp) + lw $t0 -136($fp) + bne $t0 $zero label_507 + j label_508 + label_507: li $v0 4 - la $a0 data_138 + la $a0 data_212 syscall li $v0 10 syscall - label_360: + label_508: la $t0 types_table addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -120($fp) - lw $t1 -132($fp) + lw $t0 0($t0) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_361 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_509 la $t0 types_table addi $t0 $t0 20 lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -120($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_366 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_514 la $t0 types_table addi $t0 $t0 24 lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -120($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_366 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_514 la $t0 types_table addi $t0 $t0 32 lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -120($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_366 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_514 la $t0 types_table addi $t0 $t0 36 lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -120($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_366 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_514 la $t0 types_table addi $t0 $t0 0 lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -120($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_371 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_519 la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -120($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_371 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_519 la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -120($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_371 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_519 la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -120($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_371 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_519 la $t0 types_table addi $t0 $t0 4 lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -120($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_371 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_519 la $t0 types_table addi $t0 $t0 40 lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -120($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_371 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_519 la $t0 types_table addi $t0 $t0 44 lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -120($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_371 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_519 li $v0 4 - la $a0 data_139 + la $a0 data_213 syscall li $v0 10 syscall - label_361: + label_509: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -116($fp) - lw $t0 -116($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_362 - j label_363 - label_362: + sw $t0 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_510 + j label_511 + label_510: li $v0 4 - la $a0 data_140 + la $a0 data_214 syscall li $v0 10 syscall - label_363: - lw $t0 -116($fp) + label_511: + lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -116($fp) + lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -10864,28 +12054,28 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -116($fp) + sw $v0 -120($fp) + lw $t0 -128($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_364 - j label_365 - label_364: + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_512 + j label_513 + label_512: li $v0 4 - la $a0 data_141 + la $a0 data_215 syscall li $v0 10 syscall - label_365: - lw $t0 -116($fp) + label_513: + lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -108($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -116($fp) + lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -10894,8 +12084,8 @@ function_main_at_Main: lw $t0 40($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -100($fp) - lw $t0 -100($fp) + sw $v0 -112($fp) + lw $t0 -112($fp) lw $t1 0($fp) addi $t1 $t1 16 sw $t0 0($t1) @@ -10905,34 +12095,34 @@ function_main_at_Main: sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -136($fp) - j label_372 - label_366: + sw $t0 -148($fp) + j label_524 + label_514: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -96($fp) - lw $t0 -96($fp) + sw $t0 -108($fp) + lw $t0 -108($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_367 - j label_368 - label_367: + sw $t0 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_515 + j label_516 + label_515: li $v0 4 - la $a0 data_142 + la $a0 data_216 syscall li $v0 10 syscall - label_368: - lw $t0 -96($fp) + label_516: + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -96($fp) + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -10941,28 +12131,28 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -96($fp) + sw $v0 -100($fp) + lw $t0 -108($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_369 - j label_370 - label_369: + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_517 + j label_518 + label_517: li $v0 4 - la $a0 data_143 + la $a0 data_217 syscall li $v0 10 syscall - label_370: - lw $t0 -96($fp) + label_518: + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -88($fp) + lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -96($fp) + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -10971,8 +12161,8 @@ function_main_at_Main: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -80($fp) - lw $t0 -80($fp) + sw $v0 -92($fp) + lw $t0 -92($fp) lw $t1 0($fp) addi $t1 $t1 16 sw $t0 0($t1) @@ -10982,28 +12172,42 @@ function_main_at_Main: sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -136($fp) - j label_372 - label_371: + sw $t0 -148($fp) + j label_524 + label_519: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -76($fp) - la $t0 data_144 - sw $t0 -68($fp) - lw $t0 -68($fp) + sw $t0 -88($fp) + la $t0 data_218 + sw $t0 -84($fp) + lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -64($fp) + sw $v0 -80($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_520 + j label_521 + label_520: + li $v0 4 + la $a0 data_219 + syscall + li $v0 10 + syscall + label_521: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -64($fp) + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -11017,6 +12221,20 @@ function_main_at_Main: addi $sp $sp 8 sw $v0 -72($fp) lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_522 + j label_523 + label_522: + li $v0 4 + la $a0 data_220 + syscall + li $v0 10 + syscall + label_523: + lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -11028,24 +12246,38 @@ function_main_at_Main: lw $t0 0($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -60($fp) + sw $v0 -64($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -56($fp) + sw $v0 -60($fp) + lw $t0 -60($fp) + sw $t0 -148($fp) + j label_524 + label_524: + lw $t0 -148($fp) + sw $t0 -1044($fp) + label_525: + lw $t0 -1044($fp) + sw $t0 -1096($fp) + j label_537 + label_526: + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) lw $t0 -56($fp) - sw $t0 -136($fp) - j label_372 - label_372: - lw $t0 -136($fp) - sw $t0 -976($fp) - label_373: - lw $t0 -976($fp) - sw $t0 -1028($fp) - j label_383 - label_374: + bne $t0 $zero label_527 + j label_528 + label_527: + li $v0 4 + la $a0 data_221 + syscall + li $v0 10 + syscall + label_528: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -11066,15 +12298,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -44($fp) lw $t0 -44($fp) - bne $t0 $zero label_375 - j label_376 - label_375: + bne $t0 $zero label_529 + j label_530 + label_529: li $v0 4 - la $a0 data_145 + la $a0 data_222 syscall li $v0 10 syscall - label_376: + label_530: lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -11105,15 +12337,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -36($fp) lw $t0 -36($fp) - bne $t0 $zero label_377 - j label_378 - label_377: + bne $t0 $zero label_531 + j label_532 + label_531: li $v0 4 - la $a0 data_146 + la $a0 data_223 syscall li $v0 10 syscall - label_378: + label_532: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -11147,15 +12379,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_379 - j label_380 - label_379: + bne $t0 $zero label_533 + j label_534 + label_533: li $v0 4 - la $a0 data_147 + la $a0 data_224 syscall li $v0 10 syscall - label_380: + label_534: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -11186,15 +12418,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_381 - j label_382 - label_381: + bne $t0 $zero label_535 + j label_536 + label_535: li $v0 4 - la $a0 data_148 + la $a0 data_225 syscall li $v0 10 syscall - label_382: + label_536: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -11224,12 +12456,12 @@ function_main_at_Main: sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -1028($fp) - label_383: - j label_256 - label_384: + sw $t0 -1096($fp) + label_537: + j label_362 + label_538: li $v0 0 - addi $sp $sp 1112 + addi $sp $sp 1208 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index e221613e0..fdee09672 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -44,41 +44,41 @@ data_20: .asciiz "8" .word 0 data_21: .asciiz "9" .word 0 -data_22: .asciiz "" +data_22: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_23: .asciiz "9" +data_23: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_24: .asciiz "8" +data_24: .asciiz "" .word 0 -data_25: .asciiz "7" +data_25: .asciiz "9" .word 0 -data_26: .asciiz "6" +data_26: .asciiz "8" .word 0 -data_27: .asciiz "5" +data_27: .asciiz "7" .word 0 -data_28: .asciiz "4" +data_28: .asciiz "6" .word 0 -data_29: .asciiz "3" +data_29: .asciiz "5" .word 0 -data_30: .asciiz "2" +data_30: .asciiz "4" .word 0 -data_31: .asciiz "1" +data_31: .asciiz "3" .word 0 -data_32: .asciiz "0" +data_32: .asciiz "2" .word 0 -data_33: .asciiz "RuntimeError: Function call in a void instance" +data_33: .asciiz "1" .word 0 -data_34: .asciiz "RuntimeError: Function call in a void instance" +data_34: .asciiz "0" .word 0 -data_35: .asciiz "-" +data_35: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_36: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_37: .asciiz "+" +data_37: .asciiz "-" .word 0 data_38: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_39: .asciiz "RuntimeError: Function call in a void instance" +data_39: .asciiz "+" .word 0 data_40: .asciiz "RuntimeError: Function call in a void instance" .word 0 @@ -88,27 +88,55 @@ data_42: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_43: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_44: .asciiz "-" +data_44: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_45: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_46: .asciiz "0" +data_46: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_47: .asciiz "RuntimeError: Division by zero" +data_47: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_48: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_49: .asciiz "" +data_49: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_50: .asciiz "678987" +data_50: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_51: .asciiz "RuntimeError: Function call in a void instance" +data_51: .asciiz "-" .word 0 data_52: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_53: .asciiz " == " +data_53: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_54: .asciiz "\n" +data_54: .asciiz "0" +.word 0 +data_55: .asciiz "RuntimeError: Division by zero" +.word 0 +data_56: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_57: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_58: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_59: .asciiz "" +.word 0 +data_60: .asciiz "678987" +.word 0 +data_61: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_62: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_63: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_64: .asciiz " == " +.word 0 +data_65: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_66: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_67: .asciiz "\n" +.word 0 +data_68: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -754,1007 +782,1021 @@ function_c2i_at_A2I: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -568 + addi $sp $sp -572 la $t0 data_12 - sw $t0 -532($fp) - lw $t0 -532($fp) + sw $t0 -536($fp) + lw $t0 -536($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -528($fp) + sw $v0 -532($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -556($fp) + sw $t1 -560($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -552($fp) + sw $t0 -556($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -548($fp) + sw $t0 -552($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -544($fp) - lw $t0 -556($fp) - lw $t1 -552($fp) + sw $t0 -548($fp) + lw $t0 -560($fp) + lw $t1 -556($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) + sw $t0 -544($fp) + lw $t0 -544($fp) bne $t0 $zero label_3 - lw $t0 -556($fp) - lw $t1 -548($fp) + lw $t0 -560($fp) + lw $t1 -552($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) + sw $t0 -544($fp) + lw $t0 -544($fp) bne $t0 $zero label_4 - lw $t0 -556($fp) - lw $t1 -544($fp) + lw $t0 -560($fp) + lw $t1 -548($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) + sw $t0 -544($fp) + lw $t0 -544($fp) bne $t0 $zero label_5 lw $t0 0($fp) - lw $t1 -528($fp) + lw $t1 -532($fp) seq $t0 $t0 $t1 - sw $t0 -536($fp) + sw $t0 -540($fp) j label_6 label_3: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -528($fp) + sw $t1 -568($fp) + lw $t0 -532($fp) lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) + sw $t1 -564($fp) + lw $t0 -568($fp) + lw $t1 -564($fp) seq $t0 $t0 $t1 - sw $t0 -536($fp) + sw $t0 -540($fp) j label_6 label_4: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -528($fp) + sw $t1 -568($fp) + lw $t0 -532($fp) lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) + sw $t1 -564($fp) + lw $t0 -568($fp) move $a0 $t0 - lw $t0 -560($fp) + lw $t0 -564($fp) move $a1 $t0 jal equal_str - sw $v0 -536($fp) + sw $v0 -540($fp) j label_6 label_5: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -528($fp) + sw $t1 -568($fp) + lw $t0 -532($fp) lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) + sw $t1 -564($fp) + lw $t0 -568($fp) + lw $t1 -564($fp) seq $t0 $t0 $t1 - sw $t0 -536($fp) + sw $t0 -540($fp) j label_6 label_6: - lw $t0 -536($fp) + lw $t0 -540($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -568($fp) - lw $t0 -568($fp) - lw $t1 12($t0) - sw $t1 -572($fp) + sw $v0 -572($fp) lw $t0 -572($fp) - bne $t0 $zero label_61 + lw $t1 12($t0) + sw $t1 -576($fp) + lw $t0 -576($fp) + bne $t0 $zero label_63 la $t0 data_13 - sw $t0 -480($fp) - lw $t0 -480($fp) + sw $t0 -484($fp) + lw $t0 -484($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -476($fp) + sw $v0 -480($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -504($fp) + sw $t1 -508($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -500($fp) + sw $t0 -504($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -496($fp) + sw $t0 -500($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -492($fp) - lw $t0 -504($fp) - lw $t1 -500($fp) + sw $t0 -496($fp) + lw $t0 -508($fp) + lw $t1 -504($fp) seq $t0 $t0 $t1 - sw $t0 -488($fp) - lw $t0 -488($fp) + sw $t0 -492($fp) + lw $t0 -492($fp) bne $t0 $zero label_7 - lw $t0 -504($fp) - lw $t1 -496($fp) + lw $t0 -508($fp) + lw $t1 -500($fp) seq $t0 $t0 $t1 - sw $t0 -488($fp) - lw $t0 -488($fp) + sw $t0 -492($fp) + lw $t0 -492($fp) bne $t0 $zero label_8 - lw $t0 -504($fp) - lw $t1 -492($fp) + lw $t0 -508($fp) + lw $t1 -496($fp) seq $t0 $t0 $t1 - sw $t0 -488($fp) - lw $t0 -488($fp) + sw $t0 -492($fp) + lw $t0 -492($fp) bne $t0 $zero label_9 lw $t0 0($fp) - lw $t1 -476($fp) + lw $t1 -480($fp) seq $t0 $t0 $t1 - sw $t0 -484($fp) + sw $t0 -488($fp) j label_10 label_7: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -476($fp) + sw $t1 -516($fp) + lw $t0 -480($fp) lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -512($fp) - lw $t1 -508($fp) + sw $t1 -512($fp) + lw $t0 -516($fp) + lw $t1 -512($fp) seq $t0 $t0 $t1 - sw $t0 -484($fp) + sw $t0 -488($fp) j label_10 label_8: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -476($fp) + sw $t1 -516($fp) + lw $t0 -480($fp) lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -512($fp) + sw $t1 -512($fp) + lw $t0 -516($fp) move $a0 $t0 - lw $t0 -508($fp) + lw $t0 -512($fp) move $a1 $t0 jal equal_str - sw $v0 -484($fp) + sw $v0 -488($fp) j label_10 label_9: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -476($fp) + sw $t1 -516($fp) + lw $t0 -480($fp) lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -512($fp) - lw $t1 -508($fp) + sw $t1 -512($fp) + lw $t0 -516($fp) + lw $t1 -512($fp) seq $t0 $t0 $t1 - sw $t0 -484($fp) + sw $t0 -488($fp) j label_10 label_10: - lw $t0 -484($fp) + lw $t0 -488($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -516($fp) - lw $t0 -516($fp) - lw $t1 12($t0) - sw $t1 -520($fp) + sw $v0 -520($fp) lw $t0 -520($fp) - bne $t0 $zero label_59 + lw $t1 12($t0) + sw $t1 -524($fp) + lw $t0 -524($fp) + bne $t0 $zero label_61 la $t0 data_14 - sw $t0 -428($fp) - lw $t0 -428($fp) + sw $t0 -432($fp) + lw $t0 -432($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -424($fp) + sw $v0 -428($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -452($fp) + sw $t1 -456($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -448($fp) + sw $t0 -452($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -444($fp) + sw $t0 -448($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -440($fp) - lw $t0 -452($fp) - lw $t1 -448($fp) + sw $t0 -444($fp) + lw $t0 -456($fp) + lw $t1 -452($fp) seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) + sw $t0 -440($fp) + lw $t0 -440($fp) bne $t0 $zero label_11 - lw $t0 -452($fp) - lw $t1 -444($fp) + lw $t0 -456($fp) + lw $t1 -448($fp) seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) + sw $t0 -440($fp) + lw $t0 -440($fp) bne $t0 $zero label_12 - lw $t0 -452($fp) - lw $t1 -440($fp) + lw $t0 -456($fp) + lw $t1 -444($fp) seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) + sw $t0 -440($fp) + lw $t0 -440($fp) bne $t0 $zero label_13 lw $t0 0($fp) - lw $t1 -424($fp) + lw $t1 -428($fp) seq $t0 $t0 $t1 - sw $t0 -432($fp) + sw $t0 -436($fp) j label_14 label_11: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -424($fp) + sw $t1 -464($fp) + lw $t0 -428($fp) lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - lw $t1 -456($fp) + sw $t1 -460($fp) + lw $t0 -464($fp) + lw $t1 -460($fp) seq $t0 $t0 $t1 - sw $t0 -432($fp) + sw $t0 -436($fp) j label_14 label_12: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -424($fp) + sw $t1 -464($fp) + lw $t0 -428($fp) lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) + sw $t1 -460($fp) + lw $t0 -464($fp) move $a0 $t0 - lw $t0 -456($fp) + lw $t0 -460($fp) move $a1 $t0 jal equal_str - sw $v0 -432($fp) + sw $v0 -436($fp) j label_14 label_13: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -424($fp) + sw $t1 -464($fp) + lw $t0 -428($fp) lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - lw $t1 -456($fp) + sw $t1 -460($fp) + lw $t0 -464($fp) + lw $t1 -460($fp) seq $t0 $t0 $t1 - sw $t0 -432($fp) + sw $t0 -436($fp) j label_14 label_14: - lw $t0 -432($fp) + lw $t0 -436($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -464($fp) - lw $t0 -464($fp) - lw $t1 12($t0) - sw $t1 -468($fp) + sw $v0 -468($fp) lw $t0 -468($fp) - bne $t0 $zero label_57 + lw $t1 12($t0) + sw $t1 -472($fp) + lw $t0 -472($fp) + bne $t0 $zero label_59 la $t0 data_15 - sw $t0 -376($fp) - lw $t0 -376($fp) + sw $t0 -380($fp) + lw $t0 -380($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -372($fp) + sw $v0 -376($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -400($fp) + sw $t1 -404($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -396($fp) + sw $t0 -400($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -392($fp) + sw $t0 -396($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -388($fp) - lw $t0 -400($fp) - lw $t1 -396($fp) + sw $t0 -392($fp) + lw $t0 -404($fp) + lw $t1 -400($fp) seq $t0 $t0 $t1 - sw $t0 -384($fp) - lw $t0 -384($fp) + sw $t0 -388($fp) + lw $t0 -388($fp) bne $t0 $zero label_15 - lw $t0 -400($fp) - lw $t1 -392($fp) + lw $t0 -404($fp) + lw $t1 -396($fp) seq $t0 $t0 $t1 - sw $t0 -384($fp) - lw $t0 -384($fp) + sw $t0 -388($fp) + lw $t0 -388($fp) bne $t0 $zero label_16 - lw $t0 -400($fp) - lw $t1 -388($fp) + lw $t0 -404($fp) + lw $t1 -392($fp) seq $t0 $t0 $t1 - sw $t0 -384($fp) - lw $t0 -384($fp) + sw $t0 -388($fp) + lw $t0 -388($fp) bne $t0 $zero label_17 lw $t0 0($fp) - lw $t1 -372($fp) + lw $t1 -376($fp) seq $t0 $t0 $t1 - sw $t0 -380($fp) + sw $t0 -384($fp) j label_18 label_15: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -372($fp) + sw $t1 -412($fp) + lw $t0 -376($fp) lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -408($fp) - lw $t1 -404($fp) + sw $t1 -408($fp) + lw $t0 -412($fp) + lw $t1 -408($fp) seq $t0 $t0 $t1 - sw $t0 -380($fp) + sw $t0 -384($fp) j label_18 label_16: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -372($fp) + sw $t1 -412($fp) + lw $t0 -376($fp) lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -408($fp) + sw $t1 -408($fp) + lw $t0 -412($fp) move $a0 $t0 - lw $t0 -404($fp) + lw $t0 -408($fp) move $a1 $t0 jal equal_str - sw $v0 -380($fp) + sw $v0 -384($fp) j label_18 label_17: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -372($fp) + sw $t1 -412($fp) + lw $t0 -376($fp) lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -408($fp) - lw $t1 -404($fp) + sw $t1 -408($fp) + lw $t0 -412($fp) + lw $t1 -408($fp) seq $t0 $t0 $t1 - sw $t0 -380($fp) + sw $t0 -384($fp) j label_18 label_18: - lw $t0 -380($fp) + lw $t0 -384($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -412($fp) - lw $t0 -412($fp) - lw $t1 12($t0) - sw $t1 -416($fp) + sw $v0 -416($fp) lw $t0 -416($fp) - bne $t0 $zero label_55 + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -420($fp) + bne $t0 $zero label_57 la $t0 data_16 - sw $t0 -324($fp) - lw $t0 -324($fp) + sw $t0 -328($fp) + lw $t0 -328($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -320($fp) + sw $v0 -324($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -348($fp) + sw $t1 -352($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -344($fp) + sw $t0 -348($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -340($fp) + sw $t0 -344($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -336($fp) - lw $t0 -348($fp) - lw $t1 -344($fp) + sw $t0 -340($fp) + lw $t0 -352($fp) + lw $t1 -348($fp) seq $t0 $t0 $t1 - sw $t0 -332($fp) - lw $t0 -332($fp) + sw $t0 -336($fp) + lw $t0 -336($fp) bne $t0 $zero label_19 - lw $t0 -348($fp) - lw $t1 -340($fp) + lw $t0 -352($fp) + lw $t1 -344($fp) seq $t0 $t0 $t1 - sw $t0 -332($fp) - lw $t0 -332($fp) + sw $t0 -336($fp) + lw $t0 -336($fp) bne $t0 $zero label_20 - lw $t0 -348($fp) - lw $t1 -336($fp) + lw $t0 -352($fp) + lw $t1 -340($fp) seq $t0 $t0 $t1 - sw $t0 -332($fp) - lw $t0 -332($fp) + sw $t0 -336($fp) + lw $t0 -336($fp) bne $t0 $zero label_21 lw $t0 0($fp) - lw $t1 -320($fp) + lw $t1 -324($fp) seq $t0 $t0 $t1 - sw $t0 -328($fp) + sw $t0 -332($fp) j label_22 label_19: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -320($fp) + sw $t1 -360($fp) + lw $t0 -324($fp) lw $t1 12($t0) - sw $t1 -352($fp) - lw $t0 -356($fp) - lw $t1 -352($fp) + sw $t1 -356($fp) + lw $t0 -360($fp) + lw $t1 -356($fp) seq $t0 $t0 $t1 - sw $t0 -328($fp) + sw $t0 -332($fp) j label_22 label_20: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -320($fp) + sw $t1 -360($fp) + lw $t0 -324($fp) lw $t1 12($t0) - sw $t1 -352($fp) - lw $t0 -356($fp) + sw $t1 -356($fp) + lw $t0 -360($fp) move $a0 $t0 - lw $t0 -352($fp) + lw $t0 -356($fp) move $a1 $t0 jal equal_str - sw $v0 -328($fp) + sw $v0 -332($fp) j label_22 label_21: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -320($fp) + sw $t1 -360($fp) + lw $t0 -324($fp) lw $t1 12($t0) - sw $t1 -352($fp) - lw $t0 -356($fp) - lw $t1 -352($fp) + sw $t1 -356($fp) + lw $t0 -360($fp) + lw $t1 -356($fp) seq $t0 $t0 $t1 - sw $t0 -328($fp) + sw $t0 -332($fp) j label_22 label_22: - lw $t0 -328($fp) + lw $t0 -332($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -360($fp) - lw $t0 -360($fp) - lw $t1 12($t0) - sw $t1 -364($fp) + sw $v0 -364($fp) lw $t0 -364($fp) - bne $t0 $zero label_53 + lw $t1 12($t0) + sw $t1 -368($fp) + lw $t0 -368($fp) + bne $t0 $zero label_55 la $t0 data_17 - sw $t0 -272($fp) - lw $t0 -272($fp) + sw $t0 -276($fp) + lw $t0 -276($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -268($fp) + sw $v0 -272($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -296($fp) + sw $t1 -300($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -292($fp) + sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -288($fp) + sw $t0 -292($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -284($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) + sw $t0 -288($fp) + lw $t0 -300($fp) + lw $t1 -296($fp) seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) bne $t0 $zero label_23 - lw $t0 -296($fp) - lw $t1 -288($fp) + lw $t0 -300($fp) + lw $t1 -292($fp) seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) bne $t0 $zero label_24 - lw $t0 -296($fp) - lw $t1 -284($fp) + lw $t0 -300($fp) + lw $t1 -288($fp) seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) bne $t0 $zero label_25 lw $t0 0($fp) - lw $t1 -268($fp) + lw $t1 -272($fp) seq $t0 $t0 $t1 - sw $t0 -276($fp) + sw $t0 -280($fp) j label_26 label_23: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -268($fp) + sw $t1 -308($fp) + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -304($fp) - lw $t1 -300($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) seq $t0 $t0 $t1 - sw $t0 -276($fp) + sw $t0 -280($fp) j label_26 label_24: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -268($fp) + sw $t1 -308($fp) + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -304($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) move $a0 $t0 - lw $t0 -300($fp) + lw $t0 -304($fp) move $a1 $t0 jal equal_str - sw $v0 -276($fp) + sw $v0 -280($fp) j label_26 label_25: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -268($fp) + sw $t1 -308($fp) + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -304($fp) - lw $t1 -300($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) seq $t0 $t0 $t1 - sw $t0 -276($fp) + sw $t0 -280($fp) j label_26 label_26: - lw $t0 -276($fp) + lw $t0 -280($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -308($fp) - lw $t0 -308($fp) - lw $t1 12($t0) - sw $t1 -312($fp) + sw $v0 -312($fp) lw $t0 -312($fp) - bne $t0 $zero label_51 + lw $t1 12($t0) + sw $t1 -316($fp) + lw $t0 -316($fp) + bne $t0 $zero label_53 la $t0 data_18 - sw $t0 -220($fp) - lw $t0 -220($fp) + sw $t0 -224($fp) + lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -216($fp) + sw $v0 -220($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -244($fp) + sw $t1 -248($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -240($fp) + sw $t0 -244($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -236($fp) + sw $t0 -240($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -232($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) + sw $t0 -236($fp) + lw $t0 -248($fp) + lw $t1 -244($fp) seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) + sw $t0 -232($fp) + lw $t0 -232($fp) bne $t0 $zero label_27 - lw $t0 -244($fp) - lw $t1 -236($fp) + lw $t0 -248($fp) + lw $t1 -240($fp) seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) + sw $t0 -232($fp) + lw $t0 -232($fp) bne $t0 $zero label_28 - lw $t0 -244($fp) - lw $t1 -232($fp) + lw $t0 -248($fp) + lw $t1 -236($fp) seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) + sw $t0 -232($fp) + lw $t0 -232($fp) bne $t0 $zero label_29 lw $t0 0($fp) - lw $t1 -216($fp) + lw $t1 -220($fp) seq $t0 $t0 $t1 - sw $t0 -224($fp) + sw $t0 -228($fp) j label_30 label_27: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -216($fp) + sw $t1 -256($fp) + lw $t0 -220($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) + sw $t1 -252($fp) + lw $t0 -256($fp) + lw $t1 -252($fp) seq $t0 $t0 $t1 - sw $t0 -224($fp) + sw $t0 -228($fp) j label_30 label_28: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -216($fp) + sw $t1 -256($fp) + lw $t0 -220($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) + sw $t1 -252($fp) + lw $t0 -256($fp) move $a0 $t0 - lw $t0 -248($fp) + lw $t0 -252($fp) move $a1 $t0 jal equal_str - sw $v0 -224($fp) + sw $v0 -228($fp) j label_30 label_29: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -216($fp) + sw $t1 -256($fp) + lw $t0 -220($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) + sw $t1 -252($fp) + lw $t0 -256($fp) + lw $t1 -252($fp) seq $t0 $t0 $t1 - sw $t0 -224($fp) + sw $t0 -228($fp) j label_30 label_30: - lw $t0 -224($fp) + lw $t0 -228($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -260($fp) + sw $v0 -260($fp) lw $t0 -260($fp) - bne $t0 $zero label_49 + lw $t1 12($t0) + sw $t1 -264($fp) + lw $t0 -264($fp) + bne $t0 $zero label_51 la $t0 data_19 - sw $t0 -168($fp) - lw $t0 -168($fp) + sw $t0 -172($fp) + lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -164($fp) + sw $v0 -168($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -192($fp) + sw $t1 -196($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -188($fp) + sw $t0 -192($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -184($fp) + sw $t0 -188($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -180($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) + sw $t0 -184($fp) + lw $t0 -196($fp) + lw $t1 -192($fp) seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) + sw $t0 -180($fp) + lw $t0 -180($fp) bne $t0 $zero label_31 - lw $t0 -192($fp) - lw $t1 -184($fp) + lw $t0 -196($fp) + lw $t1 -188($fp) seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) + sw $t0 -180($fp) + lw $t0 -180($fp) bne $t0 $zero label_32 - lw $t0 -192($fp) - lw $t1 -180($fp) + lw $t0 -196($fp) + lw $t1 -184($fp) seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) + sw $t0 -180($fp) + lw $t0 -180($fp) bne $t0 $zero label_33 lw $t0 0($fp) - lw $t1 -164($fp) + lw $t1 -168($fp) seq $t0 $t0 $t1 - sw $t0 -172($fp) + sw $t0 -176($fp) j label_34 label_31: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -164($fp) + sw $t1 -204($fp) + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) + sw $t1 -200($fp) + lw $t0 -204($fp) + lw $t1 -200($fp) seq $t0 $t0 $t1 - sw $t0 -172($fp) + sw $t0 -176($fp) j label_34 label_32: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -164($fp) + sw $t1 -204($fp) + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) + sw $t1 -200($fp) + lw $t0 -204($fp) move $a0 $t0 - lw $t0 -196($fp) + lw $t0 -200($fp) move $a1 $t0 jal equal_str - sw $v0 -172($fp) + sw $v0 -176($fp) j label_34 label_33: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -164($fp) + sw $t1 -204($fp) + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) + sw $t1 -200($fp) + lw $t0 -204($fp) + lw $t1 -200($fp) seq $t0 $t0 $t1 - sw $t0 -172($fp) + sw $t0 -176($fp) j label_34 label_34: - lw $t0 -172($fp) + lw $t0 -176($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) + sw $v0 -208($fp) lw $t0 -208($fp) - bne $t0 $zero label_47 + lw $t1 12($t0) + sw $t1 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_49 la $t0 data_20 - sw $t0 -116($fp) - lw $t0 -116($fp) + sw $t0 -120($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -112($fp) + sw $v0 -116($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -140($fp) + sw $t1 -144($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -136($fp) + sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -132($fp) + sw $t0 -136($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -128($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) + sw $t0 -132($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) bne $t0 $zero label_35 - lw $t0 -140($fp) - lw $t1 -132($fp) + lw $t0 -144($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) bne $t0 $zero label_36 - lw $t0 -140($fp) - lw $t1 -128($fp) + lw $t0 -144($fp) + lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) bne $t0 $zero label_37 lw $t0 0($fp) - lw $t1 -112($fp) + lw $t1 -116($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) + sw $t0 -124($fp) j label_38 label_35: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -112($fp) + sw $t1 -152($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) + sw $t0 -124($fp) j label_38 label_36: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -112($fp) + sw $t1 -152($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) move $a0 $t0 - lw $t0 -144($fp) + lw $t0 -148($fp) move $a1 $t0 jal equal_str - sw $v0 -120($fp) + sw $v0 -124($fp) j label_38 label_37: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -112($fp) + sw $t1 -152($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) + sw $t0 -124($fp) j label_38 label_38: - lw $t0 -120($fp) + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -156($fp) + sw $v0 -156($fp) lw $t0 -156($fp) - bne $t0 $zero label_45 + lw $t1 12($t0) + sw $t1 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_47 la $t0 data_21 - sw $t0 -64($fp) - lw $t0 -64($fp) + sw $t0 -68($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -60($fp) + sw $v0 -64($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -88($fp) + sw $t1 -92($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -84($fp) + sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -80($fp) + sw $t0 -84($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -76($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) + sw $t0 -80($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) bne $t0 $zero label_39 - lw $t0 -88($fp) - lw $t1 -80($fp) + lw $t0 -92($fp) + lw $t1 -84($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) bne $t0 $zero label_40 - lw $t0 -88($fp) - lw $t1 -76($fp) + lw $t0 -92($fp) + lw $t1 -80($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) bne $t0 $zero label_41 lw $t0 0($fp) - lw $t1 -60($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) + sw $t0 -72($fp) j label_42 label_39: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) + sw $t0 -72($fp) j label_42 label_40: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) move $a0 $t0 - lw $t0 -92($fp) + lw $t0 -96($fp) move $a1 $t0 jal equal_str - sw $v0 -68($fp) + sw $v0 -72($fp) j label_42 label_41: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) + sw $t0 -72($fp) j label_42 label_42: - lw $t0 -68($fp) + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) + sw $v0 -104($fp) lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_45 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -60($fp) + lw $t0 -60($fp) bne $t0 $zero label_43 + j label_44 + label_43: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_44: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1775,9 +1817,9 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) - sw $t0 -108($fp) - j label_44 - label_43: + sw $t0 -112($fp) + j label_46 + label_45: li $t0 9 addi $sp $sp -4 sw $t0 0($sp) @@ -1785,12 +1827,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -48($fp) lw $t0 -48($fp) - sw $t0 -108($fp) - label_44: - lw $t0 -108($fp) - sw $t0 -160($fp) - j label_46 - label_45: + sw $t0 -112($fp) + label_46: + lw $t0 -112($fp) + sw $t0 -164($fp) + j label_48 + label_47: li $t0 8 addi $sp $sp -4 sw $t0 0($sp) @@ -1798,12 +1840,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) - sw $t0 -160($fp) - label_46: - lw $t0 -160($fp) - sw $t0 -212($fp) - j label_48 - label_47: + sw $t0 -164($fp) + label_48: + lw $t0 -164($fp) + sw $t0 -216($fp) + j label_50 + label_49: li $t0 7 addi $sp $sp -4 sw $t0 0($sp) @@ -1811,12 +1853,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -40($fp) lw $t0 -40($fp) - sw $t0 -212($fp) - label_48: - lw $t0 -212($fp) - sw $t0 -264($fp) - j label_50 - label_49: + sw $t0 -216($fp) + label_50: + lw $t0 -216($fp) + sw $t0 -268($fp) + j label_52 + label_51: li $t0 6 addi $sp $sp -4 sw $t0 0($sp) @@ -1824,12 +1866,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) - sw $t0 -264($fp) - label_50: - lw $t0 -264($fp) - sw $t0 -316($fp) - j label_52 - label_51: + sw $t0 -268($fp) + label_52: + lw $t0 -268($fp) + sw $t0 -320($fp) + j label_54 + label_53: li $t0 5 addi $sp $sp -4 sw $t0 0($sp) @@ -1837,12 +1879,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) - sw $t0 -316($fp) - label_52: - lw $t0 -316($fp) - sw $t0 -368($fp) - j label_54 - label_53: + sw $t0 -320($fp) + label_54: + lw $t0 -320($fp) + sw $t0 -372($fp) + j label_56 + label_55: li $t0 4 addi $sp $sp -4 sw $t0 0($sp) @@ -1850,12 +1892,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) - sw $t0 -368($fp) - label_54: - lw $t0 -368($fp) - sw $t0 -420($fp) - j label_56 - label_55: + sw $t0 -372($fp) + label_56: + lw $t0 -372($fp) + sw $t0 -424($fp) + j label_58 + label_57: li $t0 3 addi $sp $sp -4 sw $t0 0($sp) @@ -1863,12 +1905,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -24($fp) lw $t0 -24($fp) - sw $t0 -420($fp) - label_56: - lw $t0 -420($fp) - sw $t0 -472($fp) - j label_58 - label_57: + sw $t0 -424($fp) + label_58: + lw $t0 -424($fp) + sw $t0 -476($fp) + j label_60 + label_59: li $t0 2 addi $sp $sp -4 sw $t0 0($sp) @@ -1876,12 +1918,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -472($fp) - label_58: - lw $t0 -472($fp) - sw $t0 -524($fp) - j label_60 - label_59: + sw $t0 -476($fp) + label_60: + lw $t0 -476($fp) + sw $t0 -528($fp) + j label_62 + label_61: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) @@ -1889,12 +1931,12 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) - sw $t0 -524($fp) - label_60: - lw $t0 -524($fp) - sw $t0 -576($fp) - j label_62 - label_61: + sw $t0 -528($fp) + label_62: + lw $t0 -528($fp) + sw $t0 -580($fp) + j label_64 + label_63: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -1902,10 +1944,10 @@ function_c2i_at_A2I: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -576($fp) - label_62: - lw $v0 -576($fp) - addi $sp $sp 568 + sw $t0 -580($fp) + label_64: + lw $v0 -580($fp) + addi $sp $sp 572 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1918,987 +1960,1001 @@ function_i2c_at_A2I: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -572 + addi $sp $sp -576 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -536($fp) + sw $v0 -540($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -560($fp) + sw $t1 -564($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -556($fp) + sw $t0 -560($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -552($fp) + sw $t0 -556($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -552($fp) + lw $t0 -564($fp) + lw $t1 -560($fp) + seq $t0 $t0 $t1 sw $t0 -548($fp) - lw $t0 -560($fp) + lw $t0 -548($fp) + bne $t0 $zero label_65 + lw $t0 -564($fp) lw $t1 -556($fp) seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_63 - lw $t0 -560($fp) + sw $t0 -548($fp) + lw $t0 -548($fp) + bne $t0 $zero label_66 + lw $t0 -564($fp) lw $t1 -552($fp) seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_64 - lw $t0 -560($fp) - lw $t1 -548($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_65 + sw $t0 -548($fp) + lw $t0 -548($fp) + bne $t0 $zero label_67 lw $t0 0($fp) - lw $t1 -536($fp) + lw $t1 -540($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_66 - label_63: + sw $t0 -544($fp) + j label_68 + label_65: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -536($fp) + sw $t1 -572($fp) + lw $t0 -540($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) + sw $t1 -568($fp) + lw $t0 -572($fp) + lw $t1 -568($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_66 - label_64: + sw $t0 -544($fp) + j label_68 + label_66: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -536($fp) + sw $t1 -572($fp) + lw $t0 -540($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) + sw $t1 -568($fp) + lw $t0 -572($fp) move $a0 $t0 - lw $t0 -564($fp) + lw $t0 -568($fp) move $a1 $t0 jal equal_str - sw $v0 -540($fp) - j label_66 - label_65: + sw $v0 -544($fp) + j label_68 + label_67: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -536($fp) + sw $t1 -572($fp) + lw $t0 -540($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) + sw $t1 -568($fp) + lw $t0 -572($fp) + lw $t1 -568($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_66 - label_66: - lw $t0 -540($fp) + sw $t0 -544($fp) + j label_68 + label_68: + lw $t0 -544($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -572($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -576($fp) + sw $v0 -576($fp) lw $t0 -576($fp) - bne $t0 $zero label_121 + lw $t1 12($t0) + sw $t1 -580($fp) + lw $t0 -580($fp) + bne $t0 $zero label_125 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -488($fp) + sw $v0 -492($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -512($fp) + sw $t1 -516($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -508($fp) + sw $t0 -512($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -504($fp) + sw $t0 -508($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -504($fp) + lw $t0 -516($fp) + lw $t1 -512($fp) + seq $t0 $t0 $t1 sw $t0 -500($fp) - lw $t0 -512($fp) + lw $t0 -500($fp) + bne $t0 $zero label_69 + lw $t0 -516($fp) lw $t1 -508($fp) seq $t0 $t0 $t1 - sw $t0 -496($fp) - lw $t0 -496($fp) - bne $t0 $zero label_67 - lw $t0 -512($fp) + sw $t0 -500($fp) + lw $t0 -500($fp) + bne $t0 $zero label_70 + lw $t0 -516($fp) lw $t1 -504($fp) seq $t0 $t0 $t1 - sw $t0 -496($fp) - lw $t0 -496($fp) - bne $t0 $zero label_68 - lw $t0 -512($fp) - lw $t1 -500($fp) + sw $t0 -500($fp) + lw $t0 -500($fp) + bne $t0 $zero label_71 + lw $t0 0($fp) + lw $t1 -492($fp) seq $t0 $t0 $t1 sw $t0 -496($fp) - lw $t0 -496($fp) - bne $t0 $zero label_69 - lw $t0 0($fp) - lw $t1 -488($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - j label_70 - label_67: + j label_72 + label_69: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -488($fp) + sw $t1 -524($fp) + lw $t0 -492($fp) lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -520($fp) - lw $t1 -516($fp) + sw $t1 -520($fp) + lw $t0 -524($fp) + lw $t1 -520($fp) seq $t0 $t0 $t1 - sw $t0 -492($fp) - j label_70 - label_68: + sw $t0 -496($fp) + j label_72 + label_70: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -488($fp) + sw $t1 -524($fp) + lw $t0 -492($fp) lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -520($fp) + sw $t1 -520($fp) + lw $t0 -524($fp) move $a0 $t0 - lw $t0 -516($fp) + lw $t0 -520($fp) move $a1 $t0 jal equal_str - sw $v0 -492($fp) - j label_70 - label_69: + sw $v0 -496($fp) + j label_72 + label_71: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -488($fp) + sw $t1 -524($fp) + lw $t0 -492($fp) lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -520($fp) - lw $t1 -516($fp) + sw $t1 -520($fp) + lw $t0 -524($fp) + lw $t1 -520($fp) seq $t0 $t0 $t1 - sw $t0 -492($fp) - j label_70 - label_70: - lw $t0 -492($fp) + sw $t0 -496($fp) + j label_72 + label_72: + lw $t0 -496($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -524($fp) - lw $t0 -524($fp) - lw $t1 12($t0) - sw $t1 -528($fp) + sw $v0 -528($fp) lw $t0 -528($fp) - bne $t0 $zero label_119 + lw $t1 12($t0) + sw $t1 -532($fp) + lw $t0 -532($fp) + bne $t0 $zero label_123 li $t0 2 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -440($fp) + sw $v0 -444($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -464($fp) + sw $t1 -468($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -460($fp) + sw $t0 -464($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -456($fp) + sw $t0 -460($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -456($fp) + lw $t0 -468($fp) + lw $t1 -464($fp) + seq $t0 $t0 $t1 sw $t0 -452($fp) - lw $t0 -464($fp) + lw $t0 -452($fp) + bne $t0 $zero label_73 + lw $t0 -468($fp) lw $t1 -460($fp) seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_71 - lw $t0 -464($fp) + sw $t0 -452($fp) + lw $t0 -452($fp) + bne $t0 $zero label_74 + lw $t0 -468($fp) lw $t1 -456($fp) seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_72 - lw $t0 -464($fp) - lw $t1 -452($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_73 + sw $t0 -452($fp) + lw $t0 -452($fp) + bne $t0 $zero label_75 lw $t0 0($fp) - lw $t1 -440($fp) + lw $t1 -444($fp) seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_74 - label_71: + sw $t0 -448($fp) + j label_76 + label_73: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -440($fp) + sw $t1 -476($fp) + lw $t0 -444($fp) lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - lw $t1 -468($fp) + sw $t1 -472($fp) + lw $t0 -476($fp) + lw $t1 -472($fp) seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_74 - label_72: + sw $t0 -448($fp) + j label_76 + label_74: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -440($fp) + sw $t1 -476($fp) + lw $t0 -444($fp) lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) + sw $t1 -472($fp) + lw $t0 -476($fp) move $a0 $t0 - lw $t0 -468($fp) + lw $t0 -472($fp) move $a1 $t0 jal equal_str - sw $v0 -444($fp) - j label_74 - label_73: + sw $v0 -448($fp) + j label_76 + label_75: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -440($fp) + sw $t1 -476($fp) + lw $t0 -444($fp) lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - lw $t1 -468($fp) + sw $t1 -472($fp) + lw $t0 -476($fp) + lw $t1 -472($fp) seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_74 - label_74: - lw $t0 -444($fp) + sw $t0 -448($fp) + j label_76 + label_76: + lw $t0 -448($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -476($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -480($fp) + sw $v0 -480($fp) lw $t0 -480($fp) - bne $t0 $zero label_117 + lw $t1 12($t0) + sw $t1 -484($fp) + lw $t0 -484($fp) + bne $t0 $zero label_121 li $t0 3 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -392($fp) + sw $v0 -396($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -416($fp) + sw $t1 -420($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -412($fp) + sw $t0 -416($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -408($fp) + sw $t0 -412($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -408($fp) + lw $t0 -420($fp) + lw $t1 -416($fp) + seq $t0 $t0 $t1 sw $t0 -404($fp) - lw $t0 -416($fp) + lw $t0 -404($fp) + bne $t0 $zero label_77 + lw $t0 -420($fp) lw $t1 -412($fp) seq $t0 $t0 $t1 - sw $t0 -400($fp) - lw $t0 -400($fp) - bne $t0 $zero label_75 - lw $t0 -416($fp) + sw $t0 -404($fp) + lw $t0 -404($fp) + bne $t0 $zero label_78 + lw $t0 -420($fp) lw $t1 -408($fp) seq $t0 $t0 $t1 - sw $t0 -400($fp) - lw $t0 -400($fp) - bne $t0 $zero label_76 - lw $t0 -416($fp) - lw $t1 -404($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - lw $t0 -400($fp) - bne $t0 $zero label_77 + sw $t0 -404($fp) + lw $t0 -404($fp) + bne $t0 $zero label_79 lw $t0 0($fp) - lw $t1 -392($fp) + lw $t1 -396($fp) seq $t0 $t0 $t1 - sw $t0 -396($fp) - j label_78 - label_75: + sw $t0 -400($fp) + j label_80 + label_77: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -392($fp) + sw $t1 -428($fp) + lw $t0 -396($fp) lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -424($fp) - lw $t1 -420($fp) + sw $t1 -424($fp) + lw $t0 -428($fp) + lw $t1 -424($fp) seq $t0 $t0 $t1 - sw $t0 -396($fp) - j label_78 - label_76: + sw $t0 -400($fp) + j label_80 + label_78: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -392($fp) + sw $t1 -428($fp) + lw $t0 -396($fp) lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -424($fp) + sw $t1 -424($fp) + lw $t0 -428($fp) move $a0 $t0 - lw $t0 -420($fp) + lw $t0 -424($fp) move $a1 $t0 jal equal_str - sw $v0 -396($fp) - j label_78 - label_77: + sw $v0 -400($fp) + j label_80 + label_79: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -392($fp) + sw $t1 -428($fp) + lw $t0 -396($fp) lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -424($fp) - lw $t1 -420($fp) + sw $t1 -424($fp) + lw $t0 -428($fp) + lw $t1 -424($fp) seq $t0 $t0 $t1 - sw $t0 -396($fp) - j label_78 - label_78: - lw $t0 -396($fp) + sw $t0 -400($fp) + j label_80 + label_80: + lw $t0 -400($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -432($fp) + sw $v0 -432($fp) lw $t0 -432($fp) - bne $t0 $zero label_115 + lw $t1 12($t0) + sw $t1 -436($fp) + lw $t0 -436($fp) + bne $t0 $zero label_119 li $t0 4 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -344($fp) + sw $v0 -348($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -368($fp) + sw $t1 -372($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -364($fp) + sw $t0 -368($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -360($fp) + sw $t0 -364($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -360($fp) + lw $t0 -372($fp) + lw $t1 -368($fp) + seq $t0 $t0 $t1 sw $t0 -356($fp) - lw $t0 -368($fp) + lw $t0 -356($fp) + bne $t0 $zero label_81 + lw $t0 -372($fp) lw $t1 -364($fp) seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_79 - lw $t0 -368($fp) + sw $t0 -356($fp) + lw $t0 -356($fp) + bne $t0 $zero label_82 + lw $t0 -372($fp) lw $t1 -360($fp) seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_80 - lw $t0 -368($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_81 + sw $t0 -356($fp) + lw $t0 -356($fp) + bne $t0 $zero label_83 lw $t0 0($fp) - lw $t1 -344($fp) + lw $t1 -348($fp) seq $t0 $t0 $t1 - sw $t0 -348($fp) - j label_82 - label_79: + sw $t0 -352($fp) + j label_84 + label_81: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -344($fp) + sw $t1 -380($fp) + lw $t0 -348($fp) lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -376($fp) - lw $t1 -372($fp) + sw $t1 -376($fp) + lw $t0 -380($fp) + lw $t1 -376($fp) seq $t0 $t0 $t1 - sw $t0 -348($fp) - j label_82 - label_80: + sw $t0 -352($fp) + j label_84 + label_82: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -344($fp) + sw $t1 -380($fp) + lw $t0 -348($fp) lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -376($fp) + sw $t1 -376($fp) + lw $t0 -380($fp) move $a0 $t0 - lw $t0 -372($fp) + lw $t0 -376($fp) move $a1 $t0 jal equal_str - sw $v0 -348($fp) - j label_82 - label_81: + sw $v0 -352($fp) + j label_84 + label_83: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -344($fp) + sw $t1 -380($fp) + lw $t0 -348($fp) lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -376($fp) - lw $t1 -372($fp) + sw $t1 -376($fp) + lw $t0 -380($fp) + lw $t1 -376($fp) seq $t0 $t0 $t1 - sw $t0 -348($fp) - j label_82 - label_82: - lw $t0 -348($fp) + sw $t0 -352($fp) + j label_84 + label_84: + lw $t0 -352($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -380($fp) - lw $t0 -380($fp) - lw $t1 12($t0) - sw $t1 -384($fp) + sw $v0 -384($fp) lw $t0 -384($fp) - bne $t0 $zero label_113 + lw $t1 12($t0) + sw $t1 -388($fp) + lw $t0 -388($fp) + bne $t0 $zero label_117 li $t0 5 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -296($fp) + sw $v0 -300($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -320($fp) + sw $t1 -324($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -316($fp) + sw $t0 -320($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -312($fp) + sw $t0 -316($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -312($fp) + lw $t0 -324($fp) + lw $t1 -320($fp) + seq $t0 $t0 $t1 sw $t0 -308($fp) - lw $t0 -320($fp) + lw $t0 -308($fp) + bne $t0 $zero label_85 + lw $t0 -324($fp) lw $t1 -316($fp) seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_83 - lw $t0 -320($fp) + sw $t0 -308($fp) + lw $t0 -308($fp) + bne $t0 $zero label_86 + lw $t0 -324($fp) lw $t1 -312($fp) seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_84 - lw $t0 -320($fp) - lw $t1 -308($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_85 + sw $t0 -308($fp) + lw $t0 -308($fp) + bne $t0 $zero label_87 lw $t0 0($fp) - lw $t1 -296($fp) + lw $t1 -300($fp) seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_86 - label_83: + sw $t0 -304($fp) + j label_88 + label_85: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -296($fp) + sw $t1 -332($fp) + lw $t0 -300($fp) lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - lw $t1 -324($fp) + sw $t1 -328($fp) + lw $t0 -332($fp) + lw $t1 -328($fp) seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_86 - label_84: + sw $t0 -304($fp) + j label_88 + label_86: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -296($fp) + sw $t1 -332($fp) + lw $t0 -300($fp) lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) + sw $t1 -328($fp) + lw $t0 -332($fp) move $a0 $t0 - lw $t0 -324($fp) + lw $t0 -328($fp) move $a1 $t0 jal equal_str - sw $v0 -300($fp) - j label_86 - label_85: + sw $v0 -304($fp) + j label_88 + label_87: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -296($fp) + sw $t1 -332($fp) + lw $t0 -300($fp) lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - lw $t1 -324($fp) + sw $t1 -328($fp) + lw $t0 -332($fp) + lw $t1 -328($fp) seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_86 - label_86: - lw $t0 -300($fp) + sw $t0 -304($fp) + j label_88 + label_88: + lw $t0 -304($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -332($fp) - lw $t0 -332($fp) - lw $t1 12($t0) - sw $t1 -336($fp) + sw $v0 -336($fp) lw $t0 -336($fp) - bne $t0 $zero label_111 + lw $t1 12($t0) + sw $t1 -340($fp) + lw $t0 -340($fp) + bne $t0 $zero label_115 li $t0 6 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -248($fp) + sw $v0 -252($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -272($fp) + sw $t1 -276($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -268($fp) + sw $t0 -272($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -264($fp) + sw $t0 -268($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -264($fp) + lw $t0 -276($fp) + lw $t1 -272($fp) + seq $t0 $t0 $t1 sw $t0 -260($fp) - lw $t0 -272($fp) + lw $t0 -260($fp) + bne $t0 $zero label_89 + lw $t0 -276($fp) lw $t1 -268($fp) seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_87 - lw $t0 -272($fp) + sw $t0 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_90 + lw $t0 -276($fp) lw $t1 -264($fp) seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_88 - lw $t0 -272($fp) - lw $t1 -260($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_89 + sw $t0 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_91 lw $t0 0($fp) - lw $t1 -248($fp) + lw $t1 -252($fp) seq $t0 $t0 $t1 - sw $t0 -252($fp) - j label_90 - label_87: + sw $t0 -256($fp) + j label_92 + label_89: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -248($fp) + sw $t1 -284($fp) + lw $t0 -252($fp) lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -280($fp) - lw $t1 -276($fp) + sw $t1 -280($fp) + lw $t0 -284($fp) + lw $t1 -280($fp) seq $t0 $t0 $t1 - sw $t0 -252($fp) - j label_90 - label_88: + sw $t0 -256($fp) + j label_92 + label_90: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -248($fp) + sw $t1 -284($fp) + lw $t0 -252($fp) lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -280($fp) + sw $t1 -280($fp) + lw $t0 -284($fp) move $a0 $t0 - lw $t0 -276($fp) + lw $t0 -280($fp) move $a1 $t0 jal equal_str - sw $v0 -252($fp) - j label_90 - label_89: + sw $v0 -256($fp) + j label_92 + label_91: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -248($fp) + sw $t1 -284($fp) + lw $t0 -252($fp) lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -280($fp) - lw $t1 -276($fp) + sw $t1 -280($fp) + lw $t0 -284($fp) + lw $t1 -280($fp) seq $t0 $t0 $t1 - sw $t0 -252($fp) - j label_90 - label_90: - lw $t0 -252($fp) + sw $t0 -256($fp) + j label_92 + label_92: + lw $t0 -256($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -284($fp) - lw $t0 -284($fp) - lw $t1 12($t0) - sw $t1 -288($fp) + sw $v0 -288($fp) lw $t0 -288($fp) - bne $t0 $zero label_109 + lw $t1 12($t0) + sw $t1 -292($fp) + lw $t0 -292($fp) + bne $t0 $zero label_113 li $t0 7 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -200($fp) + sw $v0 -204($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -224($fp) + sw $t1 -228($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -220($fp) + sw $t0 -224($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -216($fp) + sw $t0 -220($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -216($fp) + lw $t0 -228($fp) + lw $t1 -224($fp) + seq $t0 $t0 $t1 sw $t0 -212($fp) - lw $t0 -224($fp) + lw $t0 -212($fp) + bne $t0 $zero label_93 + lw $t0 -228($fp) lw $t1 -220($fp) seq $t0 $t0 $t1 - sw $t0 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_91 - lw $t0 -224($fp) + sw $t0 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_94 + lw $t0 -228($fp) lw $t1 -216($fp) seq $t0 $t0 $t1 - sw $t0 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_92 - lw $t0 -224($fp) - lw $t1 -212($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_93 + sw $t0 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_95 lw $t0 0($fp) - lw $t1 -200($fp) + lw $t1 -204($fp) seq $t0 $t0 $t1 - sw $t0 -204($fp) - j label_94 - label_91: + sw $t0 -208($fp) + j label_96 + label_93: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -200($fp) + sw $t1 -236($fp) + lw $t0 -204($fp) lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -232($fp) - lw $t1 -228($fp) + sw $t1 -232($fp) + lw $t0 -236($fp) + lw $t1 -232($fp) seq $t0 $t0 $t1 - sw $t0 -204($fp) - j label_94 - label_92: + sw $t0 -208($fp) + j label_96 + label_94: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -200($fp) + sw $t1 -236($fp) + lw $t0 -204($fp) lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -232($fp) + sw $t1 -232($fp) + lw $t0 -236($fp) move $a0 $t0 - lw $t0 -228($fp) + lw $t0 -232($fp) move $a1 $t0 jal equal_str - sw $v0 -204($fp) - j label_94 - label_93: + sw $v0 -208($fp) + j label_96 + label_95: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -200($fp) + sw $t1 -236($fp) + lw $t0 -204($fp) lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -232($fp) - lw $t1 -228($fp) - seq $t0 $t0 $t1 - sw $t0 -204($fp) - j label_94 - label_94: - lw $t0 -204($fp) + sw $t1 -232($fp) + lw $t0 -236($fp) + lw $t1 -232($fp) + seq $t0 $t0 $t1 + sw $t0 -208($fp) + j label_96 + label_96: + lw $t0 -208($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -236($fp) - lw $t0 -236($fp) - lw $t1 12($t0) - sw $t1 -240($fp) + sw $v0 -240($fp) lw $t0 -240($fp) - bne $t0 $zero label_107 + lw $t1 12($t0) + sw $t1 -244($fp) + lw $t0 -244($fp) + bne $t0 $zero label_111 li $t0 8 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -152($fp) + sw $v0 -156($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -176($fp) + sw $t1 -180($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -172($fp) + sw $t0 -176($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -168($fp) + sw $t0 -172($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -168($fp) + lw $t0 -180($fp) + lw $t1 -176($fp) + seq $t0 $t0 $t1 sw $t0 -164($fp) - lw $t0 -176($fp) + lw $t0 -164($fp) + bne $t0 $zero label_97 + lw $t0 -180($fp) lw $t1 -172($fp) seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_95 - lw $t0 -176($fp) + sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_98 + lw $t0 -180($fp) lw $t1 -168($fp) seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_96 - lw $t0 -176($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_97 + sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_99 lw $t0 0($fp) - lw $t1 -152($fp) + lw $t1 -156($fp) seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_98 - label_95: + sw $t0 -160($fp) + j label_100 + label_97: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -152($fp) + sw $t1 -188($fp) + lw $t0 -156($fp) lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) + sw $t1 -184($fp) + lw $t0 -188($fp) + lw $t1 -184($fp) seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_98 - label_96: + sw $t0 -160($fp) + j label_100 + label_98: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -152($fp) + sw $t1 -188($fp) + lw $t0 -156($fp) lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) + sw $t1 -184($fp) + lw $t0 -188($fp) move $a0 $t0 - lw $t0 -180($fp) + lw $t0 -184($fp) move $a1 $t0 jal equal_str - sw $v0 -156($fp) - j label_98 - label_97: + sw $v0 -160($fp) + j label_100 + label_99: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -152($fp) + sw $t1 -188($fp) + lw $t0 -156($fp) lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) + sw $t1 -184($fp) + lw $t0 -188($fp) + lw $t1 -184($fp) seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_98 - label_98: - lw $t0 -156($fp) + sw $t0 -160($fp) + j label_100 + label_100: + lw $t0 -160($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -192($fp) + sw $v0 -192($fp) lw $t0 -192($fp) - bne $t0 $zero label_105 + lw $t1 12($t0) + sw $t1 -196($fp) + lw $t0 -196($fp) + bne $t0 $zero label_109 li $t0 9 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -104($fp) + sw $v0 -108($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -128($fp) + sw $t1 -132($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -124($fp) + sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -120($fp) + sw $t0 -124($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -120($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 sw $t0 -116($fp) - lw $t0 -128($fp) + lw $t0 -116($fp) + bne $t0 $zero label_101 + lw $t0 -132($fp) lw $t1 -124($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_99 - lw $t0 -128($fp) + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_102 + lw $t0 -132($fp) lw $t1 -120($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_100 - lw $t0 -128($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_101 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_103 lw $t0 0($fp) - lw $t1 -104($fp) + lw $t1 -108($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_102 - label_99: + sw $t0 -112($fp) + j label_104 + label_101: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) + sw $t1 -140($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_102 - label_100: + sw $t0 -112($fp) + j label_104 + label_102: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) + sw $t1 -140($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) move $a0 $t0 - lw $t0 -132($fp) + lw $t0 -136($fp) move $a1 $t0 jal equal_str - sw $v0 -108($fp) - j label_102 - label_101: + sw $v0 -112($fp) + j label_104 + label_103: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) + sw $t1 -140($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_102 - label_102: - lw $t0 -108($fp) + sw $t0 -112($fp) + j label_104 + label_104: + lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -144($fp) + sw $v0 -144($fp) lw $t0 -144($fp) - bne $t0 $zero label_103 + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_107 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_105 + j label_106 + label_105: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_106: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2912,7 +2968,7 @@ function_i2c_at_A2I: jalr $ra $t0 addi $sp $sp 4 sw $v0 -100($fp) - la $t0 data_22 + la $t0 data_24 sw $t0 -96($fp) lw $t0 -96($fp) addi $sp $sp -4 @@ -2921,10 +2977,10 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -92($fp) lw $t0 -92($fp) - sw $t0 -148($fp) - j label_104 - label_103: - la $t0 data_23 + sw $t0 -152($fp) + j label_108 + label_107: + la $t0 data_25 sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 @@ -2933,13 +2989,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -84($fp) lw $t0 -84($fp) - sw $t0 -148($fp) - label_104: - lw $t0 -148($fp) - sw $t0 -196($fp) - j label_106 - label_105: - la $t0 data_24 + sw $t0 -152($fp) + label_108: + lw $t0 -152($fp) + sw $t0 -200($fp) + j label_110 + label_109: + la $t0 data_26 sw $t0 -80($fp) lw $t0 -80($fp) addi $sp $sp -4 @@ -2948,13 +3004,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -76($fp) lw $t0 -76($fp) - sw $t0 -196($fp) - label_106: - lw $t0 -196($fp) - sw $t0 -244($fp) - j label_108 - label_107: - la $t0 data_25 + sw $t0 -200($fp) + label_110: + lw $t0 -200($fp) + sw $t0 -248($fp) + j label_112 + label_111: + la $t0 data_27 sw $t0 -72($fp) lw $t0 -72($fp) addi $sp $sp -4 @@ -2963,13 +3019,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -68($fp) lw $t0 -68($fp) - sw $t0 -244($fp) - label_108: - lw $t0 -244($fp) - sw $t0 -292($fp) - j label_110 - label_109: - la $t0 data_26 + sw $t0 -248($fp) + label_112: + lw $t0 -248($fp) + sw $t0 -296($fp) + j label_114 + label_113: + la $t0 data_28 sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 @@ -2978,13 +3034,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -60($fp) lw $t0 -60($fp) - sw $t0 -292($fp) - label_110: - lw $t0 -292($fp) - sw $t0 -340($fp) - j label_112 - label_111: - la $t0 data_27 + sw $t0 -296($fp) + label_114: + lw $t0 -296($fp) + sw $t0 -344($fp) + j label_116 + label_115: + la $t0 data_29 sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 @@ -2993,28 +3049,28 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) - sw $t0 -340($fp) - label_112: - lw $t0 -340($fp) - sw $t0 -388($fp) - j label_114 - label_113: - la $t0 data_28 + sw $t0 -344($fp) + label_116: + lw $t0 -344($fp) + sw $t0 -392($fp) + j label_118 + label_117: + la $t0 data_30 sw $t0 -48($fp) lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -388($fp) - label_114: - lw $t0 -388($fp) - sw $t0 -436($fp) - j label_116 - label_115: - la $t0 data_29 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -44($fp) + lw $t0 -44($fp) + sw $t0 -392($fp) + label_118: + lw $t0 -392($fp) + sw $t0 -440($fp) + j label_120 + label_119: + la $t0 data_31 sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 @@ -3023,13 +3079,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) - sw $t0 -436($fp) - label_116: - lw $t0 -436($fp) - sw $t0 -484($fp) - j label_118 - label_117: - la $t0 data_30 + sw $t0 -440($fp) + label_120: + lw $t0 -440($fp) + sw $t0 -488($fp) + j label_122 + label_121: + la $t0 data_32 sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 @@ -3038,13 +3094,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) - sw $t0 -484($fp) - label_118: - lw $t0 -484($fp) - sw $t0 -532($fp) - j label_120 - label_119: - la $t0 data_31 + sw $t0 -488($fp) + label_122: + lw $t0 -488($fp) + sw $t0 -536($fp) + j label_124 + label_123: + la $t0 data_33 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -3053,13 +3109,13 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -532($fp) - label_120: - lw $t0 -532($fp) - sw $t0 -580($fp) - j label_122 - label_121: - la $t0 data_32 + sw $t0 -536($fp) + label_124: + lw $t0 -536($fp) + sw $t0 -584($fp) + j label_126 + label_125: + la $t0 data_34 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -3068,10 +3124,10 @@ function_i2c_at_A2I: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -580($fp) - label_122: - lw $v0 -580($fp) - addi $sp $sp 572 + sw $t0 -584($fp) + label_126: + lw $v0 -584($fp) + addi $sp $sp 576 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3084,21 +3140,21 @@ function_a2i_at_A2I: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -300 + addi $sp $sp -312 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -264($fp) - lw $t0 -264($fp) - bne $t0 $zero label_123 - j label_124 - label_123: + sw $t0 -276($fp) + lw $t0 -276($fp) + bne $t0 $zero label_127 + j label_128 + label_127: li $v0 4 - la $a0 data_33 + la $a0 data_35 syscall li $v0 10 syscall - label_124: + label_128: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -3111,138 +3167,138 @@ function_a2i_at_A2I: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -260($fp) + sw $v0 -272($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -260($fp) + sw $v0 -268($fp) + lw $t0 -272($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -288($fp) + sw $t1 -300($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -284($fp) + sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -280($fp) + sw $t0 -292($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -276($fp) - lw $t0 -288($fp) - lw $t1 -284($fp) + sw $t0 -288($fp) + lw $t0 -300($fp) + lw $t1 -296($fp) seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_125 - lw $t0 -288($fp) - lw $t1 -280($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_129 + lw $t0 -300($fp) + lw $t1 -292($fp) seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_126 - lw $t0 -288($fp) - lw $t1 -276($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_130 + lw $t0 -300($fp) + lw $t1 -288($fp) seq $t0 $t0 $t1 - sw $t0 -272($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_131 lw $t0 -272($fp) - bne $t0 $zero label_127 - lw $t0 -260($fp) - lw $t1 -256($fp) + lw $t1 -268($fp) seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_128 - label_125: - lw $t0 -260($fp) + sw $t0 -280($fp) + j label_132 + label_129: + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -256($fp) + sw $t1 -308($fp) + lw $t0 -268($fp) lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_128 - label_126: - lw $t0 -260($fp) + sw $t0 -280($fp) + j label_132 + label_130: + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -256($fp) + sw $t1 -308($fp) + lw $t0 -268($fp) lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) move $a0 $t0 - lw $t0 -292($fp) + lw $t0 -304($fp) move $a1 $t0 jal equal_str - sw $v0 -268($fp) - j label_128 - label_127: - lw $t0 -260($fp) + sw $v0 -280($fp) + j label_132 + label_131: + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -256($fp) + sw $t1 -308($fp) + lw $t0 -268($fp) lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_128 - label_128: - lw $t0 -268($fp) + sw $t0 -280($fp) + j label_132 + label_132: + lw $t0 -280($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 -300($fp) + sw $v0 -312($fp) + lw $t0 -312($fp) lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_153 + sw $t1 -316($fp) + lw $t0 -316($fp) + bne $t0 $zero label_163 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -208($fp) + sw $v0 -220($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -204($fp) + sw $v0 -216($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -200($fp) - lw $t0 -200($fp) - bne $t0 $zero label_129 - j label_130 - label_129: + sw $t0 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_133 + j label_134 + label_133: li $v0 4 - la $a0 data_34 + la $a0 data_36 syscall li $v0 10 syscall - label_130: + label_134: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -208($fp) + lw $t0 -220($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -204($fp) + lw $t0 -216($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -3254,140 +3310,140 @@ function_a2i_at_A2I: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -196($fp) - la $t0 data_35 - sw $t0 -192($fp) - lw $t0 -192($fp) + sw $v0 -208($fp) + la $t0 data_37 + sw $t0 -204($fp) + lw $t0 -204($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -196($fp) + sw $v0 -200($fp) + lw $t0 -208($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -232($fp) + sw $t1 -244($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -228($fp) + sw $t0 -240($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -224($fp) + sw $t0 -236($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -220($fp) - lw $t0 -232($fp) - lw $t1 -228($fp) + sw $t0 -232($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_131 - lw $t0 -232($fp) - lw $t1 -224($fp) + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_135 + lw $t0 -244($fp) + lw $t1 -236($fp) seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_132 - lw $t0 -232($fp) - lw $t1 -220($fp) + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_136 + lw $t0 -244($fp) + lw $t1 -232($fp) seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_133 - lw $t0 -196($fp) - lw $t1 -188($fp) + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_137 + lw $t0 -208($fp) + lw $t1 -200($fp) seq $t0 $t0 $t1 - sw $t0 -212($fp) - j label_134 - label_131: - lw $t0 -196($fp) + sw $t0 -224($fp) + j label_138 + label_135: + lw $t0 -208($fp) lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -188($fp) + sw $t1 -252($fp) + lw $t0 -200($fp) lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -240($fp) - lw $t1 -236($fp) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) seq $t0 $t0 $t1 - sw $t0 -212($fp) - j label_134 - label_132: - lw $t0 -196($fp) + sw $t0 -224($fp) + j label_138 + label_136: + lw $t0 -208($fp) lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -188($fp) + sw $t1 -252($fp) + lw $t0 -200($fp) lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -240($fp) + sw $t1 -248($fp) + lw $t0 -252($fp) move $a0 $t0 - lw $t0 -236($fp) + lw $t0 -248($fp) move $a1 $t0 jal equal_str - sw $v0 -212($fp) - j label_134 - label_133: - lw $t0 -196($fp) + sw $v0 -224($fp) + j label_138 + label_137: + lw $t0 -208($fp) lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -188($fp) + sw $t1 -252($fp) + lw $t0 -200($fp) lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -240($fp) - lw $t1 -236($fp) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) seq $t0 $t0 $t1 - sw $t0 -212($fp) - j label_134 - label_134: - lw $t0 -212($fp) + sw $t0 -224($fp) + j label_138 + label_138: + lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -244($fp) - lw $t0 -244($fp) + sw $v0 -256($fp) + lw $t0 -256($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -248($fp) - bne $t0 $zero label_147 + sw $t1 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_155 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -140($fp) + sw $v0 -152($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -136($fp) + sw $v0 -148($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_135 - j label_136 - label_135: + sw $t0 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_139 + j label_140 + label_139: li $v0 4 - la $a0 data_36 + la $a0 data_38 syscall li $v0 10 syscall - label_136: + label_140: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -140($fp) + lw $t0 -152($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -136($fp) + lw $t0 -148($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -3399,107 +3455,121 @@ function_a2i_at_A2I: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -128($fp) - la $t0 data_37 - sw $t0 -124($fp) - lw $t0 -124($fp) + sw $v0 -140($fp) + la $t0 data_39 + sw $t0 -136($fp) + lw $t0 -136($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -128($fp) + sw $v0 -132($fp) + lw $t0 -140($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -164($fp) + sw $t1 -176($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -160($fp) + sw $t0 -172($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -156($fp) + sw $t0 -168($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -152($fp) - lw $t0 -164($fp) - lw $t1 -160($fp) + sw $t0 -164($fp) + lw $t0 -176($fp) + lw $t1 -172($fp) seq $t0 $t0 $t1 - sw $t0 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_137 - lw $t0 -164($fp) - lw $t1 -156($fp) + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_141 + lw $t0 -176($fp) + lw $t1 -168($fp) seq $t0 $t0 $t1 - sw $t0 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_138 - lw $t0 -164($fp) - lw $t1 -152($fp) + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_142 + lw $t0 -176($fp) + lw $t1 -164($fp) seq $t0 $t0 $t1 - sw $t0 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_139 - lw $t0 -128($fp) - lw $t1 -120($fp) + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_143 + lw $t0 -140($fp) + lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -144($fp) - j label_140 - label_137: - lw $t0 -128($fp) + sw $t0 -156($fp) + j label_144 + label_141: + lw $t0 -140($fp) lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -120($fp) + sw $t1 -184($fp) + lw $t0 -132($fp) lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -172($fp) - lw $t1 -168($fp) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) seq $t0 $t0 $t1 - sw $t0 -144($fp) - j label_140 - label_138: - lw $t0 -128($fp) + sw $t0 -156($fp) + j label_144 + label_142: + lw $t0 -140($fp) lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -120($fp) + sw $t1 -184($fp) + lw $t0 -132($fp) lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -172($fp) + sw $t1 -180($fp) + lw $t0 -184($fp) move $a0 $t0 - lw $t0 -168($fp) + lw $t0 -180($fp) move $a1 $t0 jal equal_str - sw $v0 -144($fp) - j label_140 - label_139: - lw $t0 -128($fp) + sw $v0 -156($fp) + j label_144 + label_143: + lw $t0 -140($fp) lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -120($fp) + sw $t1 -184($fp) + lw $t0 -132($fp) lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -172($fp) - lw $t1 -168($fp) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) seq $t0 $t0 $t1 - sw $t0 -144($fp) - j label_140 - label_140: - lw $t0 -144($fp) + sw $t0 -156($fp) + j label_144 + label_144: + lw $t0 -156($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -176($fp) - lw $t0 -176($fp) + sw $v0 -188($fp) + lw $t0 -188($fp) lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_141 + sw $t1 -192($fp) + lw $t0 -192($fp) + bne $t0 $zero label_147 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_145 + j label_146 + label_145: + li $v0 4 + la $a0 data_40 + syscall + li $v0 10 + syscall + label_146: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -3515,31 +3585,31 @@ function_a2i_at_A2I: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -116($fp) - lw $t0 -116($fp) - sw $t0 -184($fp) - j label_146 - label_141: + sw $v0 -124($fp) + lw $t0 -124($fp) + sw $t0 -196($fp) + j label_154 + label_147: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -108($fp) + sw $v0 -120($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_142 - j label_143 - label_142: + sw $t0 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_148 + j label_149 + label_148: li $v0 4 - la $a0 data_38 + la $a0 data_41 syscall li $v0 10 syscall - label_143: + label_149: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -3552,50 +3622,50 @@ function_a2i_at_A2I: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) + sw $v0 -96($fp) + lw $t0 -96($fp) lw $t1 12($t0) - sw $t1 -100($fp) + sw $t1 -112($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) + sw $v0 -92($fp) + lw $t0 -92($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) + sw $t1 -108($fp) + lw $t0 -112($fp) + lw $t1 -108($fp) sub $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) + sw $t0 -104($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -104($fp) + sw $v0 -116($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_144 - j label_145 - label_144: + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_150 + j label_151 + label_150: li $v0 4 - la $a0 data_39 + la $a0 data_42 syscall li $v0 10 syscall - label_145: + label_151: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -108($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -104($fp) + lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -3607,11 +3677,25 @@ function_a2i_at_A2I: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -72($fp) + sw $v0 -84($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_152 + j label_153 + label_152: + li $v0 4 + la $a0 data_43 + syscall + li $v0 10 + syscall + label_153: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -72($fp) + lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -3623,34 +3707,34 @@ function_a2i_at_A2I: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -184($fp) - label_146: - lw $t0 -184($fp) - sw $t0 -252($fp) - j label_152 - label_147: + sw $v0 -76($fp) + lw $t0 -76($fp) + sw $t0 -196($fp) + label_154: + lw $t0 -196($fp) + sw $t0 -264($fp) + j label_162 + label_155: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) + sw $v0 -60($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_148 - j label_149 - label_148: + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_156 + j label_157 + label_156: li $v0 4 - la $a0 data_40 + la $a0 data_44 syscall li $v0 10 syscall - label_149: + label_157: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -3663,50 +3747,50 @@ function_a2i_at_A2I: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -44($fp) + sw $t1 -52($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) + sw $v0 -32($fp) + lw $t0 -32($fp) lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) sub $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) + sw $t0 -44($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -48($fp) + sw $v0 -56($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_150 - j label_151 - label_150: + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_158 + j label_159 + label_158: li $v0 4 - la $a0 data_41 + la $a0 data_45 syscall li $v0 10 syscall - label_151: + label_159: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -48($fp) + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -3718,11 +3802,25 @@ function_a2i_at_A2I: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -16($fp) + sw $v0 -24($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_160 + j label_161 + label_160: + li $v0 4 + la $a0 data_46 + syscall + li $v0 10 + syscall + label_161: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -16($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -3734,27 +3832,27 @@ function_a2i_at_A2I: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -56($fp) - lw $t0 -56($fp) + sw $v0 -16($fp) + lw $t0 -16($fp) lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) + sw $t1 -68($fp) + lw $t0 -68($fp) not $t0 $t0 addi $t0 $t0 1 - sw $t0 -60($fp) - lw $t0 -60($fp) + sw $t0 -64($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -252($fp) - label_152: - lw $t0 -252($fp) - sw $t0 -308($fp) - j label_154 - label_153: + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -264($fp) + label_162: + lw $t0 -264($fp) + sw $t0 -320($fp) + j label_164 + label_163: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -3762,10 +3860,10 @@ function_a2i_at_A2I: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -308($fp) - label_154: - lw $v0 -308($fp) - addi $sp $sp 300 + sw $t0 -320($fp) + label_164: + lw $v0 -320($fp) + addi $sp $sp 312 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3778,29 +3876,29 @@ function_a2i_aux_at_A2I: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -120 + addi $sp $sp -124 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -124($fp) - sw $t0 -128($fp) + sw $v0 -128($fp) + lw $t0 -128($fp) + sw $t0 -132($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_155 - j label_156 - label_155: + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_165 + j label_166 + label_165: li $v0 4 - la $a0 data_42 + la $a0 data_47 syscall li $v0 10 syscall - label_156: + label_166: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -3813,93 +3911,93 @@ function_a2i_aux_at_A2I: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -120($fp) + sw $v0 -116($fp) + lw $t0 -116($fp) + sw $t0 -124($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - sw $t0 -108($fp) - label_157: + sw $v0 -108($fp) lw $t0 -108($fp) + sw $t0 -112($fp) + label_167: + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -120($fp) + sw $t1 -96($fp) + lw $t0 -124($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) slt $t1 $t0 $t1 - sw $t1 -84($fp) - lw $t0 -84($fp) + sw $t1 -88($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -100($fp) + sw $v0 -100($fp) lw $t0 -100($fp) - bne $t0 $zero label_158 - j label_161 - label_158: - lw $t0 -128($fp) lw $t1 12($t0) - sw $t1 -60($fp) + sw $t1 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_168 + j label_173 + label_168: + lw $t0 -132($fp) + lw $t1 12($t0) + sw $t1 -64($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) + sw $v0 -52($fp) + lw $t0 -52($fp) lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) + sw $t1 -60($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) mul $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) + sw $t0 -56($fp) + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) + sw $v0 -68($fp) + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -76($fp) + sw $t1 -80($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -40($fp) + sw $v0 -48($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_159 - j label_160 - label_159: + sw $t0 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_169 + j label_170 + label_169: li $v0 4 - la $a0 data_43 + la $a0 data_48 syscall li $v0 10 syscall - label_160: + label_170: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -108($fp) + lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -40($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -3911,11 +4009,25 @@ function_a2i_aux_at_A2I: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -32($fp) + sw $v0 -40($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_171 + j label_172 + label_171: + li $v0 4 + la $a0 data_49 + syscall + li $v0 10 + syscall + label_172: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -3927,23 +4039,23 @@ function_a2i_aux_at_A2I: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) + sw $v0 -32($fp) + lw $t0 -32($fp) lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) add $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) + sw $t0 -72($fp) + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -128($fp) - lw $t0 -108($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) + sw $t0 -132($fp) + lw $t0 -112($fp) lw $t1 12($t0) sw $t1 -24($fp) li $t0 1 @@ -3966,11 +4078,11 @@ function_a2i_aux_at_A2I: addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) - sw $t0 -108($fp) - j label_157 - label_161: - lw $v0 -128($fp) - addi $sp $sp 120 + sw $t0 -112($fp) + j label_167 + label_173: + lw $v0 -132($fp) + addi $sp $sp 124 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3983,171 +4095,185 @@ function_i2a_at_A2I: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -140 + addi $sp $sp -148 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -104($fp) + sw $v0 -112($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -128($fp) + sw $t1 -136($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -124($fp) + sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -120($fp) + sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -128($fp) - lw $t1 -124($fp) + sw $t0 -124($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_162 - lw $t0 -128($fp) - lw $t1 -120($fp) + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_174 + lw $t0 -136($fp) + lw $t1 -128($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_163 - lw $t0 -128($fp) - lw $t1 -116($fp) + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_175 + lw $t0 -136($fp) + lw $t1 -124($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_164 + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_176 lw $t0 0($fp) - lw $t1 -104($fp) + lw $t1 -112($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_165 - label_162: + sw $t0 -116($fp) + j label_177 + label_174: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) + sw $t1 -144($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) + sw $t1 -140($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_165 - label_163: + sw $t0 -116($fp) + j label_177 + label_175: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) + sw $t1 -144($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) + sw $t1 -140($fp) + lw $t0 -144($fp) move $a0 $t0 - lw $t0 -132($fp) + lw $t0 -140($fp) move $a1 $t0 jal equal_str - sw $v0 -108($fp) - j label_165 - label_164: + sw $v0 -116($fp) + j label_177 + label_176: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -104($fp) + sw $t1 -144($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) + sw $t1 -140($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_165 - label_165: - lw $t0 -108($fp) + sw $t0 -116($fp) + j label_177 + label_177: + lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) + sw $v0 -148($fp) + lw $t0 -148($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_170 + sw $t1 -152($fp) + lw $t0 -152($fp) + bne $t0 $zero label_186 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) lw $t1 12($t0) - sw $t1 -88($fp) + sw $t1 -96($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) slt $t1 $t0 $t1 - sw $t1 -80($fp) - lw $t0 -80($fp) + sw $t1 -88($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) + sw $v0 -100($fp) + lw $t0 -100($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_168 + sw $t1 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_182 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -64($fp) + sw $t1 -76($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) + sw $v0 -52($fp) + lw $t0 -52($fp) lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -48($fp) + sw $t1 -60($fp) + lw $t0 -60($fp) not $t0 $t0 addi $t0 $t0 1 - sw $t0 -44($fp) - lw $t0 -44($fp) + sw $t0 -56($fp) + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) + sw $v0 -64($fp) lw $t0 -64($fp) - lw $t1 -60($fp) + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) mul $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) + sw $t0 -68($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -68($fp) + sw $v0 -80($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_178 + j label_179 + label_178: + li $v0 4 + la $a0 data_50 + syscall + li $v0 10 + syscall + label_179: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -68($fp) + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -4159,36 +4285,36 @@ function_i2a_at_A2I: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -72($fp) - la $t0 data_44 - sw $t0 -36($fp) - lw $t0 -36($fp) + sw $v0 -44($fp) + la $t0 data_51 + sw $t0 -40($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_166 - j label_167 - label_166: + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_180 + j label_181 + label_180: li $v0 4 - la $a0 data_45 + la $a0 data_52 syscall li $v0 10 syscall - label_167: - lw $t0 -32($fp) + label_181: + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -72($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -4197,11 +4323,25 @@ function_i2a_at_A2I: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -24($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -108($fp) + j label_185 + label_182: + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) lw $t0 -24($fp) - sw $t0 -100($fp) - j label_169 - label_168: + bne $t0 $zero label_183 + j label_184 + label_183: + li $v0 4 + la $a0 data_53 + syscall + li $v0 10 + syscall + label_184: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -4219,13 +4359,13 @@ function_i2a_at_A2I: addi $sp $sp 8 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -100($fp) - label_169: - lw $t0 -100($fp) - sw $t0 -148($fp) - j label_171 - label_170: - la $t0 data_46 + sw $t0 -108($fp) + label_185: + lw $t0 -108($fp) + sw $t0 -156($fp) + j label_187 + label_186: + la $t0 data_54 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -4234,10 +4374,10 @@ function_i2a_at_A2I: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -148($fp) - label_171: - lw $v0 -148($fp) - addi $sp $sp 140 + sw $t0 -156($fp) + label_187: + lw $v0 -156($fp) + addi $sp $sp 148 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -4250,195 +4390,209 @@ function_i2a_aux_at_A2I: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -136 + addi $sp $sp -144 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -100($fp) + sw $v0 -108($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -124($fp) + sw $t1 -132($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -120($fp) + sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -116($fp) + sw $t0 -124($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -112($fp) - lw $t0 -124($fp) - lw $t1 -120($fp) + sw $t0 -120($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_172 - lw $t0 -124($fp) - lw $t1 -116($fp) + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_188 + lw $t0 -132($fp) + lw $t1 -124($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_173 - lw $t0 -124($fp) - lw $t1 -112($fp) + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_189 + lw $t0 -132($fp) + lw $t1 -120($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_174 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_190 lw $t0 0($fp) - lw $t1 -100($fp) + lw $t1 -108($fp) seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_175 - label_172: + sw $t0 -112($fp) + j label_191 + label_188: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -100($fp) + sw $t1 -140($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_175 - label_173: + sw $t0 -112($fp) + j label_191 + label_189: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -100($fp) + sw $t1 -140($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) move $a0 $t0 - lw $t0 -128($fp) + lw $t0 -136($fp) move $a1 $t0 jal equal_str - sw $v0 -104($fp) - j label_175 - label_174: + sw $v0 -112($fp) + j label_191 + label_190: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -100($fp) + sw $t1 -140($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_175 - label_175: - lw $t0 -104($fp) + sw $t0 -112($fp) + j label_191 + label_191: + lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 -136($fp) + sw $v0 -144($fp) + lw $t0 -144($fp) lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_180 + sw $t1 -148($fp) + lw $t0 -148($fp) + bne $t0 $zero label_200 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -88($fp) + sw $t1 -96($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -72($fp) + sw $v0 -80($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -72($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) lw $t1 12($t0) sw $t1 -84($fp) - lw $t0 -76($fp) - lw $t1 -84($fp) + lw $t0 -80($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -84($fp) + lw $t1 -92($fp) seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_176 - j label_177 - label_176: + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_192 + j label_193 + label_192: li $v0 4 - la $a0 data_47 + la $a0 data_55 syscall li $v0 10 syscall - label_177: - lw $t0 -88($fp) - lw $t1 -84($fp) + label_193: + lw $t0 -96($fp) + lw $t1 -92($fp) div $t0 $t1 mflo $t0 - sw $t0 -80($fp) - lw $t0 -80($fp) + sw $t0 -88($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -96($fp) + sw $v0 -100($fp) + lw $t0 -100($fp) + sw $t0 -104($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -96($fp) + sw $t1 -72($fp) + lw $t0 -104($fp) lw $t1 12($t0) - sw $t1 -44($fp) + sw $t1 -56($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -40($fp) + sw $v0 -44($fp) lw $t0 -44($fp) - lw $t1 -40($fp) + lw $t1 12($t0) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) mul $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) + sw $t0 -48($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -56($fp) + sw $v0 -60($fp) lw $t0 -60($fp) - lw $t1 -56($fp) + lw $t1 12($t0) + sw $t1 -68($fp) + lw $t0 -72($fp) + lw $t1 -68($fp) sub $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) + sw $t0 -64($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -64($fp) + sw $v0 -76($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_194 + j label_195 + label_194: + li $v0 4 + la $a0 data_56 + syscall + li $v0 10 + syscall + label_195: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -64($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -4450,11 +4604,25 @@ function_i2a_aux_at_A2I: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -68($fp) + sw $v0 -36($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_196 + j label_197 + label_196: + li $v0 4 + la $a0 data_57 + syscall + li $v0 10 + syscall + label_197: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -96($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -4472,19 +4640,19 @@ function_i2a_aux_at_A2I: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_178 - j label_179 - label_178: + bne $t0 $zero label_198 + j label_199 + label_198: li $v0 4 - la $a0 data_48 + la $a0 data_58 syscall li $v0 10 syscall - label_179: + label_199: lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -68($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 -28($fp) @@ -4498,10 +4666,10 @@ function_i2a_aux_at_A2I: addi $sp $sp 8 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -144($fp) - j label_181 - label_180: - la $t0 data_49 + sw $t0 -152($fp) + j label_201 + label_200: + la $t0 data_59 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -4510,10 +4678,10 @@ function_i2a_aux_at_A2I: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -144($fp) - label_181: - lw $v0 -144($fp) - addi $sp $sp 136 + sw $t0 -152($fp) + label_201: + lw $v0 -152($fp) + addi $sp $sp 144 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -4575,38 +4743,38 @@ function_main_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -76 - la $t0 data_50 - sw $t0 -80($fp) - lw $t0 -80($fp) + addi $sp $sp -92 + la $t0 data_60 + sw $t0 -96($fp) + lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -76($fp) + sw $v0 -92($fp) jal __init_at_A2I - sw $v0 -72($fp) - lw $t0 -72($fp) + sw $v0 -88($fp) + lw $t0 -88($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_182 - j label_183 - label_182: + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_202 + j label_203 + label_202: li $v0 4 - la $a0 data_51 + la $a0 data_61 syscall li $v0 10 syscall - label_183: - lw $t0 -72($fp) + label_203: + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -76($fp) + lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -72($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -4615,38 +4783,38 @@ function_main_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -64($fp) - lw $t0 -64($fp) - sw $t0 -84($fp) + sw $v0 -80($fp) + lw $t0 -80($fp) + sw $t0 -100($fp) li $t0 678987 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -56($fp) + sw $v0 -72($fp) jal __init_at_A2I - sw $v0 -52($fp) - lw $t0 -52($fp) + sw $v0 -68($fp) + lw $t0 -68($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_184 - j label_185 - label_184: + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_204 + j label_205 + label_204: li $v0 4 - la $a0 data_52 + la $a0 data_62 syscall li $v0 10 syscall - label_185: - lw $t0 -52($fp) + label_205: + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -56($fp) + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -4655,13 +4823,27 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -60($fp) + sw $v0 -60($fp) + lw $t0 -60($fp) + sw $t0 -76($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_206 + j label_207 + label_206: + li $v0 4 + la $a0 data_63 + syscall + li $v0 10 + syscall + label_207: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -84($fp) + lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -4673,19 +4855,33 @@ function_main_at_Main: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -40($fp) - la $t0 data_53 - sw $t0 -32($fp) - lw $t0 -32($fp) + sw $v0 -52($fp) + la $t0 data_64 + sw $t0 -48($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -28($fp) + sw $v0 -44($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_208 + j label_209 + label_208: + li $v0 4 + la $a0 data_65 + syscall + li $v0 10 + syscall + label_209: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -28($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -4699,9 +4895,23 @@ function_main_at_Main: addi $sp $sp 8 sw $v0 -36($fp) lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_210 + j label_211 + label_210: + li $v0 4 + la $a0 data_66 + syscall + li $v0 10 + syscall + label_211: + lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -60($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -4713,19 +4923,33 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -24($fp) - la $t0 data_54 - sw $t0 -16($fp) - lw $t0 -16($fp) + sw $v0 -28($fp) + la $t0 data_67 + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_212 + j label_213 + label_212: + li $v0 4 + la $a0 data_68 + syscall + li $v0 10 + syscall + label_213: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -4737,9 +4961,9 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $v0 -20($fp) - addi $sp $sp 76 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 92 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index a35f191d7..10b56bf55 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -40,55 +40,77 @@ data_18: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_19: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_20: .asciiz "\n" +data_20: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_21: .asciiz "author: " +data_21: .asciiz "\n" .word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" +data_22: .asciiz "author: " .word 0 data_23: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_24: .asciiz "\n" +data_24: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_25: .asciiz "periodical: " +data_25: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_26: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_27: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_28: .asciiz "RuntimeError: Function call in a void instance" +data_28: .asciiz "\n" .word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" +data_29: .asciiz "periodical: " .word 0 -data_30: .asciiz "RuntimeError: void in switch case" +data_30: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_31: .asciiz "RuntimeError: Case statement without a match branch" +data_31: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_32: .asciiz "- dynamic type was Article -\n" +data_32: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_33: .asciiz "- dynamic type was Book -\n" +data_33: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_34: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_35: .asciiz "Compilers, Principles, Techniques, and Tools" +data_35: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_36: .asciiz "Aho, Sethi, and Ullman" +data_36: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_37: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_38: .asciiz "The Top 100 CD_ROMs" +data_38: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_39: .asciiz "Ulanoff" +data_39: .asciiz "RuntimeError: void in switch case" .word 0 -data_40: .asciiz "PC Magazine" +data_40: .asciiz "RuntimeError: Case statement without a match branch" .word 0 -data_41: .asciiz "RuntimeError: Function call in a void instance" +data_41: .asciiz "- dynamic type was Article -\n" .word 0 data_42: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_43: .asciiz "RuntimeError: Function call in a void instance" +data_43: .asciiz "- dynamic type was Book -\n" .word 0 data_44: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_45: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_46: .asciiz "Compilers, Principles, Techniques, and Tools" +.word 0 +data_47: .asciiz "Aho, Sethi, and Ullman" +.word 0 +data_48: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_49: .asciiz "The Top 100 CD_ROMs" +.word 0 +data_50: .asciiz "Ulanoff" +.word 0 +data_51: .asciiz "PC Magazine" +.word 0 +data_52: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_53: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_54: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_55: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -882,27 +904,41 @@ function_print_at_Book: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -80 + addi $sp $sp -88 la $t0 data_16 - sw $t0 -80($fp) - lw $t0 -80($fp) + sw $t0 -88($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -76($fp) + sw $v0 -84($fp) la $t0 data_17 - sw $t0 -68($fp) - lw $t0 -68($fp) + sw $t0 -80($fp) + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -64($fp) + sw $v0 -76($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_4: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -64($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -914,22 +950,22 @@ function_print_at_Book: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -72($fp) - lw $t0 -72($fp) + sw $v0 -68($fp) + lw $t0 -68($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_3 - j label_4 - label_3: + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_5 + j label_6 + label_5: li $v0 4 - la $a0 data_18 + la $a0 data_19 syscall li $v0 10 syscall - label_4: - lw $t0 -72($fp) + label_6: + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t4 0($fp) @@ -940,7 +976,7 @@ function_print_at_Book: addi $sp $sp 4 addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -72($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -949,28 +985,28 @@ function_print_at_Book: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -56($fp) - lw $t0 -56($fp) + sw $v0 -60($fp) + lw $t0 -60($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_5 - j label_6 - label_5: + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_7 + j label_8 + label_7: li $v0 4 - la $a0 data_19 + la $a0 data_20 syscall li $v0 10 syscall - label_6: - lw $t0 -56($fp) + label_8: + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -76($fp) + lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -56($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -979,27 +1015,41 @@ function_print_at_Book: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -48($fp) - la $t0 data_20 - sw $t0 -44($fp) - lw $t0 -44($fp) + sw $v0 -52($fp) + la $t0 data_21 + sw $t0 -48($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -40($fp) - la $t0 data_21 - sw $t0 -32($fp) - lw $t0 -32($fp) + sw $v0 -44($fp) + la $t0 data_22 + sw $t0 -40($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -28($fp) + sw $v0 -36($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_10: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -28($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1011,22 +1061,22 @@ function_print_at_Book: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) li $t1 0 seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_7 - j label_8 - label_7: + bne $t0 $zero label_11 + j label_12 + label_11: li $v0 4 - la $a0 data_22 + la $a0 data_24 syscall li $v0 10 syscall - label_8: - lw $t0 -36($fp) + label_12: + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t4 0($fp) @@ -1037,7 +1087,7 @@ function_print_at_Book: addi $sp $sp 4 addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -36($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1052,19 +1102,19 @@ function_print_at_Book: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_9 - j label_10 - label_9: + bne $t0 $zero label_13 + j label_14 + label_13: li $v0 4 - la $a0 data_23 + la $a0 data_25 syscall li $v0 10 syscall - label_10: + label_14: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -40($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 -20($fp) @@ -1078,7 +1128,7 @@ function_print_at_Book: addi $sp $sp 8 sw $v0 -12($fp) lw $v0 0($fp) - addi $sp $sp 80 + addi $sp $sp 88 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1157,7 +1207,21 @@ function_initArticle_at_Article: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -16 + addi $sp $sp -20 + lw $t0 12($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_26 + syscall + li $v0 10 + syscall + label_16: lw $t0 12($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1182,7 +1246,7 @@ function_initArticle_at_Article: addi $t1 $t1 20 sw $t0 0($t1) lw $v0 12($fp) - addi $sp $sp 16 + addi $sp $sp 20 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1195,40 +1259,61 @@ function_print_at_Article: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -52 + addi $sp $sp -60 lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_17 + j label_18 + label_17: + li $v0 4 + la $a0 data_27 + syscall + li $v0 10 + syscall + label_18: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 0($sp) + jal function_print_at_Book addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -48($fp) - la $t0 data_24 - sw $t0 -44($fp) - lw $t0 -44($fp) + sw $v0 -52($fp) + la $t0 data_28 + sw $t0 -48($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -40($fp) - la $t0 data_25 - sw $t0 -32($fp) - lw $t0 -32($fp) + sw $v0 -44($fp) + la $t0 data_29 + sw $t0 -40($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -28($fp) + sw $v0 -36($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_19 + j label_20 + label_19: + li $v0 4 + la $a0 data_30 + syscall + li $v0 10 + syscall + label_20: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -28($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1240,22 +1325,22 @@ function_print_at_Article: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) li $t1 0 seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_11 - j label_12 - label_11: + bne $t0 $zero label_21 + j label_22 + label_21: li $v0 4 - la $a0 data_26 + la $a0 data_31 syscall li $v0 10 syscall - label_12: - lw $t0 -36($fp) + label_22: + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t4 0($fp) @@ -1266,7 +1351,7 @@ function_print_at_Article: addi $sp $sp 4 addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -36($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1281,19 +1366,19 @@ function_print_at_Article: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_13 - j label_14 - label_13: + bne $t0 $zero label_23 + j label_24 + label_23: li $v0 4 - la $a0 data_27 + la $a0 data_32 syscall li $v0 10 syscall - label_14: + label_24: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -40($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 -20($fp) @@ -1307,7 +1392,7 @@ function_print_at_Article: addi $sp $sp 8 sw $v0 -12($fp) lw $v0 0($fp) - addi $sp $sp 52 + addi $sp $sp 60 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1369,7 +1454,21 @@ function_isNil_at_BookList: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -8 + addi $sp $sp -12 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_25 + j label_26 + label_25: + li $v0 4 + la $a0 data_33 + syscall + li $v0 10 + syscall + label_26: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1390,7 +1489,7 @@ function_isNil_at_BookList: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 8 + addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1413,15 +1512,15 @@ function_cons_at_BookList: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_15 - j label_16 - label_15: + bne $t0 $zero label_27 + j label_28 + label_27: li $v0 4 - la $a0 data_28 + la $a0 data_34 syscall li $v0 10 syscall - label_16: + label_28: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1455,7 +1554,21 @@ function_car_at_BookList: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -8 + addi $sp $sp -12 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_29 + j label_30 + label_29: + li $v0 4 + la $a0 data_35 + syscall + li $v0 10 + syscall + label_30: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1472,7 +1585,7 @@ function_car_at_BookList: jal __init_at_Book sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 8 + addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1485,7 +1598,21 @@ function_cdr_at_BookList: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -8 + addi $sp $sp -12 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_31 + j label_32 + label_31: + li $v0 4 + la $a0 data_36 + syscall + li $v0 10 + syscall + label_32: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1502,7 +1629,7 @@ function_cdr_at_BookList: jal __init_at_BookList sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 8 + addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1515,7 +1642,21 @@ function_print_list_at_BookList: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -4 + addi $sp $sp -8 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_33 + j label_34 + label_33: + li $v0 4 + la $a0 data_37 + syscall + li $v0 10 + syscall + label_34: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1530,7 +1671,7 @@ function_print_list_at_BookList: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 4 + addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1688,7 +1829,7 @@ function_print_list_at_Cons: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -76 + addi $sp $sp -84 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1697,17 +1838,17 @@ function_print_list_at_Cons: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_17 - j label_18 - label_17: + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_35 + j label_36 + label_35: li $v0 4 - la $a0 data_29 + la $a0 data_38 syscall li $v0 10 syscall - label_18: + label_36: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1730,68 +1871,82 @@ function_print_list_at_Cons: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) + sw $v0 -68($fp) + lw $t0 -68($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -72($fp) - lw $t0 -60($fp) + sw $t1 -80($fp) + lw $t0 -68($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_19 - j label_20 - label_19: + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_37 + j label_38 + label_37: li $v0 4 - la $a0 data_30 + la $a0 data_39 syscall li $v0 10 syscall - label_20: + label_38: la $t0 types_table addi $t0 $t0 24 lw $t0 0($t0) - sw $t0 -52($fp) - lw $t0 -52($fp) - lw $t1 -72($fp) + sw $t0 -60($fp) + lw $t0 -60($fp) + lw $t1 -80($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_21 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_39 la $t0 types_table addi $t0 $t0 20 lw $t0 0($t0) - sw $t0 -52($fp) - lw $t0 -52($fp) - lw $t1 -72($fp) + sw $t0 -60($fp) + lw $t0 -60($fp) + lw $t1 -80($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_22 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_42 li $v0 4 - la $a0 data_31 + la $a0 data_40 syscall li $v0 10 syscall - label_21: - lw $t0 -60($fp) - sw $t0 -48($fp) - la $t0 data_32 - sw $t0 -40($fp) - lw $t0 -40($fp) + label_39: + lw $t0 -68($fp) + sw $t0 -56($fp) + la $t0 data_41 + sw $t0 -52($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -36($fp) + sw $v0 -48($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_40 + j label_41 + label_40: + li $v0 4 + la $a0 data_42 + syscall + li $v0 10 + syscall + label_41: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -36($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1803,25 +1958,39 @@ function_print_list_at_Cons: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -76($fp) - j label_23 - label_22: - lw $t0 -60($fp) + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -84($fp) + j label_45 + label_42: + lw $t0 -68($fp) + sw $t0 -36($fp) + la $t0 data_43 sw $t0 -32($fp) - la $t0 data_33 - sw $t0 -24($fp) - lw $t0 -24($fp) + lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -20($fp) + sw $v0 -28($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_43 + j label_44 + label_43: + li $v0 4 + la $a0 data_44 + syscall + li $v0 10 + syscall + label_44: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -20($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1833,11 +2002,11 @@ function_print_list_at_Cons: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -76($fp) - j label_23 - label_23: + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -84($fp) + j label_45 + label_45: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1848,15 +2017,15 @@ function_print_list_at_Cons: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_24 - j label_25 - label_24: + bne $t0 $zero label_46 + j label_47 + label_46: li $v0 4 - la $a0 data_34 + la $a0 data_45 syscall li $v0 10 syscall - label_25: + label_47: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1881,7 +2050,7 @@ function_print_list_at_Cons: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 76 + addi $sp $sp 84 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2044,7 +2213,7 @@ function_main_at_Main: sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -104 - la $t0 data_35 + la $t0 data_46 sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 @@ -2052,7 +2221,7 @@ function_main_at_Main: jal __init_at_String addi $sp $sp 4 sw $v0 -100($fp) - la $t0 data_36 + la $t0 data_47 sw $t0 -96($fp) lw $t0 -96($fp) addi $sp $sp -4 @@ -2067,15 +2236,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -84($fp) lw $t0 -84($fp) - bne $t0 $zero label_26 - j label_27 - label_26: + bne $t0 $zero label_48 + j label_49 + label_48: li $v0 4 - la $a0 data_37 + la $a0 data_48 syscall li $v0 10 syscall - label_27: + label_49: lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2097,7 +2266,7 @@ function_main_at_Main: sw $v0 -80($fp) lw $t0 -80($fp) sw $t0 -108($fp) - la $t0 data_38 + la $t0 data_49 sw $t0 -72($fp) lw $t0 -72($fp) addi $sp $sp -4 @@ -2105,7 +2274,7 @@ function_main_at_Main: jal __init_at_String addi $sp $sp 4 sw $v0 -68($fp) - la $t0 data_39 + la $t0 data_50 sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 @@ -2113,7 +2282,7 @@ function_main_at_Main: jal __init_at_String addi $sp $sp 4 sw $v0 -60($fp) - la $t0 data_40 + la $t0 data_51 sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 @@ -2128,15 +2297,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -44($fp) lw $t0 -44($fp) - bne $t0 $zero label_28 - j label_29 - label_28: + bne $t0 $zero label_50 + j label_51 + label_50: li $v0 4 - la $a0 data_41 + la $a0 data_52 syscall li $v0 10 syscall - label_29: + label_51: lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2168,15 +2337,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) - bne $t0 $zero label_30 - j label_31 - label_30: + bne $t0 $zero label_52 + j label_53 + label_52: li $v0 4 - la $a0 data_42 + la $a0 data_53 syscall li $v0 10 syscall - label_31: + label_53: lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2198,15 +2367,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_32 - j label_33 - label_32: + bne $t0 $zero label_54 + j label_55 + label_54: li $v0 4 - la $a0 data_43 + la $a0 data_54 syscall li $v0 10 syscall - label_33: + label_55: lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2237,15 +2406,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_34 - j label_35 - label_34: + bne $t0 $zero label_56 + j label_57 + label_56: li $v0 4 - la $a0 data_44 + la $a0 data_55 syscall li $v0 10 syscall - label_35: + label_57: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index a1d74fff2..e10bcfdf6 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -32,27 +32,51 @@ data_14: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_15: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_16: .asciiz "X" +data_16: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_17: .asciiz "X" +data_17: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_18: .asciiz "X" +data_18: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_19: .asciiz "." +data_19: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_20: .asciiz "X" +data_20: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_21: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_22: .asciiz " X " +data_22: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_23: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" +data_24: .asciiz "X" .word 0 data_25: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" +data_26: .asciiz "X" +.word 0 +data_27: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_28: .asciiz "X" +.word 0 +data_29: .asciiz "." +.word 0 +data_30: .asciiz "X" +.word 0 +data_31: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_32: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_33: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_34: .asciiz " X " +.word 0 +data_35: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_36: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_37: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_38: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -732,15 +756,15 @@ function_print_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -24 + addi $sp $sp -28 la $t0 data_12 - sw $t0 -24($fp) - lw $t0 -24($fp) + sw $t0 -32($fp) + lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -20($fp) + sw $v0 -28($fp) lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -749,8 +773,8 @@ function_print_at_CellularAutomaton: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) + sw $t0 -24($fp) + lw $t0 -24($fp) bne $t0 $zero label_3 j label_4 label_3: @@ -768,7 +792,7 @@ function_print_at_CellularAutomaton: addi $sp $sp 4 addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -20($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t4 0($fp) @@ -785,11 +809,25 @@ function_print_at_CellularAutomaton: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_6: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -801,9 +839,9 @@ function_print_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -28($fp) + sw $v0 -12($fp) lw $v0 0($fp) - addi $sp $sp 24 + addi $sp $sp 28 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -827,15 +865,15 @@ function_num_cells_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_5 - j label_6 - label_5: + bne $t0 $zero label_7 + j label_8 + label_7: li $v0 4 - la $a0 data_14 + la $a0 data_15 syscall li $v0 10 syscall - label_6: + label_8: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -890,15 +928,15 @@ function_cell_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_7 - j label_8 - label_7: + bne $t0 $zero label_9 + j label_10 + label_9: li $v0 4 - la $a0 data_15 + la $a0 data_16 syscall li $v0 10 syscall - label_8: + label_10: lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -942,131 +980,145 @@ function_cell_left_neighbor_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -104 + addi $sp $sp -116 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -64($fp) + sw $v0 -76($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -88($fp) + sw $t1 -100($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -84($fp) + sw $t0 -96($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -80($fp) + sw $t0 -92($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -76($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) + sw $t0 -88($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_9 - lw $t0 -88($fp) - lw $t1 -80($fp) + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_11 + lw $t0 -100($fp) + lw $t1 -92($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_10 - lw $t0 -88($fp) - lw $t1 -76($fp) + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_12 + lw $t0 -100($fp) + lw $t1 -88($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_11 + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_13 lw $t0 0($fp) - lw $t1 -64($fp) + lw $t1 -76($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_12 - label_9: + sw $t0 -80($fp) + j label_14 + label_11: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -64($fp) + sw $t1 -108($fp) + lw $t0 -76($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -104($fp) + lw $t0 -108($fp) + lw $t1 -104($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_12 - label_10: + sw $t0 -80($fp) + j label_14 + label_12: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -64($fp) + sw $t1 -108($fp) + lw $t0 -76($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) + sw $t1 -104($fp) + lw $t0 -108($fp) move $a0 $t0 - lw $t0 -92($fp) + lw $t0 -104($fp) move $a1 $t0 jal equal_str - sw $v0 -68($fp) - j label_12 - label_11: + sw $v0 -80($fp) + j label_14 + label_13: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -64($fp) + sw $t1 -108($fp) + lw $t0 -76($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -104($fp) + lw $t0 -108($fp) + lw $t1 -104($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_12 - label_12: - lw $t0 -68($fp) + sw $t0 -80($fp) + j label_14 + label_14: + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) + sw $v0 -112($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_13 + sw $t1 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_17 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -52($fp) + sw $t1 -68($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) + sw $v0 -56($fp) + lw $t0 -56($fp) lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) + sw $t1 -64($fp) + lw $t0 -68($fp) + lw $t1 -64($fp) sub $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) + sw $t0 -60($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -56($fp) + sw $v0 -72($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_17 + syscall + li $v0 10 + syscall + label_16: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -56($fp) + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -1078,11 +1130,25 @@ function_cell_left_neighbor_at_CellularAutomaton: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -108($fp) - j label_14 - label_13: + sw $v0 -48($fp) + lw $t0 -48($fp) + sw $t0 -120($fp) + j label_22 + label_17: + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_18 + j label_19 + label_18: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_19: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1095,33 +1161,47 @@ function_cell_left_neighbor_at_CellularAutomaton: lw $t0 52($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) + sw $v0 -24($fp) + lw $t0 -24($fp) lw $t1 12($t0) - sw $t1 -28($fp) + sw $t1 -40($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) + sw $v0 -20($fp) + lw $t0 -20($fp) lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) sub $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) + sw $t0 -32($fp) + lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -32($fp) + sw $v0 -44($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_20 + j label_21 + label_20: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_21: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -1133,12 +1213,12 @@ function_cell_left_neighbor_at_CellularAutomaton: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -108($fp) - label_14: - lw $v0 -108($fp) - addi $sp $sp 104 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -120($fp) + label_22: + lw $v0 -120($fp) + addi $sp $sp 116 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1151,7 +1231,21 @@ function_cell_right_neighbor_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -104 + addi $sp $sp -116 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_23 + j label_24 + label_23: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_24: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1164,147 +1258,161 @@ function_cell_right_neighbor_at_CellularAutomaton: lw $t0 52($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) + sw $v0 -56($fp) + lw $t0 -56($fp) lw $t1 12($t0) - sw $t1 -60($fp) + sw $t1 -72($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) + sw $v0 -52($fp) + lw $t0 -52($fp) lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) + sw $t1 -68($fp) + lw $t0 -72($fp) + lw $t1 -68($fp) sub $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) + sw $t0 -64($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -64($fp) + sw $v0 -76($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -88($fp) + sw $t1 -100($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -84($fp) + sw $t0 -96($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -80($fp) + sw $t0 -92($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -76($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) + sw $t0 -88($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_15 - lw $t0 -88($fp) - lw $t1 -80($fp) + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_25 + lw $t0 -100($fp) + lw $t1 -92($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_16 - lw $t0 -88($fp) - lw $t1 -76($fp) + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_26 + lw $t0 -100($fp) + lw $t1 -88($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_17 + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_27 lw $t0 0($fp) - lw $t1 -64($fp) + lw $t1 -76($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_18 - label_15: + sw $t0 -80($fp) + j label_28 + label_25: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -64($fp) + sw $t1 -108($fp) + lw $t0 -76($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -104($fp) + lw $t0 -108($fp) + lw $t1 -104($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_18 - label_16: + sw $t0 -80($fp) + j label_28 + label_26: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -64($fp) + sw $t1 -108($fp) + lw $t0 -76($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) + sw $t1 -104($fp) + lw $t0 -108($fp) move $a0 $t0 - lw $t0 -92($fp) + lw $t0 -104($fp) move $a1 $t0 jal equal_str - sw $v0 -68($fp) - j label_18 - label_17: + sw $v0 -80($fp) + j label_28 + label_27: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -64($fp) + sw $t1 -108($fp) + lw $t0 -76($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -104($fp) + lw $t0 -108($fp) + lw $t1 -104($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_18 - label_18: - lw $t0 -68($fp) + sw $t0 -80($fp) + j label_28 + label_28: + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) + sw $v0 -112($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_19 + sw $t1 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_31 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -32($fp) + sw $t1 -44($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -28($fp) + sw $v0 -32($fp) lw $t0 -32($fp) - lw $t1 -28($fp) + lw $t1 12($t0) + sw $t1 -40($fp) + lw $t0 -44($fp) + lw $t1 -40($fp) add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) + sw $t0 -36($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -36($fp) + sw $v0 -48($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_29 + j label_30 + label_29: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_30: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -36($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -1316,21 +1424,35 @@ function_cell_right_neighbor_at_CellularAutomaton: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -108($fp) - j label_20 - label_19: + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -120($fp) + j label_34 + label_31: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_32 + j label_33 + label_32: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_33: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -1342,12 +1464,12 @@ function_cell_right_neighbor_at_CellularAutomaton: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -108($fp) - label_20: - lw $v0 -108($fp) - addi $sp $sp 104 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -120($fp) + label_34: + lw $v0 -120($fp) + addi $sp $sp 116 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1360,7 +1482,21 @@ function_cell_at_next_evolution_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -292 + addi $sp $sp -304 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -188($fp) + lw $t0 -188($fp) + bne $t0 $zero label_35 + j label_36 + label_35: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_36: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1376,129 +1512,143 @@ function_cell_at_next_evolution_at_CellularAutomaton: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -176($fp) - la $t0 data_16 - sw $t0 -172($fp) - lw $t0 -172($fp) + sw $v0 -184($fp) + la $t0 data_24 + sw $t0 -180($fp) + lw $t0 -180($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 -176($fp) + sw $v0 -176($fp) + lw $t0 -184($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -200($fp) + sw $t1 -212($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -196($fp) + sw $t0 -208($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -192($fp) + sw $t0 -204($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -188($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) + sw $t0 -200($fp) + lw $t0 -212($fp) + lw $t1 -208($fp) seq $t0 $t0 $t1 - sw $t0 -184($fp) - lw $t0 -184($fp) - bne $t0 $zero label_21 - lw $t0 -200($fp) - lw $t1 -192($fp) + sw $t0 -196($fp) + lw $t0 -196($fp) + bne $t0 $zero label_37 + lw $t0 -212($fp) + lw $t1 -204($fp) seq $t0 $t0 $t1 - sw $t0 -184($fp) - lw $t0 -184($fp) - bne $t0 $zero label_22 - lw $t0 -200($fp) - lw $t1 -188($fp) + sw $t0 -196($fp) + lw $t0 -196($fp) + bne $t0 $zero label_38 + lw $t0 -212($fp) + lw $t1 -200($fp) seq $t0 $t0 $t1 - sw $t0 -184($fp) + sw $t0 -196($fp) + lw $t0 -196($fp) + bne $t0 $zero label_39 lw $t0 -184($fp) - bne $t0 $zero label_23 - lw $t0 -176($fp) - lw $t1 -168($fp) + lw $t1 -176($fp) seq $t0 $t0 $t1 - sw $t0 -180($fp) - j label_24 - label_21: - lw $t0 -176($fp) + sw $t0 -192($fp) + j label_40 + label_37: + lw $t0 -184($fp) lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -168($fp) + sw $t1 -220($fp) + lw $t0 -176($fp) lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -208($fp) - lw $t1 -204($fp) + sw $t1 -216($fp) + lw $t0 -220($fp) + lw $t1 -216($fp) seq $t0 $t0 $t1 - sw $t0 -180($fp) - j label_24 - label_22: - lw $t0 -176($fp) + sw $t0 -192($fp) + j label_40 + label_38: + lw $t0 -184($fp) lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -168($fp) + sw $t1 -220($fp) + lw $t0 -176($fp) lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -208($fp) + sw $t1 -216($fp) + lw $t0 -220($fp) move $a0 $t0 - lw $t0 -204($fp) + lw $t0 -216($fp) move $a1 $t0 jal equal_str - sw $v0 -180($fp) - j label_24 - label_23: - lw $t0 -176($fp) + sw $v0 -192($fp) + j label_40 + label_39: + lw $t0 -184($fp) lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -168($fp) + sw $t1 -220($fp) + lw $t0 -176($fp) lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -208($fp) - lw $t1 -204($fp) + sw $t1 -216($fp) + lw $t0 -220($fp) + lw $t1 -216($fp) seq $t0 $t0 $t1 - sw $t0 -180($fp) - j label_24 - label_24: - lw $t0 -180($fp) + sw $t0 -192($fp) + j label_40 + label_40: + lw $t0 -192($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -212($fp) - lw $t0 -212($fp) + sw $v0 -224($fp) + lw $t0 -224($fp) lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_25 + sw $t1 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_41 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - sw $t0 -220($fp) - j label_26 - label_25: + sw $v0 -172($fp) + lw $t0 -172($fp) + sw $t0 -232($fp) + j label_42 + label_41: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -160($fp) - sw $t0 -220($fp) - label_26: - lw $t0 -220($fp) + sw $v0 -168($fp) + lw $t0 -168($fp) + sw $t0 -232($fp) + label_42: + lw $t0 -232($fp) lw $t1 12($t0) - sw $t1 -232($fp) + sw $t1 -244($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_43 + j label_44 + label_43: + li $v0 4 + la $a0 data_25 + syscall + li $v0 10 + syscall + label_44: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1514,142 +1664,156 @@ function_cell_at_next_evolution_at_CellularAutomaton: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -112($fp) - la $t0 data_17 - sw $t0 -108($fp) - lw $t0 -108($fp) + sw $v0 -116($fp) + la $t0 data_26 + sw $t0 -112($fp) + lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -112($fp) + sw $v0 -108($fp) + lw $t0 -116($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -136($fp) + sw $t1 -144($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -132($fp) + sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -128($fp) + sw $t0 -136($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -124($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) + sw $t0 -132($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_27 - lw $t0 -136($fp) - lw $t1 -128($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_45 + lw $t0 -144($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_28 - lw $t0 -136($fp) - lw $t1 -124($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_46 + lw $t0 -144($fp) + lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_29 - lw $t0 -112($fp) - lw $t1 -104($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_47 + lw $t0 -116($fp) + lw $t1 -108($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_30 - label_27: - lw $t0 -112($fp) + sw $t0 -124($fp) + j label_48 + label_45: + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -104($fp) + sw $t1 -152($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_30 - label_28: - lw $t0 -112($fp) + sw $t0 -124($fp) + j label_48 + label_46: + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -104($fp) + sw $t1 -152($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) move $a0 $t0 - lw $t0 -140($fp) + lw $t0 -148($fp) move $a1 $t0 jal equal_str - sw $v0 -116($fp) - j label_30 - label_29: - lw $t0 -112($fp) + sw $v0 -124($fp) + j label_48 + label_47: + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -104($fp) + sw $t1 -152($fp) + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_30 - label_30: - lw $t0 -116($fp) + sw $t0 -124($fp) + j label_48 + label_48: + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) + sw $v0 -156($fp) + lw $t0 -156($fp) lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -152($fp) - bne $t0 $zero label_31 + sw $t1 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_49 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -156($fp) - j label_32 - label_31: + sw $v0 -104($fp) + lw $t0 -104($fp) + sw $t0 -164($fp) + j label_50 + label_49: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - sw $t0 -156($fp) - label_32: - lw $t0 -156($fp) + sw $v0 -100($fp) + lw $t0 -100($fp) + sw $t0 -164($fp) + label_50: + lw $t0 -164($fp) lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -232($fp) - lw $t1 -228($fp) + sw $t1 -240($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) add $t0 $t0 $t1 - sw $t0 -224($fp) - lw $t0 -224($fp) + sw $t0 -236($fp) + lw $t0 -236($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -236($fp) - lw $t0 -236($fp) + sw $v0 -248($fp) + lw $t0 -248($fp) lw $t1 12($t0) - sw $t1 -248($fp) + sw $t1 -260($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_51 + j label_52 + label_51: + li $v0 4 + la $a0 data_27 + syscall + li $v0 10 + syscall + label_52: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1666,7 +1830,7 @@ function_cell_at_next_evolution_at_CellularAutomaton: jalr $ra $t0 addi $sp $sp 8 sw $v0 -48($fp) - la $t0 data_18 + la $t0 data_28 sw $t0 -44($fp) lw $t0 -44($fp) addi $sp $sp -4 @@ -1680,92 +1844,92 @@ function_cell_at_next_evolution_at_CellularAutomaton: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -72($fp) + sw $t1 -76($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -68($fp) + sw $t0 -72($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -64($fp) + sw $t0 -68($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -64($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) + seq $t0 $t0 $t1 sw $t0 -60($fp) - lw $t0 -72($fp) + lw $t0 -60($fp) + bne $t0 $zero label_53 + lw $t0 -76($fp) lw $t1 -68($fp) seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_33 - lw $t0 -72($fp) + sw $t0 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_54 + lw $t0 -76($fp) lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_34 - lw $t0 -72($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_35 + sw $t0 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_55 lw $t0 -48($fp) lw $t1 -40($fp) seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_36 - label_33: + sw $t0 -56($fp) + j label_56 + label_53: lw $t0 -48($fp) lw $t1 12($t0) - sw $t1 -80($fp) + sw $t1 -84($fp) lw $t0 -40($fp) lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) + sw $t1 -80($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_36 - label_34: + sw $t0 -56($fp) + j label_56 + label_54: lw $t0 -48($fp) lw $t1 12($t0) - sw $t1 -80($fp) + sw $t1 -84($fp) lw $t0 -40($fp) lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) + sw $t1 -80($fp) + lw $t0 -84($fp) move $a0 $t0 - lw $t0 -76($fp) + lw $t0 -80($fp) move $a1 $t0 jal equal_str - sw $v0 -52($fp) - j label_36 - label_35: + sw $v0 -56($fp) + j label_56 + label_55: lw $t0 -48($fp) lw $t1 12($t0) - sw $t1 -80($fp) + sw $t1 -84($fp) lw $t0 -40($fp) lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) + sw $t1 -80($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_36 - label_36: - lw $t0 -52($fp) + sw $t0 -56($fp) + j label_56 + label_56: + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -88($fp) + sw $v0 -88($fp) lw $t0 -88($fp) - bne $t0 $zero label_37 + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_57 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -1773,9 +1937,9 @@ function_cell_at_next_evolution_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) - sw $t0 -92($fp) - j label_38 - label_37: + sw $t0 -96($fp) + j label_58 + label_57: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) @@ -1783,120 +1947,120 @@ function_cell_at_next_evolution_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) - sw $t0 -92($fp) - label_38: - lw $t0 -92($fp) + sw $t0 -96($fp) + label_58: + lw $t0 -96($fp) lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -248($fp) - lw $t1 -244($fp) + sw $t1 -256($fp) + lw $t0 -260($fp) + lw $t1 -256($fp) add $t0 $t0 $t1 - sw $t0 -240($fp) - lw $t0 -240($fp) + sw $t0 -252($fp) + lw $t0 -252($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -252($fp) + sw $v0 -264($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -28($fp) - lw $t0 -252($fp) + lw $t0 -264($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -276($fp) + sw $t1 -288($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -272($fp) + sw $t0 -284($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -268($fp) + sw $t0 -280($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -264($fp) - lw $t0 -276($fp) - lw $t1 -272($fp) + sw $t0 -276($fp) + lw $t0 -288($fp) + lw $t1 -284($fp) seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_39 - lw $t0 -276($fp) - lw $t1 -268($fp) + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_59 + lw $t0 -288($fp) + lw $t1 -280($fp) seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_40 - lw $t0 -276($fp) - lw $t1 -264($fp) + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_60 + lw $t0 -288($fp) + lw $t1 -276($fp) seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_41 - lw $t0 -252($fp) + sw $t0 -272($fp) + lw $t0 -272($fp) + bne $t0 $zero label_61 + lw $t0 -264($fp) lw $t1 -28($fp) seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_42 - label_39: - lw $t0 -252($fp) + sw $t0 -268($fp) + j label_62 + label_59: + lw $t0 -264($fp) lw $t1 12($t0) - sw $t1 -284($fp) + sw $t1 -296($fp) lw $t0 -28($fp) lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) + sw $t1 -292($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_42 - label_40: - lw $t0 -252($fp) + sw $t0 -268($fp) + j label_62 + label_60: + lw $t0 -264($fp) lw $t1 12($t0) - sw $t1 -284($fp) + sw $t1 -296($fp) lw $t0 -28($fp) lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) + sw $t1 -292($fp) + lw $t0 -296($fp) move $a0 $t0 - lw $t0 -280($fp) + lw $t0 -292($fp) move $a1 $t0 jal equal_str - sw $v0 -256($fp) - j label_42 - label_41: - lw $t0 -252($fp) + sw $v0 -268($fp) + j label_62 + label_61: + lw $t0 -264($fp) lw $t1 12($t0) - sw $t1 -284($fp) + sw $t1 -296($fp) lw $t0 -28($fp) lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) + sw $t1 -292($fp) + lw $t0 -296($fp) + lw $t1 -292($fp) seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_42 - label_42: - lw $t0 -256($fp) + sw $t0 -268($fp) + j label_62 + label_62: + lw $t0 -268($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -288($fp) - lw $t0 -288($fp) + sw $v0 -300($fp) + lw $t0 -300($fp) lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_43 - la $t0 data_19 + sw $t1 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_63 + la $t0 data_29 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -1905,10 +2069,10 @@ function_cell_at_next_evolution_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -296($fp) - j label_44 - label_43: - la $t0 data_20 + sw $t0 -308($fp) + j label_64 + label_63: + la $t0 data_30 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -1917,10 +2081,10 @@ function_cell_at_next_evolution_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -296($fp) - label_44: - lw $v0 -296($fp) - addi $sp $sp 292 + sw $t0 -308($fp) + label_64: + lw $v0 -308($fp) + addi $sp $sp 304 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1933,13 +2097,27 @@ function_evolve_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -72 + addi $sp $sp -80 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -76($fp) + sw $v0 -84($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_65 + j label_66 + label_65: + li $v0 4 + la $a0 data_31 + syscall + li $v0 10 + syscall + label_66: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1952,45 +2130,59 @@ function_evolve_at_CellularAutomaton: lw $t0 52($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -72($fp) + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -80($fp) la $t0 data_9 - sw $t0 -64($fp) - lw $t0 -64($fp) + sw $t0 -68($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -64($fp) - label_45: - lw $t0 -76($fp) + sw $v0 -68($fp) + label_67: + lw $t0 -84($fp) lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -72($fp) + sw $t1 -56($fp) + lw $t0 -80($fp) lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) slt $t1 $t0 $t1 - sw $t1 -44($fp) - lw $t0 -44($fp) + sw $t1 -48($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -60($fp) + sw $v0 -60($fp) lw $t0 -60($fp) - bne $t0 $zero label_46 - j label_49 - label_46: + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_68 + j label_73 + label_68: + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_69 + j label_70 + label_69: + li $v0 4 + la $a0 data_32 + syscall + li $v0 10 + syscall + label_70: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -76($fp) + lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -2003,27 +2195,27 @@ function_evolve_at_CellularAutomaton: jalr $ra $t0 addi $sp $sp 8 sw $v0 -40($fp) - lw $t0 -64($fp) + lw $t0 -68($fp) li $t1 0 seq $t0 $t0 $t1 sw $t0 -36($fp) lw $t0 -36($fp) - bne $t0 $zero label_47 - j label_48 - label_47: + bne $t0 $zero label_71 + j label_72 + label_71: li $v0 4 - la $a0 data_21 + la $a0 data_33 syscall li $v0 10 syscall - label_48: - lw $t0 -64($fp) + label_72: + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -64($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -2034,8 +2226,8 @@ function_evolve_at_CellularAutomaton: addi $sp $sp 8 sw $v0 -32($fp) lw $t0 -32($fp) - sw $t0 -64($fp) - lw $t0 -76($fp) + sw $t0 -68($fp) + lw $t0 -84($fp) lw $t1 12($t0) sw $t1 -24($fp) li $t0 1 @@ -2058,15 +2250,15 @@ function_evolve_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) - sw $t0 -76($fp) - j label_45 - label_49: - lw $t0 -64($fp) + sw $t0 -84($fp) + j label_67 + label_73: + lw $t0 -68($fp) lw $t1 0($fp) addi $t1 $t1 12 sw $t0 0($t1) lw $v0 0($fp) - addi $sp $sp 72 + addi $sp $sp 80 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2132,7 +2324,7 @@ function_main_at_Main: sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -100 - la $t0 data_22 + la $t0 data_34 sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 @@ -2147,15 +2339,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -92($fp) lw $t0 -92($fp) - bne $t0 $zero label_50 - j label_51 - label_50: + bne $t0 $zero label_74 + j label_75 + label_74: li $v0 4 - la $a0 data_23 + la $a0 data_35 syscall li $v0 10 syscall - label_51: + label_75: lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2186,15 +2378,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -84($fp) lw $t0 -84($fp) - bne $t0 $zero label_52 - j label_53 - label_52: + bne $t0 $zero label_76 + j label_77 + label_76: li $v0 4 - la $a0 data_24 + la $a0 data_36 syscall li $v0 10 syscall - label_53: + label_77: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2226,7 +2418,7 @@ function_main_at_Main: sw $v0 -72($fp) lw $t0 -72($fp) sw $t0 -76($fp) - label_54: + label_78: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -2253,9 +2445,9 @@ function_main_at_Main: lw $t1 12($t0) sw $t1 -68($fp) lw $t0 -68($fp) - bne $t0 $zero label_55 - j label_60 - label_55: + bne $t0 $zero label_79 + j label_84 + label_79: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2266,15 +2458,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -44($fp) lw $t0 -44($fp) - bne $t0 $zero label_56 - j label_57 - label_56: + bne $t0 $zero label_80 + j label_81 + label_80: li $v0 4 - la $a0 data_25 + la $a0 data_37 syscall li $v0 10 syscall - label_57: + label_81: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2308,15 +2500,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -36($fp) lw $t0 -36($fp) - bne $t0 $zero label_58 - j label_59 - label_58: + bne $t0 $zero label_82 + j label_83 + label_82: li $v0 4 - la $a0 data_26 + la $a0 data_38 syscall li $v0 10 syscall - label_59: + label_83: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2364,8 +2556,8 @@ function_main_at_Main: sw $v0 -28($fp) lw $t0 -28($fp) sw $t0 -76($fp) - j label_54 - label_60: + j label_78 + label_84: lw $v0 0($fp) addi $sp $sp 100 lw $fp 0($sp) diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index f540044b8..e513494e6 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -34,17 +34,25 @@ data_15: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_16: .asciiz "=(\n" .word 0 -data_17: .asciiz "=)\n" +data_17: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_18: .asciiz "I" +data_18: .asciiz "=)\n" .word 0 -data_19: .asciiz "+" +data_19: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" +data_20: .asciiz "I" .word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" +data_21: .asciiz "+" .word 0 data_22: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_23: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_24: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_25: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_26: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -695,26 +703,26 @@ function_main_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -116 + addi $sp $sp -124 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -120($fp) + sw $v0 -128($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -116($fp) + sw $v0 -124($fp) jal __init_at_Complex - sw $v0 -112($fp) - lw $t0 -112($fp) + sw $v0 -120($fp) + lw $t0 -120($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) + sw $t0 -116($fp) + lw $t0 -116($fp) bne $t0 $zero label_3 j label_4 label_3: @@ -724,16 +732,16 @@ function_main_at_Main: li $v0 10 syscall label_4: - lw $t0 -112($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -120($fp) + lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -116($fp) + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -112($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -742,14 +750,14 @@ function_main_at_Main: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -104($fp) - lw $t0 -104($fp) - sw $t0 -124($fp) - lw $t0 -124($fp) + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) + sw $t0 -64($fp) + lw $t0 -64($fp) bne $t0 $zero label_5 j label_6 label_5: @@ -759,10 +767,10 @@ function_main_at_Main: li $v0 10 syscall label_6: - lw $t0 -124($fp) + lw $t0 -132($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -124($fp) + lw $t0 -132($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -771,12 +779,12 @@ function_main_at_Main: lw $t0 40($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) + sw $v0 -60($fp) + lw $t0 -60($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) + sw $t0 -56($fp) + lw $t0 -56($fp) bne $t0 $zero label_7 j label_8 label_7: @@ -786,10 +794,10 @@ function_main_at_Main: li $v0 10 syscall label_8: - lw $t0 -52($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -798,12 +806,12 @@ function_main_at_Main: lw $t0 44($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -124($fp) + sw $v0 -52($fp) + lw $t0 -132($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) + sw $t0 -48($fp) + lw $t0 -48($fp) bne $t0 $zero label_9 j label_10 label_9: @@ -813,10 +821,10 @@ function_main_at_Main: li $v0 10 syscall label_10: - lw $t0 -124($fp) + lw $t0 -132($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -124($fp) + lw $t0 -132($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -825,111 +833,125 @@ function_main_at_Main: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -44($fp) + sw $v0 -44($fp) + lw $t0 -52($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -80($fp) + sw $t1 -88($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -76($fp) + sw $t0 -84($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -72($fp) + sw $t0 -80($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -68($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) + sw $t0 -76($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) + sw $t0 -72($fp) + lw $t0 -72($fp) bne $t0 $zero label_11 - lw $t0 -80($fp) - lw $t1 -72($fp) + lw $t0 -88($fp) + lw $t1 -80($fp) seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) + sw $t0 -72($fp) + lw $t0 -72($fp) bne $t0 $zero label_12 - lw $t0 -80($fp) - lw $t1 -68($fp) + lw $t0 -88($fp) + lw $t1 -76($fp) seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) + sw $t0 -72($fp) + lw $t0 -72($fp) bne $t0 $zero label_13 - lw $t0 -44($fp) - lw $t1 -36($fp) + lw $t0 -52($fp) + lw $t1 -44($fp) seq $t0 $t0 $t1 - sw $t0 -60($fp) + sw $t0 -68($fp) j label_14 label_11: - lw $t0 -44($fp) + lw $t0 -52($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -36($fp) + sw $t1 -96($fp) + lw $t0 -44($fp) lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) seq $t0 $t0 $t1 - sw $t0 -60($fp) + sw $t0 -68($fp) j label_14 label_12: - lw $t0 -44($fp) + lw $t0 -52($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -36($fp) + sw $t1 -96($fp) + lw $t0 -44($fp) lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -88($fp) + sw $t1 -92($fp) + lw $t0 -96($fp) move $a0 $t0 - lw $t0 -84($fp) + lw $t0 -92($fp) move $a1 $t0 jal equal_str - sw $v0 -60($fp) + sw $v0 -68($fp) j label_14 label_13: - lw $t0 -44($fp) + lw $t0 -52($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -36($fp) + sw $t1 -96($fp) + lw $t0 -44($fp) lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) seq $t0 $t0 $t1 - sw $t0 -60($fp) + sw $t0 -68($fp) j label_14 label_14: - lw $t0 -60($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) + sw $v0 -100($fp) + lw $t0 -100($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_15 + sw $t1 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_17 la $t0 data_16 - sw $t0 -28($fp) - lw $t0 -28($fp) + sw $t0 -40($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -24($fp) + sw $v0 -36($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_17 + syscall + li $v0 10 + syscall + label_16: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -24($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -941,23 +963,37 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -100($fp) - j label_16 - label_15: - la $t0 data_17 - sw $t0 -16($fp) - lw $t0 -16($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -108($fp) + j label_20 + label_17: + la $t0 data_18 + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_18 + j label_19 + label_18: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_19: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -969,12 +1005,12 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -100($fp) - label_16: - lw $v0 -100($fp) - addi $sp $sp 116 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -108($fp) + label_20: + lw $v0 -108($fp) + addi $sp $sp 124 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1084,19 +1120,19 @@ function_init_at_Complex: seq $t0 $t0 $t1 sw $t0 -52($fp) lw $t0 -52($fp) - bne $t0 $zero label_17 + bne $t0 $zero label_21 lw $t0 -68($fp) lw $t1 -60($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) lw $t0 -52($fp) - bne $t0 $zero label_18 + bne $t0 $zero label_22 lw $t0 -68($fp) lw $t1 -56($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) lw $t0 -52($fp) - bne $t0 $zero label_19 + bne $t0 $zero label_23 lw $t4 8($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1106,8 +1142,8 @@ function_init_at_Complex: lw $t1 4($fp) seq $t0 $t0 $t1 sw $t0 -48($fp) - j label_20 - label_17: + j label_24 + label_21: lw $t4 8($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1123,8 +1159,8 @@ function_init_at_Complex: lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -48($fp) - j label_20 - label_18: + j label_24 + label_22: lw $t4 8($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1142,8 +1178,8 @@ function_init_at_Complex: move $a1 $t0 jal equal_str sw $v0 -48($fp) - j label_20 - label_19: + j label_24 + label_23: lw $t4 8($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1159,8 +1195,8 @@ function_init_at_Complex: lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -48($fp) - j label_20 - label_20: + j label_24 + label_24: lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1196,19 +1232,19 @@ function_init_at_Complex: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_21 + bne $t0 $zero label_25 lw $t0 -32($fp) lw $t1 -24($fp) seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_22 + bne $t0 $zero label_26 lw $t0 -32($fp) lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_23 + bne $t0 $zero label_27 lw $t4 8($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1218,8 +1254,8 @@ function_init_at_Complex: lw $t1 0($fp) seq $t0 $t0 $t1 sw $t0 -12($fp) - j label_24 - label_21: + j label_28 + label_25: lw $t4 8($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1235,8 +1271,8 @@ function_init_at_Complex: lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -12($fp) - j label_24 - label_22: + j label_28 + label_26: lw $t4 8($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1254,8 +1290,8 @@ function_init_at_Complex: move $a1 $t0 jal equal_str sw $v0 -12($fp) - j label_24 - label_23: + j label_28 + label_27: lw $t4 8($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1271,8 +1307,8 @@ function_init_at_Complex: lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -12($fp) - j label_24 - label_24: + j label_28 + label_28: lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1293,13 +1329,13 @@ function_print_at_Complex: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -104 + addi $sp $sp -112 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -60($fp) + sw $v0 -68($fp) lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1311,48 +1347,48 @@ function_print_at_Complex: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -84($fp) + sw $t1 -92($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -80($fp) + sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -76($fp) + sw $t0 -84($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -72($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) + sw $t0 -80($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_25 - lw $t0 -84($fp) - lw $t1 -76($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_29 + lw $t0 -92($fp) + lw $t1 -84($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_26 - lw $t0 -84($fp) - lw $t1 -72($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_30 + lw $t0 -92($fp) + lw $t1 -80($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_27 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_31 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - lw $t1 -60($fp) + lw $t1 -68($fp) seq $t0 $t0 $t1 - sw $t0 -64($fp) - j label_28 - label_25: + sw $t0 -72($fp) + j label_32 + label_29: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1360,16 +1396,16 @@ function_print_at_Complex: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -64($fp) - j label_28 - label_26: + sw $t0 -72($fp) + j label_32 + label_30: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1377,18 +1413,18 @@ function_print_at_Complex: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) move $a0 $t0 - lw $t0 -88($fp) + lw $t0 -96($fp) move $a1 $t0 jal equal_str - sw $v0 -64($fp) - j label_28 - label_27: + sw $v0 -72($fp) + j label_32 + label_31: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1396,28 +1432,36 @@ function_print_at_Complex: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -64($fp) - j label_28 - label_28: - lw $t0 -64($fp) + sw $t0 -72($fp) + j label_32 + label_32: + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) + sw $v0 -104($fp) + lw $t0 -104($fp) lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_35 - la $t0 data_18 + sw $t1 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_41 + la $t0 data_20 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + la $t0 data_21 sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 @@ -1425,14 +1469,20 @@ function_print_at_Complex: jal __init_at_String addi $sp $sp 4 sw $v0 -52($fp) - la $t0 data_19 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 sw $t0 -48($fp) lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) + bne $t0 $zero label_33 + j label_34 + label_33: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_34: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1453,28 +1503,28 @@ function_print_at_Complex: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) + sw $v0 -44($fp) + lw $t0 -44($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_29 - j label_30 - label_29: + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_35 + j label_36 + label_35: li $v0 4 - la $a0 data_20 + la $a0 data_23 syscall li $v0 10 syscall - label_30: - lw $t0 -40($fp) + label_36: + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -44($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -40($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1483,22 +1533,22 @@ function_print_at_Complex: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_31 - j label_32 - label_31: + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_37 + j label_38 + label_37: li $v0 4 - la $a0 data_21 + la $a0 data_24 syscall li $v0 10 syscall - label_32: - lw $t0 -32($fp) + label_38: + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t4 0($fp) @@ -1509,7 +1559,7 @@ function_print_at_Complex: addi $sp $sp 4 addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1518,28 +1568,28 @@ function_print_at_Complex: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -24($fp) - lw $t0 -24($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_33 - j label_34 - label_33: + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_39 + j label_40 + label_39: li $v0 4 - la $a0 data_22 + la $a0 data_25 syscall li $v0 10 syscall - label_34: - lw $t0 -24($fp) + label_40: + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -24($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1548,11 +1598,25 @@ function_print_at_Complex: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -16($fp) + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -112($fp) + j label_44 + label_41: + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) lw $t0 -16($fp) - sw $t0 -104($fp) - j label_36 - label_35: + bne $t0 $zero label_42 + j label_43 + label_42: + li $v0 4 + la $a0 data_26 + syscall + li $v0 10 + syscall + label_43: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1575,10 +1639,10 @@ function_print_at_Complex: addi $sp $sp 8 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -104($fp) - label_36: - lw $v0 -104($fp) - addi $sp $sp 104 + sw $t0 -112($fp) + label_44: + lw $v0 -112($fp) + addi $sp $sp 112 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1639,19 +1703,19 @@ function_reflect_0_at_Complex: seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) - bne $t0 $zero label_37 + bne $t0 $zero label_45 lw $t0 -92($fp) lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) - bne $t0 $zero label_38 + bne $t0 $zero label_46 lw $t0 -92($fp) lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) - bne $t0 $zero label_39 + bne $t0 $zero label_47 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1661,8 +1725,8 @@ function_reflect_0_at_Complex: lw $t1 -68($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) - j label_40 - label_37: + j label_48 + label_45: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1678,8 +1742,8 @@ function_reflect_0_at_Complex: lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) - j label_40 - label_38: + j label_48 + label_46: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1697,8 +1761,8 @@ function_reflect_0_at_Complex: move $a1 $t0 jal equal_str sw $v0 -72($fp) - j label_40 - label_39: + j label_48 + label_47: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1714,8 +1778,8 @@ function_reflect_0_at_Complex: lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) - j label_40 - label_40: + j label_48 + label_48: lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1769,19 +1833,19 @@ function_reflect_0_at_Complex: seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_41 + bne $t0 $zero label_49 lw $t0 -44($fp) lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_42 + bne $t0 $zero label_50 lw $t0 -44($fp) lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_43 + bne $t0 $zero label_51 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1791,8 +1855,8 @@ function_reflect_0_at_Complex: lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_44 - label_41: + j label_52 + label_49: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1808,8 +1872,8 @@ function_reflect_0_at_Complex: lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_44 - label_42: + j label_52 + label_50: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1827,8 +1891,8 @@ function_reflect_0_at_Complex: move $a1 $t0 jal equal_str sw $v0 -24($fp) - j label_44 - label_43: + j label_52 + label_51: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1844,8 +1908,8 @@ function_reflect_0_at_Complex: lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_44 - label_44: + j label_52 + label_52: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1914,19 +1978,19 @@ function_reflect_X_at_Complex: seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_45 + bne $t0 $zero label_53 lw $t0 -44($fp) lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_46 + bne $t0 $zero label_54 lw $t0 -44($fp) lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_47 + bne $t0 $zero label_55 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1936,8 +2000,8 @@ function_reflect_X_at_Complex: lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_48 - label_45: + j label_56 + label_53: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1953,8 +2017,8 @@ function_reflect_X_at_Complex: lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_48 - label_46: + j label_56 + label_54: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1972,8 +2036,8 @@ function_reflect_X_at_Complex: move $a1 $t0 jal equal_str sw $v0 -24($fp) - j label_48 - label_47: + j label_56 + label_55: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1989,8 +2053,8 @@ function_reflect_X_at_Complex: lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_48 - label_48: + j label_56 + label_56: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2059,19 +2123,19 @@ function_reflect_Y_at_Complex: seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_49 + bne $t0 $zero label_57 lw $t0 -44($fp) lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_50 + bne $t0 $zero label_58 lw $t0 -44($fp) lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_51 + bne $t0 $zero label_59 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2081,8 +2145,8 @@ function_reflect_Y_at_Complex: lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_52 - label_49: + j label_60 + label_57: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2098,8 +2162,8 @@ function_reflect_Y_at_Complex: lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_52 - label_50: + j label_60 + label_58: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2117,8 +2181,8 @@ function_reflect_Y_at_Complex: move $a1 $t0 jal equal_str sw $v0 -24($fp) - j label_52 - label_51: + j label_60 + label_59: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2134,8 +2198,8 @@ function_reflect_Y_at_Complex: lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_52 - label_52: + j label_60 + label_60: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index 300eae61e..ce5371718 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -24,7 +24,17 @@ data_10: .asciiz "Substring out of range" .word 0 data_11: .asciiz "Enter n to find nth fibonacci number!\n" .word 0 -data_12: .asciiz "\n" +data_12: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_13: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_14: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_15: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_16: .asciiz "\n" +.word 0 +data_17: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -649,19 +659,33 @@ function_main_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -36 + addi $sp $sp -56 la $t0 data_11 - sw $t0 -40($fp) - lw $t0 -40($fp) + sw $t0 -64($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -36($fp) + sw $v0 -60($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_12 + syscall + li $v0 10 + syscall + label_4: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -36($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -673,7 +697,21 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -44($fp) + sw $v0 -52($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_13 + syscall + li $v0 10 + syscall + label_6: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -686,11 +724,25 @@ function_main_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -24($fp) + sw $v0 -44($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_8: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -24($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -702,11 +754,25 @@ function_main_at_Main: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -28($fp) + sw $v0 -36($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_15 + syscall + li $v0 10 + syscall + label_10: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -28($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -718,19 +784,33 @@ function_main_at_Main: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -32($fp) - la $t0 data_12 - sw $t0 -16($fp) - lw $t0 -16($fp) + sw $v0 -28($fp) + la $t0 data_16 + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_11 + j label_12 + label_11: + li $v0 4 + la $a0 data_17 + syscall + li $v0 10 + syscall + label_12: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -742,9 +822,9 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $v0 -20($fp) - addi $sp $sp 36 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 56 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -782,7 +862,7 @@ function_fib_at_Main: sw $v0 -104($fp) lw $t0 -104($fp) sw $t0 -108($fp) - label_3: + label_13: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -813,25 +893,25 @@ function_fib_at_Main: seq $t0 $t0 $t1 sw $t0 -56($fp) lw $t0 -56($fp) - bne $t0 $zero label_4 + bne $t0 $zero label_14 lw $t0 -72($fp) lw $t1 -64($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) lw $t0 -56($fp) - bne $t0 $zero label_5 + bne $t0 $zero label_15 lw $t0 -72($fp) lw $t1 -60($fp) seq $t0 $t0 $t1 sw $t0 -56($fp) lw $t0 -56($fp) - bne $t0 $zero label_6 + bne $t0 $zero label_16 lw $t0 0($fp) lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) - j label_7 - label_4: + j label_17 + label_14: lw $t0 0($fp) lw $t1 12($t0) sw $t1 -80($fp) @@ -842,8 +922,8 @@ function_fib_at_Main: lw $t1 -76($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) - j label_7 - label_5: + j label_17 + label_15: lw $t0 0($fp) lw $t1 12($t0) sw $t1 -80($fp) @@ -856,8 +936,8 @@ function_fib_at_Main: move $a1 $t0 jal equal_str sw $v0 -52($fp) - j label_7 - label_6: + j label_17 + label_16: lw $t0 0($fp) lw $t1 12($t0) sw $t1 -80($fp) @@ -868,8 +948,8 @@ function_fib_at_Main: lw $t1 -76($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) - j label_7 - label_7: + j label_17 + label_17: lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -892,9 +972,9 @@ function_fib_at_Main: lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -100($fp) - bne $t0 $zero label_8 - j label_9 - label_8: + bne $t0 $zero label_18 + j label_19 + label_18: lw $t0 -124($fp) lw $t1 12($t0) sw $t1 -40($fp) @@ -941,8 +1021,8 @@ function_fib_at_Main: sw $t0 -116($fp) lw $t0 -108($fp) sw $t0 -124($fp) - j label_3 - label_9: + j label_13 + label_19: lw $v0 -108($fp) addi $sp $sp 116 lw $fp 0($sp) diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index 50e533909..68e4d3c63 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -54,35 +54,35 @@ data_25: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_26: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_27: .asciiz " (" +data_27: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_28: .asciiz "," +data_28: .asciiz " (" .word 0 -data_29: .asciiz ")" +data_29: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_30: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_31: .asciiz "RuntimeError: Function call in a void instance" +data_31: .asciiz "," .word 0 data_32: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_33: .asciiz "\n" +data_33: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_34: .asciiz "RuntimeError: Function call in a void instance" +data_34: .asciiz ")" .word 0 data_35: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_36: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_37: .asciiz "\n" +data_37: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_38: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_39: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_40: .asciiz "\n" +data_40: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_41: .asciiz "" +data_41: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_42: .asciiz "RuntimeError: Function call in a void instance" .word 0 @@ -90,7 +90,7 @@ data_43: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_44: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_45: .asciiz "RuntimeError: Function call in a void instance" +data_45: .asciiz "\n" .word 0 data_46: .asciiz "RuntimeError: Function call in a void instance" .word 0 @@ -98,35 +98,35 @@ data_47: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_48: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_49: .asciiz "0" +data_49: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_50: .asciiz "1" +data_50: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_51: .asciiz "2" +data_51: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_52: .asciiz "3" +data_52: .asciiz "\n" .word 0 -data_53: .asciiz "4" +data_53: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_54: .asciiz "5" +data_54: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_55: .asciiz "6" +data_55: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_56: .asciiz "7" +data_56: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_57: .asciiz "8" +data_57: .asciiz "\n" .word 0 -data_58: .asciiz "9" +data_58: .asciiz "" .word 0 data_59: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_60: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_61: .asciiz "-" +data_61: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_62: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_63: .asciiz " " +data_63: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_64: .asciiz "RuntimeError: Function call in a void instance" .word 0 @@ -140,27 +140,83 @@ data_68: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_69: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_70: .asciiz " " +data_70: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_71: .asciiz "," +data_71: .asciiz "0" .word 0 -data_72: .asciiz "RuntimeError: Function call in a void instance" +data_72: .asciiz "1" .word 0 -data_73: .asciiz "" +data_73: .asciiz "2" .word 0 -data_74: .asciiz "" +data_74: .asciiz "3" .word 0 -data_75: .asciiz "RuntimeError: Function call in a void instance" +data_75: .asciiz "4" .word 0 -data_76: .asciiz "RuntimeError: Function call in a void instance" +data_76: .asciiz "5" .word 0 -data_77: .asciiz "RuntimeError: Function call in a void instance" +data_77: .asciiz "6" .word 0 -data_78: .asciiz "RuntimeError: Function call in a void instance" +data_78: .asciiz "7" .word 0 -data_79: .asciiz "RuntimeError: Function call in a void instance" +data_79: .asciiz "8" .word 0 -data_80: .asciiz "RuntimeError: Function call in a void instance" +data_80: .asciiz "9" +.word 0 +data_81: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_82: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_83: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_84: .asciiz "-" +.word 0 +data_85: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_86: .asciiz " " +.word 0 +data_87: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_88: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_89: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_90: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_91: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_92: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_93: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_94: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_95: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_96: .asciiz " " +.word 0 +data_97: .asciiz "," +.word 0 +data_98: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_99: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_100: .asciiz "" +.word 0 +data_101: .asciiz "" +.word 0 +data_102: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_103: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_104: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_105: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_106: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_107: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_108: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -1471,7 +1527,21 @@ function_print_at_Vertice: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -20 + addi $sp $sp -24 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_26 + syscall + li $v0 10 + syscall + label_16: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1503,15 +1573,15 @@ function_print_at_Vertice: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_15 - j label_16 - label_15: + bne $t0 $zero label_17 + j label_18 + label_17: li $v0 4 - la $a0 data_26 + la $a0 data_27 syscall li $v0 10 syscall - label_16: + label_18: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1536,7 +1606,7 @@ function_print_at_Vertice: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 20 + addi $sp $sp 24 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1652,19 +1722,33 @@ function_print_at_Edge: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -60 - la $t0 data_27 - sw $t0 -52($fp) - lw $t0 -52($fp) + addi $sp $sp -84 + la $t0 data_28 + sw $t0 -80($fp) + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -48($fp) + sw $v0 -76($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_19 + j label_20 + label_19: + li $v0 4 + la $a0 data_29 + syscall + li $v0 10 + syscall + label_20: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -48($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1676,7 +1760,21 @@ function_print_at_Edge: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -56($fp) + sw $v0 -68($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_21 + j label_22 + label_21: + li $v0 4 + la $a0 data_30 + syscall + li $v0 10 + syscall + label_22: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1697,19 +1795,33 @@ function_print_at_Edge: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -44($fp) - la $t0 data_28 - sw $t0 -36($fp) - lw $t0 -36($fp) + sw $v0 -60($fp) + la $t0 data_31 + sw $t0 -56($fp) + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -32($fp) + sw $v0 -52($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_23 + j label_24 + label_23: + li $v0 4 + la $a0 data_32 + syscall + li $v0 10 + syscall + label_24: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1721,7 +1833,21 @@ function_print_at_Edge: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -40($fp) + sw $v0 -44($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_25 + j label_26 + label_25: + li $v0 4 + la $a0 data_33 + syscall + li $v0 10 + syscall + label_26: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1742,19 +1868,33 @@ function_print_at_Edge: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -28($fp) - la $t0 data_29 - sw $t0 -20($fp) - lw $t0 -20($fp) + sw $v0 -36($fp) + la $t0 data_34 + sw $t0 -32($fp) + lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -16($fp) + sw $v0 -28($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_27 + j label_28 + label_27: + li $v0 4 + la $a0 data_35 + syscall + li $v0 10 + syscall + label_28: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -16($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1766,7 +1906,21 @@ function_print_at_Edge: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -24($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_29 + j label_30 + label_29: + li $v0 4 + la $a0 data_36 + syscall + li $v0 10 + syscall + label_30: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1789,7 +1943,7 @@ function_print_at_Edge: addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 60 + addi $sp $sp 84 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1875,7 +2029,21 @@ function_head_at_EList: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -8 + addi $sp $sp -12 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_31 + j label_32 + label_31: + li $v0 4 + la $a0 data_37 + syscall + li $v0 10 + syscall + label_32: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1895,7 +2063,7 @@ function_head_at_EList: sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 - addi $sp $sp 8 + addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1908,7 +2076,21 @@ function_tail_at_EList: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -8 + addi $sp $sp -12 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_33 + j label_34 + label_33: + li $v0 4 + la $a0 data_38 + syscall + li $v0 10 + syscall + label_34: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1923,7 +2105,7 @@ function_tail_at_EList: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) - addi $sp $sp 8 + addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1944,15 +2126,15 @@ function_cons_at_EList: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_17 - j label_18 - label_17: + bne $t0 $zero label_35 + j label_36 + label_35: li $v0 4 - la $a0 data_30 + la $a0 data_39 syscall li $v0 10 syscall - label_18: + label_36: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1986,7 +2168,21 @@ function_append_at_EList: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -40 + addi $sp $sp -52 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_37 + j label_38 + label_37: + li $v0 4 + la $a0 data_40 + syscall + li $v0 10 + syscall + label_38: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1999,12 +2195,26 @@ function_append_at_EList: lw $t0 40($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) + sw $v0 -44($fp) + lw $t0 -44($fp) lw $t1 12($t0) - sw $t1 -40($fp) + sw $t1 -52($fp) + lw $t0 -52($fp) + bne $t0 $zero label_47 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) lw $t0 -40($fp) - bne $t0 $zero label_23 + bne $t0 $zero label_39 + j label_40 + label_39: + li $v0 4 + la $a0 data_41 + syscall + li $v0 10 + syscall + label_40: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2017,15 +2227,29 @@ function_append_at_EList: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) + sw $v0 -36($fp) lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_41 + j label_42 + label_41: + li $v0 4 + la $a0 data_42 + syscall + li $v0 10 + syscall + label_42: + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 4($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 lw $t0 8($t0) lw $t0 48($t0) jalr $ra $t0 @@ -2036,15 +2260,15 @@ function_append_at_EList: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_19 - j label_20 - label_19: + bne $t0 $zero label_43 + j label_44 + label_43: li $v0 4 - la $a0 data_31 + la $a0 data_43 syscall li $v0 10 syscall - label_20: + label_44: lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2066,19 +2290,19 @@ function_append_at_EList: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_21 - j label_22 - label_21: + bne $t0 $zero label_45 + j label_46 + label_45: li $v0 4 - la $a0 data_32 + la $a0 data_44 syscall li $v0 10 syscall - label_22: + label_46: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 -20($fp) @@ -2092,14 +2316,14 @@ function_append_at_EList: addi $sp $sp 8 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -44($fp) - j label_24 - label_23: + sw $t0 -56($fp) + j label_48 + label_47: lw $t0 0($fp) - sw $t0 -44($fp) - label_24: - lw $v0 -44($fp) - addi $sp $sp 40 + sw $t0 -56($fp) + label_48: + lw $v0 -56($fp) + addi $sp $sp 52 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2112,19 +2336,33 @@ function_print_at_EList: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -16 - la $t0 data_33 - sw $t0 -16($fp) - lw $t0 -16($fp) + addi $sp $sp -20 + la $t0 data_45 + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_49 + j label_50 + label_49: + li $v0 4 + la $a0 data_46 + syscall + li $v0 10 + syscall + label_50: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -2136,9 +2374,9 @@ function_print_at_EList: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $v0 -20($fp) - addi $sp $sp 16 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2304,15 +2542,15 @@ function_print_at_ECons: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_25 - j label_26 - label_25: + bne $t0 $zero label_51 + j label_52 + label_51: li $v0 4 - la $a0 data_34 + la $a0 data_47 syscall li $v0 10 syscall - label_26: + label_52: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2346,15 +2584,15 @@ function_print_at_ECons: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_27 - j label_28 - label_27: + bne $t0 $zero label_53 + j label_54 + label_53: li $v0 4 - la $a0 data_35 + la $a0 data_48 syscall li $v0 10 syscall - label_28: + label_54: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2465,7 +2703,21 @@ function_head_at_VList: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -8 + addi $sp $sp -12 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_55 + j label_56 + label_55: + li $v0 4 + la $a0 data_49 + syscall + li $v0 10 + syscall + label_56: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2485,7 +2737,7 @@ function_head_at_VList: sw $t4 0($sp) lw $v0 0($sp) addi $sp $sp 4 - addi $sp $sp 8 + addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2498,7 +2750,21 @@ function_tail_at_VList: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -8 + addi $sp $sp -12 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_57 + j label_58 + label_57: + li $v0 4 + la $a0 data_50 + syscall + li $v0 10 + syscall + label_58: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2513,7 +2779,7 @@ function_tail_at_VList: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) - addi $sp $sp 8 + addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2534,15 +2800,15 @@ function_cons_at_VList: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_29 - j label_30 - label_29: + bne $t0 $zero label_59 + j label_60 + label_59: li $v0 4 - la $a0 data_36 + la $a0 data_51 syscall li $v0 10 syscall - label_30: + label_60: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2576,19 +2842,33 @@ function_print_at_VList: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -16 - la $t0 data_37 - sw $t0 -16($fp) - lw $t0 -16($fp) + addi $sp $sp -20 + la $t0 data_52 + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_61 + j label_62 + label_61: + li $v0 4 + la $a0 data_53 + syscall + li $v0 10 + syscall + label_62: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -2600,9 +2880,9 @@ function_print_at_VList: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $v0 -20($fp) - addi $sp $sp 16 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 20 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2768,15 +3048,15 @@ function_print_at_VCons: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_31 - j label_32 - label_31: + bne $t0 $zero label_63 + j label_64 + label_63: li $v0 4 - la $a0 data_38 + la $a0 data_54 syscall li $v0 10 syscall - label_32: + label_64: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2810,15 +3090,15 @@ function_print_at_VCons: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_33 - j label_34 - label_33: + bne $t0 $zero label_65 + j label_66 + label_65: li $v0 4 - la $a0 data_39 + la $a0 data_55 syscall li $v0 10 syscall - label_34: + label_66: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2923,11 +3203,25 @@ function_read_input_at_Parse: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -164 + addi $sp $sp -176 jal __init_at_Graph - sw $v0 -160($fp) - lw $t0 -160($fp) + sw $v0 -172($fp) + lw $t0 -172($fp) + sw $t0 -176($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_67 + j label_68 + label_67: + li $v0 4 + la $a0 data_56 + syscall + li $v0 10 + syscall + label_68: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2940,224 +3234,224 @@ function_read_input_at_Parse: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - sw $t0 -156($fp) - label_35: - la $t0 data_40 - sw $t0 -96($fp) - lw $t0 -96($fp) + sw $v0 -160($fp) + lw $t0 -160($fp) + sw $t0 -168($fp) + label_69: + la $t0 data_57 + sw $t0 -104($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -156($fp) + sw $v0 -100($fp) + lw $t0 -168($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -120($fp) + sw $t1 -128($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -116($fp) + sw $t0 -124($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -112($fp) + sw $t0 -120($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) + sw $t0 -116($fp) + lw $t0 -128($fp) + lw $t1 -124($fp) seq $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_36 - lw $t0 -120($fp) - lw $t1 -112($fp) + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_70 + lw $t0 -128($fp) + lw $t1 -120($fp) seq $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_37 - lw $t0 -120($fp) - lw $t1 -108($fp) + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_71 + lw $t0 -128($fp) + lw $t1 -116($fp) seq $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_38 - lw $t0 -156($fp) - lw $t1 -92($fp) + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_72 + lw $t0 -168($fp) + lw $t1 -100($fp) seq $t0 $t0 $t1 - sw $t0 -100($fp) - j label_39 - label_36: - lw $t0 -156($fp) + sw $t0 -108($fp) + j label_73 + label_70: + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -92($fp) + sw $t1 -136($fp) + lw $t0 -100($fp) lw $t1 12($t0) - sw $t1 -124($fp) - lw $t0 -128($fp) - lw $t1 -124($fp) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -100($fp) - j label_39 - label_37: - lw $t0 -156($fp) + sw $t0 -108($fp) + j label_73 + label_71: + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -92($fp) + sw $t1 -136($fp) + lw $t0 -100($fp) lw $t1 12($t0) - sw $t1 -124($fp) - lw $t0 -128($fp) + sw $t1 -132($fp) + lw $t0 -136($fp) move $a0 $t0 - lw $t0 -124($fp) + lw $t0 -132($fp) move $a1 $t0 jal equal_str - sw $v0 -100($fp) - j label_39 - label_38: - lw $t0 -156($fp) + sw $v0 -108($fp) + j label_73 + label_72: + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -92($fp) + sw $t1 -136($fp) + lw $t0 -100($fp) lw $t1 12($t0) - sw $t1 -124($fp) - lw $t0 -128($fp) - lw $t1 -124($fp) + sw $t1 -132($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -100($fp) - j label_39 - label_39: - lw $t0 -100($fp) + sw $t0 -108($fp) + j label_73 + label_73: + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -140($fp) + sw $v0 -140($fp) lw $t0 -140($fp) + lw $t1 12($t0) + sw $t1 -148($fp) + lw $t0 -148($fp) xori $t0 $t0 1 - sw $t0 -136($fp) - lw $t0 -136($fp) + sw $t0 -144($fp) + lw $t0 -144($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -144($fp) - la $t0 data_41 - sw $t0 -40($fp) - lw $t0 -40($fp) + sw $v0 -152($fp) + la $t0 data_58 + sw $t0 -48($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -156($fp) + sw $v0 -44($fp) + lw $t0 -168($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -64($fp) + sw $t1 -72($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -60($fp) + sw $t0 -68($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -56($fp) + sw $t0 -64($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -52($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) + sw $t0 -60($fp) + lw $t0 -72($fp) + lw $t1 -68($fp) seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_40 - lw $t0 -64($fp) - lw $t1 -56($fp) + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_74 + lw $t0 -72($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_41 - lw $t0 -64($fp) - lw $t1 -52($fp) + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_75 + lw $t0 -72($fp) + lw $t1 -60($fp) seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_42 - lw $t0 -156($fp) - lw $t1 -36($fp) + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_76 + lw $t0 -168($fp) + lw $t1 -44($fp) seq $t0 $t0 $t1 - sw $t0 -44($fp) - j label_43 - label_40: - lw $t0 -156($fp) + sw $t0 -52($fp) + j label_77 + label_74: + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -36($fp) + sw $t1 -80($fp) + lw $t0 -44($fp) lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) seq $t0 $t0 $t1 - sw $t0 -44($fp) - j label_43 - label_41: - lw $t0 -156($fp) + sw $t0 -52($fp) + j label_77 + label_75: + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -36($fp) + sw $t1 -80($fp) + lw $t0 -44($fp) lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -72($fp) + sw $t1 -76($fp) + lw $t0 -80($fp) move $a0 $t0 - lw $t0 -68($fp) + lw $t0 -76($fp) move $a1 $t0 jal equal_str - sw $v0 -44($fp) - j label_43 - label_42: - lw $t0 -156($fp) + sw $v0 -52($fp) + j label_77 + label_76: + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -36($fp) + sw $t1 -80($fp) + lw $t0 -44($fp) lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) seq $t0 $t0 $t1 - sw $t0 -44($fp) - j label_43 - label_43: - lw $t0 -44($fp) + sw $t0 -52($fp) + j label_77 + label_77: + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -84($fp) + sw $v0 -84($fp) lw $t0 -84($fp) + lw $t1 12($t0) + sw $t1 -92($fp) + lw $t0 -92($fp) xori $t0 $t0 1 - sw $t0 -80($fp) - lw $t0 -80($fp) + sw $t0 -88($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -88($fp) + sw $v0 -96($fp) lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -3166,17 +3460,17 @@ function_read_input_at_Parse: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_44 - j label_45 - label_44: + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_78 + j label_79 + label_78: li $v0 4 - la $a0 data_42 + la $a0 data_59 syscall li $v0 10 syscall - label_45: + label_79: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -3185,10 +3479,10 @@ function_read_input_at_Parse: addi $sp $sp 4 addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -144($fp) + lw $t0 -152($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -88($fp) + lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t4 0($fp) @@ -3205,18 +3499,32 @@ function_read_input_at_Parse: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_46 - j label_49 - label_46: + sw $t1 -156($fp) + lw $t0 -156($fp) + bne $t0 $zero label_80 + j label_87 + label_80: + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_81 + j label_82 + label_81: + li $v0 4 + la $a0 data_60 + syscall + li $v0 10 + syscall + label_82: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -156($fp) + lw $t0 -168($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -3228,28 +3536,28 @@ function_read_input_at_Parse: lw $t0 40($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -24($fp) - lw $t0 -164($fp) + sw $v0 -28($fp) + lw $t0 -176($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_47 - j label_48 - label_47: + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_83 + j label_84 + label_83: li $v0 4 - la $a0 data_43 + la $a0 data_61 syscall li $v0 10 syscall - label_48: - lw $t0 -164($fp) + label_84: + lw $t0 -176($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -24($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -164($fp) + lw $t0 -176($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -3258,7 +3566,21 @@ function_read_input_at_Parse: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -16($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_85 + j label_86 + label_85: + li $v0 4 + la $a0 data_62 + syscall + li $v0 10 + syscall + label_86: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -3273,11 +3595,11 @@ function_read_input_at_Parse: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -156($fp) - j label_35 - label_49: - lw $v0 -164($fp) - addi $sp $sp 164 + sw $t0 -168($fp) + j label_69 + label_87: + lw $v0 -176($fp) + addi $sp $sp 176 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3290,7 +3612,21 @@ function_parse_line_at_Parse: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -136 + addi $sp $sp -148 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_88 + j label_89 + label_88: + li $v0 4 + la $a0 data_63 + syscall + li $v0 10 + syscall + label_89: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -3306,30 +3642,30 @@ function_parse_line_at_Parse: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -132($fp) + sw $v0 -140($fp) jal __init_at_Vertice - sw $v0 -128($fp) - lw $t0 -128($fp) - li $t1 0 + sw $v0 -136($fp) + lw $t0 -136($fp) + li $t1 0 seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_50 - j label_51 - label_50: + sw $t0 -132($fp) + lw $t0 -132($fp) + bne $t0 $zero label_90 + j label_91 + label_90: li $v0 4 - la $a0 data_44 + la $a0 data_64 syscall li $v0 10 syscall - label_51: - lw $t0 -128($fp) + label_91: + lw $t0 -136($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -132($fp) + lw $t0 -140($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -128($fp) + lw $t0 -136($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -3338,10 +3674,10 @@ function_parse_line_at_Parse: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -120($fp) - lw $t0 -120($fp) - sw $t0 -136($fp) - label_52: + sw $v0 -128($fp) + lw $t0 -128($fp) + sw $t0 -148($fp) + label_92: lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3350,17 +3686,17 @@ function_parse_line_at_Parse: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_53 - j label_54 - label_53: + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_93 + j label_94 + label_93: li $v0 4 - la $a0 data_45 + la $a0 data_65 syscall li $v0 10 syscall - label_54: + label_94: lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3383,119 +3719,133 @@ function_parse_line_at_Parse: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -60($fp) + sw $v0 -68($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -60($fp) + sw $v0 -64($fp) + lw $t0 -68($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -88($fp) + sw $t1 -96($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -84($fp) + sw $t0 -92($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -80($fp) + sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -76($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) + sw $t0 -84($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_55 - lw $t0 -88($fp) - lw $t1 -80($fp) + sw $t0 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_95 + lw $t0 -96($fp) + lw $t1 -88($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_56 - lw $t0 -88($fp) - lw $t1 -76($fp) + sw $t0 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_96 + lw $t0 -96($fp) + lw $t1 -84($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_57 - lw $t0 -60($fp) - lw $t1 -56($fp) + sw $t0 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_97 + lw $t0 -68($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_58 - label_55: - lw $t0 -60($fp) + sw $t0 -76($fp) + j label_98 + label_95: + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -56($fp) + sw $t1 -104($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -100($fp) + lw $t0 -104($fp) + lw $t1 -100($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_58 - label_56: - lw $t0 -60($fp) + sw $t0 -76($fp) + j label_98 + label_96: + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -56($fp) + sw $t1 -104($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) + sw $t1 -100($fp) + lw $t0 -104($fp) move $a0 $t0 - lw $t0 -92($fp) + lw $t0 -100($fp) move $a1 $t0 jal equal_str - sw $v0 -68($fp) - j label_58 - label_57: - lw $t0 -60($fp) + sw $v0 -76($fp) + j label_98 + label_97: + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -56($fp) + sw $t1 -104($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -100($fp) + lw $t0 -104($fp) + lw $t1 -100($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_58 - label_58: - lw $t0 -68($fp) + sw $t0 -76($fp) + j label_98 + label_98: + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -108($fp) + sw $v0 -108($fp) lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -116($fp) + lw $t0 -116($fp) xori $t0 $t0 1 - sw $t0 -104($fp) - lw $t0 -104($fp) + sw $t0 -112($fp) + lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) + sw $v0 -120($fp) + lw $t0 -120($fp) lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_59 - j label_66 - label_59: + sw $t1 -124($fp) + lw $t0 -124($fp) + bne $t0 $zero label_99 + j label_110 + label_99: + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_100 + j label_101 + label_100: + li $v0 4 + la $a0 data_66 + syscall + li $v0 10 + syscall + label_101: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -3516,9 +3866,23 @@ function_parse_line_at_Parse: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -52($fp) + sw $v0 -52($fp) + lw $t0 -52($fp) + sw $t0 -60($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_102 + j label_103 + label_102: + li $v0 4 + la $a0 data_67 + syscall + li $v0 10 + syscall + label_103: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -3541,25 +3905,25 @@ function_parse_line_at_Parse: addi $sp $sp 8 sw $v0 -40($fp) lw $t0 -40($fp) - sw $t0 -44($fp) - lw $t0 -136($fp) + sw $t0 -48($fp) + lw $t0 -148($fp) li $t1 0 seq $t0 $t0 $t1 sw $t0 -36($fp) lw $t0 -36($fp) - bne $t0 $zero label_60 - j label_61 - label_60: + bne $t0 $zero label_104 + j label_105 + label_104: li $v0 4 - la $a0 data_46 + la $a0 data_68 syscall li $v0 10 syscall - label_61: - lw $t0 -136($fp) + label_105: + lw $t0 -148($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -136($fp) + lw $t0 -148($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -3576,25 +3940,25 @@ function_parse_line_at_Parse: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_62 - j label_63 - label_62: + bne $t0 $zero label_106 + j label_107 + label_106: li $v0 4 - la $a0 data_47 + la $a0 data_69 syscall li $v0 10 syscall - label_63: + label_107: lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -44($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 -28($fp) @@ -3607,27 +3971,27 @@ function_parse_line_at_Parse: jalr $ra $t0 addi $sp $sp 16 sw $v0 -20($fp) - lw $t0 -136($fp) + lw $t0 -148($fp) li $t1 0 seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_64 - j label_65 - label_64: + bne $t0 $zero label_108 + j label_109 + label_108: li $v0 4 - la $a0 data_48 + la $a0 data_70 syscall li $v0 10 syscall - label_65: - lw $t0 -136($fp) + label_109: + lw $t0 -148($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -136($fp) + lw $t0 -148($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -3637,10 +4001,10 @@ function_parse_line_at_Parse: jalr $ra $t0 addi $sp $sp 8 sw $v0 -12($fp) - j label_52 - label_66: - lw $v0 -136($fp) - addi $sp $sp 136 + j label_92 + label_110: + lw $v0 -148($fp) + addi $sp $sp 148 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3653,1007 +4017,1021 @@ function_c2i_at_Parse: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -576 - la $t0 data_49 - sw $t0 -532($fp) - lw $t0 -532($fp) + addi $sp $sp -580 + la $t0 data_71 + sw $t0 -536($fp) + lw $t0 -536($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -528($fp) + sw $v0 -532($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -556($fp) + sw $t1 -560($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -552($fp) + sw $t0 -556($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -548($fp) + sw $t0 -552($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -548($fp) + lw $t0 -560($fp) + lw $t1 -556($fp) + seq $t0 $t0 $t1 sw $t0 -544($fp) - lw $t0 -556($fp) + lw $t0 -544($fp) + bne $t0 $zero label_111 + lw $t0 -560($fp) lw $t1 -552($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) - bne $t0 $zero label_67 - lw $t0 -556($fp) + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_112 + lw $t0 -560($fp) lw $t1 -548($fp) seq $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) - bne $t0 $zero label_68 - lw $t0 -556($fp) - lw $t1 -544($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) - bne $t0 $zero label_69 + sw $t0 -544($fp) + lw $t0 -544($fp) + bne $t0 $zero label_113 lw $t0 0($fp) - lw $t1 -528($fp) + lw $t1 -532($fp) seq $t0 $t0 $t1 - sw $t0 -536($fp) - j label_70 - label_67: + sw $t0 -540($fp) + j label_114 + label_111: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -528($fp) + sw $t1 -568($fp) + lw $t0 -532($fp) lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) + sw $t1 -564($fp) + lw $t0 -568($fp) + lw $t1 -564($fp) seq $t0 $t0 $t1 - sw $t0 -536($fp) - j label_70 - label_68: + sw $t0 -540($fp) + j label_114 + label_112: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -528($fp) + sw $t1 -568($fp) + lw $t0 -532($fp) lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) + sw $t1 -564($fp) + lw $t0 -568($fp) move $a0 $t0 - lw $t0 -560($fp) + lw $t0 -564($fp) move $a1 $t0 jal equal_str - sw $v0 -536($fp) - j label_70 - label_69: + sw $v0 -540($fp) + j label_114 + label_113: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -528($fp) + sw $t1 -568($fp) + lw $t0 -532($fp) lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) + sw $t1 -564($fp) + lw $t0 -568($fp) + lw $t1 -564($fp) seq $t0 $t0 $t1 - sw $t0 -536($fp) - j label_70 - label_70: - lw $t0 -536($fp) + sw $t0 -540($fp) + j label_114 + label_114: + lw $t0 -540($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -568($fp) - lw $t0 -568($fp) - lw $t1 12($t0) - sw $t1 -572($fp) + sw $v0 -572($fp) lw $t0 -572($fp) - bne $t0 $zero label_125 - la $t0 data_50 - sw $t0 -480($fp) - lw $t0 -480($fp) + lw $t1 12($t0) + sw $t1 -576($fp) + lw $t0 -576($fp) + bne $t0 $zero label_171 + la $t0 data_72 + sw $t0 -484($fp) + lw $t0 -484($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -476($fp) + sw $v0 -480($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -504($fp) + sw $t1 -508($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -500($fp) + sw $t0 -504($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -496($fp) + sw $t0 -500($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -496($fp) + lw $t0 -508($fp) + lw $t1 -504($fp) + seq $t0 $t0 $t1 sw $t0 -492($fp) - lw $t0 -504($fp) + lw $t0 -492($fp) + bne $t0 $zero label_115 + lw $t0 -508($fp) lw $t1 -500($fp) seq $t0 $t0 $t1 - sw $t0 -488($fp) - lw $t0 -488($fp) - bne $t0 $zero label_71 - lw $t0 -504($fp) + sw $t0 -492($fp) + lw $t0 -492($fp) + bne $t0 $zero label_116 + lw $t0 -508($fp) lw $t1 -496($fp) seq $t0 $t0 $t1 - sw $t0 -488($fp) - lw $t0 -488($fp) - bne $t0 $zero label_72 - lw $t0 -504($fp) - lw $t1 -492($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - lw $t0 -488($fp) - bne $t0 $zero label_73 + sw $t0 -492($fp) + lw $t0 -492($fp) + bne $t0 $zero label_117 lw $t0 0($fp) - lw $t1 -476($fp) + lw $t1 -480($fp) seq $t0 $t0 $t1 - sw $t0 -484($fp) - j label_74 - label_71: + sw $t0 -488($fp) + j label_118 + label_115: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -476($fp) + sw $t1 -516($fp) + lw $t0 -480($fp) lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -512($fp) - lw $t1 -508($fp) + sw $t1 -512($fp) + lw $t0 -516($fp) + lw $t1 -512($fp) seq $t0 $t0 $t1 - sw $t0 -484($fp) - j label_74 - label_72: + sw $t0 -488($fp) + j label_118 + label_116: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -476($fp) + sw $t1 -516($fp) + lw $t0 -480($fp) lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -512($fp) + sw $t1 -512($fp) + lw $t0 -516($fp) move $a0 $t0 - lw $t0 -508($fp) + lw $t0 -512($fp) move $a1 $t0 jal equal_str - sw $v0 -484($fp) - j label_74 - label_73: + sw $v0 -488($fp) + j label_118 + label_117: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -476($fp) + sw $t1 -516($fp) + lw $t0 -480($fp) lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -512($fp) - lw $t1 -508($fp) + sw $t1 -512($fp) + lw $t0 -516($fp) + lw $t1 -512($fp) seq $t0 $t0 $t1 - sw $t0 -484($fp) - j label_74 - label_74: - lw $t0 -484($fp) + sw $t0 -488($fp) + j label_118 + label_118: + lw $t0 -488($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -516($fp) - lw $t0 -516($fp) - lw $t1 12($t0) - sw $t1 -520($fp) + sw $v0 -520($fp) lw $t0 -520($fp) - bne $t0 $zero label_123 - la $t0 data_51 - sw $t0 -428($fp) - lw $t0 -428($fp) + lw $t1 12($t0) + sw $t1 -524($fp) + lw $t0 -524($fp) + bne $t0 $zero label_169 + la $t0 data_73 + sw $t0 -432($fp) + lw $t0 -432($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -424($fp) + sw $v0 -428($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -452($fp) + sw $t1 -456($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -448($fp) + sw $t0 -452($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -444($fp) + sw $t0 -448($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -444($fp) + lw $t0 -456($fp) + lw $t1 -452($fp) + seq $t0 $t0 $t1 sw $t0 -440($fp) - lw $t0 -452($fp) + lw $t0 -440($fp) + bne $t0 $zero label_119 + lw $t0 -456($fp) lw $t1 -448($fp) seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_75 - lw $t0 -452($fp) + sw $t0 -440($fp) + lw $t0 -440($fp) + bne $t0 $zero label_120 + lw $t0 -456($fp) lw $t1 -444($fp) seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_76 - lw $t0 -452($fp) - lw $t1 -440($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_77 + sw $t0 -440($fp) + lw $t0 -440($fp) + bne $t0 $zero label_121 lw $t0 0($fp) - lw $t1 -424($fp) + lw $t1 -428($fp) seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_78 - label_75: + sw $t0 -436($fp) + j label_122 + label_119: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -424($fp) + sw $t1 -464($fp) + lw $t0 -428($fp) lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - lw $t1 -456($fp) + sw $t1 -460($fp) + lw $t0 -464($fp) + lw $t1 -460($fp) seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_78 - label_76: + sw $t0 -436($fp) + j label_122 + label_120: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -424($fp) + sw $t1 -464($fp) + lw $t0 -428($fp) lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) + sw $t1 -460($fp) + lw $t0 -464($fp) move $a0 $t0 - lw $t0 -456($fp) + lw $t0 -460($fp) move $a1 $t0 jal equal_str - sw $v0 -432($fp) - j label_78 - label_77: + sw $v0 -436($fp) + j label_122 + label_121: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -424($fp) + sw $t1 -464($fp) + lw $t0 -428($fp) lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - lw $t1 -456($fp) + sw $t1 -460($fp) + lw $t0 -464($fp) + lw $t1 -460($fp) seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_78 - label_78: - lw $t0 -432($fp) + sw $t0 -436($fp) + j label_122 + label_122: + lw $t0 -436($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -464($fp) - lw $t0 -464($fp) - lw $t1 12($t0) - sw $t1 -468($fp) + sw $v0 -468($fp) lw $t0 -468($fp) - bne $t0 $zero label_121 - la $t0 data_52 - sw $t0 -376($fp) - lw $t0 -376($fp) + lw $t1 12($t0) + sw $t1 -472($fp) + lw $t0 -472($fp) + bne $t0 $zero label_167 + la $t0 data_74 + sw $t0 -380($fp) + lw $t0 -380($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -372($fp) + sw $v0 -376($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -400($fp) + sw $t1 -404($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -396($fp) + sw $t0 -400($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -392($fp) + sw $t0 -396($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -392($fp) + lw $t0 -404($fp) + lw $t1 -400($fp) + seq $t0 $t0 $t1 sw $t0 -388($fp) - lw $t0 -400($fp) + lw $t0 -388($fp) + bne $t0 $zero label_123 + lw $t0 -404($fp) lw $t1 -396($fp) seq $t0 $t0 $t1 - sw $t0 -384($fp) - lw $t0 -384($fp) - bne $t0 $zero label_79 - lw $t0 -400($fp) + sw $t0 -388($fp) + lw $t0 -388($fp) + bne $t0 $zero label_124 + lw $t0 -404($fp) lw $t1 -392($fp) seq $t0 $t0 $t1 - sw $t0 -384($fp) - lw $t0 -384($fp) - bne $t0 $zero label_80 - lw $t0 -400($fp) - lw $t1 -388($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - lw $t0 -384($fp) - bne $t0 $zero label_81 + sw $t0 -388($fp) + lw $t0 -388($fp) + bne $t0 $zero label_125 lw $t0 0($fp) - lw $t1 -372($fp) + lw $t1 -376($fp) seq $t0 $t0 $t1 - sw $t0 -380($fp) - j label_82 - label_79: + sw $t0 -384($fp) + j label_126 + label_123: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -372($fp) + sw $t1 -412($fp) + lw $t0 -376($fp) lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -408($fp) - lw $t1 -404($fp) + sw $t1 -408($fp) + lw $t0 -412($fp) + lw $t1 -408($fp) seq $t0 $t0 $t1 - sw $t0 -380($fp) - j label_82 - label_80: + sw $t0 -384($fp) + j label_126 + label_124: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -372($fp) + sw $t1 -412($fp) + lw $t0 -376($fp) lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -408($fp) + sw $t1 -408($fp) + lw $t0 -412($fp) move $a0 $t0 - lw $t0 -404($fp) + lw $t0 -408($fp) move $a1 $t0 jal equal_str - sw $v0 -380($fp) - j label_82 - label_81: + sw $v0 -384($fp) + j label_126 + label_125: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -372($fp) + sw $t1 -412($fp) + lw $t0 -376($fp) lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -408($fp) - lw $t1 -404($fp) + sw $t1 -408($fp) + lw $t0 -412($fp) + lw $t1 -408($fp) seq $t0 $t0 $t1 - sw $t0 -380($fp) - j label_82 - label_82: - lw $t0 -380($fp) + sw $t0 -384($fp) + j label_126 + label_126: + lw $t0 -384($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -412($fp) - lw $t0 -412($fp) - lw $t1 12($t0) - sw $t1 -416($fp) + sw $v0 -416($fp) lw $t0 -416($fp) - bne $t0 $zero label_119 - la $t0 data_53 - sw $t0 -324($fp) - lw $t0 -324($fp) + lw $t1 12($t0) + sw $t1 -420($fp) + lw $t0 -420($fp) + bne $t0 $zero label_165 + la $t0 data_75 + sw $t0 -328($fp) + lw $t0 -328($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -320($fp) + sw $v0 -324($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -348($fp) + sw $t1 -352($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -344($fp) + sw $t0 -348($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -340($fp) + sw $t0 -344($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -340($fp) + lw $t0 -352($fp) + lw $t1 -348($fp) + seq $t0 $t0 $t1 sw $t0 -336($fp) - lw $t0 -348($fp) + lw $t0 -336($fp) + bne $t0 $zero label_127 + lw $t0 -352($fp) lw $t1 -344($fp) seq $t0 $t0 $t1 - sw $t0 -332($fp) - lw $t0 -332($fp) - bne $t0 $zero label_83 - lw $t0 -348($fp) + sw $t0 -336($fp) + lw $t0 -336($fp) + bne $t0 $zero label_128 + lw $t0 -352($fp) lw $t1 -340($fp) seq $t0 $t0 $t1 - sw $t0 -332($fp) - lw $t0 -332($fp) - bne $t0 $zero label_84 - lw $t0 -348($fp) - lw $t1 -336($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - lw $t0 -332($fp) - bne $t0 $zero label_85 + sw $t0 -336($fp) + lw $t0 -336($fp) + bne $t0 $zero label_129 lw $t0 0($fp) - lw $t1 -320($fp) + lw $t1 -324($fp) seq $t0 $t0 $t1 - sw $t0 -328($fp) - j label_86 - label_83: + sw $t0 -332($fp) + j label_130 + label_127: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -320($fp) + sw $t1 -360($fp) + lw $t0 -324($fp) lw $t1 12($t0) - sw $t1 -352($fp) - lw $t0 -356($fp) - lw $t1 -352($fp) + sw $t1 -356($fp) + lw $t0 -360($fp) + lw $t1 -356($fp) seq $t0 $t0 $t1 - sw $t0 -328($fp) - j label_86 - label_84: + sw $t0 -332($fp) + j label_130 + label_128: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -320($fp) + sw $t1 -360($fp) + lw $t0 -324($fp) lw $t1 12($t0) - sw $t1 -352($fp) - lw $t0 -356($fp) + sw $t1 -356($fp) + lw $t0 -360($fp) move $a0 $t0 - lw $t0 -352($fp) + lw $t0 -356($fp) move $a1 $t0 jal equal_str - sw $v0 -328($fp) - j label_86 - label_85: + sw $v0 -332($fp) + j label_130 + label_129: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -320($fp) + sw $t1 -360($fp) + lw $t0 -324($fp) lw $t1 12($t0) - sw $t1 -352($fp) - lw $t0 -356($fp) - lw $t1 -352($fp) + sw $t1 -356($fp) + lw $t0 -360($fp) + lw $t1 -356($fp) seq $t0 $t0 $t1 - sw $t0 -328($fp) - j label_86 - label_86: - lw $t0 -328($fp) + sw $t0 -332($fp) + j label_130 + label_130: + lw $t0 -332($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -360($fp) - lw $t0 -360($fp) - lw $t1 12($t0) - sw $t1 -364($fp) + sw $v0 -364($fp) lw $t0 -364($fp) - bne $t0 $zero label_117 - la $t0 data_54 - sw $t0 -272($fp) - lw $t0 -272($fp) + lw $t1 12($t0) + sw $t1 -368($fp) + lw $t0 -368($fp) + bne $t0 $zero label_163 + la $t0 data_76 + sw $t0 -276($fp) + lw $t0 -276($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -268($fp) + sw $v0 -272($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -296($fp) + sw $t1 -300($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -292($fp) + sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -288($fp) + sw $t0 -292($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -288($fp) + lw $t0 -300($fp) + lw $t1 -296($fp) + seq $t0 $t0 $t1 sw $t0 -284($fp) - lw $t0 -296($fp) + lw $t0 -284($fp) + bne $t0 $zero label_131 + lw $t0 -300($fp) lw $t1 -292($fp) seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_87 - lw $t0 -296($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_132 + lw $t0 -300($fp) lw $t1 -288($fp) seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_88 - lw $t0 -296($fp) - lw $t1 -284($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_89 + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_133 lw $t0 0($fp) - lw $t1 -268($fp) + lw $t1 -272($fp) seq $t0 $t0 $t1 - sw $t0 -276($fp) - j label_90 - label_87: + sw $t0 -280($fp) + j label_134 + label_131: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -268($fp) + sw $t1 -308($fp) + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -304($fp) - lw $t1 -300($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) seq $t0 $t0 $t1 - sw $t0 -276($fp) - j label_90 - label_88: + sw $t0 -280($fp) + j label_134 + label_132: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -268($fp) + sw $t1 -308($fp) + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -304($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) move $a0 $t0 - lw $t0 -300($fp) + lw $t0 -304($fp) move $a1 $t0 jal equal_str - sw $v0 -276($fp) - j label_90 - label_89: + sw $v0 -280($fp) + j label_134 + label_133: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -268($fp) + sw $t1 -308($fp) + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -304($fp) - lw $t1 -300($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) seq $t0 $t0 $t1 - sw $t0 -276($fp) - j label_90 - label_90: - lw $t0 -276($fp) + sw $t0 -280($fp) + j label_134 + label_134: + lw $t0 -280($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -308($fp) - lw $t0 -308($fp) - lw $t1 12($t0) - sw $t1 -312($fp) + sw $v0 -312($fp) lw $t0 -312($fp) - bne $t0 $zero label_115 - la $t0 data_55 - sw $t0 -220($fp) - lw $t0 -220($fp) + lw $t1 12($t0) + sw $t1 -316($fp) + lw $t0 -316($fp) + bne $t0 $zero label_161 + la $t0 data_77 + sw $t0 -224($fp) + lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -216($fp) + sw $v0 -220($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -244($fp) + sw $t1 -248($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -240($fp) + sw $t0 -244($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -236($fp) + sw $t0 -240($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -236($fp) + lw $t0 -248($fp) + lw $t1 -244($fp) + seq $t0 $t0 $t1 sw $t0 -232($fp) - lw $t0 -244($fp) + lw $t0 -232($fp) + bne $t0 $zero label_135 + lw $t0 -248($fp) lw $t1 -240($fp) seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_91 - lw $t0 -244($fp) + sw $t0 -232($fp) + lw $t0 -232($fp) + bne $t0 $zero label_136 + lw $t0 -248($fp) lw $t1 -236($fp) seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_92 - lw $t0 -244($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_93 + sw $t0 -232($fp) + lw $t0 -232($fp) + bne $t0 $zero label_137 lw $t0 0($fp) - lw $t1 -216($fp) + lw $t1 -220($fp) seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_94 - label_91: + sw $t0 -228($fp) + j label_138 + label_135: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -216($fp) + sw $t1 -256($fp) + lw $t0 -220($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) + sw $t1 -252($fp) + lw $t0 -256($fp) + lw $t1 -252($fp) seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_94 - label_92: + sw $t0 -228($fp) + j label_138 + label_136: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -216($fp) + sw $t1 -256($fp) + lw $t0 -220($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) + sw $t1 -252($fp) + lw $t0 -256($fp) move $a0 $t0 - lw $t0 -248($fp) + lw $t0 -252($fp) move $a1 $t0 jal equal_str - sw $v0 -224($fp) - j label_94 - label_93: + sw $v0 -228($fp) + j label_138 + label_137: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -216($fp) + sw $t1 -256($fp) + lw $t0 -220($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) + sw $t1 -252($fp) + lw $t0 -256($fp) + lw $t1 -252($fp) seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_94 - label_94: - lw $t0 -224($fp) + sw $t0 -228($fp) + j label_138 + label_138: + lw $t0 -228($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -260($fp) + sw $v0 -260($fp) lw $t0 -260($fp) - bne $t0 $zero label_113 - la $t0 data_56 - sw $t0 -168($fp) - lw $t0 -168($fp) + lw $t1 12($t0) + sw $t1 -264($fp) + lw $t0 -264($fp) + bne $t0 $zero label_159 + la $t0 data_78 + sw $t0 -172($fp) + lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -164($fp) + sw $v0 -168($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -192($fp) + sw $t1 -196($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -188($fp) + sw $t0 -192($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -184($fp) + sw $t0 -188($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -184($fp) + lw $t0 -196($fp) + lw $t1 -192($fp) + seq $t0 $t0 $t1 sw $t0 -180($fp) - lw $t0 -192($fp) + lw $t0 -180($fp) + bne $t0 $zero label_139 + lw $t0 -196($fp) lw $t1 -188($fp) seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_95 - lw $t0 -192($fp) + sw $t0 -180($fp) + lw $t0 -180($fp) + bne $t0 $zero label_140 + lw $t0 -196($fp) lw $t1 -184($fp) seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_96 - lw $t0 -192($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_97 + sw $t0 -180($fp) + lw $t0 -180($fp) + bne $t0 $zero label_141 lw $t0 0($fp) - lw $t1 -164($fp) + lw $t1 -168($fp) seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_98 - label_95: + sw $t0 -176($fp) + j label_142 + label_139: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -164($fp) + sw $t1 -204($fp) + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) + sw $t1 -200($fp) + lw $t0 -204($fp) + lw $t1 -200($fp) seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_98 - label_96: + sw $t0 -176($fp) + j label_142 + label_140: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -164($fp) + sw $t1 -204($fp) + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) + sw $t1 -200($fp) + lw $t0 -204($fp) move $a0 $t0 - lw $t0 -196($fp) + lw $t0 -200($fp) move $a1 $t0 jal equal_str - sw $v0 -172($fp) - j label_98 - label_97: + sw $v0 -176($fp) + j label_142 + label_141: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -164($fp) + sw $t1 -204($fp) + lw $t0 -168($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) + sw $t1 -200($fp) + lw $t0 -204($fp) + lw $t1 -200($fp) seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_98 - label_98: - lw $t0 -172($fp) + sw $t0 -176($fp) + j label_142 + label_142: + lw $t0 -176($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) + sw $v0 -208($fp) lw $t0 -208($fp) - bne $t0 $zero label_111 - la $t0 data_57 - sw $t0 -116($fp) - lw $t0 -116($fp) + lw $t1 12($t0) + sw $t1 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_157 + la $t0 data_79 + sw $t0 -120($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -112($fp) + sw $v0 -116($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -140($fp) + sw $t1 -144($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -136($fp) + sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -132($fp) + sw $t0 -136($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -132($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) + seq $t0 $t0 $t1 sw $t0 -128($fp) - lw $t0 -140($fp) + lw $t0 -128($fp) + bne $t0 $zero label_143 + lw $t0 -144($fp) lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_99 - lw $t0 -140($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_144 + lw $t0 -144($fp) lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_100 - lw $t0 -140($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_101 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_145 lw $t0 0($fp) - lw $t1 -112($fp) + lw $t1 -116($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_102 - label_99: + sw $t0 -124($fp) + j label_146 + label_143: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -112($fp) + sw $t1 -152($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_102 - label_100: + sw $t0 -124($fp) + j label_146 + label_144: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -112($fp) + sw $t1 -152($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) move $a0 $t0 - lw $t0 -144($fp) + lw $t0 -148($fp) move $a1 $t0 jal equal_str - sw $v0 -120($fp) - j label_102 - label_101: + sw $v0 -124($fp) + j label_146 + label_145: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -112($fp) + sw $t1 -152($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_102 - label_102: - lw $t0 -120($fp) + sw $t0 -124($fp) + j label_146 + label_146: + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -156($fp) + sw $v0 -156($fp) lw $t0 -156($fp) - bne $t0 $zero label_109 - la $t0 data_58 - sw $t0 -64($fp) - lw $t0 -64($fp) + lw $t1 12($t0) + sw $t1 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_155 + la $t0 data_80 + sw $t0 -68($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -60($fp) + sw $v0 -64($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -88($fp) + sw $t1 -92($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -84($fp) + sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -80($fp) + sw $t0 -84($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -80($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) + seq $t0 $t0 $t1 sw $t0 -76($fp) - lw $t0 -88($fp) + lw $t0 -76($fp) + bne $t0 $zero label_147 + lw $t0 -92($fp) lw $t1 -84($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_103 - lw $t0 -88($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_148 + lw $t0 -92($fp) lw $t1 -80($fp) seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_104 - lw $t0 -88($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_105 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_149 lw $t0 0($fp) - lw $t1 -60($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_106 - label_103: + sw $t0 -72($fp) + j label_150 + label_147: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_106 - label_104: + sw $t0 -72($fp) + j label_150 + label_148: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) move $a0 $t0 - lw $t0 -92($fp) + lw $t0 -96($fp) move $a1 $t0 jal equal_str - sw $v0 -68($fp) - j label_106 - label_105: + sw $v0 -72($fp) + j label_150 + label_149: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_106 - label_106: - lw $t0 -68($fp) + sw $t0 -72($fp) + j label_150 + label_150: + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) + sw $v0 -104($fp) lw $t0 -104($fp) - bne $t0 $zero label_107 + lw $t1 12($t0) + sw $t1 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_153 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_151 + j label_152 + label_151: + li $v0 4 + la $a0 data_81 + syscall + li $v0 10 + syscall + label_152: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -4674,9 +5052,9 @@ function_c2i_at_Parse: addi $sp $sp 4 sw $v0 -52($fp) lw $t0 -52($fp) - sw $t0 -108($fp) - j label_108 - label_107: + sw $t0 -112($fp) + j label_154 + label_153: li $t0 9 addi $sp $sp -4 sw $t0 0($sp) @@ -4684,12 +5062,12 @@ function_c2i_at_Parse: addi $sp $sp 4 sw $v0 -48($fp) lw $t0 -48($fp) - sw $t0 -108($fp) - label_108: - lw $t0 -108($fp) - sw $t0 -160($fp) - j label_110 - label_109: + sw $t0 -112($fp) + label_154: + lw $t0 -112($fp) + sw $t0 -164($fp) + j label_156 + label_155: li $t0 8 addi $sp $sp -4 sw $t0 0($sp) @@ -4697,12 +5075,12 @@ function_c2i_at_Parse: addi $sp $sp 4 sw $v0 -44($fp) lw $t0 -44($fp) - sw $t0 -160($fp) - label_110: - lw $t0 -160($fp) - sw $t0 -212($fp) - j label_112 - label_111: + sw $t0 -164($fp) + label_156: + lw $t0 -164($fp) + sw $t0 -216($fp) + j label_158 + label_157: li $t0 7 addi $sp $sp -4 sw $t0 0($sp) @@ -4710,12 +5088,12 @@ function_c2i_at_Parse: addi $sp $sp 4 sw $v0 -40($fp) lw $t0 -40($fp) - sw $t0 -212($fp) - label_112: - lw $t0 -212($fp) - sw $t0 -264($fp) - j label_114 - label_113: + sw $t0 -216($fp) + label_158: + lw $t0 -216($fp) + sw $t0 -268($fp) + j label_160 + label_159: li $t0 6 addi $sp $sp -4 sw $t0 0($sp) @@ -4723,12 +5101,12 @@ function_c2i_at_Parse: addi $sp $sp 4 sw $v0 -36($fp) lw $t0 -36($fp) - sw $t0 -264($fp) - label_114: - lw $t0 -264($fp) - sw $t0 -316($fp) - j label_116 - label_115: + sw $t0 -268($fp) + label_160: + lw $t0 -268($fp) + sw $t0 -320($fp) + j label_162 + label_161: li $t0 5 addi $sp $sp -4 sw $t0 0($sp) @@ -4736,12 +5114,12 @@ function_c2i_at_Parse: addi $sp $sp 4 sw $v0 -32($fp) lw $t0 -32($fp) - sw $t0 -316($fp) - label_116: - lw $t0 -316($fp) - sw $t0 -368($fp) - j label_118 - label_117: + sw $t0 -320($fp) + label_162: + lw $t0 -320($fp) + sw $t0 -372($fp) + j label_164 + label_163: li $t0 4 addi $sp $sp -4 sw $t0 0($sp) @@ -4749,12 +5127,12 @@ function_c2i_at_Parse: addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) - sw $t0 -368($fp) - label_118: - lw $t0 -368($fp) - sw $t0 -420($fp) - j label_120 - label_119: + sw $t0 -372($fp) + label_164: + lw $t0 -372($fp) + sw $t0 -424($fp) + j label_166 + label_165: li $t0 3 addi $sp $sp -4 sw $t0 0($sp) @@ -4762,12 +5140,12 @@ function_c2i_at_Parse: addi $sp $sp 4 sw $v0 -24($fp) lw $t0 -24($fp) - sw $t0 -420($fp) - label_120: - lw $t0 -420($fp) - sw $t0 -472($fp) - j label_122 - label_121: + sw $t0 -424($fp) + label_166: + lw $t0 -424($fp) + sw $t0 -476($fp) + j label_168 + label_167: li $t0 2 addi $sp $sp -4 sw $t0 0($sp) @@ -4775,12 +5153,12 @@ function_c2i_at_Parse: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -472($fp) - label_122: - lw $t0 -472($fp) - sw $t0 -524($fp) - j label_124 - label_123: + sw $t0 -476($fp) + label_168: + lw $t0 -476($fp) + sw $t0 -528($fp) + j label_170 + label_169: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) @@ -4788,12 +5166,12 @@ function_c2i_at_Parse: addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) - sw $t0 -524($fp) - label_124: - lw $t0 -524($fp) - sw $t0 -576($fp) - j label_126 - label_125: + sw $t0 -528($fp) + label_170: + lw $t0 -528($fp) + sw $t0 -580($fp) + j label_172 + label_171: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -4801,10 +5179,10 @@ function_c2i_at_Parse: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -576($fp) - label_126: - lw $v0 -576($fp) - addi $sp $sp 576 + sw $t0 -580($fp) + label_172: + lw $v0 -580($fp) + addi $sp $sp 580 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -4817,21 +5195,21 @@ function_a2i_at_Parse: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -308 + addi $sp $sp -320 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -264($fp) - lw $t0 -264($fp) - bne $t0 $zero label_127 - j label_128 - label_127: + sw $t0 -276($fp) + lw $t0 -276($fp) + bne $t0 $zero label_173 + j label_174 + label_173: li $v0 4 - la $a0 data_59 + la $a0 data_82 syscall li $v0 10 syscall - label_128: + label_174: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -4844,138 +5222,138 @@ function_a2i_at_Parse: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -260($fp) + sw $v0 -272($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -260($fp) + sw $v0 -268($fp) + lw $t0 -272($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -288($fp) + sw $t1 -300($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -284($fp) + sw $t0 -296($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -280($fp) + sw $t0 -292($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -276($fp) - lw $t0 -288($fp) - lw $t1 -284($fp) + sw $t0 -288($fp) + lw $t0 -300($fp) + lw $t1 -296($fp) seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_129 - lw $t0 -288($fp) - lw $t1 -280($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_175 + lw $t0 -300($fp) + lw $t1 -292($fp) seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_130 - lw $t0 -288($fp) - lw $t1 -276($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_176 + lw $t0 -300($fp) + lw $t1 -288($fp) seq $t0 $t0 $t1 - sw $t0 -272($fp) + sw $t0 -284($fp) + lw $t0 -284($fp) + bne $t0 $zero label_177 lw $t0 -272($fp) - bne $t0 $zero label_131 - lw $t0 -260($fp) - lw $t1 -256($fp) + lw $t1 -268($fp) seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_132 - label_129: - lw $t0 -260($fp) + sw $t0 -280($fp) + j label_178 + label_175: + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -256($fp) + sw $t1 -308($fp) + lw $t0 -268($fp) lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_132 - label_130: - lw $t0 -260($fp) + sw $t0 -280($fp) + j label_178 + label_176: + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -256($fp) + sw $t1 -308($fp) + lw $t0 -268($fp) lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) move $a0 $t0 - lw $t0 -292($fp) + lw $t0 -304($fp) move $a1 $t0 jal equal_str - sw $v0 -268($fp) - j label_132 - label_131: - lw $t0 -260($fp) + sw $v0 -280($fp) + j label_178 + label_177: + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -256($fp) + sw $t1 -308($fp) + lw $t0 -268($fp) lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) + sw $t1 -304($fp) + lw $t0 -308($fp) + lw $t1 -304($fp) seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_132 - label_132: - lw $t0 -268($fp) + sw $t0 -280($fp) + j label_178 + label_178: + lw $t0 -280($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 -300($fp) + sw $v0 -312($fp) + lw $t0 -312($fp) lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_157 + sw $t1 -316($fp) + lw $t0 -316($fp) + bne $t0 $zero label_209 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -208($fp) + sw $v0 -220($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -204($fp) + sw $v0 -216($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -200($fp) - lw $t0 -200($fp) - bne $t0 $zero label_133 - j label_134 - label_133: + sw $t0 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_179 + j label_180 + label_179: li $v0 4 - la $a0 data_60 + la $a0 data_83 syscall li $v0 10 syscall - label_134: + label_180: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -208($fp) + lw $t0 -220($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -204($fp) + lw $t0 -216($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -4987,140 +5365,140 @@ function_a2i_at_Parse: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -196($fp) - la $t0 data_61 - sw $t0 -192($fp) - lw $t0 -192($fp) + sw $v0 -208($fp) + la $t0 data_84 + sw $t0 -204($fp) + lw $t0 -204($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -196($fp) + sw $v0 -200($fp) + lw $t0 -208($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -232($fp) + sw $t1 -244($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -228($fp) + sw $t0 -240($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -224($fp) + sw $t0 -236($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -220($fp) - lw $t0 -232($fp) - lw $t1 -228($fp) + sw $t0 -232($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_135 - lw $t0 -232($fp) - lw $t1 -224($fp) + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_181 + lw $t0 -244($fp) + lw $t1 -236($fp) seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_136 - lw $t0 -232($fp) - lw $t1 -220($fp) + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_182 + lw $t0 -244($fp) + lw $t1 -232($fp) seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_137 - lw $t0 -196($fp) - lw $t1 -188($fp) + sw $t0 -228($fp) + lw $t0 -228($fp) + bne $t0 $zero label_183 + lw $t0 -208($fp) + lw $t1 -200($fp) seq $t0 $t0 $t1 - sw $t0 -212($fp) - j label_138 - label_135: - lw $t0 -196($fp) + sw $t0 -224($fp) + j label_184 + label_181: + lw $t0 -208($fp) lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -188($fp) + sw $t1 -252($fp) + lw $t0 -200($fp) lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -240($fp) - lw $t1 -236($fp) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) seq $t0 $t0 $t1 - sw $t0 -212($fp) - j label_138 - label_136: - lw $t0 -196($fp) + sw $t0 -224($fp) + j label_184 + label_182: + lw $t0 -208($fp) lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -188($fp) + sw $t1 -252($fp) + lw $t0 -200($fp) lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -240($fp) + sw $t1 -248($fp) + lw $t0 -252($fp) move $a0 $t0 - lw $t0 -236($fp) + lw $t0 -248($fp) move $a1 $t0 jal equal_str - sw $v0 -212($fp) - j label_138 - label_137: - lw $t0 -196($fp) + sw $v0 -224($fp) + j label_184 + label_183: + lw $t0 -208($fp) lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -188($fp) + sw $t1 -252($fp) + lw $t0 -200($fp) lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -240($fp) - lw $t1 -236($fp) + sw $t1 -248($fp) + lw $t0 -252($fp) + lw $t1 -248($fp) seq $t0 $t0 $t1 - sw $t0 -212($fp) - j label_138 - label_138: - lw $t0 -212($fp) + sw $t0 -224($fp) + j label_184 + label_184: + lw $t0 -224($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -244($fp) - lw $t0 -244($fp) + sw $v0 -256($fp) + lw $t0 -256($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -248($fp) - bne $t0 $zero label_151 + sw $t1 -260($fp) + lw $t0 -260($fp) + bne $t0 $zero label_201 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -140($fp) + sw $v0 -152($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -136($fp) + sw $v0 -148($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_139 - j label_140 - label_139: + sw $t0 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_185 + j label_186 + label_185: li $v0 4 - la $a0 data_62 + la $a0 data_85 syscall li $v0 10 syscall - label_140: + label_186: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -140($fp) + lw $t0 -152($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -136($fp) + lw $t0 -148($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -5132,107 +5510,121 @@ function_a2i_at_Parse: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -128($fp) - la $t0 data_63 - sw $t0 -124($fp) - lw $t0 -124($fp) + sw $v0 -140($fp) + la $t0 data_86 + sw $t0 -136($fp) + lw $t0 -136($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -128($fp) + sw $v0 -132($fp) + lw $t0 -140($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -164($fp) + sw $t1 -176($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -160($fp) + sw $t0 -172($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -156($fp) + sw $t0 -168($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -152($fp) - lw $t0 -164($fp) - lw $t1 -160($fp) + sw $t0 -164($fp) + lw $t0 -176($fp) + lw $t1 -172($fp) seq $t0 $t0 $t1 - sw $t0 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_141 - lw $t0 -164($fp) - lw $t1 -156($fp) + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_187 + lw $t0 -176($fp) + lw $t1 -168($fp) seq $t0 $t0 $t1 - sw $t0 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_142 - lw $t0 -164($fp) - lw $t1 -152($fp) + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_188 + lw $t0 -176($fp) + lw $t1 -164($fp) seq $t0 $t0 $t1 - sw $t0 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_143 - lw $t0 -128($fp) - lw $t1 -120($fp) + sw $t0 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_189 + lw $t0 -140($fp) + lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -144($fp) - j label_144 - label_141: - lw $t0 -128($fp) + sw $t0 -156($fp) + j label_190 + label_187: + lw $t0 -140($fp) lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -120($fp) + sw $t1 -184($fp) + lw $t0 -132($fp) lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -172($fp) - lw $t1 -168($fp) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) seq $t0 $t0 $t1 - sw $t0 -144($fp) - j label_144 - label_142: - lw $t0 -128($fp) + sw $t0 -156($fp) + j label_190 + label_188: + lw $t0 -140($fp) lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -120($fp) + sw $t1 -184($fp) + lw $t0 -132($fp) lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -172($fp) + sw $t1 -180($fp) + lw $t0 -184($fp) move $a0 $t0 - lw $t0 -168($fp) + lw $t0 -180($fp) move $a1 $t0 jal equal_str - sw $v0 -144($fp) - j label_144 - label_143: - lw $t0 -128($fp) + sw $v0 -156($fp) + j label_190 + label_189: + lw $t0 -140($fp) lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -120($fp) + sw $t1 -184($fp) + lw $t0 -132($fp) lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -172($fp) - lw $t1 -168($fp) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) seq $t0 $t0 $t1 - sw $t0 -144($fp) - j label_144 - label_144: - lw $t0 -144($fp) + sw $t0 -156($fp) + j label_190 + label_190: + lw $t0 -156($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -176($fp) - lw $t0 -176($fp) + sw $v0 -188($fp) + lw $t0 -188($fp) lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_145 + sw $t1 -192($fp) + lw $t0 -192($fp) + bne $t0 $zero label_193 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_191 + j label_192 + label_191: + li $v0 4 + la $a0 data_87 + syscall + li $v0 10 + syscall + label_192: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5248,31 +5640,31 @@ function_a2i_at_Parse: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -116($fp) - lw $t0 -116($fp) - sw $t0 -184($fp) - j label_150 - label_145: + sw $v0 -124($fp) + lw $t0 -124($fp) + sw $t0 -196($fp) + j label_200 + label_193: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -108($fp) + sw $v0 -120($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_146 - j label_147 - label_146: + sw $t0 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_194 + j label_195 + label_194: li $v0 4 - la $a0 data_64 + la $a0 data_88 syscall li $v0 10 syscall - label_147: + label_195: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5285,50 +5677,50 @@ function_a2i_at_Parse: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) + sw $v0 -96($fp) + lw $t0 -96($fp) lw $t1 12($t0) - sw $t1 -100($fp) + sw $t1 -112($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) + sw $v0 -92($fp) + lw $t0 -92($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) + sw $t1 -108($fp) + lw $t0 -112($fp) + lw $t1 -108($fp) sub $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) + sw $t0 -104($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -104($fp) + sw $v0 -116($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_148 - j label_149 - label_148: + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_196 + j label_197 + label_196: li $v0 4 - la $a0 data_65 + la $a0 data_89 syscall li $v0 10 syscall - label_149: + label_197: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -108($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -104($fp) + lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -5340,11 +5732,25 @@ function_a2i_at_Parse: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -72($fp) + sw $v0 -84($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_198 + j label_199 + label_198: + li $v0 4 + la $a0 data_90 + syscall + li $v0 10 + syscall + label_199: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -72($fp) + lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -5356,34 +5762,34 @@ function_a2i_at_Parse: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -184($fp) - label_150: - lw $t0 -184($fp) - sw $t0 -252($fp) - j label_156 - label_151: + sw $v0 -76($fp) + lw $t0 -76($fp) + sw $t0 -196($fp) + label_200: + lw $t0 -196($fp) + sw $t0 -264($fp) + j label_208 + label_201: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) + sw $v0 -60($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_152 - j label_153 - label_152: + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_202 + j label_203 + label_202: li $v0 4 - la $a0 data_66 + la $a0 data_91 syscall li $v0 10 syscall - label_153: + label_203: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5396,50 +5802,50 @@ function_a2i_at_Parse: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -44($fp) + sw $t1 -52($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) + sw $v0 -32($fp) + lw $t0 -32($fp) lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) sub $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) + sw $t0 -44($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -48($fp) + sw $v0 -56($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_154 - j label_155 - label_154: + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_204 + j label_205 + label_204: li $v0 4 - la $a0 data_67 + la $a0 data_92 syscall li $v0 10 syscall - label_155: + label_205: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -48($fp) + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -5451,11 +5857,25 @@ function_a2i_at_Parse: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -16($fp) + sw $v0 -24($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_206 + j label_207 + label_206: + li $v0 4 + la $a0 data_93 + syscall + li $v0 10 + syscall + label_207: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -16($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -5467,27 +5887,27 @@ function_a2i_at_Parse: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -56($fp) - lw $t0 -56($fp) + sw $v0 -16($fp) + lw $t0 -16($fp) lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) + sw $t1 -68($fp) + lw $t0 -68($fp) not $t0 $t0 addi $t0 $t0 1 - sw $t0 -60($fp) - lw $t0 -60($fp) + sw $t0 -64($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -252($fp) - label_156: - lw $t0 -252($fp) - sw $t0 -308($fp) - j label_158 - label_157: + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -264($fp) + label_208: + lw $t0 -264($fp) + sw $t0 -320($fp) + j label_210 + label_209: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -5495,10 +5915,10 @@ function_a2i_at_Parse: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -308($fp) - label_158: - lw $v0 -308($fp) - addi $sp $sp 308 + sw $t0 -320($fp) + label_210: + lw $v0 -320($fp) + addi $sp $sp 320 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -5511,29 +5931,29 @@ function_a2i_aux_at_Parse: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -452 + addi $sp $sp -456 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -448($fp) - lw $t0 -448($fp) - sw $t0 -452($fp) + sw $v0 -452($fp) + lw $t0 -452($fp) + sw $t0 -456($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_159 - j label_160 - label_159: + sw $t0 -444($fp) + lw $t0 -444($fp) + bne $t0 $zero label_211 + j label_212 + label_211: li $v0 4 - la $a0 data_68 + la $a0 data_94 syscall li $v0 10 syscall - label_160: + label_212: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5546,68 +5966,68 @@ function_a2i_aux_at_Parse: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -436($fp) - lw $t0 -436($fp) - sw $t0 -444($fp) + sw $v0 -440($fp) + lw $t0 -440($fp) + sw $t0 -448($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 -428($fp) - sw $t0 -432($fp) - label_161: + sw $v0 -432($fp) lw $t0 -432($fp) + sw $t0 -436($fp) + label_213: + lw $t0 -436($fp) lw $t1 12($t0) - sw $t1 -416($fp) - lw $t0 -444($fp) + sw $t1 -420($fp) + lw $t0 -448($fp) lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -416($fp) - lw $t1 -412($fp) + sw $t1 -416($fp) + lw $t0 -420($fp) + lw $t1 -416($fp) slt $t1 $t0 $t1 - sw $t1 -408($fp) - lw $t0 -408($fp) + sw $t1 -412($fp) + lw $t0 -412($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -420($fp) - lw $t0 -420($fp) - lw $t1 12($t0) - sw $t1 -424($fp) + sw $v0 -424($fp) lw $t0 -424($fp) - bne $t0 $zero label_162 - j label_193 - label_162: + lw $t1 12($t0) + sw $t1 -428($fp) + lw $t0 -428($fp) + bne $t0 $zero label_214 + j label_247 + label_214: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -400($fp) + sw $v0 -404($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -396($fp) - lw $t0 -396($fp) - bne $t0 $zero label_163 - j label_164 - label_163: + sw $t0 -400($fp) + lw $t0 -400($fp) + bne $t0 $zero label_215 + j label_216 + label_215: li $v0 4 - la $a0 data_69 + la $a0 data_95 syscall li $v0 10 syscall - label_164: + label_216: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -432($fp) + lw $t0 -436($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -400($fp) + lw $t0 -404($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -5619,261 +6039,261 @@ function_a2i_aux_at_Parse: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -392($fp) - lw $t0 -392($fp) - sw $t0 -404($fp) - la $t0 data_70 - sw $t0 -344($fp) - lw $t0 -344($fp) + sw $v0 -396($fp) + lw $t0 -396($fp) + sw $t0 -408($fp) + la $t0 data_96 + sw $t0 -348($fp) + lw $t0 -348($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -340($fp) - lw $t0 -404($fp) + sw $v0 -344($fp) + lw $t0 -408($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -368($fp) + sw $t1 -372($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -364($fp) + sw $t0 -368($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -360($fp) + sw $t0 -364($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -360($fp) + lw $t0 -372($fp) + lw $t1 -368($fp) + seq $t0 $t0 $t1 sw $t0 -356($fp) - lw $t0 -368($fp) + lw $t0 -356($fp) + bne $t0 $zero label_217 + lw $t0 -372($fp) lw $t1 -364($fp) seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_165 - lw $t0 -368($fp) + sw $t0 -356($fp) + lw $t0 -356($fp) + bne $t0 $zero label_218 + lw $t0 -372($fp) lw $t1 -360($fp) seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_166 - lw $t0 -368($fp) - lw $t1 -356($fp) + sw $t0 -356($fp) + lw $t0 -356($fp) + bne $t0 $zero label_219 + lw $t0 -408($fp) + lw $t1 -344($fp) seq $t0 $t0 $t1 sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_167 - lw $t0 -404($fp) - lw $t1 -340($fp) - seq $t0 $t0 $t1 - sw $t0 -348($fp) - j label_168 - label_165: - lw $t0 -404($fp) + j label_220 + label_217: + lw $t0 -408($fp) lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -340($fp) + sw $t1 -380($fp) + lw $t0 -344($fp) lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -376($fp) - lw $t1 -372($fp) + sw $t1 -376($fp) + lw $t0 -380($fp) + lw $t1 -376($fp) seq $t0 $t0 $t1 - sw $t0 -348($fp) - j label_168 - label_166: - lw $t0 -404($fp) + sw $t0 -352($fp) + j label_220 + label_218: + lw $t0 -408($fp) lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -340($fp) + sw $t1 -380($fp) + lw $t0 -344($fp) lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -376($fp) + sw $t1 -376($fp) + lw $t0 -380($fp) move $a0 $t0 - lw $t0 -372($fp) + lw $t0 -376($fp) move $a1 $t0 jal equal_str - sw $v0 -348($fp) - j label_168 - label_167: - lw $t0 -404($fp) + sw $v0 -352($fp) + j label_220 + label_219: + lw $t0 -408($fp) lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -340($fp) + sw $t1 -380($fp) + lw $t0 -344($fp) lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -376($fp) - lw $t1 -372($fp) + sw $t1 -376($fp) + lw $t0 -380($fp) + lw $t1 -376($fp) seq $t0 $t0 $t1 - sw $t0 -348($fp) - j label_168 - label_168: - lw $t0 -348($fp) + sw $t0 -352($fp) + j label_220 + label_220: + lw $t0 -352($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -380($fp) - lw $t0 -380($fp) - lw $t1 12($t0) - sw $t1 -384($fp) + sw $v0 -384($fp) lw $t0 -384($fp) - bne $t0 $zero label_187 - la $t0 data_71 - sw $t0 -292($fp) - lw $t0 -292($fp) + lw $t1 12($t0) + sw $t1 -388($fp) + lw $t0 -388($fp) + bne $t0 $zero label_241 + la $t0 data_97 + sw $t0 -296($fp) + lw $t0 -296($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -288($fp) - lw $t0 -404($fp) + sw $v0 -292($fp) + lw $t0 -408($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -316($fp) + sw $t1 -320($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -312($fp) + sw $t0 -316($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -308($fp) + sw $t0 -312($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -308($fp) + lw $t0 -320($fp) + lw $t1 -316($fp) + seq $t0 $t0 $t1 sw $t0 -304($fp) - lw $t0 -316($fp) + lw $t0 -304($fp) + bne $t0 $zero label_221 + lw $t0 -320($fp) lw $t1 -312($fp) seq $t0 $t0 $t1 - sw $t0 -300($fp) - lw $t0 -300($fp) - bne $t0 $zero label_169 - lw $t0 -316($fp) + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_222 + lw $t0 -320($fp) lw $t1 -308($fp) seq $t0 $t0 $t1 - sw $t0 -300($fp) - lw $t0 -300($fp) - bne $t0 $zero label_170 - lw $t0 -316($fp) - lw $t1 -304($fp) + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_223 + lw $t0 -408($fp) + lw $t1 -292($fp) seq $t0 $t0 $t1 sw $t0 -300($fp) - lw $t0 -300($fp) - bne $t0 $zero label_171 - lw $t0 -404($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -296($fp) - j label_172 - label_169: - lw $t0 -404($fp) + j label_224 + label_221: + lw $t0 -408($fp) lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -288($fp) + sw $t1 -328($fp) + lw $t0 -292($fp) lw $t1 12($t0) - sw $t1 -320($fp) - lw $t0 -324($fp) - lw $t1 -320($fp) + sw $t1 -324($fp) + lw $t0 -328($fp) + lw $t1 -324($fp) seq $t0 $t0 $t1 - sw $t0 -296($fp) - j label_172 - label_170: - lw $t0 -404($fp) + sw $t0 -300($fp) + j label_224 + label_222: + lw $t0 -408($fp) lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -288($fp) + sw $t1 -328($fp) + lw $t0 -292($fp) lw $t1 12($t0) - sw $t1 -320($fp) - lw $t0 -324($fp) + sw $t1 -324($fp) + lw $t0 -328($fp) move $a0 $t0 - lw $t0 -320($fp) + lw $t0 -324($fp) move $a1 $t0 jal equal_str - sw $v0 -296($fp) - j label_172 - label_171: - lw $t0 -404($fp) + sw $v0 -300($fp) + j label_224 + label_223: + lw $t0 -408($fp) lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -288($fp) + sw $t1 -328($fp) + lw $t0 -292($fp) lw $t1 12($t0) - sw $t1 -320($fp) - lw $t0 -324($fp) - lw $t1 -320($fp) + sw $t1 -324($fp) + lw $t0 -328($fp) + lw $t1 -324($fp) seq $t0 $t0 $t1 - sw $t0 -296($fp) - j label_172 - label_172: - lw $t0 -296($fp) + sw $t0 -300($fp) + j label_224 + label_224: + lw $t0 -300($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -328($fp) - lw $t0 -328($fp) - lw $t1 12($t0) - sw $t1 -332($fp) + sw $v0 -332($fp) lw $t0 -332($fp) - bne $t0 $zero label_181 - lw $t0 -452($fp) lw $t1 12($t0) - sw $t1 -264($fp) + sw $t1 -336($fp) + lw $t0 -336($fp) + bne $t0 $zero label_235 + lw $t0 -456($fp) + lw $t1 12($t0) + sw $t1 -268($fp) li $t0 10 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -252($fp) - lw $t0 -252($fp) + sw $v0 -256($fp) + lw $t0 -256($fp) lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 -264($fp) - lw $t1 -260($fp) + sw $t1 -264($fp) + lw $t0 -268($fp) + lw $t1 -264($fp) mul $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) + sw $t0 -260($fp) + lw $t0 -260($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -268($fp) - lw $t0 -268($fp) + sw $v0 -272($fp) + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -280($fp) + sw $t1 -284($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -244($fp) + sw $v0 -252($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -240($fp) - lw $t0 -240($fp) - bne $t0 $zero label_173 - j label_174 - label_173: + sw $t0 -248($fp) + lw $t0 -248($fp) + bne $t0 $zero label_225 + j label_226 + label_225: li $v0 4 - la $a0 data_72 + la $a0 data_98 syscall li $v0 10 syscall - label_174: + label_226: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -432($fp) + lw $t0 -436($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -244($fp) + lw $t0 -252($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -5885,11 +6305,25 @@ function_a2i_aux_at_Parse: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -236($fp) + sw $v0 -244($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -240($fp) + lw $t0 -240($fp) + bne $t0 $zero label_227 + j label_228 + label_227: + li $v0 4 + la $a0 data_99 + syscall + li $v0 10 + syscall + label_228: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -236($fp) + lw $t0 -244($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -5901,23 +6335,23 @@ function_a2i_aux_at_Parse: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -248($fp) - lw $t0 -248($fp) + sw $v0 -236($fp) + lw $t0 -236($fp) lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -280($fp) - lw $t1 -276($fp) + sw $t1 -280($fp) + lw $t0 -284($fp) + lw $t1 -280($fp) add $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) + sw $t0 -276($fp) + lw $t0 -276($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -284($fp) - lw $t0 -284($fp) - sw $t0 -452($fp) - lw $t0 -432($fp) + sw $v0 -288($fp) + lw $t0 -288($fp) + sw $t0 -456($fp) + lw $t0 -436($fp) lw $t1 12($t0) sw $t1 -228($fp) li $t0 1 @@ -5940,8 +6374,8 @@ function_a2i_aux_at_Parse: addi $sp $sp 4 sw $v0 -232($fp) lw $t0 -232($fp) - sw $t0 -432($fp) - lw $t0 -432($fp) + sw $t0 -436($fp) + lw $t0 -436($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -5965,41 +6399,41 @@ function_a2i_aux_at_Parse: seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) - bne $t0 $zero label_175 + bne $t0 $zero label_229 lw $t0 -192($fp) lw $t1 -184($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) - bne $t0 $zero label_176 + bne $t0 $zero label_230 lw $t0 -192($fp) lw $t1 -180($fp) seq $t0 $t0 $t1 sw $t0 -176($fp) lw $t0 -176($fp) - bne $t0 $zero label_177 - lw $t0 -432($fp) - lw $t1 -444($fp) + bne $t0 $zero label_231 + lw $t0 -436($fp) + lw $t1 -448($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) - j label_178 - label_175: - lw $t0 -432($fp) + j label_232 + label_229: + lw $t0 -436($fp) lw $t1 12($t0) sw $t1 -200($fp) - lw $t0 -444($fp) + lw $t0 -448($fp) lw $t1 12($t0) sw $t1 -196($fp) lw $t0 -200($fp) lw $t1 -196($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) - j label_178 - label_176: - lw $t0 -432($fp) + j label_232 + label_230: + lw $t0 -436($fp) lw $t1 12($t0) sw $t1 -200($fp) - lw $t0 -444($fp) + lw $t0 -448($fp) lw $t1 12($t0) sw $t1 -196($fp) lw $t0 -200($fp) @@ -6008,20 +6442,20 @@ function_a2i_aux_at_Parse: move $a1 $t0 jal equal_str sw $v0 -172($fp) - j label_178 - label_177: - lw $t0 -432($fp) + j label_232 + label_231: + lw $t0 -436($fp) lw $t1 12($t0) sw $t1 -200($fp) - lw $t0 -444($fp) + lw $t0 -448($fp) lw $t1 12($t0) sw $t1 -196($fp) lw $t0 -200($fp) lw $t1 -196($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) - j label_178 - label_178: + j label_232 + label_232: lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6032,8 +6466,8 @@ function_a2i_aux_at_Parse: lw $t1 12($t0) sw $t1 -208($fp) lw $t0 -208($fp) - bne $t0 $zero label_179 - la $t0 data_73 + bne $t0 $zero label_233 + la $t0 data_100 sw $t0 -168($fp) lw $t0 -168($fp) addi $sp $sp -4 @@ -6043,9 +6477,9 @@ function_a2i_aux_at_Parse: sw $v0 -164($fp) lw $t0 -164($fp) sw $t0 -212($fp) - j label_180 - label_179: - la $t0 data_74 + j label_234 + label_233: + la $t0 data_101 sw $t0 -160($fp) lw $t0 -160($fp) addi $sp $sp -4 @@ -6064,12 +6498,12 @@ function_a2i_aux_at_Parse: lw $t0 0($sp) addi $sp $sp 4 sw $t0 -212($fp) - label_180: + label_234: lw $t0 -212($fp) - sw $t0 -336($fp) - j label_186 - label_181: - lw $t0 -432($fp) + sw $t0 -340($fp) + j label_240 + label_235: + lw $t0 -436($fp) lw $t1 12($t0) sw $t1 -148($fp) li $t0 1 @@ -6096,15 +6530,15 @@ function_a2i_aux_at_Parse: seq $t0 $t0 $t1 sw $t0 -100($fp) lw $t0 -100($fp) - bne $t0 $zero label_182 - j label_183 - label_182: + bne $t0 $zero label_236 + j label_237 + label_236: li $v0 4 - la $a0 data_75 + la $a0 data_102 syscall li $v0 10 syscall - label_183: + label_237: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6121,7 +6555,7 @@ function_a2i_aux_at_Parse: lw $t0 -96($fp) lw $t1 12($t0) sw $t1 -112($fp) - lw $t0 -432($fp) + lw $t0 -436($fp) lw $t1 12($t0) sw $t1 -108($fp) lw $t0 -112($fp) @@ -6161,15 +6595,15 @@ function_a2i_aux_at_Parse: seq $t0 $t0 $t1 sw $t0 -88($fp) lw $t0 -88($fp) - bne $t0 $zero label_184 - j label_185 - label_184: + bne $t0 $zero label_238 + j label_239 + label_238: li $v0 4 - la $a0 data_76 + la $a0 data_103 syscall li $v0 10 syscall - label_185: + label_239: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6193,16 +6627,16 @@ function_a2i_aux_at_Parse: lw $t1 4($fp) addi $t1 $t1 16 sw $t0 0($t1) - lw $t0 -444($fp) - sw $t0 -432($fp) - lw $t0 -432($fp) - sw $t0 -336($fp) - label_186: - lw $t0 -336($fp) - sw $t0 -388($fp) - j label_192 - label_187: - lw $t0 -432($fp) + lw $t0 -448($fp) + sw $t0 -436($fp) + lw $t0 -436($fp) + sw $t0 -340($fp) + label_240: + lw $t0 -340($fp) + sw $t0 -392($fp) + j label_246 + label_241: + lw $t0 -436($fp) lw $t1 12($t0) sw $t1 -76($fp) li $t0 1 @@ -6229,15 +6663,15 @@ function_a2i_aux_at_Parse: seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_188 - j label_189 - label_188: + bne $t0 $zero label_242 + j label_243 + label_242: li $v0 4 - la $a0 data_77 + la $a0 data_104 syscall li $v0 10 syscall - label_189: + label_243: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6254,7 +6688,7 @@ function_a2i_aux_at_Parse: lw $t0 -24($fp) lw $t1 12($t0) sw $t1 -40($fp) - lw $t0 -432($fp) + lw $t0 -436($fp) lw $t1 12($t0) sw $t1 -36($fp) lw $t0 -40($fp) @@ -6294,15 +6728,15 @@ function_a2i_aux_at_Parse: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_190 - j label_191 - label_190: + bne $t0 $zero label_244 + j label_245 + label_244: li $v0 4 - la $a0 data_78 + la $a0 data_105 syscall li $v0 10 syscall - label_191: + label_245: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6326,15 +6760,15 @@ function_a2i_aux_at_Parse: lw $t1 4($fp) addi $t1 $t1 16 sw $t0 0($t1) - lw $t0 -444($fp) - sw $t0 -432($fp) - lw $t0 -432($fp) - sw $t0 -388($fp) - label_192: - j label_161 - label_193: - lw $v0 -452($fp) - addi $sp $sp 452 + lw $t0 -448($fp) + sw $t0 -436($fp) + lw $t0 -436($fp) + sw $t0 -392($fp) + label_246: + j label_213 + label_247: + lw $v0 -456($fp) + addi $sp $sp 456 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -6381,13 +6815,27 @@ __init_attr_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -24 + addi $sp $sp -28 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_attr_at_Parse addi $sp $sp 4 - sw $v0 -20($fp) + sw $v0 -24($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_248 + j label_249 + label_248: + li $v0 4 + la $a0 data_106 + syscall + li $v0 10 + syscall + label_249: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6402,12 +6850,12 @@ __init_attr_at_Main: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -16($fp) + sw $t0 -20($fp) lw $t0 0($fp) - lw $t1 -16($fp) + lw $t1 -20($fp) sw $t1 20($t0) lw $v0 0($fp) - addi $sp $sp 24 + addi $sp $sp 28 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -6431,15 +6879,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_194 - j label_195 - label_194: + bne $t0 $zero label_250 + j label_251 + label_250: li $v0 4 - la $a0 data_79 + la $a0 data_107 syscall li $v0 10 syscall - label_195: + label_251: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -6473,15 +6921,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_196 - j label_197 - label_196: + bne $t0 $zero label_252 + j label_253 + label_252: li $v0 4 - la $a0 data_80 + la $a0 data_108 syscall li $v0 10 syscall - label_197: + label_253: lw $t4 0($fp) lw $t4 20($t4) addi $sp $sp -4 @@ -6573,7 +7021,7 @@ function_and_at_BoolOp: lw $t1 12($t0) sw $t1 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_198 + bne $t0 $zero label_254 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -6582,11 +7030,11 @@ function_and_at_BoolOp: sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -20($fp) - j label_199 - label_198: + j label_255 + label_254: lw $t0 0($fp) sw $t0 -20($fp) - label_199: + label_255: lw $v0 -20($fp) addi $sp $sp 12 lw $fp 0($sp) @@ -6606,11 +7054,11 @@ function_or_at_BoolOp: lw $t1 12($t0) sw $t1 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_200 + bne $t0 $zero label_256 lw $t0 0($fp) sw $t0 -20($fp) - j label_201 - label_200: + j label_257 + label_256: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) @@ -6619,7 +7067,7 @@ function_or_at_BoolOp: sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -20($fp) - label_201: + label_257: lw $v0 -20($fp) addi $sp $sp 12 lw $fp 0($sp) diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index 066937ad8..722b83cb3 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -38,21 +38,37 @@ data_17: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_18: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_19: .asciiz "RuntimeError: void in switch case" +data_19: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_20: .asciiz "RuntimeError: Case statement without a match branch" +data_20: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_21: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_22: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" +data_23: .asciiz "RuntimeError: void in switch case" .word 0 -data_24: .asciiz "RuntimeError: void in switch case" +data_24: .asciiz "RuntimeError: Case statement without a match branch" .word 0 -data_25: .asciiz "RuntimeError: Case statement without a match branch" +data_25: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_26: .asciiz "do nothing" +data_26: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_27: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_28: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_29: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_30: .asciiz "RuntimeError: void in switch case" +.word 0 +data_31: .asciiz "RuntimeError: Case statement without a match branch" +.word 0 +data_32: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_33: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_34: .asciiz "do nothing" types_table: @@ -773,25 +789,25 @@ __init_attr_at_Foo: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -144 + addi $sp $sp -152 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_attr_at_Bazz addi $sp $sp 4 - sw $v0 -132($fp) + sw $v0 -140($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -120($fp) + sw $t1 -128($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) + sw $t0 -120($fp) + lw $t0 -120($fp) bne $t0 $zero label_3 j label_4 label_3: @@ -804,32 +820,32 @@ __init_attr_at_Foo: la $t0 types_table addi $t0 $t0 24 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) bne $t0 $zero label_5 la $t0 types_table addi $t0 $t0 28 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) bne $t0 $zero label_6 la $t0 types_table addi $t0 $t0 20 lw $t0 0($t0) - sw $t0 -108($fp) - lw $t0 -108($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 sw $t0 -116($fp) lw $t0 -116($fp) + lw $t1 -128($fp) + seq $t0 $t0 $t1 + sw $t0 -124($fp) + lw $t0 -124($fp) bne $t0 $zero label_7 li $v0 4 la $a0 data_16 @@ -838,31 +854,31 @@ __init_attr_at_Foo: syscall label_5: lw $t0 0($fp) - sw $t0 -104($fp) - lw $t0 -104($fp) - sw $t0 -124($fp) + sw $t0 -112($fp) + lw $t0 -112($fp) + sw $t0 -132($fp) j label_8 label_6: lw $t0 0($fp) - sw $t0 -100($fp) + sw $t0 -108($fp) jal __init_at_Bar - sw $v0 -96($fp) - lw $t0 -96($fp) - sw $t0 -124($fp) + sw $v0 -104($fp) + lw $t0 -104($fp) + sw $t0 -132($fp) j label_8 label_7: lw $t0 0($fp) - sw $t0 -92($fp) + sw $t0 -100($fp) jal __init_at_Razz - sw $v0 -88($fp) - lw $t0 -88($fp) - sw $t0 -124($fp) + sw $v0 -96($fp) + lw $t0 -96($fp) + sw $t0 -132($fp) j label_8 label_8: - lw $t0 -124($fp) - sw $t0 -128($fp) + lw $t0 -132($fp) + sw $t0 -136($fp) lw $t0 0($fp) - lw $t1 -128($fp) + lw $t1 -136($fp) sw $t1 24($t0) lw $t4 0($fp) lw $t4 24($t4) @@ -872,8 +888,8 @@ __init_attr_at_Foo: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) + sw $t0 -40($fp) + lw $t0 -40($fp) bne $t0 $zero label_9 j label_10 label_9: @@ -905,10 +921,10 @@ __init_attr_at_Foo: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -44($fp) + sw $t1 -52($fp) lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -917,8 +933,8 @@ __init_attr_at_Foo: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) + sw $t0 -32($fp) + lw $t0 -32($fp) bne $t0 $zero label_11 j label_12 label_11: @@ -950,23 +966,37 @@ __init_attr_at_Foo: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) add $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) + sw $t0 -44($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) + sw $v0 -56($fp) + lw $t0 -56($fp) lw $t1 12($t0) - sw $t1 -60($fp) + sw $t1 -68($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_14: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -979,23 +1009,37 @@ __init_attr_at_Foo: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) + sw $v0 -20($fp) + lw $t0 -20($fp) lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) + sw $t1 -64($fp) + lw $t0 -68($fp) + lw $t1 -64($fp) add $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) + sw $t0 -60($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) + sw $v0 -72($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -76($fp) + sw $t1 -84($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_16: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1011,24 +1055,24 @@ __init_attr_at_Foo: sw $v0 -12($fp) lw $t0 -12($fp) lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) + sw $t1 -80($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) add $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -84($fp) + sw $v0 -88($fp) + lw $t0 -88($fp) + sw $t0 -92($fp) lw $t0 0($fp) - lw $t1 -84($fp) + lw $t1 -92($fp) sw $t1 28($t0) lw $v0 0($fp) - addi $sp $sp 144 + addi $sp $sp 152 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1128,13 +1172,27 @@ __init_attr_at_Bar: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -56 + addi $sp $sp -64 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_attr_at_Razz addi $sp $sp 4 - sw $v0 -28($fp) + sw $v0 -36($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -28($fp) + lw $t0 -28($fp) + bne $t0 $zero label_17 + j label_18 + label_17: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_18: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1147,13 +1205,27 @@ __init_attr_at_Bar: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -24($fp) + sw $v0 -24($fp) + lw $t0 -24($fp) + sw $t0 -32($fp) lw $t0 0($fp) - lw $t1 -24($fp) + lw $t1 -32($fp) sw $t1 40($t0) lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_19 + j label_20 + label_19: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_20: + lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1167,12 +1239,12 @@ __init_attr_at_Bar: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -16($fp) + sw $t0 -20($fp) lw $t0 0($fp) - lw $t1 -16($fp) + lw $t1 -20($fp) sw $t1 44($t0) lw $v0 0($fp) - addi $sp $sp 56 + addi $sp $sp 64 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1219,78 +1291,78 @@ __init_attr_at_Razz: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -168 + addi $sp $sp -176 lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_attr_at_Foo addi $sp $sp 4 - sw $v0 -148($fp) + sw $v0 -156($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -136($fp) + sw $t1 -144($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_13 - j label_14 - label_13: + sw $t0 -136($fp) + lw $t0 -136($fp) + bne $t0 $zero label_21 + j label_22 + label_21: li $v0 4 - la $a0 data_19 + la $a0 data_23 syscall li $v0 10 syscall - label_14: + label_22: la $t0 types_table addi $t0 $t0 24 lw $t0 0($t0) - sw $t0 -124($fp) - lw $t0 -124($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 sw $t0 -132($fp) lw $t0 -132($fp) - bne $t0 $zero label_15 + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_23 la $t0 types_table addi $t0 $t0 28 lw $t0 0($t0) - sw $t0 -124($fp) - lw $t0 -124($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 sw $t0 -132($fp) lw $t0 -132($fp) - bne $t0 $zero label_16 + lw $t1 -144($fp) + seq $t0 $t0 $t1 + sw $t0 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_24 li $v0 4 - la $a0 data_20 + la $a0 data_24 syscall li $v0 10 syscall - label_15: + label_23: lw $t0 0($fp) - sw $t0 -120($fp) - lw $t0 -120($fp) - sw $t0 -140($fp) - j label_17 - label_16: + sw $t0 -128($fp) + lw $t0 -128($fp) + sw $t0 -148($fp) + j label_25 + label_24: lw $t0 0($fp) - sw $t0 -116($fp) + sw $t0 -124($fp) jal __init_at_Bar - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -140($fp) - j label_17 - label_17: - lw $t0 -140($fp) - sw $t0 -144($fp) + sw $v0 -120($fp) + lw $t0 -120($fp) + sw $t0 -148($fp) + j label_25 + label_25: + lw $t0 -148($fp) + sw $t0 -152($fp) lw $t0 0($fp) - lw $t1 -144($fp) + lw $t1 -152($fp) sw $t1 32($t0) lw $t4 0($fp) lw $t4 24($t4) @@ -1300,17 +1372,17 @@ __init_attr_at_Razz: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_18 - j label_19 - label_18: + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_26 + j label_27 + label_26: li $v0 4 - la $a0 data_21 + la $a0 data_25 syscall li $v0 10 syscall - label_19: + label_27: lw $t4 0($fp) lw $t4 24($t4) addi $sp $sp -4 @@ -1321,10 +1393,10 @@ __init_attr_at_Razz: sw $t0 0($sp) jal function_doh_at_Bazz addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) + sw $v0 -44($fp) + lw $t0 -44($fp) lw $t1 12($t0) - sw $t1 -52($fp) + sw $t1 -60($fp) lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1333,17 +1405,17 @@ __init_attr_at_Razz: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_20 - j label_21 - label_20: + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_28 + j label_29 + label_28: li $v0 4 - la $a0 data_22 + la $a0 data_26 syscall li $v0 10 syscall - label_21: + label_29: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1366,23 +1438,23 @@ __init_attr_at_Razz: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) add $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) + sw $t0 -52($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) + sw $v0 -64($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -68($fp) + sw $t1 -76($fp) lw $t4 0($fp) lw $t4 32($t4) addi $sp $sp -4 @@ -1391,17 +1463,17 @@ __init_attr_at_Razz: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_22 - j label_23 - label_22: + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_30 + j label_31 + label_30: li $v0 4 - la $a0 data_23 + la $a0 data_27 syscall li $v0 10 syscall - label_23: + label_31: lw $t4 0($fp) lw $t4 32($t4) addi $sp $sp -4 @@ -1424,23 +1496,37 @@ __init_attr_at_Razz: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) + sw $t1 -72($fp) + lw $t0 -76($fp) + lw $t1 -72($fp) add $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) + sw $t0 -68($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) + sw $v0 -80($fp) + lw $t0 -80($fp) lw $t1 12($t0) - sw $t1 -84($fp) + sw $t1 -92($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_32 + j label_33 + label_32: + li $v0 4 + la $a0 data_28 + syscall + li $v0 10 + syscall + label_33: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1453,23 +1539,37 @@ __init_attr_at_Razz: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) + sw $v0 -20($fp) + lw $t0 -20($fp) lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) + sw $t1 -88($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) add $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) + sw $t0 -84($fp) + lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) + sw $v0 -96($fp) + lw $t0 -96($fp) lw $t1 12($t0) - sw $t1 -100($fp) + sw $t1 -108($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_34 + j label_35 + label_34: + li $v0 4 + la $a0 data_29 + syscall + li $v0 10 + syscall + label_35: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1485,24 +1585,24 @@ __init_attr_at_Razz: sw $v0 -12($fp) lw $t0 -12($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) + sw $t1 -104($fp) + lw $t0 -108($fp) + lw $t1 -104($fp) add $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) + sw $t0 -100($fp) + lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - sw $t0 -108($fp) + sw $v0 -112($fp) + lw $t0 -112($fp) + sw $t0 -116($fp) lw $t0 0($fp) - lw $t1 -108($fp) + lw $t1 -116($fp) sw $t1 36($t0) lw $v0 0($fp) - addi $sp $sp 168 + addi $sp $sp 176 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1549,17 +1649,17 @@ __init_attr_at_Bazz: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -80 + addi $sp $sp -84 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -76($fp) + sw $v0 -76($fp) + lw $t0 -76($fp) + sw $t0 -80($fp) lw $t0 0($fp) - lw $t1 -76($fp) + lw $t1 -80($fp) sw $t1 16($t0) lw $t0 0($fp) lw $t1 0($t0) @@ -1567,103 +1667,117 @@ __init_attr_at_Bazz: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -60($fp) + sw $t1 -64($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_24 - j label_25 - label_24: + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_36 + j label_37 + label_36: li $v0 4 - la $a0 data_24 + la $a0 data_30 syscall li $v0 10 syscall - label_25: + label_37: la $t0 types_table addi $t0 $t0 24 lw $t0 0($t0) - sw $t0 -48($fp) - lw $t0 -48($fp) - lw $t1 -60($fp) + sw $t0 -52($fp) + lw $t0 -52($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_26 + sw $t0 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_38 la $t0 types_table addi $t0 $t0 28 lw $t0 0($t0) - sw $t0 -48($fp) - lw $t0 -48($fp) - lw $t1 -60($fp) + sw $t0 -52($fp) + lw $t0 -52($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_27 + sw $t0 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_39 la $t0 types_table addi $t0 $t0 20 lw $t0 0($t0) - sw $t0 -48($fp) - lw $t0 -48($fp) - lw $t1 -60($fp) + sw $t0 -52($fp) + lw $t0 -52($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_28 + sw $t0 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_40 la $t0 types_table addi $t0 $t0 32 lw $t0 0($t0) - sw $t0 -48($fp) - lw $t0 -48($fp) - lw $t1 -60($fp) + sw $t0 -52($fp) + lw $t0 -52($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_29 + sw $t0 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_41 li $v0 4 - la $a0 data_25 + la $a0 data_31 syscall li $v0 10 syscall - label_26: + label_38: lw $t0 0($fp) - sw $t0 -44($fp) - lw $t0 -44($fp) - sw $t0 -64($fp) - j label_30 - label_27: + sw $t0 -48($fp) + lw $t0 -48($fp) + sw $t0 -68($fp) + j label_42 + label_39: lw $t0 0($fp) - sw $t0 -40($fp) + sw $t0 -44($fp) jal __init_at_Bar - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -64($fp) - j label_30 - label_28: + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -68($fp) + j label_42 + label_40: lw $t0 0($fp) - sw $t0 -32($fp) + sw $t0 -36($fp) jal __init_at_Razz - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -64($fp) - j label_30 - label_29: + sw $v0 -32($fp) + lw $t0 -32($fp) + sw $t0 -68($fp) + j label_42 + label_41: lw $t0 0($fp) - sw $t0 -24($fp) + sw $t0 -28($fp) jal __init_at_Foo - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -64($fp) - j label_30 - label_30: - lw $t0 -64($fp) + sw $v0 -24($fp) + lw $t0 -24($fp) sw $t0 -68($fp) + j label_42 + label_42: + lw $t0 -68($fp) + sw $t0 -72($fp) lw $t0 0($fp) - lw $t1 -68($fp) + lw $t1 -72($fp) sw $t1 12($t0) lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_43 + j label_44 + label_43: + li $v0 4 + la $a0 data_32 + syscall + li $v0 10 + syscall + label_44: + lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1677,12 +1791,12 @@ __init_attr_at_Bazz: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -16($fp) + sw $t0 -20($fp) lw $t0 0($fp) - lw $t1 -16($fp) + lw $t1 -20($fp) sw $t1 20($t0) lw $v0 0($fp) - addi $sp $sp 80 + addi $sp $sp 84 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1695,7 +1809,21 @@ function_printh_at_Bazz: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -20 + addi $sp $sp -24 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_45 + j label_46 + label_45: + li $v0 4 + la $a0 data_33 + syscall + li $v0 10 + syscall + label_46: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1724,7 +1852,7 @@ function_printh_at_Bazz: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 20 + addi $sp $sp 24 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1868,7 +1996,7 @@ function_main_at_Main: sw $fp 0($sp) addi $fp $sp 8 addi $sp $sp -24 - la $t0 data_26 + la $t0 data_34 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index ad702988a..e54f8ffc9 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -23,6 +23,8 @@ data_9: .asciiz "Abort called from class " data_10: .asciiz "Substring out of range" .word 0 data_11: .asciiz "Hello, World.\n" +.word 0 +data_12: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -646,19 +648,33 @@ function_main_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -12 + addi $sp $sp -16 la $t0 data_11 - sw $t0 -16($fp) - lw $t0 -16($fp) + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_12 + syscall + li $v0 10 + syscall + label_4: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -670,9 +686,9 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $v0 -20($fp) - addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index d110fa260..477159a11 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -40,9 +40,9 @@ data_18: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_19: .asciiz "C: Hello world\n" .word 0 -data_20: .asciiz "D: Hello world\n" +data_20: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" +data_21: .asciiz "D: Hello world\n" .word 0 data_22: .asciiz "RuntimeError: Function call in a void instance" .word 0 @@ -50,7 +50,13 @@ data_23: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_24: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_25: .asciiz "Done.\n" +data_25: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_26: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_27: .asciiz "Done.\n" +.word 0 +data_28: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -1001,19 +1007,33 @@ function_out_c_at_C: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -12 + addi $sp $sp -16 la $t0 data_19 - sw $t0 -16($fp) - lw $t0 -16($fp) + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_8: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1025,9 +1045,9 @@ function_out_c_at_C: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $v0 -20($fp) - addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1095,19 +1115,33 @@ function_out_d_at_D: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -12 - la $t0 data_20 - sw $t0 -16($fp) - lw $t0 -16($fp) + addi $sp $sp -16 + la $t0 data_21 + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_10: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1119,9 +1153,9 @@ function_out_d_at_D: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $v0 -20($fp) - addi $sp $sp 12 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 16 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1183,27 +1217,27 @@ function_main_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -60 + addi $sp $sp -64 jal __init_at_A - sw $v0 -68($fp) - lw $t0 -68($fp) + sw $v0 -72($fp) + lw $t0 -72($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_7 - j label_8 - label_7: + sw $t0 -68($fp) + lw $t0 -68($fp) + bne $t0 $zero label_11 + j label_12 + label_11: li $v0 4 - la $a0 data_21 + la $a0 data_23 syscall li $v0 10 syscall - label_8: - lw $t0 -68($fp) + label_12: + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -68($fp) + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1212,27 +1246,27 @@ function_main_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -60($fp) + sw $v0 -64($fp) jal __init_at_B - sw $v0 -56($fp) - lw $t0 -56($fp) + sw $v0 -60($fp) + lw $t0 -60($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_9 - j label_10 - label_9: + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_13 + j label_14 + label_13: li $v0 4 - la $a0 data_22 + la $a0 data_24 syscall li $v0 10 syscall - label_10: - lw $t0 -56($fp) + label_14: + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -56($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1241,27 +1275,27 @@ function_main_at_Main: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -48($fp) + sw $v0 -52($fp) jal __init_at_C - sw $v0 -44($fp) - lw $t0 -44($fp) + sw $v0 -48($fp) + lw $t0 -48($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_11 - j label_12 - label_11: + sw $t0 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_15 + j label_16 + label_15: li $v0 4 - la $a0 data_23 + la $a0 data_25 syscall li $v0 10 syscall - label_12: - lw $t0 -44($fp) + label_16: + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -44($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1270,27 +1304,27 @@ function_main_at_Main: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -36($fp) + sw $v0 -40($fp) jal __init_at_D - sw $v0 -32($fp) - lw $t0 -32($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_13 - j label_14 - label_13: + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_17 + j label_18 + label_17: li $v0 4 - la $a0 data_24 + la $a0 data_26 syscall li $v0 10 syscall - label_14: - lw $t0 -32($fp) + label_18: + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1299,19 +1333,33 @@ function_main_at_Main: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -24($fp) - la $t0 data_25 - sw $t0 -16($fp) - lw $t0 -16($fp) + sw $v0 -28($fp) + la $t0 data_27 + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_19 + j label_20 + label_19: + li $v0 4 + la $a0 data_28 + syscall + li $v0 10 + syscall + label_20: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1323,9 +1371,9 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $v0 -20($fp) - addi $sp $sp 60 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 64 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index dc02cd957..828bcd748 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -28,205 +28,335 @@ data_12: .asciiz "Substring out of range" .word 0 data_13: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_14: .asciiz "\n" +data_14: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_15: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_16: .asciiz "\n" .word 0 -data_17: .asciiz "\n" +data_17: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_18: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_19: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_20: .asciiz " " +data_20: .asciiz "\n" .word 0 -data_21: .asciiz " " +data_21: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_22: .asciiz " " +data_22: .asciiz "\n" .word 0 -data_23: .asciiz "RuntimeError: Division by zero" +data_23: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_24: .asciiz " " +data_24: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_25: .asciiz "RuntimeError: Division by zero" +data_25: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_26: .asciiz " " .word 0 -data_27: .asciiz " " +data_27: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_28: .asciiz "RuntimeError: Division by zero" +data_28: .asciiz " " .word 0 -data_29: .asciiz " " +data_29: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_30: .asciiz " " .word 0 data_31: .asciiz "RuntimeError: Division by zero" .word 0 -data_32: .asciiz " " +data_32: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_33: .asciiz " " .word 0 data_34: .asciiz "RuntimeError: Division by zero" .word 0 -data_35: .asciiz " " +data_35: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_36: .asciiz " " .word 0 -data_37: .asciiz "RuntimeError: Division by zero" +data_37: .asciiz " " .word 0 -data_38: .asciiz " " +data_38: .asciiz "RuntimeError: Division by zero" .word 0 -data_39: .asciiz " " +data_39: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_40: .asciiz "X" +data_40: .asciiz " " .word 0 -data_41: .asciiz "X" +data_41: .asciiz " " .word 0 -data_42: .asciiz "X" +data_42: .asciiz "RuntimeError: Division by zero" .word 0 -data_43: .asciiz "X" +data_43: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_44: .asciiz "X" +data_44: .asciiz " " .word 0 -data_45: .asciiz "X" +data_45: .asciiz " " .word 0 -data_46: .asciiz "X" +data_46: .asciiz "RuntimeError: Division by zero" .word 0 -data_47: .asciiz "X" +data_47: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_48: .asciiz "-" +data_48: .asciiz " " .word 0 -data_49: .asciiz "X" +data_49: .asciiz " " .word 0 -data_50: .asciiz "-" +data_50: .asciiz "RuntimeError: Division by zero" .word 0 -data_51: .asciiz "X" +data_51: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_52: .asciiz "X" +data_52: .asciiz " " .word 0 -data_53: .asciiz "RuntimeError: Function call in a void instance" +data_53: .asciiz " " .word 0 -data_54: .asciiz "\nPlease chose a number:\n" +data_54: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_55: .asciiz "\t1: A cross\n" +data_55: .asciiz "X" .word 0 -data_56: .asciiz "\t2: A slash from the upper left to lower right\n" +data_56: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_57: .asciiz "\t3: A slash from the upper right to lower left\n" +data_57: .asciiz "X" .word 0 -data_58: .asciiz "\t4: An X\n" +data_58: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_59: .asciiz "\t5: A greater than sign \n" +data_59: .asciiz "X" .word 0 -data_60: .asciiz "\t6: A less than sign\n" +data_60: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_61: .asciiz "\t7: Two greater than signs\n" +data_61: .asciiz "X" .word 0 -data_62: .asciiz "\t8: Two less than signs\n" +data_62: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_63: .asciiz "\t9: A 'V'\n" +data_63: .asciiz "X" .word 0 -data_64: .asciiz "\t10: An inverse 'V'\n" +data_64: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_65: .asciiz "\t11: Numbers 9 and 10 combined\n" +data_65: .asciiz "X" .word 0 -data_66: .asciiz "\t12: A full grid\n" +data_66: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_67: .asciiz "\t13: A 'T'\n" +data_67: .asciiz "X" .word 0 -data_68: .asciiz "\t14: A plus '+'\n" +data_68: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_69: .asciiz "\t15: A 'W'\n" +data_69: .asciiz "X" .word 0 -data_70: .asciiz "\t16: An 'M'\n" +data_70: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_71: .asciiz "\t17: An 'E'\n" +data_71: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_72: .asciiz "\t18: A '3'\n" +data_72: .asciiz "-" .word 0 -data_73: .asciiz "\t19: An 'O'\n" +data_73: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_74: .asciiz "\t20: An '8'\n" +data_74: .asciiz "X" .word 0 -data_75: .asciiz "\t21: An 'S'\n" +data_75: .asciiz "-" .word 0 -data_76: .asciiz "Your choice => " +data_76: .asciiz "X" .word 0 -data_77: .asciiz "\n" +data_77: .asciiz "X" .word 0 -data_78: .asciiz " " +data_78: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_79: .asciiz " XXXX X XX X XXXX " +data_79: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_80: .asciiz " XX X XX X XX X XX X XX " +data_80: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_81: .asciiz " XX X XX X XX " +data_81: .asciiz "\nPlease chose a number:\n" .word 0 -data_82: .asciiz "XXX X X X X XXXX " +data_82: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_83: .asciiz "XXXXX X XXXXX X XXXX" +data_83: .asciiz "\t1: A cross\n" .word 0 -data_84: .asciiz " X X X X X X X" +data_84: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_85: .asciiz "X X X X X X X " +data_85: .asciiz "\t2: A slash from the upper left to lower right\n" .word 0 -data_86: .asciiz " X X XXXXX X X " +data_86: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_87: .asciiz "XXXXX X X X X " +data_87: .asciiz "\t3: A slash from the upper right to lower left\n" .word 0 -data_88: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" +data_88: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_89: .asciiz "X X X X X X X X" +data_89: .asciiz "\t4: An X\n" .word 0 -data_90: .asciiz " X X X X X" +data_90: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_91: .asciiz "X X X X X " +data_91: .asciiz "\t5: A greater than sign \n" .word 0 -data_92: .asciiz " X XX X X X " +data_92: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_93: .asciiz "X X X XX X " +data_93: .asciiz "\t6: A less than sign\n" .word 0 -data_94: .asciiz " X X X X X" +data_94: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_95: .asciiz "X X X X X " +data_95: .asciiz "\t7: Two greater than signs\n" .word 0 -data_96: .asciiz "X X X X X X X X X" +data_96: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_97: .asciiz "X X X X X" +data_97: .asciiz "\t8: Two less than signs\n" .word 0 -data_98: .asciiz " X X X X X " +data_98: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_99: .asciiz " XX XXXX XXXX XX " +data_99: .asciiz "\t9: A 'V'\n" .word 0 -data_100: .asciiz "Would you like to continue with the next generation? \n" +data_100: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_101: .asciiz "Please use lowercase y or n for your answer [y]: " +data_101: .asciiz "\t10: An inverse 'V'\n" .word 0 -data_102: .asciiz "\n" +data_102: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_103: .asciiz "n" +data_103: .asciiz "\t11: Numbers 9 and 10 combined\n" .word 0 -data_104: .asciiz "\n\n" +data_104: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_105: .asciiz "Would you like to choose a background pattern? \n" +data_105: .asciiz "\t12: A full grid\n" .word 0 -data_106: .asciiz "Please use lowercase y or n for your answer [n]: " +data_106: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_107: .asciiz "y" +data_107: .asciiz "\t13: A 'T'\n" .word 0 -data_108: .asciiz "Welcome to the Game of Life.\n" +data_108: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_109: .asciiz "There are many initial states to choose from. \n" +data_109: .asciiz "\t14: A plus '+'\n" .word 0 data_110: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_111: .asciiz "RuntimeError: Function call in a void instance" +data_111: .asciiz "\t15: A 'W'\n" .word 0 data_112: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_113: .asciiz "RuntimeError: Function call in a void instance" +data_113: .asciiz "\t16: An 'M'\n" +.word 0 +data_114: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_115: .asciiz "\t17: An 'E'\n" +.word 0 +data_116: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_117: .asciiz "\t18: A '3'\n" +.word 0 +data_118: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_119: .asciiz "\t19: An 'O'\n" +.word 0 +data_120: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_121: .asciiz "\t20: An '8'\n" +.word 0 +data_122: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_123: .asciiz "\t21: An 'S'\n" +.word 0 +data_124: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_125: .asciiz "Your choice => " +.word 0 +data_126: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_127: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_128: .asciiz "\n" +.word 0 +data_129: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_130: .asciiz " " +.word 0 +data_131: .asciiz " XXXX X XX X XXXX " +.word 0 +data_132: .asciiz " XX X XX X XX X XX X XX " +.word 0 +data_133: .asciiz " XX X XX X XX " +.word 0 +data_134: .asciiz "XXX X X X X XXXX " +.word 0 +data_135: .asciiz "XXXXX X XXXXX X XXXX" +.word 0 +data_136: .asciiz " X X X X X X X" +.word 0 +data_137: .asciiz "X X X X X X X " +.word 0 +data_138: .asciiz " X X XXXXX X X " +.word 0 +data_139: .asciiz "XXXXX X X X X " +.word 0 +data_140: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" +.word 0 +data_141: .asciiz "X X X X X X X X" +.word 0 +data_142: .asciiz " X X X X X" +.word 0 +data_143: .asciiz "X X X X X " +.word 0 +data_144: .asciiz " X XX X X X " +.word 0 +data_145: .asciiz "X X X XX X " +.word 0 +data_146: .asciiz " X X X X X" +.word 0 +data_147: .asciiz "X X X X X " +.word 0 +data_148: .asciiz "X X X X X X X X X" +.word 0 +data_149: .asciiz "X X X X X" +.word 0 +data_150: .asciiz " X X X X X " +.word 0 +data_151: .asciiz " XX XXXX XXXX XX " +.word 0 +data_152: .asciiz "Would you like to continue with the next generation? \n" +.word 0 +data_153: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_154: .asciiz "Please use lowercase y or n for your answer [y]: " +.word 0 +data_155: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_156: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_157: .asciiz "\n" +.word 0 +data_158: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_159: .asciiz "n" +.word 0 +data_160: .asciiz "\n\n" +.word 0 +data_161: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_162: .asciiz "Would you like to choose a background pattern? \n" +.word 0 +data_163: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_164: .asciiz "Please use lowercase y or n for your answer [n]: " +.word 0 +data_165: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_166: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_167: .asciiz "y" +.word 0 +data_168: .asciiz "Welcome to the Game of Life.\n" +.word 0 +data_169: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_170: .asciiz "There are many initial states to choose from. \n" +.word 0 +data_171: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_172: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_173: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_174: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_175: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_176: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_177: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_178: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -1013,7 +1143,21 @@ function_board_init_at_Board: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -364 + addi $sp $sp -368 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -360($fp) + lw $t0 -360($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_6: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1031,14 +1175,14 @@ function_board_init_at_Board: addi $sp $sp 8 sw $v0 -356($fp) lw $t0 -356($fp) - sw $t0 -360($fp) + sw $t0 -364($fp) li $t0 15 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -308($fp) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -1062,26 +1206,26 @@ function_board_init_at_Board: seq $t0 $t0 $t1 sw $t0 -316($fp) lw $t0 -316($fp) - bne $t0 $zero label_5 + bne $t0 $zero label_7 lw $t0 -332($fp) lw $t1 -324($fp) seq $t0 $t0 $t1 sw $t0 -316($fp) lw $t0 -316($fp) - bne $t0 $zero label_6 + bne $t0 $zero label_8 lw $t0 -332($fp) lw $t1 -320($fp) seq $t0 $t0 $t1 sw $t0 -316($fp) lw $t0 -316($fp) - bne $t0 $zero label_7 - lw $t0 -360($fp) + bne $t0 $zero label_9 + lw $t0 -364($fp) lw $t1 -308($fp) seq $t0 $t0 $t1 sw $t0 -312($fp) - j label_8 - label_5: - lw $t0 -360($fp) + j label_10 + label_7: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -340($fp) lw $t0 -308($fp) @@ -1091,9 +1235,9 @@ function_board_init_at_Board: lw $t1 -336($fp) seq $t0 $t0 $t1 sw $t0 -312($fp) - j label_8 - label_6: - lw $t0 -360($fp) + j label_10 + label_8: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -340($fp) lw $t0 -308($fp) @@ -1105,9 +1249,9 @@ function_board_init_at_Board: move $a1 $t0 jal equal_str sw $v0 -312($fp) - j label_8 - label_7: - lw $t0 -360($fp) + j label_10 + label_9: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -340($fp) lw $t0 -308($fp) @@ -1117,8 +1261,8 @@ function_board_init_at_Board: lw $t1 -336($fp) seq $t0 $t0 $t1 sw $t0 -312($fp) - j label_8 - label_8: + j label_10 + label_10: lw $t0 -312($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1129,14 +1273,14 @@ function_board_init_at_Board: lw $t1 12($t0) sw $t1 -348($fp) lw $t0 -348($fp) - bne $t0 $zero label_39 + bne $t0 $zero label_41 li $t0 16 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -260($fp) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -1160,26 +1304,26 @@ function_board_init_at_Board: seq $t0 $t0 $t1 sw $t0 -268($fp) lw $t0 -268($fp) - bne $t0 $zero label_9 + bne $t0 $zero label_11 lw $t0 -284($fp) lw $t1 -276($fp) seq $t0 $t0 $t1 sw $t0 -268($fp) lw $t0 -268($fp) - bne $t0 $zero label_10 + bne $t0 $zero label_12 lw $t0 -284($fp) lw $t1 -272($fp) seq $t0 $t0 $t1 sw $t0 -268($fp) lw $t0 -268($fp) - bne $t0 $zero label_11 - lw $t0 -360($fp) + bne $t0 $zero label_13 + lw $t0 -364($fp) lw $t1 -260($fp) seq $t0 $t0 $t1 sw $t0 -264($fp) - j label_12 - label_9: - lw $t0 -360($fp) + j label_14 + label_11: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -292($fp) lw $t0 -260($fp) @@ -1189,9 +1333,9 @@ function_board_init_at_Board: lw $t1 -288($fp) seq $t0 $t0 $t1 sw $t0 -264($fp) - j label_12 - label_10: - lw $t0 -360($fp) + j label_14 + label_12: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -292($fp) lw $t0 -260($fp) @@ -1203,9 +1347,9 @@ function_board_init_at_Board: move $a1 $t0 jal equal_str sw $v0 -264($fp) - j label_12 - label_11: - lw $t0 -360($fp) + j label_14 + label_13: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -292($fp) lw $t0 -260($fp) @@ -1215,8 +1359,8 @@ function_board_init_at_Board: lw $t1 -288($fp) seq $t0 $t0 $t1 sw $t0 -264($fp) - j label_12 - label_12: + j label_14 + label_14: lw $t0 -264($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1227,14 +1371,14 @@ function_board_init_at_Board: lw $t1 12($t0) sw $t1 -300($fp) lw $t0 -300($fp) - bne $t0 $zero label_37 + bne $t0 $zero label_39 li $t0 20 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -212($fp) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -1258,26 +1402,26 @@ function_board_init_at_Board: seq $t0 $t0 $t1 sw $t0 -220($fp) lw $t0 -220($fp) - bne $t0 $zero label_13 + bne $t0 $zero label_15 lw $t0 -236($fp) lw $t1 -228($fp) seq $t0 $t0 $t1 sw $t0 -220($fp) lw $t0 -220($fp) - bne $t0 $zero label_14 + bne $t0 $zero label_16 lw $t0 -236($fp) lw $t1 -224($fp) seq $t0 $t0 $t1 sw $t0 -220($fp) lw $t0 -220($fp) - bne $t0 $zero label_15 - lw $t0 -360($fp) + bne $t0 $zero label_17 + lw $t0 -364($fp) lw $t1 -212($fp) seq $t0 $t0 $t1 sw $t0 -216($fp) - j label_16 - label_13: - lw $t0 -360($fp) + j label_18 + label_15: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -244($fp) lw $t0 -212($fp) @@ -1287,9 +1431,9 @@ function_board_init_at_Board: lw $t1 -240($fp) seq $t0 $t0 $t1 sw $t0 -216($fp) - j label_16 - label_14: - lw $t0 -360($fp) + j label_18 + label_16: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -244($fp) lw $t0 -212($fp) @@ -1301,9 +1445,9 @@ function_board_init_at_Board: move $a1 $t0 jal equal_str sw $v0 -216($fp) - j label_16 - label_15: - lw $t0 -360($fp) + j label_18 + label_17: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -244($fp) lw $t0 -212($fp) @@ -1313,8 +1457,8 @@ function_board_init_at_Board: lw $t1 -240($fp) seq $t0 $t0 $t1 sw $t0 -216($fp) - j label_16 - label_16: + j label_18 + label_18: lw $t0 -216($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1325,14 +1469,14 @@ function_board_init_at_Board: lw $t1 12($t0) sw $t1 -252($fp) lw $t0 -252($fp) - bne $t0 $zero label_35 + bne $t0 $zero label_37 li $t0 21 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -164($fp) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -1356,26 +1500,26 @@ function_board_init_at_Board: seq $t0 $t0 $t1 sw $t0 -172($fp) lw $t0 -172($fp) - bne $t0 $zero label_17 + bne $t0 $zero label_19 lw $t0 -188($fp) lw $t1 -180($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) lw $t0 -172($fp) - bne $t0 $zero label_18 + bne $t0 $zero label_20 lw $t0 -188($fp) lw $t1 -176($fp) seq $t0 $t0 $t1 sw $t0 -172($fp) lw $t0 -172($fp) - bne $t0 $zero label_19 - lw $t0 -360($fp) + bne $t0 $zero label_21 + lw $t0 -364($fp) lw $t1 -164($fp) seq $t0 $t0 $t1 sw $t0 -168($fp) - j label_20 - label_17: - lw $t0 -360($fp) + j label_22 + label_19: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -196($fp) lw $t0 -164($fp) @@ -1385,9 +1529,9 @@ function_board_init_at_Board: lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -168($fp) - j label_20 - label_18: - lw $t0 -360($fp) + j label_22 + label_20: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -196($fp) lw $t0 -164($fp) @@ -1399,9 +1543,9 @@ function_board_init_at_Board: move $a1 $t0 jal equal_str sw $v0 -168($fp) - j label_20 - label_19: - lw $t0 -360($fp) + j label_22 + label_21: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -196($fp) lw $t0 -164($fp) @@ -1411,8 +1555,8 @@ function_board_init_at_Board: lw $t1 -192($fp) seq $t0 $t0 $t1 sw $t0 -168($fp) - j label_20 - label_20: + j label_22 + label_22: lw $t0 -168($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1423,14 +1567,14 @@ function_board_init_at_Board: lw $t1 12($t0) sw $t1 -204($fp) lw $t0 -204($fp) - bne $t0 $zero label_33 + bne $t0 $zero label_35 li $t0 25 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -116($fp) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -1454,26 +1598,26 @@ function_board_init_at_Board: seq $t0 $t0 $t1 sw $t0 -124($fp) lw $t0 -124($fp) - bne $t0 $zero label_21 + bne $t0 $zero label_23 lw $t0 -140($fp) lw $t1 -132($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) lw $t0 -124($fp) - bne $t0 $zero label_22 + bne $t0 $zero label_24 lw $t0 -140($fp) lw $t1 -128($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) lw $t0 -124($fp) - bne $t0 $zero label_23 - lw $t0 -360($fp) + bne $t0 $zero label_25 + lw $t0 -364($fp) lw $t1 -116($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) - j label_24 - label_21: - lw $t0 -360($fp) + j label_26 + label_23: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -148($fp) lw $t0 -116($fp) @@ -1483,9 +1627,9 @@ function_board_init_at_Board: lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) - j label_24 - label_22: - lw $t0 -360($fp) + j label_26 + label_24: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -148($fp) lw $t0 -116($fp) @@ -1497,9 +1641,9 @@ function_board_init_at_Board: move $a1 $t0 jal equal_str sw $v0 -120($fp) - j label_24 - label_23: - lw $t0 -360($fp) + j label_26 + label_25: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -148($fp) lw $t0 -116($fp) @@ -1509,8 +1653,8 @@ function_board_init_at_Board: lw $t1 -144($fp) seq $t0 $t0 $t1 sw $t0 -120($fp) - j label_24 - label_24: + j label_26 + label_26: lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1521,14 +1665,14 @@ function_board_init_at_Board: lw $t1 12($t0) sw $t1 -156($fp) lw $t0 -156($fp) - bne $t0 $zero label_31 + bne $t0 $zero label_33 li $t0 28 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -68($fp) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -1552,26 +1696,26 @@ function_board_init_at_Board: seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) - bne $t0 $zero label_25 + bne $t0 $zero label_27 lw $t0 -92($fp) lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) - bne $t0 $zero label_26 + bne $t0 $zero label_28 lw $t0 -92($fp) lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) - bne $t0 $zero label_27 - lw $t0 -360($fp) + bne $t0 $zero label_29 + lw $t0 -364($fp) lw $t1 -68($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) - j label_28 - label_25: - lw $t0 -360($fp) + j label_30 + label_27: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) @@ -1581,9 +1725,9 @@ function_board_init_at_Board: lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) - j label_28 - label_26: - lw $t0 -360($fp) + j label_30 + label_28: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) @@ -1595,9 +1739,9 @@ function_board_init_at_Board: move $a1 $t0 jal equal_str sw $v0 -72($fp) - j label_28 - label_27: - lw $t0 -360($fp) + j label_30 + label_29: + lw $t0 -364($fp) lw $t1 12($t0) sw $t1 -100($fp) lw $t0 -68($fp) @@ -1607,8 +1751,8 @@ function_board_init_at_Board: lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) - j label_28 - label_28: + j label_30 + label_30: lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1619,7 +1763,7 @@ function_board_init_at_Board: lw $t1 12($t0) sw $t1 -108($fp) lw $t0 -108($fp) - bne $t0 $zero label_29 + bne $t0 $zero label_31 li $t0 5 addi $sp $sp -4 sw $t0 0($sp) @@ -1640,7 +1784,7 @@ function_board_init_at_Board: lw $t1 4($fp) addi $t1 $t1 16 sw $t0 0($t1) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 4($fp) addi $t1 $t1 12 sw $t0 0($t1) @@ -1651,8 +1795,8 @@ function_board_init_at_Board: lw $t0 0($sp) addi $sp $sp 4 sw $t0 -112($fp) - j label_30 - label_29: + j label_32 + label_31: li $t0 7 addi $sp $sp -4 sw $t0 0($sp) @@ -1673,7 +1817,7 @@ function_board_init_at_Board: lw $t1 4($fp) addi $t1 $t1 16 sw $t0 0($t1) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 4($fp) addi $t1 $t1 12 sw $t0 0($t1) @@ -1684,11 +1828,11 @@ function_board_init_at_Board: lw $t0 0($sp) addi $sp $sp 4 sw $t0 -112($fp) - label_30: + label_32: lw $t0 -112($fp) sw $t0 -160($fp) - j label_32 - label_31: + j label_34 + label_33: li $t0 5 addi $sp $sp -4 sw $t0 0($sp) @@ -1709,7 +1853,7 @@ function_board_init_at_Board: lw $t1 4($fp) addi $t1 $t1 16 sw $t0 0($t1) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 4($fp) addi $t1 $t1 12 sw $t0 0($t1) @@ -1720,11 +1864,11 @@ function_board_init_at_Board: lw $t0 0($sp) addi $sp $sp 4 sw $t0 -160($fp) - label_32: + label_34: lw $t0 -160($fp) sw $t0 -208($fp) - j label_34 - label_33: + j label_36 + label_35: li $t0 3 addi $sp $sp -4 sw $t0 0($sp) @@ -1745,7 +1889,7 @@ function_board_init_at_Board: lw $t1 4($fp) addi $t1 $t1 16 sw $t0 0($t1) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 4($fp) addi $t1 $t1 12 sw $t0 0($t1) @@ -1756,11 +1900,11 @@ function_board_init_at_Board: lw $t0 0($sp) addi $sp $sp 4 sw $t0 -208($fp) - label_34: + label_36: lw $t0 -208($fp) sw $t0 -256($fp) - j label_36 - label_35: + j label_38 + label_37: li $t0 4 addi $sp $sp -4 sw $t0 0($sp) @@ -1781,7 +1925,7 @@ function_board_init_at_Board: lw $t1 4($fp) addi $t1 $t1 16 sw $t0 0($t1) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 4($fp) addi $t1 $t1 12 sw $t0 0($t1) @@ -1792,11 +1936,11 @@ function_board_init_at_Board: lw $t0 0($sp) addi $sp $sp 4 sw $t0 -256($fp) - label_36: + label_38: lw $t0 -256($fp) sw $t0 -304($fp) - j label_38 - label_37: + j label_40 + label_39: li $t0 4 addi $sp $sp -4 sw $t0 0($sp) @@ -1817,7 +1961,7 @@ function_board_init_at_Board: lw $t1 4($fp) addi $t1 $t1 16 sw $t0 0($t1) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 4($fp) addi $t1 $t1 12 sw $t0 0($t1) @@ -1828,11 +1972,11 @@ function_board_init_at_Board: lw $t0 0($sp) addi $sp $sp 4 sw $t0 -304($fp) - label_38: + label_40: lw $t0 -304($fp) sw $t0 -352($fp) - j label_40 - label_39: + j label_42 + label_41: li $t0 3 addi $sp $sp -4 sw $t0 0($sp) @@ -1853,7 +1997,7 @@ function_board_init_at_Board: lw $t1 4($fp) addi $t1 $t1 16 sw $t0 0($t1) - lw $t0 -360($fp) + lw $t0 -364($fp) lw $t1 4($fp) addi $t1 $t1 12 sw $t0 0($t1) @@ -1864,9 +2008,9 @@ function_board_init_at_Board: lw $t0 0($sp) addi $sp $sp 4 sw $t0 -352($fp) - label_40: + label_42: lw $v0 4($fp) - addi $sp $sp 364 + addi $sp $sp 368 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1945,12 +2089,26 @@ function_init_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -20 + addi $sp $sp -24 lw $t0 0($fp) lw $t1 4($fp) addi $t1 $t1 24 sw $t0 0($t1) lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_43 + j label_44 + label_43: + li $v0 4 + la $a0 data_15 + syscall + li $v0 10 + syscall + label_44: + lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1967,7 +2125,7 @@ function_init_at_CellularAutomaton: addi $sp $sp 8 sw $v0 -12($fp) lw $v0 4($fp) - addi $sp $sp 20 + addi $sp $sp 24 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1980,34 +2138,48 @@ function_print_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -112 + addi $sp $sp -128 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -104($fp) + sw $v0 -116($fp) + lw $t0 -116($fp) + sw $t0 -120($fp) lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -96($fp) - la $t0 data_14 - sw $t0 -88($fp) - lw $t0 -88($fp) + sw $t0 -112($fp) + la $t0 data_16 + sw $t0 -108($fp) + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -84($fp) + sw $v0 -104($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_45 + j label_46 + label_45: + li $v0 4 + la $a0 data_17 + syscall + li $v0 10 + syscall + label_46: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -84($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -2019,31 +2191,31 @@ function_print_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -92($fp) - label_41: - lw $t0 -104($fp) + sw $v0 -96($fp) + label_47: + lw $t0 -120($fp) lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -96($fp) + sw $t1 -84($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) + sw $t1 -80($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) slt $t1 $t0 $t1 - sw $t1 -64($fp) - lw $t0 -64($fp) + sw $t1 -76($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) + sw $v0 -88($fp) + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_42 - j label_45 - label_42: + sw $t1 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_48 + j label_55 + label_48: lw $t4 0($fp) lw $t4 24($t4) addi $sp $sp -4 @@ -2052,17 +2224,17 @@ function_print_at_CellularAutomaton: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_43 - j label_44 - label_43: + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_49 + j label_50 + label_49: li $v0 4 - la $a0 data_15 + la $a0 data_18 syscall li $v0 10 syscall - label_44: + label_50: lw $t4 0($fp) lw $t4 24($t4) addi $sp $sp -4 @@ -2071,7 +2243,7 @@ function_print_at_CellularAutomaton: addi $sp $sp 4 addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -104($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t4 0($fp) @@ -2096,11 +2268,25 @@ function_print_at_CellularAutomaton: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -52($fp) + sw $v0 -68($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_51 + j label_52 + label_51: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_52: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -2113,18 +2299,32 @@ function_print_at_CellularAutomaton: jalr $ra $t0 addi $sp $sp 8 sw $v0 -60($fp) - la $t0 data_16 - sw $t0 -44($fp) - lw $t0 -44($fp) + la $t0 data_20 + sw $t0 -56($fp) + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -40($fp) + sw $v0 -52($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_53 + j label_54 + label_53: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_54: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -40($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -2136,10 +2336,10 @@ function_print_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -48($fp) - lw $t0 -104($fp) + sw $v0 -44($fp) + lw $t0 -120($fp) lw $t1 12($t0) - sw $t1 -32($fp) + sw $t1 -36($fp) lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2147,33 +2347,47 @@ function_print_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) + sw $t1 -32($fp) + lw $t0 -36($fp) + lw $t1 -32($fp) add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) + sw $t0 -28($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -104($fp) - j label_41 - label_45: - la $t0 data_17 - sw $t0 -16($fp) - lw $t0 -16($fp) + sw $v0 -40($fp) + lw $t0 -40($fp) + sw $t0 -120($fp) + j label_47 + label_55: + la $t0 data_22 + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_56 + j label_57 + label_56: + li $v0 4 + la $a0 data_23 + syscall + li $v0 10 + syscall + label_57: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -2185,9 +2399,9 @@ function_print_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) + sw $v0 -12($fp) lw $v0 0($fp) - addi $sp $sp 112 + addi $sp $sp 128 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2211,15 +2425,15 @@ function_num_cells_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_46 - j label_47 - label_46: + bne $t0 $zero label_58 + j label_59 + label_58: li $v0 4 - la $a0 data_18 + la $a0 data_24 syscall li $v0 10 syscall - label_47: + label_59: lw $t4 0($fp) lw $t4 24($t4) addi $sp $sp -4 @@ -2305,7 +2519,7 @@ function_cell_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -68($fp) lw $t0 -68($fp) - bne $t0 $zero label_50 + bne $t0 $zero label_62 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) @@ -2322,15 +2536,15 @@ function_cell_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_48 - j label_49 - label_48: + bne $t0 $zero label_60 + j label_61 + label_60: li $v0 4 - la $a0 data_19 + la $a0 data_25 syscall li $v0 10 syscall - label_49: + label_61: lw $t4 4($fp) lw $t4 24($t4) addi $sp $sp -4 @@ -2362,9 +2576,9 @@ function_cell_at_CellularAutomaton: sw $v0 -20($fp) lw $t0 -20($fp) sw $t0 -72($fp) - j label_51 - label_50: - la $t0 data_20 + j label_63 + label_62: + la $t0 data_26 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -2374,7 +2588,7 @@ function_cell_at_CellularAutomaton: sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -72($fp) - label_51: + label_63: lw $v0 -72($fp) addi $sp $sp 80 lw $fp 0($sp) @@ -2389,10 +2603,10 @@ function_north_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -88 + addi $sp $sp -92 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -52($fp) + sw $t1 -56($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2400,47 +2614,47 @@ function_north_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) sub $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) + sw $t0 -48($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) + sw $v0 -60($fp) + lw $t0 -60($fp) lw $t1 12($t0) - sw $t1 -68($fp) + sw $t1 -72($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) + sw $v0 -44($fp) + lw $t0 -44($fp) lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) + sw $t1 -68($fp) + lw $t0 -72($fp) + lw $t1 -68($fp) slt $t1 $t0 $t1 - sw $t1 -60($fp) - lw $t0 -60($fp) + sw $t1 -64($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -76($fp) + sw $v0 -76($fp) lw $t0 -76($fp) - bne $t0 $zero label_52 + lw $t1 12($t0) + sw $t1 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_66 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -28($fp) + sw $t1 -36($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2448,21 +2662,35 @@ function_north_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) + sw $t1 -32($fp) + lw $t0 -36($fp) + lw $t1 -32($fp) sub $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) + sw $t0 -28($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -32($fp) + sw $v0 -40($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_64 + j label_65 + label_64: + li $v0 4 + la $a0 data_27 + syscall + li $v0 10 + syscall + label_65: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -2474,12 +2702,12 @@ function_north_at_CellularAutomaton: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -80($fp) - j label_53 - label_52: - la $t0 data_21 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -84($fp) + j label_67 + label_66: + la $t0 data_28 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -2488,10 +2716,10 @@ function_north_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -80($fp) - label_53: - lw $v0 -80($fp) - addi $sp $sp 88 + sw $t0 -84($fp) + label_67: + lw $v0 -84($fp) + addi $sp $sp 92 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2504,7 +2732,7 @@ function_south_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -84 + addi $sp $sp -88 lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2512,10 +2740,10 @@ function_south_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -64($fp) + sw $t1 -68($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -48($fp) + sw $t1 -52($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2523,38 +2751,38 @@ function_south_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) + sw $t1 -48($fp) + lw $t0 -52($fp) + lw $t1 -48($fp) add $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) + sw $t0 -44($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) + sw $v0 -56($fp) + lw $t0 -56($fp) lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) + sw $t1 -64($fp) + lw $t0 -68($fp) + lw $t1 -64($fp) slt $t1 $t0 $t1 - sw $t1 -56($fp) - lw $t0 -56($fp) + sw $t1 -60($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -72($fp) + sw $v0 -72($fp) lw $t0 -72($fp) - bne $t0 $zero label_54 + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_70 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -28($fp) + sw $t1 -36($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2562,21 +2790,35 @@ function_south_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) + sw $t1 -32($fp) + lw $t0 -36($fp) + lw $t1 -32($fp) add $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) + sw $t0 -28($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -32($fp) + sw $v0 -40($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_68 + j label_69 + label_68: + li $v0 4 + la $a0 data_29 + syscall + li $v0 10 + syscall + label_69: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -2588,12 +2830,12 @@ function_south_at_CellularAutomaton: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -76($fp) - j label_55 - label_54: - la $t0 data_22 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -80($fp) + j label_71 + label_70: + la $t0 data_30 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -2602,10 +2844,10 @@ function_south_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -76($fp) - label_55: - lw $v0 -76($fp) - addi $sp $sp 84 + sw $t0 -80($fp) + label_71: + lw $v0 -80($fp) + addi $sp $sp 88 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2618,41 +2860,41 @@ function_east_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -168 + addi $sp $sp -172 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -76($fp) + sw $t1 -80($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) + sw $v0 -68($fp) + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) add $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) + sw $t0 -72($fp) + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) lw $t1 12($t0) - sw $t1 -96($fp) + sw $t1 -100($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) + sw $v0 -88($fp) + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -84($fp) + sw $t1 -88($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2660,35 +2902,35 @@ function_east_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -84($fp) - lw $t1 -92($fp) + sw $t1 -96($fp) + lw $t0 -88($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_56 - j label_57 - label_56: + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_72 + j label_73 + label_72: li $v0 4 - la $a0 data_23 + la $a0 data_31 syscall li $v0 10 syscall - label_57: - lw $t0 -96($fp) - lw $t1 -92($fp) + label_73: + lw $t0 -100($fp) + lw $t1 -96($fp) div $t0 $t1 mflo $t0 - sw $t0 -88($fp) - lw $t0 -88($fp) + sw $t0 -92($fp) + lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) + sw $v0 -104($fp) + lw $t0 -104($fp) lw $t1 12($t0) - sw $t1 -112($fp) + sw $t1 -116($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2696,157 +2938,171 @@ function_east_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) + sw $t1 -112($fp) + lw $t0 -116($fp) + lw $t1 -112($fp) mul $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) + sw $t0 -108($fp) + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -116($fp) + sw $v0 -120($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -56($fp) + sw $t1 -60($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) + sw $v0 -48($fp) + lw $t0 -48($fp) lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) + sw $t1 -56($fp) + lw $t0 -60($fp) + lw $t1 -56($fp) add $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) + sw $t0 -52($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -116($fp) + sw $v0 -64($fp) + lw $t0 -120($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -140($fp) + sw $t1 -144($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -136($fp) + sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -132($fp) + sw $t0 -136($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -132($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) + seq $t0 $t0 $t1 sw $t0 -128($fp) - lw $t0 -140($fp) + lw $t0 -128($fp) + bne $t0 $zero label_74 + lw $t0 -144($fp) lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_58 - lw $t0 -140($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_75 + lw $t0 -144($fp) lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_59 - lw $t0 -140($fp) - lw $t1 -128($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_76 + lw $t0 -120($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_60 - lw $t0 -116($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_61 - label_58: - lw $t0 -116($fp) + j label_77 + label_74: + lw $t0 -120($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -60($fp) + sw $t1 -152($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_61 - label_59: - lw $t0 -116($fp) + sw $t0 -124($fp) + j label_77 + label_75: + lw $t0 -120($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -60($fp) + sw $t1 -152($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) move $a0 $t0 - lw $t0 -144($fp) + lw $t0 -148($fp) move $a1 $t0 jal equal_str - sw $v0 -120($fp) - j label_61 - label_60: - lw $t0 -116($fp) + sw $v0 -124($fp) + j label_77 + label_76: + lw $t0 -120($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -60($fp) + sw $t1 -152($fp) + lw $t0 -64($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) + sw $t1 -148($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_61 - label_61: - lw $t0 -120($fp) + sw $t0 -124($fp) + j label_77 + label_77: + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -156($fp) + sw $v0 -156($fp) lw $t0 -156($fp) - bne $t0 $zero label_62 + lw $t1 12($t0) + sw $t1 -160($fp) + lw $t0 -160($fp) + bne $t0 $zero label_80 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -32($fp) + sw $t1 -40($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) + sw $t1 -36($fp) + lw $t0 -40($fp) + lw $t1 -36($fp) add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) + sw $t0 -32($fp) + lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -36($fp) + sw $v0 -44($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_78 + j label_79 + label_78: + li $v0 4 + la $a0 data_32 + syscall + li $v0 10 + syscall + label_79: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -36($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -2858,12 +3114,12 @@ function_east_at_CellularAutomaton: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -160($fp) - j label_63 - label_62: - la $t0 data_24 + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -164($fp) + j label_81 + label_80: + la $t0 data_33 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -2872,10 +3128,10 @@ function_east_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -160($fp) - label_63: - lw $v0 -160($fp) - addi $sp $sp 168 + sw $t0 -164($fp) + label_81: + lw $v0 -164($fp) + addi $sp $sp 172 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2888,117 +3144,117 @@ function_west_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -184 + addi $sp $sp -188 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -132($fp) + sw $v0 -136($fp) lw $t0 0($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -156($fp) + sw $t1 -160($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -152($fp) + sw $t0 -156($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -148($fp) + sw $t0 -152($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -148($fp) + lw $t0 -160($fp) + lw $t1 -156($fp) + seq $t0 $t0 $t1 sw $t0 -144($fp) - lw $t0 -156($fp) + lw $t0 -144($fp) + bne $t0 $zero label_82 + lw $t0 -160($fp) lw $t1 -152($fp) seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_64 - lw $t0 -156($fp) + sw $t0 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_83 + lw $t0 -160($fp) lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_65 - lw $t0 -156($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_66 + sw $t0 -144($fp) + lw $t0 -144($fp) + bne $t0 $zero label_84 lw $t0 0($fp) - lw $t1 -132($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -136($fp) - j label_67 - label_64: + sw $t0 -140($fp) + j label_85 + label_82: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -132($fp) + sw $t1 -168($fp) + lw $t0 -136($fp) lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -164($fp) - lw $t1 -160($fp) + sw $t1 -164($fp) + lw $t0 -168($fp) + lw $t1 -164($fp) seq $t0 $t0 $t1 - sw $t0 -136($fp) - j label_67 - label_65: + sw $t0 -140($fp) + j label_85 + label_83: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -132($fp) + sw $t1 -168($fp) + lw $t0 -136($fp) lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -164($fp) + sw $t1 -164($fp) + lw $t0 -168($fp) move $a0 $t0 - lw $t0 -160($fp) + lw $t0 -164($fp) move $a1 $t0 jal equal_str - sw $v0 -136($fp) - j label_67 - label_66: + sw $v0 -140($fp) + j label_85 + label_84: lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -132($fp) + sw $t1 -168($fp) + lw $t0 -136($fp) lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -164($fp) - lw $t1 -160($fp) + sw $t1 -164($fp) + lw $t0 -168($fp) + lw $t1 -164($fp) seq $t0 $t0 $t1 - sw $t0 -136($fp) - j label_67 - label_67: - lw $t0 -136($fp) + sw $t0 -140($fp) + j label_85 + label_85: + lw $t0 -140($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -172($fp) + sw $v0 -172($fp) lw $t0 -172($fp) - bne $t0 $zero label_76 + lw $t1 12($t0) + sw $t1 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_96 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -64($fp) + sw $t1 -68($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) + sw $v0 -56($fp) + lw $t0 -56($fp) lw $t1 12($t0) - sw $t1 -52($fp) + sw $t1 -56($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3006,35 +3262,35 @@ function_west_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -52($fp) - lw $t1 -60($fp) + sw $t1 -64($fp) + lw $t0 -56($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_68 - j label_69 - label_68: + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_86 + j label_87 + label_86: li $v0 4 - la $a0 data_25 + la $a0 data_34 syscall li $v0 10 syscall - label_69: - lw $t0 -64($fp) - lw $t1 -60($fp) + label_87: + lw $t0 -68($fp) + lw $t1 -64($fp) div $t0 $t1 mflo $t0 - sw $t0 -56($fp) - lw $t0 -56($fp) + sw $t0 -60($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) + sw $v0 -72($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -80($fp) + sw $t1 -84($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3042,135 +3298,149 @@ function_west_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) + sw $t1 -80($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) mul $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) + sw $v0 -88($fp) + lw $t0 -88($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -108($fp) + sw $t1 -112($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -104($fp) + sw $t0 -108($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -100($fp) + sw $t0 -104($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -100($fp) + lw $t0 -112($fp) + lw $t1 -108($fp) + seq $t0 $t0 $t1 sw $t0 -96($fp) - lw $t0 -108($fp) + lw $t0 -96($fp) + bne $t0 $zero label_88 + lw $t0 -112($fp) lw $t1 -104($fp) seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_70 - lw $t0 -108($fp) + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_89 + lw $t0 -112($fp) lw $t1 -100($fp) seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_71 - lw $t0 -108($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_72 - lw $t0 -84($fp) + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_90 + lw $t0 -88($fp) lw $t1 0($fp) seq $t0 $t0 $t1 - sw $t0 -88($fp) - j label_73 - label_70: - lw $t0 -84($fp) + sw $t0 -92($fp) + j label_91 + label_88: + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -116($fp) + sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -116($fp) - lw $t1 -112($fp) + sw $t1 -116($fp) + lw $t0 -120($fp) + lw $t1 -116($fp) seq $t0 $t0 $t1 - sw $t0 -88($fp) - j label_73 - label_71: - lw $t0 -84($fp) + sw $t0 -92($fp) + j label_91 + label_89: + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -116($fp) + sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -116($fp) + sw $t1 -116($fp) + lw $t0 -120($fp) move $a0 $t0 - lw $t0 -112($fp) + lw $t0 -116($fp) move $a1 $t0 jal equal_str - sw $v0 -88($fp) - j label_73 - label_72: - lw $t0 -84($fp) + sw $v0 -92($fp) + j label_91 + label_90: + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -116($fp) + sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -116($fp) - lw $t1 -112($fp) + sw $t1 -116($fp) + lw $t0 -120($fp) + lw $t1 -116($fp) seq $t0 $t0 $t1 - sw $t0 -88($fp) - j label_73 - label_73: - lw $t0 -88($fp) + sw $t0 -92($fp) + j label_91 + label_91: + lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -124($fp) + sw $v0 -124($fp) lw $t0 -124($fp) - bne $t0 $zero label_74 + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_94 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -40($fp) + sw $t1 -48($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) + sw $t1 -44($fp) + lw $t0 -48($fp) + lw $t1 -44($fp) sub $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) + sw $t0 -40($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -44($fp) + sw $v0 -52($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_92 + j label_93 + label_92: + li $v0 4 + la $a0 data_35 + syscall + li $v0 10 + syscall + label_93: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -44($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -3182,12 +3452,12 @@ function_west_at_CellularAutomaton: lw $t0 36($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -128($fp) - j label_75 - label_74: - la $t0 data_26 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -132($fp) + j label_95 + label_94: + la $t0 data_36 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -3196,13 +3466,13 @@ function_west_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -128($fp) - label_75: - lw $t0 -128($fp) - sw $t0 -176($fp) - j label_77 - label_76: - la $t0 data_27 + sw $t0 -132($fp) + label_95: + lw $t0 -132($fp) + sw $t0 -180($fp) + j label_97 + label_96: + la $t0 data_37 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -3211,10 +3481,10 @@ function_west_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -176($fp) - label_77: - lw $v0 -176($fp) - addi $sp $sp 184 + sw $t0 -180($fp) + label_97: + lw $v0 -180($fp) + addi $sp $sp 188 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3227,10 +3497,10 @@ function_northwest_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -180 + addi $sp $sp -184 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -144($fp) + sw $t1 -148($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3238,56 +3508,56 @@ function_northwest_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) + sw $t1 -144($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) sub $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) + sw $t0 -140($fp) + lw $t0 -140($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) + sw $v0 -152($fp) + lw $t0 -152($fp) lw $t1 12($t0) - sw $t1 -160($fp) + sw $t1 -164($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 -132($fp) + sw $v0 -136($fp) + lw $t0 -136($fp) lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) + sw $t1 -160($fp) + lw $t0 -164($fp) + lw $t1 -160($fp) slt $t1 $t0 $t1 - sw $t1 -152($fp) - lw $t0 -152($fp) + sw $t1 -156($fp) + lw $t0 -156($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -168($fp) + sw $v0 -168($fp) lw $t0 -168($fp) - bne $t0 $zero label_86 + lw $t1 12($t0) + sw $t1 -172($fp) + lw $t0 -172($fp) + bne $t0 $zero label_108 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -64($fp) + sw $t1 -68($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) + sw $v0 -56($fp) + lw $t0 -56($fp) lw $t1 12($t0) - sw $t1 -52($fp) + sw $t1 -56($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3295,35 +3565,35 @@ function_northwest_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -52($fp) - lw $t1 -60($fp) + sw $t1 -64($fp) + lw $t0 -56($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_78 - j label_79 - label_78: + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_98 + j label_99 + label_98: li $v0 4 - la $a0 data_28 + la $a0 data_38 syscall li $v0 10 syscall - label_79: - lw $t0 -64($fp) - lw $t1 -60($fp) + label_99: + lw $t0 -68($fp) + lw $t1 -64($fp) div $t0 $t1 mflo $t0 - sw $t0 -56($fp) - lw $t0 -56($fp) + sw $t0 -60($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) + sw $v0 -72($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -80($fp) + sw $t1 -84($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3331,135 +3601,149 @@ function_northwest_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) + sw $t1 -80($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) mul $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) + sw $v0 -88($fp) + lw $t0 -88($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -108($fp) + sw $t1 -112($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -104($fp) + sw $t0 -108($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -100($fp) + sw $t0 -104($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -100($fp) + lw $t0 -112($fp) + lw $t1 -108($fp) + seq $t0 $t0 $t1 sw $t0 -96($fp) - lw $t0 -108($fp) + lw $t0 -96($fp) + bne $t0 $zero label_100 + lw $t0 -112($fp) lw $t1 -104($fp) seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_80 - lw $t0 -108($fp) + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_101 + lw $t0 -112($fp) lw $t1 -100($fp) seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_81 - lw $t0 -108($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_82 - lw $t0 -84($fp) + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_102 + lw $t0 -88($fp) lw $t1 0($fp) seq $t0 $t0 $t1 - sw $t0 -88($fp) - j label_83 - label_80: - lw $t0 -84($fp) + sw $t0 -92($fp) + j label_103 + label_100: + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -116($fp) + sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -116($fp) - lw $t1 -112($fp) + sw $t1 -116($fp) + lw $t0 -120($fp) + lw $t1 -116($fp) seq $t0 $t0 $t1 - sw $t0 -88($fp) - j label_83 - label_81: - lw $t0 -84($fp) + sw $t0 -92($fp) + j label_103 + label_101: + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -116($fp) + sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -116($fp) + sw $t1 -116($fp) + lw $t0 -120($fp) move $a0 $t0 - lw $t0 -112($fp) + lw $t0 -116($fp) move $a1 $t0 jal equal_str - sw $v0 -88($fp) - j label_83 - label_82: - lw $t0 -84($fp) + sw $v0 -92($fp) + j label_103 + label_102: + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -116($fp) + sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -116($fp) - lw $t1 -112($fp) + sw $t1 -116($fp) + lw $t0 -120($fp) + lw $t1 -116($fp) seq $t0 $t0 $t1 - sw $t0 -88($fp) - j label_83 - label_83: - lw $t0 -88($fp) + sw $t0 -92($fp) + j label_103 + label_103: + lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -124($fp) + sw $v0 -124($fp) lw $t0 -124($fp) - bne $t0 $zero label_84 + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_106 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -40($fp) + sw $t1 -48($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) + sw $t1 -44($fp) + lw $t0 -48($fp) + lw $t1 -44($fp) sub $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) + sw $t0 -40($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -44($fp) + sw $v0 -52($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_104 + j label_105 + label_104: + li $v0 4 + la $a0 data_39 + syscall + li $v0 10 + syscall + label_105: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -44($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -3471,12 +3755,12 @@ function_northwest_at_CellularAutomaton: lw $t0 60($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -128($fp) - j label_85 - label_84: - la $t0 data_29 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -132($fp) + j label_107 + label_106: + la $t0 data_40 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -3485,13 +3769,13 @@ function_northwest_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -128($fp) - label_85: - lw $t0 -128($fp) - sw $t0 -172($fp) - j label_87 - label_86: - la $t0 data_30 + sw $t0 -132($fp) + label_107: + lw $t0 -132($fp) + sw $t0 -176($fp) + j label_109 + label_108: + la $t0 data_41 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -3500,10 +3784,10 @@ function_northwest_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -172($fp) - label_87: - lw $v0 -172($fp) - addi $sp $sp 180 + sw $t0 -176($fp) + label_109: + lw $v0 -176($fp) + addi $sp $sp 184 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3516,10 +3800,10 @@ function_northeast_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -220 + addi $sp $sp -224 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -184($fp) + sw $t1 -188($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3527,78 +3811,78 @@ function_northeast_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) + sw $t1 -184($fp) + lw $t0 -188($fp) + lw $t1 -184($fp) sub $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) + sw $t0 -180($fp) + lw $t0 -180($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) + sw $v0 -192($fp) + lw $t0 -192($fp) lw $t1 12($t0) - sw $t1 -200($fp) + sw $t1 -204($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -172($fp) - lw $t0 -172($fp) + sw $v0 -176($fp) + lw $t0 -176($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) + sw $t1 -200($fp) + lw $t0 -204($fp) + lw $t1 -200($fp) slt $t1 $t0 $t1 - sw $t1 -192($fp) - lw $t0 -192($fp) + sw $t1 -196($fp) + lw $t0 -196($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) + sw $v0 -208($fp) lw $t0 -208($fp) - bne $t0 $zero label_96 + lw $t1 12($t0) + sw $t1 -212($fp) + lw $t0 -212($fp) + bne $t0 $zero label_120 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -84($fp) + sw $t1 -88($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) + sw $v0 -76($fp) + lw $t0 -76($fp) lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) + sw $t1 -84($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) add $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) + sw $t0 -80($fp) + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) + sw $v0 -92($fp) + lw $t0 -92($fp) lw $t1 12($t0) - sw $t1 -104($fp) + sw $t1 -108($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) + sw $v0 -96($fp) + lw $t0 -96($fp) lw $t1 12($t0) - sw $t1 -92($fp) + sw $t1 -96($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3606,35 +3890,35 @@ function_northeast_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -92($fp) - lw $t1 -100($fp) + sw $t1 -104($fp) + lw $t0 -96($fp) + lw $t1 -104($fp) seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_88 - j label_89 - label_88: + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_110 + j label_111 + label_110: li $v0 4 - la $a0 data_31 + la $a0 data_42 syscall li $v0 10 syscall - label_89: - lw $t0 -104($fp) - lw $t1 -100($fp) + label_111: + lw $t0 -108($fp) + lw $t1 -104($fp) div $t0 $t1 mflo $t0 - sw $t0 -96($fp) - lw $t0 -96($fp) + sw $t0 -100($fp) + lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) + sw $v0 -112($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -120($fp) + sw $t1 -124($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3642,157 +3926,171 @@ function_northeast_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) + sw $t1 -120($fp) + lw $t0 -124($fp) + lw $t1 -120($fp) mul $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) + sw $t0 -116($fp) + lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -124($fp) + sw $v0 -128($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -64($fp) + sw $t1 -68($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) + sw $v0 -56($fp) + lw $t0 -56($fp) lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) + sw $t1 -64($fp) + lw $t0 -68($fp) + lw $t1 -64($fp) add $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) + sw $t0 -60($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -124($fp) + sw $v0 -72($fp) + lw $t0 -128($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -148($fp) + sw $t1 -152($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -144($fp) + sw $t0 -148($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -140($fp) + sw $t0 -144($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -140($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) + seq $t0 $t0 $t1 sw $t0 -136($fp) - lw $t0 -148($fp) + lw $t0 -136($fp) + bne $t0 $zero label_112 + lw $t0 -152($fp) lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_90 - lw $t0 -148($fp) + sw $t0 -136($fp) + lw $t0 -136($fp) + bne $t0 $zero label_113 + lw $t0 -152($fp) lw $t1 -140($fp) seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_91 - lw $t0 -148($fp) - lw $t1 -136($fp) + sw $t0 -136($fp) + lw $t0 -136($fp) + bne $t0 $zero label_114 + lw $t0 -128($fp) + lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_92 - lw $t0 -124($fp) - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - j label_93 - label_90: - lw $t0 -124($fp) + j label_115 + label_112: + lw $t0 -128($fp) lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -68($fp) + sw $t1 -160($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) - lw $t1 -152($fp) + sw $t1 -156($fp) + lw $t0 -160($fp) + lw $t1 -156($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - j label_93 - label_91: - lw $t0 -124($fp) + sw $t0 -132($fp) + j label_115 + label_113: + lw $t0 -128($fp) lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -68($fp) + sw $t1 -160($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) + sw $t1 -156($fp) + lw $t0 -160($fp) move $a0 $t0 - lw $t0 -152($fp) + lw $t0 -156($fp) move $a1 $t0 jal equal_str - sw $v0 -128($fp) - j label_93 - label_92: - lw $t0 -124($fp) + sw $v0 -132($fp) + j label_115 + label_114: + lw $t0 -128($fp) lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -68($fp) + sw $t1 -160($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) - lw $t1 -152($fp) + sw $t1 -156($fp) + lw $t0 -160($fp) + lw $t1 -156($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - j label_93 - label_93: - lw $t0 -128($fp) + sw $t0 -132($fp) + j label_115 + label_115: + lw $t0 -132($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -164($fp) + sw $v0 -164($fp) lw $t0 -164($fp) - bne $t0 $zero label_94 + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -168($fp) + bne $t0 $zero label_118 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -40($fp) + sw $t1 -48($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) + sw $t1 -44($fp) + lw $t0 -48($fp) + lw $t1 -44($fp) add $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) + sw $t0 -40($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -44($fp) + sw $v0 -52($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_116 + j label_117 + label_116: + li $v0 4 + la $a0 data_43 + syscall + li $v0 10 + syscall + label_117: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -44($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -3804,12 +4102,12 @@ function_northeast_at_CellularAutomaton: lw $t0 60($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -168($fp) - j label_95 - label_94: - la $t0 data_32 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -172($fp) + j label_119 + label_118: + la $t0 data_44 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -3818,13 +4116,13 @@ function_northeast_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -168($fp) - label_95: - lw $t0 -168($fp) - sw $t0 -212($fp) - j label_97 - label_96: - la $t0 data_33 + sw $t0 -172($fp) + label_119: + lw $t0 -172($fp) + sw $t0 -216($fp) + j label_121 + label_120: + la $t0 data_45 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -3833,10 +4131,10 @@ function_northeast_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -212($fp) - label_97: - lw $v0 -212($fp) - addi $sp $sp 220 + sw $t0 -216($fp) + label_121: + lw $v0 -216($fp) + addi $sp $sp 224 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -3849,7 +4147,7 @@ function_southeast_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -216 + addi $sp $sp -220 lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -3857,10 +4155,10 @@ function_southeast_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -196($fp) + sw $t1 -200($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -180($fp) + sw $t1 -184($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3868,69 +4166,69 @@ function_southeast_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -176($fp) - lw $t0 -180($fp) - lw $t1 -176($fp) + sw $t1 -180($fp) + lw $t0 -184($fp) + lw $t1 -180($fp) add $t0 $t0 $t1 - sw $t0 -172($fp) - lw $t0 -172($fp) + sw $t0 -176($fp) + lw $t0 -176($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -184($fp) - lw $t0 -184($fp) + sw $v0 -188($fp) + lw $t0 -188($fp) lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -196($fp) - lw $t1 -192($fp) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) slt $t1 $t0 $t1 - sw $t1 -188($fp) - lw $t0 -188($fp) + sw $t1 -192($fp) + lw $t0 -192($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -200($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -204($fp) + sw $v0 -204($fp) lw $t0 -204($fp) - bne $t0 $zero label_106 + lw $t1 12($t0) + sw $t1 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_132 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -84($fp) + sw $t1 -88($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) + sw $v0 -76($fp) + lw $t0 -76($fp) lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) + sw $t1 -84($fp) + lw $t0 -88($fp) + lw $t1 -84($fp) add $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) + sw $t0 -80($fp) + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) + sw $v0 -92($fp) + lw $t0 -92($fp) lw $t1 12($t0) - sw $t1 -104($fp) + sw $t1 -108($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) + sw $v0 -96($fp) + lw $t0 -96($fp) lw $t1 12($t0) - sw $t1 -92($fp) + sw $t1 -96($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3938,35 +4236,35 @@ function_southeast_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -92($fp) - lw $t1 -100($fp) + sw $t1 -104($fp) + lw $t0 -96($fp) + lw $t1 -104($fp) seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_98 - j label_99 - label_98: + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_122 + j label_123 + label_122: li $v0 4 - la $a0 data_34 + la $a0 data_46 syscall li $v0 10 syscall - label_99: - lw $t0 -104($fp) - lw $t1 -100($fp) + label_123: + lw $t0 -108($fp) + lw $t1 -104($fp) div $t0 $t1 mflo $t0 - sw $t0 -96($fp) - lw $t0 -96($fp) + sw $t0 -100($fp) + lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) + sw $v0 -112($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -120($fp) + sw $t1 -124($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -3974,157 +4272,171 @@ function_southeast_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) + sw $t1 -120($fp) + lw $t0 -124($fp) + lw $t1 -120($fp) mul $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) + sw $t0 -116($fp) + lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -124($fp) + sw $v0 -128($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -64($fp) + sw $t1 -68($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) + sw $v0 -56($fp) + lw $t0 -56($fp) lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) + sw $t1 -64($fp) + lw $t0 -68($fp) + lw $t1 -64($fp) add $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) + sw $t0 -60($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -124($fp) + sw $v0 -72($fp) + lw $t0 -128($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -148($fp) + sw $t1 -152($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -144($fp) + sw $t0 -148($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -140($fp) + sw $t0 -144($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -140($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) + seq $t0 $t0 $t1 sw $t0 -136($fp) - lw $t0 -148($fp) + lw $t0 -136($fp) + bne $t0 $zero label_124 + lw $t0 -152($fp) lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_100 - lw $t0 -148($fp) + sw $t0 -136($fp) + lw $t0 -136($fp) + bne $t0 $zero label_125 + lw $t0 -152($fp) lw $t1 -140($fp) seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_101 - lw $t0 -148($fp) - lw $t1 -136($fp) + sw $t0 -136($fp) + lw $t0 -136($fp) + bne $t0 $zero label_126 + lw $t0 -128($fp) + lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_102 - lw $t0 -124($fp) - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - j label_103 - label_100: - lw $t0 -124($fp) + j label_127 + label_124: + lw $t0 -128($fp) lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -68($fp) + sw $t1 -160($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) - lw $t1 -152($fp) + sw $t1 -156($fp) + lw $t0 -160($fp) + lw $t1 -156($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - j label_103 - label_101: - lw $t0 -124($fp) + sw $t0 -132($fp) + j label_127 + label_125: + lw $t0 -128($fp) lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -68($fp) + sw $t1 -160($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) + sw $t1 -156($fp) + lw $t0 -160($fp) move $a0 $t0 - lw $t0 -152($fp) + lw $t0 -156($fp) move $a1 $t0 jal equal_str - sw $v0 -128($fp) - j label_103 - label_102: - lw $t0 -124($fp) + sw $v0 -132($fp) + j label_127 + label_126: + lw $t0 -128($fp) lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -68($fp) + sw $t1 -160($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) - lw $t1 -152($fp) + sw $t1 -156($fp) + lw $t0 -160($fp) + lw $t1 -156($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - j label_103 - label_103: - lw $t0 -128($fp) + sw $t0 -132($fp) + j label_127 + label_127: + lw $t0 -132($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -164($fp) + sw $v0 -164($fp) lw $t0 -164($fp) - bne $t0 $zero label_104 + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -168($fp) + bne $t0 $zero label_130 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -40($fp) + sw $t1 -48($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) + sw $t1 -44($fp) + lw $t0 -48($fp) + lw $t1 -44($fp) add $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) + sw $t0 -40($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -44($fp) + sw $v0 -52($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_128 + j label_129 + label_128: + li $v0 4 + la $a0 data_47 + syscall + li $v0 10 + syscall + label_129: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -44($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -4136,12 +4448,12 @@ function_southeast_at_CellularAutomaton: lw $t0 92($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -168($fp) - j label_105 - label_104: - la $t0 data_35 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -172($fp) + j label_131 + label_130: + la $t0 data_48 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -4150,13 +4462,13 @@ function_southeast_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -168($fp) - label_105: - lw $t0 -168($fp) - sw $t0 -208($fp) - j label_107 - label_106: - la $t0 data_36 + sw $t0 -172($fp) + label_131: + lw $t0 -172($fp) + sw $t0 -212($fp) + j label_133 + label_132: + la $t0 data_49 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -4165,10 +4477,10 @@ function_southeast_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -208($fp) - label_107: - lw $v0 -208($fp) - addi $sp $sp 216 + sw $t0 -212($fp) + label_133: + lw $v0 -212($fp) + addi $sp $sp 220 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -4181,7 +4493,7 @@ function_southwest_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -176 + addi $sp $sp -180 lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -4189,10 +4501,10 @@ function_southwest_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -156($fp) + sw $t1 -160($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -140($fp) + sw $t1 -144($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -4200,47 +4512,47 @@ function_southwest_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) + sw $t1 -140($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) add $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) + sw $t0 -136($fp) + lw $t0 -136($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) + sw $v0 -148($fp) + lw $t0 -148($fp) lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) - lw $t1 -152($fp) + sw $t1 -156($fp) + lw $t0 -160($fp) + lw $t1 -156($fp) slt $t1 $t0 $t1 - sw $t1 -148($fp) - lw $t0 -148($fp) + sw $t1 -152($fp) + lw $t0 -152($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -164($fp) + sw $v0 -164($fp) lw $t0 -164($fp) - bne $t0 $zero label_116 + lw $t1 12($t0) + sw $t1 -168($fp) + lw $t0 -168($fp) + bne $t0 $zero label_144 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -64($fp) + sw $t1 -68($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) + sw $v0 -56($fp) + lw $t0 -56($fp) lw $t1 12($t0) - sw $t1 -52($fp) + sw $t1 -56($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -4248,35 +4560,35 @@ function_southwest_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -52($fp) - lw $t1 -60($fp) + sw $t1 -64($fp) + lw $t0 -56($fp) + lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_108 - j label_109 - label_108: + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_134 + j label_135 + label_134: li $v0 4 - la $a0 data_37 + la $a0 data_50 syscall li $v0 10 syscall - label_109: - lw $t0 -64($fp) - lw $t1 -60($fp) + label_135: + lw $t0 -68($fp) + lw $t1 -64($fp) div $t0 $t1 mflo $t0 - sw $t0 -56($fp) - lw $t0 -56($fp) + sw $t0 -60($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) + sw $v0 -72($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -80($fp) + sw $t1 -84($fp) lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -4284,135 +4596,149 @@ function_southwest_at_CellularAutomaton: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) + sw $t1 -80($fp) + lw $t0 -84($fp) + lw $t1 -80($fp) mul $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) + sw $v0 -88($fp) + lw $t0 -88($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -108($fp) + sw $t1 -112($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -104($fp) + sw $t0 -108($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -100($fp) + sw $t0 -104($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -100($fp) + lw $t0 -112($fp) + lw $t1 -108($fp) + seq $t0 $t0 $t1 sw $t0 -96($fp) - lw $t0 -108($fp) + lw $t0 -96($fp) + bne $t0 $zero label_136 + lw $t0 -112($fp) lw $t1 -104($fp) seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_110 - lw $t0 -108($fp) + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_137 + lw $t0 -112($fp) lw $t1 -100($fp) seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_111 - lw $t0 -108($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_112 - lw $t0 -84($fp) + sw $t0 -96($fp) + lw $t0 -96($fp) + bne $t0 $zero label_138 + lw $t0 -88($fp) lw $t1 0($fp) seq $t0 $t0 $t1 - sw $t0 -88($fp) - j label_113 - label_110: - lw $t0 -84($fp) + sw $t0 -92($fp) + j label_139 + label_136: + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -116($fp) + sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -116($fp) - lw $t1 -112($fp) + sw $t1 -116($fp) + lw $t0 -120($fp) + lw $t1 -116($fp) seq $t0 $t0 $t1 - sw $t0 -88($fp) - j label_113 - label_111: - lw $t0 -84($fp) + sw $t0 -92($fp) + j label_139 + label_137: + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -116($fp) + sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -116($fp) + sw $t1 -116($fp) + lw $t0 -120($fp) move $a0 $t0 - lw $t0 -112($fp) + lw $t0 -116($fp) move $a1 $t0 jal equal_str - sw $v0 -88($fp) - j label_113 - label_112: - lw $t0 -84($fp) + sw $v0 -92($fp) + j label_139 + label_138: + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -116($fp) + sw $t1 -120($fp) lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -116($fp) - lw $t1 -112($fp) + sw $t1 -116($fp) + lw $t0 -120($fp) + lw $t1 -116($fp) seq $t0 $t0 $t1 - sw $t0 -88($fp) - j label_113 - label_113: - lw $t0 -88($fp) + sw $t0 -92($fp) + j label_139 + label_139: + lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -124($fp) + sw $v0 -124($fp) lw $t0 -124($fp) - bne $t0 $zero label_114 + lw $t1 12($t0) + sw $t1 -128($fp) + lw $t0 -128($fp) + bne $t0 $zero label_142 lw $t0 0($fp) lw $t1 12($t0) - sw $t1 -40($fp) + sw $t1 -48($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) + sw $t1 -44($fp) + lw $t0 -48($fp) + lw $t1 -44($fp) sub $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) + sw $t0 -40($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -44($fp) + sw $v0 -52($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_140 + j label_141 + label_140: + li $v0 4 + la $a0 data_51 + syscall + li $v0 10 + syscall + label_141: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -44($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -4424,12 +4750,12 @@ function_southwest_at_CellularAutomaton: lw $t0 92($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -128($fp) - j label_115 - label_114: - la $t0 data_38 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -132($fp) + j label_143 + label_142: + la $t0 data_52 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -4438,25 +4764,25 @@ function_southwest_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -128($fp) - label_115: - lw $t0 -128($fp) - sw $t0 -168($fp) - j label_117 - label_116: - la $t0 data_39 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 + sw $t0 -132($fp) + label_143: + lw $t0 -132($fp) + sw $t0 -172($fp) + j label_145 + label_144: + la $t0 data_53 + sw $t0 -16($fp) + lw $t0 -16($fp) + addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -168($fp) - label_117: - lw $v0 -168($fp) - addi $sp $sp 176 + sw $t0 -172($fp) + label_145: + lw $v0 -172($fp) + addi $sp $sp 180 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -4469,7 +4795,21 @@ function_neighbors_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -640 + addi $sp $sp -672 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -508($fp) + lw $t0 -508($fp) + bne $t0 $zero label_146 + j label_147 + label_146: + li $v0 4 + la $a0 data_54 + syscall + li $v0 10 + syscall + label_147: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -4485,129 +4825,143 @@ function_neighbors_at_CellularAutomaton: lw $t0 60($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -476($fp) - la $t0 data_40 - sw $t0 -472($fp) - lw $t0 -472($fp) + sw $v0 -504($fp) + la $t0 data_55 + sw $t0 -500($fp) + lw $t0 -500($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -468($fp) - lw $t0 -476($fp) + sw $v0 -496($fp) + lw $t0 -504($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -500($fp) + sw $t1 -532($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -496($fp) + sw $t0 -528($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -492($fp) + sw $t0 -524($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -488($fp) - lw $t0 -500($fp) - lw $t1 -496($fp) + sw $t0 -520($fp) + lw $t0 -532($fp) + lw $t1 -528($fp) seq $t0 $t0 $t1 - sw $t0 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_118 - lw $t0 -500($fp) - lw $t1 -492($fp) + sw $t0 -516($fp) + lw $t0 -516($fp) + bne $t0 $zero label_148 + lw $t0 -532($fp) + lw $t1 -524($fp) seq $t0 $t0 $t1 - sw $t0 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_119 - lw $t0 -500($fp) - lw $t1 -488($fp) + sw $t0 -516($fp) + lw $t0 -516($fp) + bne $t0 $zero label_149 + lw $t0 -532($fp) + lw $t1 -520($fp) seq $t0 $t0 $t1 - sw $t0 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_120 - lw $t0 -476($fp) - lw $t1 -468($fp) + sw $t0 -516($fp) + lw $t0 -516($fp) + bne $t0 $zero label_150 + lw $t0 -504($fp) + lw $t1 -496($fp) seq $t0 $t0 $t1 - sw $t0 -480($fp) - j label_121 - label_118: - lw $t0 -476($fp) + sw $t0 -512($fp) + j label_151 + label_148: + lw $t0 -504($fp) lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -468($fp) + sw $t1 -540($fp) + lw $t0 -496($fp) lw $t1 12($t0) - sw $t1 -504($fp) - lw $t0 -508($fp) - lw $t1 -504($fp) + sw $t1 -536($fp) + lw $t0 -540($fp) + lw $t1 -536($fp) seq $t0 $t0 $t1 - sw $t0 -480($fp) - j label_121 - label_119: - lw $t0 -476($fp) + sw $t0 -512($fp) + j label_151 + label_149: + lw $t0 -504($fp) lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -468($fp) + sw $t1 -540($fp) + lw $t0 -496($fp) lw $t1 12($t0) - sw $t1 -504($fp) - lw $t0 -508($fp) + sw $t1 -536($fp) + lw $t0 -540($fp) move $a0 $t0 - lw $t0 -504($fp) + lw $t0 -536($fp) move $a1 $t0 jal equal_str - sw $v0 -480($fp) - j label_121 - label_120: - lw $t0 -476($fp) + sw $v0 -512($fp) + j label_151 + label_150: + lw $t0 -504($fp) lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -468($fp) + sw $t1 -540($fp) + lw $t0 -496($fp) lw $t1 12($t0) - sw $t1 -504($fp) - lw $t0 -508($fp) - lw $t1 -504($fp) + sw $t1 -536($fp) + lw $t0 -540($fp) + lw $t1 -536($fp) seq $t0 $t0 $t1 - sw $t0 -480($fp) - j label_121 - label_121: - lw $t0 -480($fp) + sw $t0 -512($fp) + j label_151 + label_151: + lw $t0 -512($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -512($fp) - lw $t0 -512($fp) + sw $v0 -544($fp) + lw $t0 -544($fp) lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -516($fp) - bne $t0 $zero label_122 + sw $t1 -548($fp) + lw $t0 -548($fp) + bne $t0 $zero label_152 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -464($fp) - lw $t0 -464($fp) - sw $t0 -520($fp) - j label_123 - label_122: + sw $v0 -492($fp) + lw $t0 -492($fp) + sw $t0 -552($fp) + j label_153 + label_152: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -460($fp) - lw $t0 -460($fp) - sw $t0 -520($fp) - label_123: - lw $t0 -520($fp) + sw $v0 -488($fp) + lw $t0 -488($fp) + sw $t0 -552($fp) + label_153: + lw $t0 -552($fp) lw $t1 12($t0) - sw $t1 -532($fp) + sw $t1 -564($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -440($fp) + lw $t0 -440($fp) + bne $t0 $zero label_154 + j label_155 + label_154: + li $v0 4 + la $a0 data_56 + syscall + li $v0 10 + syscall + label_155: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -4623,142 +4977,156 @@ function_neighbors_at_CellularAutomaton: lw $t0 92($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -412($fp) - la $t0 data_41 - sw $t0 -408($fp) - lw $t0 -408($fp) + sw $v0 -436($fp) + la $t0 data_57 + sw $t0 -432($fp) + lw $t0 -432($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -404($fp) - lw $t0 -412($fp) + sw $v0 -428($fp) + lw $t0 -436($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -436($fp) + sw $t1 -464($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -432($fp) + sw $t0 -460($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -428($fp) + sw $t0 -456($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -424($fp) - lw $t0 -436($fp) - lw $t1 -432($fp) + sw $t0 -452($fp) + lw $t0 -464($fp) + lw $t1 -460($fp) seq $t0 $t0 $t1 - sw $t0 -420($fp) - lw $t0 -420($fp) - bne $t0 $zero label_124 + sw $t0 -448($fp) + lw $t0 -448($fp) + bne $t0 $zero label_156 + lw $t0 -464($fp) + lw $t1 -456($fp) + seq $t0 $t0 $t1 + sw $t0 -448($fp) + lw $t0 -448($fp) + bne $t0 $zero label_157 + lw $t0 -464($fp) + lw $t1 -452($fp) + seq $t0 $t0 $t1 + sw $t0 -448($fp) + lw $t0 -448($fp) + bne $t0 $zero label_158 lw $t0 -436($fp) lw $t1 -428($fp) seq $t0 $t0 $t1 - sw $t0 -420($fp) - lw $t0 -420($fp) - bne $t0 $zero label_125 + sw $t0 -444($fp) + j label_159 + label_156: lw $t0 -436($fp) - lw $t1 -424($fp) - seq $t0 $t0 $t1 - sw $t0 -420($fp) - lw $t0 -420($fp) - bne $t0 $zero label_126 - lw $t0 -412($fp) - lw $t1 -404($fp) - seq $t0 $t0 $t1 - sw $t0 -416($fp) - j label_127 - label_124: - lw $t0 -412($fp) lw $t1 12($t0) - sw $t1 -444($fp) - lw $t0 -404($fp) + sw $t1 -472($fp) + lw $t0 -428($fp) lw $t1 12($t0) - sw $t1 -440($fp) - lw $t0 -444($fp) - lw $t1 -440($fp) + sw $t1 -468($fp) + lw $t0 -472($fp) + lw $t1 -468($fp) seq $t0 $t0 $t1 - sw $t0 -416($fp) - j label_127 - label_125: - lw $t0 -412($fp) + sw $t0 -444($fp) + j label_159 + label_157: + lw $t0 -436($fp) lw $t1 12($t0) - sw $t1 -444($fp) - lw $t0 -404($fp) + sw $t1 -472($fp) + lw $t0 -428($fp) lw $t1 12($t0) - sw $t1 -440($fp) - lw $t0 -444($fp) + sw $t1 -468($fp) + lw $t0 -472($fp) move $a0 $t0 - lw $t0 -440($fp) + lw $t0 -468($fp) move $a1 $t0 jal equal_str - sw $v0 -416($fp) - j label_127 - label_126: - lw $t0 -412($fp) + sw $v0 -444($fp) + j label_159 + label_158: + lw $t0 -436($fp) lw $t1 12($t0) - sw $t1 -444($fp) - lw $t0 -404($fp) + sw $t1 -472($fp) + lw $t0 -428($fp) lw $t1 12($t0) - sw $t1 -440($fp) - lw $t0 -444($fp) - lw $t1 -440($fp) + sw $t1 -468($fp) + lw $t0 -472($fp) + lw $t1 -468($fp) seq $t0 $t0 $t1 - sw $t0 -416($fp) - j label_127 - label_127: - lw $t0 -416($fp) + sw $t0 -444($fp) + j label_159 + label_159: + lw $t0 -444($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -448($fp) - lw $t0 -448($fp) + sw $v0 -476($fp) + lw $t0 -476($fp) lw $t1 12($t0) - sw $t1 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_128 + sw $t1 -480($fp) + lw $t0 -480($fp) + bne $t0 $zero label_160 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -400($fp) - lw $t0 -400($fp) - sw $t0 -456($fp) - j label_129 - label_128: - li $t0 1 + sw $v0 -424($fp) + lw $t0 -424($fp) + sw $t0 -484($fp) + j label_161 + label_160: + li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -396($fp) - lw $t0 -396($fp) - sw $t0 -456($fp) - label_129: - lw $t0 -456($fp) + sw $v0 -420($fp) + lw $t0 -420($fp) + sw $t0 -484($fp) + label_161: + lw $t0 -484($fp) lw $t1 12($t0) - sw $t1 -528($fp) - lw $t0 -532($fp) - lw $t1 -528($fp) + sw $t1 -560($fp) + lw $t0 -564($fp) + lw $t1 -560($fp) add $t0 $t0 $t1 - sw $t0 -524($fp) - lw $t0 -524($fp) + sw $t0 -556($fp) + lw $t0 -556($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -536($fp) - lw $t0 -536($fp) + sw $v0 -568($fp) + lw $t0 -568($fp) lw $t1 12($t0) - sw $t1 -548($fp) + sw $t1 -580($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -372($fp) + lw $t0 -372($fp) + bne $t0 $zero label_162 + j label_163 + label_162: + li $v0 4 + la $a0 data_58 + syscall + li $v0 10 + syscall + label_163: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -4774,142 +5142,156 @@ function_neighbors_at_CellularAutomaton: lw $t0 44($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -348($fp) - la $t0 data_42 - sw $t0 -344($fp) - lw $t0 -344($fp) + sw $v0 -368($fp) + la $t0 data_59 + sw $t0 -364($fp) + lw $t0 -364($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -340($fp) - lw $t0 -348($fp) + sw $v0 -360($fp) + lw $t0 -368($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -372($fp) + sw $t1 -396($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -368($fp) + sw $t0 -392($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -364($fp) + sw $t0 -388($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -360($fp) - lw $t0 -372($fp) - lw $t1 -368($fp) + sw $t0 -384($fp) + lw $t0 -396($fp) + lw $t1 -392($fp) seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_130 - lw $t0 -372($fp) - lw $t1 -364($fp) + sw $t0 -380($fp) + lw $t0 -380($fp) + bne $t0 $zero label_164 + lw $t0 -396($fp) + lw $t1 -388($fp) seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_131 - lw $t0 -372($fp) - lw $t1 -360($fp) + sw $t0 -380($fp) + lw $t0 -380($fp) + bne $t0 $zero label_165 + lw $t0 -396($fp) + lw $t1 -384($fp) seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_132 - lw $t0 -348($fp) - lw $t1 -340($fp) + sw $t0 -380($fp) + lw $t0 -380($fp) + bne $t0 $zero label_166 + lw $t0 -368($fp) + lw $t1 -360($fp) seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_133 - label_130: - lw $t0 -348($fp) + sw $t0 -376($fp) + j label_167 + label_164: + lw $t0 -368($fp) lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -340($fp) + sw $t1 -404($fp) + lw $t0 -360($fp) lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) + sw $t1 -400($fp) + lw $t0 -404($fp) + lw $t1 -400($fp) seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_133 - label_131: - lw $t0 -348($fp) + sw $t0 -376($fp) + j label_167 + label_165: + lw $t0 -368($fp) lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -340($fp) + sw $t1 -404($fp) + lw $t0 -360($fp) lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) + sw $t1 -400($fp) + lw $t0 -404($fp) move $a0 $t0 - lw $t0 -376($fp) + lw $t0 -400($fp) move $a1 $t0 jal equal_str - sw $v0 -352($fp) - j label_133 - label_132: - lw $t0 -348($fp) + sw $v0 -376($fp) + j label_167 + label_166: + lw $t0 -368($fp) lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -340($fp) + sw $t1 -404($fp) + lw $t0 -360($fp) lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) + sw $t1 -400($fp) + lw $t0 -404($fp) + lw $t1 -400($fp) seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_133 - label_133: - lw $t0 -352($fp) + sw $t0 -376($fp) + j label_167 + label_167: + lw $t0 -376($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -384($fp) - lw $t0 -384($fp) + sw $v0 -408($fp) + lw $t0 -408($fp) lw $t1 12($t0) - sw $t1 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_134 + sw $t1 -412($fp) + lw $t0 -412($fp) + bne $t0 $zero label_168 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -336($fp) - lw $t0 -336($fp) - sw $t0 -392($fp) - j label_135 - label_134: + sw $v0 -356($fp) + lw $t0 -356($fp) + sw $t0 -416($fp) + j label_169 + label_168: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -332($fp) - lw $t0 -332($fp) - sw $t0 -392($fp) - label_135: - lw $t0 -392($fp) + sw $v0 -352($fp) + lw $t0 -352($fp) + sw $t0 -416($fp) + label_169: + lw $t0 -416($fp) lw $t1 12($t0) - sw $t1 -544($fp) - lw $t0 -548($fp) - lw $t1 -544($fp) + sw $t1 -576($fp) + lw $t0 -580($fp) + lw $t1 -576($fp) add $t0 $t0 $t1 - sw $t0 -540($fp) - lw $t0 -540($fp) + sw $t0 -572($fp) + lw $t0 -572($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -552($fp) - lw $t0 -552($fp) + sw $v0 -584($fp) + lw $t0 -584($fp) lw $t1 12($t0) - sw $t1 -564($fp) + sw $t1 -596($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -304($fp) + lw $t0 -304($fp) + bne $t0 $zero label_170 + j label_171 + label_170: + li $v0 4 + la $a0 data_60 + syscall + li $v0 10 + syscall + label_171: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -4925,142 +5307,156 @@ function_neighbors_at_CellularAutomaton: lw $t0 104($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -284($fp) - la $t0 data_43 - sw $t0 -280($fp) - lw $t0 -280($fp) + sw $v0 -300($fp) + la $t0 data_61 + sw $t0 -296($fp) + lw $t0 -296($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -276($fp) - lw $t0 -284($fp) + sw $v0 -292($fp) + lw $t0 -300($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -308($fp) + sw $t1 -328($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -304($fp) + sw $t0 -324($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -300($fp) + sw $t0 -320($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -296($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) + sw $t0 -316($fp) + lw $t0 -328($fp) + lw $t1 -324($fp) seq $t0 $t0 $t1 - sw $t0 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_136 - lw $t0 -308($fp) - lw $t1 -300($fp) + sw $t0 -312($fp) + lw $t0 -312($fp) + bne $t0 $zero label_172 + lw $t0 -328($fp) + lw $t1 -320($fp) seq $t0 $t0 $t1 - sw $t0 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_137 - lw $t0 -308($fp) - lw $t1 -296($fp) + sw $t0 -312($fp) + lw $t0 -312($fp) + bne $t0 $zero label_173 + lw $t0 -328($fp) + lw $t1 -316($fp) seq $t0 $t0 $t1 - sw $t0 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_138 - lw $t0 -284($fp) - lw $t1 -276($fp) + sw $t0 -312($fp) + lw $t0 -312($fp) + bne $t0 $zero label_174 + lw $t0 -300($fp) + lw $t1 -292($fp) seq $t0 $t0 $t1 - sw $t0 -288($fp) - j label_139 - label_136: - lw $t0 -284($fp) + sw $t0 -308($fp) + j label_175 + label_172: + lw $t0 -300($fp) lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -276($fp) + sw $t1 -336($fp) + lw $t0 -292($fp) lw $t1 12($t0) - sw $t1 -312($fp) - lw $t0 -316($fp) - lw $t1 -312($fp) + sw $t1 -332($fp) + lw $t0 -336($fp) + lw $t1 -332($fp) seq $t0 $t0 $t1 - sw $t0 -288($fp) - j label_139 - label_137: - lw $t0 -284($fp) + sw $t0 -308($fp) + j label_175 + label_173: + lw $t0 -300($fp) lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -276($fp) + sw $t1 -336($fp) + lw $t0 -292($fp) lw $t1 12($t0) - sw $t1 -312($fp) - lw $t0 -316($fp) + sw $t1 -332($fp) + lw $t0 -336($fp) move $a0 $t0 - lw $t0 -312($fp) + lw $t0 -332($fp) move $a1 $t0 jal equal_str - sw $v0 -288($fp) - j label_139 - label_138: - lw $t0 -284($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -276($fp) + sw $v0 -308($fp) + j label_175 + label_174: + lw $t0 -300($fp) lw $t1 12($t0) - sw $t1 -312($fp) - lw $t0 -316($fp) - lw $t1 -312($fp) + sw $t1 -336($fp) + lw $t0 -292($fp) + lw $t1 12($t0) + sw $t1 -332($fp) + lw $t0 -336($fp) + lw $t1 -332($fp) seq $t0 $t0 $t1 - sw $t0 -288($fp) - j label_139 - label_139: - lw $t0 -288($fp) + sw $t0 -308($fp) + j label_175 + label_175: + lw $t0 -308($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -320($fp) - lw $t0 -320($fp) + sw $v0 -340($fp) + lw $t0 -340($fp) lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -324($fp) - bne $t0 $zero label_140 + sw $t1 -344($fp) + lw $t0 -344($fp) + bne $t0 $zero label_176 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 -272($fp) - sw $t0 -328($fp) - j label_141 - label_140: + sw $v0 -288($fp) + lw $t0 -288($fp) + sw $t0 -348($fp) + j label_177 + label_176: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -268($fp) - lw $t0 -268($fp) - sw $t0 -328($fp) - label_141: - lw $t0 -328($fp) + sw $v0 -284($fp) + lw $t0 -284($fp) + sw $t0 -348($fp) + label_177: + lw $t0 -348($fp) lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) + sw $t1 -592($fp) + lw $t0 -596($fp) + lw $t1 -592($fp) add $t0 $t0 $t1 - sw $t0 -556($fp) - lw $t0 -556($fp) + sw $t0 -588($fp) + lw $t0 -588($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -568($fp) - lw $t0 -568($fp) + sw $v0 -600($fp) + lw $t0 -600($fp) lw $t1 12($t0) - sw $t1 -580($fp) + sw $t1 -612($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -236($fp) + lw $t0 -236($fp) + bne $t0 $zero label_178 + j label_179 + label_178: + li $v0 4 + la $a0 data_62 + syscall + li $v0 10 + syscall + label_179: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5076,142 +5472,156 @@ function_neighbors_at_CellularAutomaton: lw $t0 64($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -220($fp) - la $t0 data_44 - sw $t0 -216($fp) - lw $t0 -216($fp) + sw $v0 -232($fp) + la $t0 data_63 + sw $t0 -228($fp) + lw $t0 -228($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -212($fp) - lw $t0 -220($fp) + sw $v0 -224($fp) + lw $t0 -232($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -244($fp) + sw $t1 -260($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -240($fp) + sw $t0 -256($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -236($fp) + sw $t0 -252($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -232($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) + sw $t0 -248($fp) + lw $t0 -260($fp) + lw $t1 -256($fp) seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_142 + sw $t0 -244($fp) lw $t0 -244($fp) - lw $t1 -236($fp) + bne $t0 $zero label_180 + lw $t0 -260($fp) + lw $t1 -252($fp) seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_143 + sw $t0 -244($fp) lw $t0 -244($fp) - lw $t1 -232($fp) + bne $t0 $zero label_181 + lw $t0 -260($fp) + lw $t1 -248($fp) seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_144 - lw $t0 -220($fp) - lw $t1 -212($fp) + sw $t0 -244($fp) + lw $t0 -244($fp) + bne $t0 $zero label_182 + lw $t0 -232($fp) + lw $t1 -224($fp) seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_145 - label_142: - lw $t0 -220($fp) + sw $t0 -240($fp) + j label_183 + label_180: + lw $t0 -232($fp) lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -212($fp) + sw $t1 -268($fp) + lw $t0 -224($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) + sw $t1 -264($fp) + lw $t0 -268($fp) + lw $t1 -264($fp) seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_145 - label_143: - lw $t0 -220($fp) + sw $t0 -240($fp) + j label_183 + label_181: + lw $t0 -232($fp) lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -212($fp) + sw $t1 -268($fp) + lw $t0 -224($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) + sw $t1 -264($fp) + lw $t0 -268($fp) move $a0 $t0 - lw $t0 -248($fp) + lw $t0 -264($fp) move $a1 $t0 jal equal_str - sw $v0 -224($fp) - j label_145 - label_144: - lw $t0 -220($fp) + sw $v0 -240($fp) + j label_183 + label_182: + lw $t0 -232($fp) lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -212($fp) + sw $t1 -268($fp) + lw $t0 -224($fp) lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) + sw $t1 -264($fp) + lw $t0 -268($fp) + lw $t1 -264($fp) seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_145 - label_145: - lw $t0 -224($fp) + sw $t0 -240($fp) + j label_183 + label_183: + lw $t0 -240($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) + sw $v0 -272($fp) + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_146 + sw $t1 -276($fp) + lw $t0 -276($fp) + bne $t0 $zero label_184 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -208($fp) - lw $t0 -208($fp) - sw $t0 -264($fp) - j label_147 - label_146: + sw $v0 -220($fp) + lw $t0 -220($fp) + sw $t0 -280($fp) + j label_185 + label_184: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - sw $t0 -264($fp) - label_147: - lw $t0 -264($fp) + sw $v0 -216($fp) + lw $t0 -216($fp) + sw $t0 -280($fp) + label_185: + lw $t0 -280($fp) lw $t1 12($t0) - sw $t1 -576($fp) - lw $t0 -580($fp) - lw $t1 -576($fp) + sw $t1 -608($fp) + lw $t0 -612($fp) + lw $t1 -608($fp) add $t0 $t0 $t1 - sw $t0 -572($fp) - lw $t0 -572($fp) + sw $t0 -604($fp) + lw $t0 -604($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -584($fp) - lw $t0 -584($fp) + sw $v0 -616($fp) + lw $t0 -616($fp) lw $t1 12($t0) - sw $t1 -596($fp) + sw $t1 -628($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -168($fp) + lw $t0 -168($fp) + bne $t0 $zero label_186 + j label_187 + label_186: + li $v0 4 + la $a0 data_64 + syscall + li $v0 10 + syscall + label_187: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5227,142 +5637,156 @@ function_neighbors_at_CellularAutomaton: lw $t0 68($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -156($fp) - la $t0 data_45 - sw $t0 -152($fp) - lw $t0 -152($fp) + sw $v0 -164($fp) + la $t0 data_65 + sw $t0 -160($fp) + lw $t0 -160($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -156($fp) + sw $v0 -156($fp) + lw $t0 -164($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -180($fp) + sw $t1 -192($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -176($fp) + sw $t0 -188($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -172($fp) + sw $t0 -184($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -168($fp) - lw $t0 -180($fp) - lw $t1 -176($fp) + sw $t0 -180($fp) + lw $t0 -192($fp) + lw $t1 -188($fp) seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_148 - lw $t0 -180($fp) - lw $t1 -172($fp) + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_188 + lw $t0 -192($fp) + lw $t1 -184($fp) seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_149 - lw $t0 -180($fp) - lw $t1 -168($fp) + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_189 + lw $t0 -192($fp) + lw $t1 -180($fp) seq $t0 $t0 $t1 - sw $t0 -164($fp) + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_190 lw $t0 -164($fp) - bne $t0 $zero label_150 - lw $t0 -156($fp) - lw $t1 -148($fp) + lw $t1 -156($fp) seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_151 - label_148: - lw $t0 -156($fp) + sw $t0 -172($fp) + j label_191 + label_188: + lw $t0 -164($fp) lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -148($fp) + sw $t1 -200($fp) + lw $t0 -156($fp) lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_151 - label_149: - lw $t0 -156($fp) + sw $t0 -172($fp) + j label_191 + label_189: + lw $t0 -164($fp) lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -148($fp) + sw $t1 -200($fp) + lw $t0 -156($fp) lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) + sw $t1 -196($fp) + lw $t0 -200($fp) move $a0 $t0 - lw $t0 -184($fp) + lw $t0 -196($fp) move $a1 $t0 jal equal_str - sw $v0 -160($fp) - j label_151 - label_150: - lw $t0 -156($fp) + sw $v0 -172($fp) + j label_191 + label_190: + lw $t0 -164($fp) lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -148($fp) + sw $t1 -200($fp) + lw $t0 -156($fp) lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_151 - label_151: - lw $t0 -160($fp) + sw $t0 -172($fp) + j label_191 + label_191: + lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -192($fp) - lw $t0 -192($fp) + sw $v0 -204($fp) + lw $t0 -204($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_152 + sw $t1 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_192 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) - sw $t0 -200($fp) - j label_153 - label_152: + sw $v0 -152($fp) + lw $t0 -152($fp) + sw $t0 -212($fp) + j label_193 + label_192: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) - sw $t0 -200($fp) - label_153: - lw $t0 -200($fp) + sw $v0 -148($fp) + lw $t0 -148($fp) + sw $t0 -212($fp) + label_193: + lw $t0 -212($fp) lw $t1 12($t0) - sw $t1 -592($fp) - lw $t0 -596($fp) - lw $t1 -592($fp) + sw $t1 -624($fp) + lw $t0 -628($fp) + lw $t1 -624($fp) add $t0 $t0 $t1 - sw $t0 -588($fp) - lw $t0 -588($fp) + sw $t0 -620($fp) + lw $t0 -620($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -600($fp) - lw $t0 -600($fp) + sw $v0 -632($fp) + lw $t0 -632($fp) lw $t1 12($t0) - sw $t1 -612($fp) + sw $t1 -644($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_194 + j label_195 + label_194: + li $v0 4 + la $a0 data_66 + syscall + li $v0 10 + syscall + label_195: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5378,142 +5802,156 @@ function_neighbors_at_CellularAutomaton: lw $t0 96($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -92($fp) - la $t0 data_46 - sw $t0 -88($fp) - lw $t0 -88($fp) + sw $v0 -96($fp) + la $t0 data_67 + sw $t0 -92($fp) + lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -92($fp) + sw $v0 -88($fp) + lw $t0 -96($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -116($fp) + sw $t1 -124($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -112($fp) + sw $t0 -120($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -108($fp) + sw $t0 -116($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -104($fp) - lw $t0 -116($fp) - lw $t1 -112($fp) + sw $t0 -112($fp) + lw $t0 -124($fp) + lw $t1 -120($fp) seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_154 - lw $t0 -116($fp) - lw $t1 -108($fp) + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_196 + lw $t0 -124($fp) + lw $t1 -116($fp) seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_155 - lw $t0 -116($fp) - lw $t1 -104($fp) + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_197 + lw $t0 -124($fp) + lw $t1 -112($fp) seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_156 - lw $t0 -92($fp) - lw $t1 -84($fp) + sw $t0 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_198 + lw $t0 -96($fp) + lw $t1 -88($fp) seq $t0 $t0 $t1 - sw $t0 -96($fp) - j label_157 - label_154: - lw $t0 -92($fp) + sw $t0 -104($fp) + j label_199 + label_196: + lw $t0 -96($fp) lw $t1 12($t0) - sw $t1 -124($fp) - lw $t0 -84($fp) + sw $t1 -132($fp) + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -124($fp) - lw $t1 -120($fp) + sw $t1 -128($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) seq $t0 $t0 $t1 - sw $t0 -96($fp) - j label_157 - label_155: - lw $t0 -92($fp) + sw $t0 -104($fp) + j label_199 + label_197: + lw $t0 -96($fp) lw $t1 12($t0) - sw $t1 -124($fp) - lw $t0 -84($fp) + sw $t1 -132($fp) + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -124($fp) + sw $t1 -128($fp) + lw $t0 -132($fp) move $a0 $t0 - lw $t0 -120($fp) + lw $t0 -128($fp) move $a1 $t0 jal equal_str - sw $v0 -96($fp) - j label_157 - label_156: - lw $t0 -92($fp) + sw $v0 -104($fp) + j label_199 + label_198: + lw $t0 -96($fp) lw $t1 12($t0) - sw $t1 -124($fp) - lw $t0 -84($fp) + sw $t1 -132($fp) + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -124($fp) - lw $t1 -120($fp) + sw $t1 -128($fp) + lw $t0 -132($fp) + lw $t1 -128($fp) seq $t0 $t0 $t1 - sw $t0 -96($fp) - j label_157 - label_157: - lw $t0 -96($fp) + sw $t0 -104($fp) + j label_199 + label_199: + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -128($fp) - lw $t0 -128($fp) + sw $v0 -136($fp) + lw $t0 -136($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_158 + sw $t1 -140($fp) + lw $t0 -140($fp) + bne $t0 $zero label_200 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -136($fp) - j label_159 - label_158: + sw $v0 -84($fp) + lw $t0 -84($fp) + sw $t0 -144($fp) + j label_201 + label_200: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -136($fp) - label_159: - lw $t0 -136($fp) + sw $v0 -80($fp) + lw $t0 -80($fp) + sw $t0 -144($fp) + label_201: + lw $t0 -144($fp) lw $t1 12($t0) - sw $t1 -608($fp) - lw $t0 -612($fp) - lw $t1 -608($fp) + sw $t1 -640($fp) + lw $t0 -644($fp) + lw $t1 -640($fp) add $t0 $t0 $t1 - sw $t0 -604($fp) - lw $t0 -604($fp) + sw $t0 -636($fp) + lw $t0 -636($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -616($fp) - lw $t0 -616($fp) + sw $v0 -648($fp) + lw $t0 -648($fp) lw $t1 12($t0) - sw $t1 -628($fp) + sw $t1 -660($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_202 + j label_203 + label_202: + li $v0 4 + la $a0 data_68 + syscall + li $v0 10 + syscall + label_203: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5530,7 +5968,7 @@ function_neighbors_at_CellularAutomaton: jalr $ra $t0 addi $sp $sp 8 sw $v0 -28($fp) - la $t0 data_47 + la $t0 data_69 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -5544,92 +5982,92 @@ function_neighbors_at_CellularAutomaton: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -52($fp) + sw $t1 -56($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -48($fp) + sw $t0 -52($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -44($fp) + sw $t0 -48($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -44($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) + seq $t0 $t0 $t1 sw $t0 -40($fp) - lw $t0 -52($fp) + lw $t0 -40($fp) + bne $t0 $zero label_204 + lw $t0 -56($fp) lw $t1 -48($fp) seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_160 - lw $t0 -52($fp) + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_205 + lw $t0 -56($fp) lw $t1 -44($fp) seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_161 - lw $t0 -52($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_162 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_206 lw $t0 -28($fp) lw $t1 -20($fp) seq $t0 $t0 $t1 - sw $t0 -32($fp) - j label_163 - label_160: + sw $t0 -36($fp) + j label_207 + label_204: lw $t0 -28($fp) lw $t1 12($t0) - sw $t1 -60($fp) + sw $t1 -64($fp) lw $t0 -20($fp) lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) + sw $t1 -60($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) seq $t0 $t0 $t1 - sw $t0 -32($fp) - j label_163 - label_161: + sw $t0 -36($fp) + j label_207 + label_205: lw $t0 -28($fp) lw $t1 12($t0) - sw $t1 -60($fp) + sw $t1 -64($fp) lw $t0 -20($fp) lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) + sw $t1 -60($fp) + lw $t0 -64($fp) move $a0 $t0 - lw $t0 -56($fp) + lw $t0 -60($fp) move $a1 $t0 jal equal_str - sw $v0 -32($fp) - j label_163 - label_162: + sw $v0 -36($fp) + j label_207 + label_206: lw $t0 -28($fp) lw $t1 12($t0) - sw $t1 -60($fp) + sw $t1 -64($fp) lw $t0 -20($fp) lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - j label_163 - label_163: - lw $t0 -32($fp) + sw $t1 -60($fp) + lw $t0 -64($fp) + lw $t1 -60($fp) + seq $t0 $t0 $t1 + sw $t0 -36($fp) + j label_207 + label_207: + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -68($fp) + sw $v0 -68($fp) lw $t0 -68($fp) - bne $t0 $zero label_164 + lw $t1 12($t0) + sw $t1 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_208 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -5637,9 +6075,9 @@ function_neighbors_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) - sw $t0 -72($fp) - j label_165 - label_164: + sw $t0 -76($fp) + j label_209 + label_208: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) @@ -5647,23 +6085,23 @@ function_neighbors_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -72($fp) - label_165: - lw $t0 -72($fp) + sw $t0 -76($fp) + label_209: + lw $t0 -76($fp) lw $t1 12($t0) - sw $t1 -624($fp) - lw $t0 -628($fp) - lw $t1 -624($fp) + sw $t1 -656($fp) + lw $t0 -660($fp) + lw $t1 -656($fp) add $t0 $t0 $t1 - sw $t0 -620($fp) - lw $t0 -620($fp) + sw $t0 -652($fp) + lw $t0 -652($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -632($fp) - lw $v0 -632($fp) - addi $sp $sp 640 + sw $v0 -664($fp) + lw $v0 -664($fp) + addi $sp $sp 672 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -5676,7 +6114,21 @@ function_cell_at_next_evolution_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -208 + addi $sp $sp -220 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -168($fp) + lw $t0 -168($fp) + bne $t0 $zero label_210 + j label_211 + label_210: + li $v0 4 + la $a0 data_70 + syscall + li $v0 10 + syscall + label_211: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5692,105 +6144,119 @@ function_cell_at_next_evolution_at_CellularAutomaton: lw $t0 56($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -156($fp) + sw $v0 -164($fp) li $t0 3 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -156($fp) + sw $v0 -160($fp) + lw $t0 -164($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -180($fp) + sw $t1 -192($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -176($fp) + sw $t0 -188($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -172($fp) + sw $t0 -184($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -168($fp) - lw $t0 -180($fp) - lw $t1 -176($fp) + sw $t0 -180($fp) + lw $t0 -192($fp) + lw $t1 -188($fp) seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_166 - lw $t0 -180($fp) - lw $t1 -172($fp) + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_212 + lw $t0 -192($fp) + lw $t1 -184($fp) seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_167 - lw $t0 -180($fp) - lw $t1 -168($fp) + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_213 + lw $t0 -192($fp) + lw $t1 -180($fp) seq $t0 $t0 $t1 - sw $t0 -164($fp) + sw $t0 -176($fp) + lw $t0 -176($fp) + bne $t0 $zero label_214 lw $t0 -164($fp) - bne $t0 $zero label_168 - lw $t0 -156($fp) - lw $t1 -152($fp) + lw $t1 -160($fp) seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_169 - label_166: - lw $t0 -156($fp) + sw $t0 -172($fp) + j label_215 + label_212: + lw $t0 -164($fp) lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -152($fp) + sw $t1 -200($fp) + lw $t0 -160($fp) lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_169 - label_167: - lw $t0 -156($fp) + sw $t0 -172($fp) + j label_215 + label_213: + lw $t0 -164($fp) lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -152($fp) + sw $t1 -200($fp) + lw $t0 -160($fp) lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) + sw $t1 -196($fp) + lw $t0 -200($fp) move $a0 $t0 - lw $t0 -184($fp) + lw $t0 -196($fp) move $a1 $t0 jal equal_str - sw $v0 -160($fp) - j label_169 - label_168: - lw $t0 -156($fp) + sw $v0 -172($fp) + j label_215 + label_214: + lw $t0 -164($fp) lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -152($fp) + sw $t1 -200($fp) + lw $t0 -160($fp) lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) + sw $t1 -196($fp) + lw $t0 -200($fp) + lw $t1 -196($fp) seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_169 - label_169: - lw $t0 -160($fp) + sw $t0 -172($fp) + j label_215 + label_215: + lw $t0 -172($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -192($fp) - lw $t0 -192($fp) + sw $v0 -204($fp) + lw $t0 -204($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_182 + sw $t1 -208($fp) + lw $t0 -208($fp) + bne $t0 $zero label_232 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -112($fp) + lw $t0 -112($fp) + bne $t0 $zero label_216 + j label_217 + label_216: + li $v0 4 + la $a0 data_71 + syscall + li $v0 10 + syscall + label_217: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5806,117 +6272,131 @@ function_cell_at_next_evolution_at_CellularAutomaton: lw $t0 56($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -104($fp) + sw $v0 -108($fp) li $t0 2 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -104($fp) + sw $v0 -104($fp) + lw $t0 -108($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -128($fp) + sw $t1 -136($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -124($fp) + sw $t0 -132($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -120($fp) + sw $t0 -128($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -128($fp) - lw $t1 -124($fp) + sw $t0 -124($fp) + lw $t0 -136($fp) + lw $t1 -132($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_170 - lw $t0 -128($fp) - lw $t1 -120($fp) + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_218 + lw $t0 -136($fp) + lw $t1 -128($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_171 - lw $t0 -128($fp) - lw $t1 -116($fp) + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_219 + lw $t0 -136($fp) + lw $t1 -124($fp) seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_172 - lw $t0 -104($fp) - lw $t1 -100($fp) + sw $t0 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_220 + lw $t0 -108($fp) + lw $t1 -104($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_173 - label_170: - lw $t0 -104($fp) + sw $t0 -116($fp) + j label_221 + label_218: + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -100($fp) + sw $t1 -144($fp) + lw $t0 -104($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) + sw $t1 -140($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_173 - label_171: - lw $t0 -104($fp) + sw $t0 -116($fp) + j label_221 + label_219: + lw $t0 -108($fp) lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -100($fp) + sw $t1 -144($fp) + lw $t0 -104($fp) lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) + sw $t1 -140($fp) + lw $t0 -144($fp) move $a0 $t0 - lw $t0 -132($fp) + lw $t0 -140($fp) move $a1 $t0 jal equal_str - sw $v0 -108($fp) - j label_173 - label_172: - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_173 - label_173: + sw $v0 -116($fp) + j label_221 + label_220: lw $t0 -108($fp) + lw $t1 12($t0) + sw $t1 -144($fp) + lw $t0 -104($fp) + lw $t1 12($t0) + sw $t1 -140($fp) + lw $t0 -144($fp) + lw $t1 -140($fp) + seq $t0 $t0 $t1 + sw $t0 -116($fp) + j label_221 + label_221: + lw $t0 -116($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) + sw $v0 -148($fp) + lw $t0 -148($fp) lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_174 - la $t0 data_48 - sw $t0 -96($fp) - lw $t0 -96($fp) + sw $t1 -152($fp) + lw $t0 -152($fp) + bne $t0 $zero label_222 + la $t0 data_72 + sw $t0 -100($fp) + lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -148($fp) - j label_181 - label_174: + sw $v0 -96($fp) + lw $t0 -96($fp) + sw $t0 -156($fp) + j label_231 + label_222: + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_223 + j label_224 + label_223: + li $v0 4 + la $a0 data_73 + syscall + li $v0 10 + syscall + label_224: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -5933,7 +6413,7 @@ function_cell_at_next_evolution_at_CellularAutomaton: jalr $ra $t0 addi $sp $sp 8 sw $v0 -44($fp) - la $t0 data_49 + la $t0 data_74 sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 @@ -5947,93 +6427,93 @@ function_cell_at_next_evolution_at_CellularAutomaton: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -68($fp) + sw $t1 -72($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -64($fp) + sw $t0 -68($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -60($fp) + sw $t0 -64($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) + sw $t0 -60($fp) + lw $t0 -72($fp) + lw $t1 -68($fp) + seq $t0 $t0 $t1 sw $t0 -56($fp) - lw $t0 -68($fp) + lw $t0 -56($fp) + bne $t0 $zero label_225 + lw $t0 -72($fp) lw $t1 -64($fp) seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_175 - lw $t0 -68($fp) + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_226 + lw $t0 -72($fp) lw $t1 -60($fp) seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_176 - lw $t0 -68($fp) - lw $t1 -56($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_177 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_227 lw $t0 -44($fp) lw $t1 -36($fp) seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_178 - label_175: + sw $t0 -52($fp) + j label_228 + label_225: lw $t0 -44($fp) lw $t1 12($t0) - sw $t1 -76($fp) + sw $t1 -80($fp) lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_178 - label_176: + sw $t0 -52($fp) + j label_228 + label_226: lw $t0 -44($fp) lw $t1 12($t0) - sw $t1 -76($fp) + sw $t1 -80($fp) lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) + sw $t1 -76($fp) + lw $t0 -80($fp) move $a0 $t0 - lw $t0 -72($fp) + lw $t0 -76($fp) move $a1 $t0 jal equal_str - sw $v0 -48($fp) - j label_178 - label_177: + sw $v0 -52($fp) + j label_228 + label_227: lw $t0 -44($fp) lw $t1 12($t0) - sw $t1 -76($fp) + sw $t1 -80($fp) lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) + sw $t1 -76($fp) + lw $t0 -80($fp) + lw $t1 -76($fp) seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_178 - label_178: - lw $t0 -48($fp) + sw $t0 -52($fp) + j label_228 + label_228: + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - lw $t1 12($t0) - sw $t1 -84($fp) + sw $v0 -84($fp) lw $t0 -84($fp) - bne $t0 $zero label_179 - la $t0 data_50 + lw $t1 12($t0) + sw $t1 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_229 + la $t0 data_75 sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 @@ -6042,10 +6522,10 @@ function_cell_at_next_evolution_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) - sw $t0 -88($fp) - j label_180 - label_179: - la $t0 data_51 + sw $t0 -92($fp) + j label_230 + label_229: + la $t0 data_76 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -6054,16 +6534,16 @@ function_cell_at_next_evolution_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -20($fp) lw $t0 -20($fp) - sw $t0 -88($fp) - label_180: - lw $t0 -88($fp) - sw $t0 -148($fp) - label_181: - lw $t0 -148($fp) - sw $t0 -200($fp) - j label_183 - label_182: - la $t0 data_52 + sw $t0 -92($fp) + label_230: + lw $t0 -92($fp) + sw $t0 -156($fp) + label_231: + lw $t0 -156($fp) + sw $t0 -212($fp) + j label_233 + label_232: + la $t0 data_77 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -6072,10 +6552,10 @@ function_cell_at_next_evolution_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -200($fp) - label_183: - lw $v0 -200($fp) - addi $sp $sp 208 + sw $t0 -212($fp) + label_233: + lw $v0 -212($fp) + addi $sp $sp 220 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -6088,15 +6568,29 @@ function_evolve_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -88 + addi $sp $sp -96 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -76($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) + sw $t0 -88($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) lw $t0 -76($fp) - sw $t0 -80($fp) + bne $t0 $zero label_234 + j label_235 + label_234: + li $v0 4 + la $a0 data_78 + syscall + li $v0 10 + syscall + label_235: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6109,45 +6603,59 @@ function_evolve_at_CellularAutomaton: lw $t0 72($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -72($fp) + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -80($fp) la $t0 data_10 - sw $t0 -64($fp) - lw $t0 -64($fp) + sw $t0 -68($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -64($fp) - label_184: + sw $v0 -68($fp) + label_236: + lw $t0 -88($fp) + lw $t1 12($t0) + sw $t1 -56($fp) lw $t0 -80($fp) lw $t1 12($t0) sw $t1 -52($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) slt $t1 $t0 $t1 - sw $t1 -44($fp) - lw $t0 -44($fp) + sw $t1 -48($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -60($fp) + sw $v0 -60($fp) lw $t0 -60($fp) - bne $t0 $zero label_185 - j label_188 - label_185: + lw $t1 12($t0) + sw $t1 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_237 + j label_242 + label_237: + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -44($fp) + lw $t0 -44($fp) + bne $t0 $zero label_238 + j label_239 + label_238: + li $v0 4 + la $a0 data_79 + syscall + li $v0 10 + syscall + label_239: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -80($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6160,27 +6668,27 @@ function_evolve_at_CellularAutomaton: jalr $ra $t0 addi $sp $sp 8 sw $v0 -40($fp) - lw $t0 -64($fp) + lw $t0 -68($fp) li $t1 0 seq $t0 $t0 $t1 sw $t0 -36($fp) lw $t0 -36($fp) - bne $t0 $zero label_186 - j label_187 - label_186: + bne $t0 $zero label_240 + j label_241 + label_240: li $v0 4 - la $a0 data_53 + la $a0 data_80 syscall li $v0 10 syscall - label_187: - lw $t0 -64($fp) + label_241: + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -64($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -6191,8 +6699,8 @@ function_evolve_at_CellularAutomaton: addi $sp $sp 8 sw $v0 -32($fp) lw $t0 -32($fp) - sw $t0 -64($fp) - lw $t0 -80($fp) + sw $t0 -68($fp) + lw $t0 -88($fp) lw $t1 12($t0) sw $t1 -24($fp) li $t0 1 @@ -6213,17 +6721,17 @@ function_evolve_at_CellularAutomaton: sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -80($fp) - j label_184 - label_188: - lw $t0 -64($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -88($fp) + j label_236 + label_242: + lw $t0 -68($fp) lw $t1 0($fp) addi $t1 $t1 24 sw $t0 0($t1) lw $v0 0($fp) - addi $sp $sp 88 + addi $sp $sp 96 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -6236,25 +6744,39 @@ function_option_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -1496 + addi $sp $sp -1596 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -1488($fp) - la $t0 data_54 - sw $t0 -1480($fp) - lw $t0 -1480($fp) + sw $v0 -1588($fp) + la $t0 data_81 + sw $t0 -1584($fp) + lw $t0 -1584($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1476($fp) + sw $v0 -1580($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1576($fp) + lw $t0 -1576($fp) + bne $t0 $zero label_243 + j label_244 + label_243: + li $v0 4 + la $a0 data_82 + syscall + li $v0 10 + syscall + label_244: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1476($fp) + lw $t0 -1580($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6266,19 +6788,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1484($fp) - la $t0 data_55 - sw $t0 -1468($fp) - lw $t0 -1468($fp) + sw $v0 -1572($fp) + la $t0 data_83 + sw $t0 -1568($fp) + lw $t0 -1568($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1464($fp) + sw $v0 -1564($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1560($fp) + lw $t0 -1560($fp) + bne $t0 $zero label_245 + j label_246 + label_245: + li $v0 4 + la $a0 data_84 + syscall + li $v0 10 + syscall + label_246: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1464($fp) + lw $t0 -1564($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6290,19 +6826,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1472($fp) - la $t0 data_56 - sw $t0 -1456($fp) - lw $t0 -1456($fp) + sw $v0 -1556($fp) + la $t0 data_85 + sw $t0 -1552($fp) + lw $t0 -1552($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1452($fp) + sw $v0 -1548($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1544($fp) + lw $t0 -1544($fp) + bne $t0 $zero label_247 + j label_248 + label_247: + li $v0 4 + la $a0 data_86 + syscall + li $v0 10 + syscall + label_248: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1452($fp) + lw $t0 -1548($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6314,19 +6864,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1460($fp) - la $t0 data_57 - sw $t0 -1444($fp) - lw $t0 -1444($fp) + sw $v0 -1540($fp) + la $t0 data_87 + sw $t0 -1536($fp) + lw $t0 -1536($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1440($fp) + sw $v0 -1532($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1528($fp) + lw $t0 -1528($fp) + bne $t0 $zero label_249 + j label_250 + label_249: + li $v0 4 + la $a0 data_88 + syscall + li $v0 10 + syscall + label_250: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1440($fp) + lw $t0 -1532($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6338,19 +6902,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1448($fp) - la $t0 data_58 - sw $t0 -1432($fp) - lw $t0 -1432($fp) + sw $v0 -1524($fp) + la $t0 data_89 + sw $t0 -1520($fp) + lw $t0 -1520($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1428($fp) + sw $v0 -1516($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1512($fp) + lw $t0 -1512($fp) + bne $t0 $zero label_251 + j label_252 + label_251: + li $v0 4 + la $a0 data_90 + syscall + li $v0 10 + syscall + label_252: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1428($fp) + lw $t0 -1516($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6362,19 +6940,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1436($fp) - la $t0 data_59 - sw $t0 -1420($fp) - lw $t0 -1420($fp) + sw $v0 -1508($fp) + la $t0 data_91 + sw $t0 -1504($fp) + lw $t0 -1504($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1416($fp) + sw $v0 -1500($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1496($fp) + lw $t0 -1496($fp) + bne $t0 $zero label_253 + j label_254 + label_253: + li $v0 4 + la $a0 data_92 + syscall + li $v0 10 + syscall + label_254: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1416($fp) + lw $t0 -1500($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6386,19 +6978,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1424($fp) - la $t0 data_60 - sw $t0 -1408($fp) - lw $t0 -1408($fp) + sw $v0 -1492($fp) + la $t0 data_93 + sw $t0 -1488($fp) + lw $t0 -1488($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1404($fp) + sw $v0 -1484($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1480($fp) + lw $t0 -1480($fp) + bne $t0 $zero label_255 + j label_256 + label_255: + li $v0 4 + la $a0 data_94 + syscall + li $v0 10 + syscall + label_256: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1404($fp) + lw $t0 -1484($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6410,19 +7016,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1412($fp) - la $t0 data_61 - sw $t0 -1396($fp) - lw $t0 -1396($fp) + sw $v0 -1476($fp) + la $t0 data_95 + sw $t0 -1472($fp) + lw $t0 -1472($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1392($fp) + sw $v0 -1468($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1464($fp) + lw $t0 -1464($fp) + bne $t0 $zero label_257 + j label_258 + label_257: + li $v0 4 + la $a0 data_96 + syscall + li $v0 10 + syscall + label_258: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1392($fp) + lw $t0 -1468($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6434,19 +7054,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1400($fp) - la $t0 data_62 - sw $t0 -1384($fp) - lw $t0 -1384($fp) + sw $v0 -1460($fp) + la $t0 data_97 + sw $t0 -1456($fp) + lw $t0 -1456($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1380($fp) + sw $v0 -1452($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1448($fp) + lw $t0 -1448($fp) + bne $t0 $zero label_259 + j label_260 + label_259: + li $v0 4 + la $a0 data_98 + syscall + li $v0 10 + syscall + label_260: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1380($fp) + lw $t0 -1452($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6458,19 +7092,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1388($fp) - la $t0 data_63 - sw $t0 -1372($fp) - lw $t0 -1372($fp) + sw $v0 -1444($fp) + la $t0 data_99 + sw $t0 -1440($fp) + lw $t0 -1440($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1368($fp) + sw $v0 -1436($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1432($fp) + lw $t0 -1432($fp) + bne $t0 $zero label_261 + j label_262 + label_261: + li $v0 4 + la $a0 data_100 + syscall + li $v0 10 + syscall + label_262: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1368($fp) + lw $t0 -1436($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6482,19 +7130,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1376($fp) - la $t0 data_64 - sw $t0 -1360($fp) - lw $t0 -1360($fp) + sw $v0 -1428($fp) + la $t0 data_101 + sw $t0 -1424($fp) + lw $t0 -1424($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1356($fp) + sw $v0 -1420($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1416($fp) + lw $t0 -1416($fp) + bne $t0 $zero label_263 + j label_264 + label_263: + li $v0 4 + la $a0 data_102 + syscall + li $v0 10 + syscall + label_264: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1356($fp) + lw $t0 -1420($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6506,19 +7168,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1364($fp) - la $t0 data_65 - sw $t0 -1348($fp) - lw $t0 -1348($fp) + sw $v0 -1412($fp) + la $t0 data_103 + sw $t0 -1408($fp) + lw $t0 -1408($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1344($fp) + sw $v0 -1404($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1400($fp) + lw $t0 -1400($fp) + bne $t0 $zero label_265 + j label_266 + label_265: + li $v0 4 + la $a0 data_104 + syscall + li $v0 10 + syscall + label_266: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1344($fp) + lw $t0 -1404($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6530,19 +7206,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1352($fp) - la $t0 data_66 - sw $t0 -1336($fp) - lw $t0 -1336($fp) + sw $v0 -1396($fp) + la $t0 data_105 + sw $t0 -1392($fp) + lw $t0 -1392($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1332($fp) + sw $v0 -1388($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1384($fp) + lw $t0 -1384($fp) + bne $t0 $zero label_267 + j label_268 + label_267: + li $v0 4 + la $a0 data_106 + syscall + li $v0 10 + syscall + label_268: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1332($fp) + lw $t0 -1388($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6554,19 +7244,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1340($fp) - la $t0 data_67 - sw $t0 -1324($fp) - lw $t0 -1324($fp) + sw $v0 -1380($fp) + la $t0 data_107 + sw $t0 -1376($fp) + lw $t0 -1376($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1320($fp) + sw $v0 -1372($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1368($fp) + lw $t0 -1368($fp) + bne $t0 $zero label_269 + j label_270 + label_269: + li $v0 4 + la $a0 data_108 + syscall + li $v0 10 + syscall + label_270: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1320($fp) + lw $t0 -1372($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6578,19 +7282,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1328($fp) - la $t0 data_68 - sw $t0 -1312($fp) - lw $t0 -1312($fp) + sw $v0 -1364($fp) + la $t0 data_109 + sw $t0 -1360($fp) + lw $t0 -1360($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1308($fp) + sw $v0 -1356($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1352($fp) + lw $t0 -1352($fp) + bne $t0 $zero label_271 + j label_272 + label_271: + li $v0 4 + la $a0 data_110 + syscall + li $v0 10 + syscall + label_272: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1308($fp) + lw $t0 -1356($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6602,19 +7320,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1316($fp) - la $t0 data_69 - sw $t0 -1300($fp) - lw $t0 -1300($fp) + sw $v0 -1348($fp) + la $t0 data_111 + sw $t0 -1344($fp) + lw $t0 -1344($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1296($fp) + sw $v0 -1340($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1336($fp) + lw $t0 -1336($fp) + bne $t0 $zero label_273 + j label_274 + label_273: + li $v0 4 + la $a0 data_112 + syscall + li $v0 10 + syscall + label_274: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1296($fp) + lw $t0 -1340($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6626,19 +7358,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1304($fp) - la $t0 data_70 - sw $t0 -1288($fp) - lw $t0 -1288($fp) + sw $v0 -1332($fp) + la $t0 data_113 + sw $t0 -1328($fp) + lw $t0 -1328($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1284($fp) + sw $v0 -1324($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1320($fp) + lw $t0 -1320($fp) + bne $t0 $zero label_275 + j label_276 + label_275: + li $v0 4 + la $a0 data_114 + syscall + li $v0 10 + syscall + label_276: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1284($fp) + lw $t0 -1324($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6650,19 +7396,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1292($fp) - la $t0 data_71 - sw $t0 -1276($fp) - lw $t0 -1276($fp) + sw $v0 -1316($fp) + la $t0 data_115 + sw $t0 -1312($fp) + lw $t0 -1312($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1272($fp) + sw $v0 -1308($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1304($fp) + lw $t0 -1304($fp) + bne $t0 $zero label_277 + j label_278 + label_277: + li $v0 4 + la $a0 data_116 + syscall + li $v0 10 + syscall + label_278: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1272($fp) + lw $t0 -1308($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6674,19 +7434,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1280($fp) - la $t0 data_72 - sw $t0 -1264($fp) - lw $t0 -1264($fp) + sw $v0 -1300($fp) + la $t0 data_117 + sw $t0 -1296($fp) + lw $t0 -1296($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1260($fp) + sw $v0 -1292($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1288($fp) + lw $t0 -1288($fp) + bne $t0 $zero label_279 + j label_280 + label_279: + li $v0 4 + la $a0 data_118 + syscall + li $v0 10 + syscall + label_280: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1260($fp) + lw $t0 -1292($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6698,19 +7472,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1268($fp) - la $t0 data_73 - sw $t0 -1252($fp) - lw $t0 -1252($fp) + sw $v0 -1284($fp) + la $t0 data_119 + sw $t0 -1280($fp) + lw $t0 -1280($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1248($fp) + sw $v0 -1276($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1272($fp) + lw $t0 -1272($fp) + bne $t0 $zero label_281 + j label_282 + label_281: + li $v0 4 + la $a0 data_120 + syscall + li $v0 10 + syscall + label_282: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1248($fp) + lw $t0 -1276($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6722,19 +7510,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1256($fp) - la $t0 data_74 - sw $t0 -1240($fp) - lw $t0 -1240($fp) + sw $v0 -1268($fp) + la $t0 data_121 + sw $t0 -1264($fp) + lw $t0 -1264($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1236($fp) + sw $v0 -1260($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1256($fp) + lw $t0 -1256($fp) + bne $t0 $zero label_283 + j label_284 + label_283: + li $v0 4 + la $a0 data_122 + syscall + li $v0 10 + syscall + label_284: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1236($fp) + lw $t0 -1260($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6746,19 +7548,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1244($fp) - la $t0 data_75 - sw $t0 -1228($fp) - lw $t0 -1228($fp) + sw $v0 -1252($fp) + la $t0 data_123 + sw $t0 -1248($fp) + lw $t0 -1248($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1224($fp) + sw $v0 -1244($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1240($fp) + lw $t0 -1240($fp) + bne $t0 $zero label_285 + j label_286 + label_285: + li $v0 4 + la $a0 data_124 + syscall + li $v0 10 + syscall + label_286: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1224($fp) + lw $t0 -1244($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6770,19 +7586,33 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1232($fp) - la $t0 data_76 - sw $t0 -1216($fp) - lw $t0 -1216($fp) + sw $v0 -1236($fp) + la $t0 data_125 + sw $t0 -1232($fp) + lw $t0 -1232($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1212($fp) + sw $v0 -1228($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1224($fp) + lw $t0 -1224($fp) + bne $t0 $zero label_287 + j label_288 + label_287: + li $v0 4 + la $a0 data_126 + syscall + li $v0 10 + syscall + label_288: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1212($fp) + lw $t0 -1228($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6796,6 +7626,20 @@ function_option_at_CellularAutomaton: addi $sp $sp 8 sw $v0 -1220($fp) lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1216($fp) + lw $t0 -1216($fp) + bne $t0 $zero label_289 + j label_290 + label_289: + li $v0 4 + la $a0 data_127 + syscall + li $v0 10 + syscall + label_290: + lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6807,21 +7651,35 @@ function_option_at_CellularAutomaton: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -1208($fp) + sw $v0 -1212($fp) + lw $t0 -1212($fp) + sw $t0 -1588($fp) + la $t0 data_128 + sw $t0 -1208($fp) lw $t0 -1208($fp) - sw $t0 -1488($fp) - la $t0 data_77 - sw $t0 -1200($fp) - lw $t0 -1200($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -1196($fp) + sw $v0 -1204($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -1200($fp) + lw $t0 -1200($fp) + bne $t0 $zero label_291 + j label_292 + label_291: + li $v0 4 + la $a0 data_129 + syscall + li $v0 10 + syscall + label_292: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -1196($fp) + lw $t0 -1204($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -6833,14 +7691,14 @@ function_option_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -1204($fp) + sw $v0 -1196($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -1148($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -6864,26 +7722,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -1156($fp) lw $t0 -1156($fp) - bne $t0 $zero label_189 + bne $t0 $zero label_293 lw $t0 -1172($fp) lw $t1 -1164($fp) seq $t0 $t0 $t1 sw $t0 -1156($fp) lw $t0 -1156($fp) - bne $t0 $zero label_190 + bne $t0 $zero label_294 lw $t0 -1172($fp) lw $t1 -1160($fp) seq $t0 $t0 $t1 sw $t0 -1156($fp) lw $t0 -1156($fp) - bne $t0 $zero label_191 - lw $t0 -1488($fp) + bne $t0 $zero label_295 + lw $t0 -1588($fp) lw $t1 -1148($fp) seq $t0 $t0 $t1 sw $t0 -1152($fp) - j label_192 - label_189: - lw $t0 -1488($fp) + j label_296 + label_293: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -1180($fp) lw $t0 -1148($fp) @@ -6893,9 +7751,9 @@ function_option_at_CellularAutomaton: lw $t1 -1176($fp) seq $t0 $t0 $t1 sw $t0 -1152($fp) - j label_192 - label_190: - lw $t0 -1488($fp) + j label_296 + label_294: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -1180($fp) lw $t0 -1148($fp) @@ -6907,9 +7765,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -1152($fp) - j label_192 - label_191: - lw $t0 -1488($fp) + j label_296 + label_295: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -1180($fp) lw $t0 -1148($fp) @@ -6919,8 +7777,8 @@ function_option_at_CellularAutomaton: lw $t1 -1176($fp) seq $t0 $t0 $t1 sw $t0 -1152($fp) - j label_192 - label_192: + j label_296 + label_296: lw $t0 -1152($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -6931,14 +7789,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -1188($fp) lw $t0 -1188($fp) - bne $t0 $zero label_313 + bne $t0 $zero label_417 li $t0 2 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -1100($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -6962,26 +7820,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -1108($fp) lw $t0 -1108($fp) - bne $t0 $zero label_193 + bne $t0 $zero label_297 lw $t0 -1124($fp) lw $t1 -1116($fp) seq $t0 $t0 $t1 sw $t0 -1108($fp) lw $t0 -1108($fp) - bne $t0 $zero label_194 + bne $t0 $zero label_298 lw $t0 -1124($fp) lw $t1 -1112($fp) seq $t0 $t0 $t1 sw $t0 -1108($fp) lw $t0 -1108($fp) - bne $t0 $zero label_195 - lw $t0 -1488($fp) + bne $t0 $zero label_299 + lw $t0 -1588($fp) lw $t1 -1100($fp) seq $t0 $t0 $t1 sw $t0 -1104($fp) - j label_196 - label_193: - lw $t0 -1488($fp) + j label_300 + label_297: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -1132($fp) lw $t0 -1100($fp) @@ -6991,9 +7849,9 @@ function_option_at_CellularAutomaton: lw $t1 -1128($fp) seq $t0 $t0 $t1 sw $t0 -1104($fp) - j label_196 - label_194: - lw $t0 -1488($fp) + j label_300 + label_298: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -1132($fp) lw $t0 -1100($fp) @@ -7005,9 +7863,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -1104($fp) - j label_196 - label_195: - lw $t0 -1488($fp) + j label_300 + label_299: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -1132($fp) lw $t0 -1100($fp) @@ -7017,8 +7875,8 @@ function_option_at_CellularAutomaton: lw $t1 -1128($fp) seq $t0 $t0 $t1 sw $t0 -1104($fp) - j label_196 - label_196: + j label_300 + label_300: lw $t0 -1104($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7029,14 +7887,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -1140($fp) lw $t0 -1140($fp) - bne $t0 $zero label_311 + bne $t0 $zero label_415 li $t0 3 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -1052($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -7060,26 +7918,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -1060($fp) lw $t0 -1060($fp) - bne $t0 $zero label_197 + bne $t0 $zero label_301 lw $t0 -1076($fp) lw $t1 -1068($fp) seq $t0 $t0 $t1 sw $t0 -1060($fp) lw $t0 -1060($fp) - bne $t0 $zero label_198 + bne $t0 $zero label_302 lw $t0 -1076($fp) lw $t1 -1064($fp) seq $t0 $t0 $t1 sw $t0 -1060($fp) lw $t0 -1060($fp) - bne $t0 $zero label_199 - lw $t0 -1488($fp) + bne $t0 $zero label_303 + lw $t0 -1588($fp) lw $t1 -1052($fp) seq $t0 $t0 $t1 sw $t0 -1056($fp) - j label_200 - label_197: - lw $t0 -1488($fp) + j label_304 + label_301: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -1084($fp) lw $t0 -1052($fp) @@ -7089,9 +7947,9 @@ function_option_at_CellularAutomaton: lw $t1 -1080($fp) seq $t0 $t0 $t1 sw $t0 -1056($fp) - j label_200 - label_198: - lw $t0 -1488($fp) + j label_304 + label_302: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -1084($fp) lw $t0 -1052($fp) @@ -7103,9 +7961,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -1056($fp) - j label_200 - label_199: - lw $t0 -1488($fp) + j label_304 + label_303: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -1084($fp) lw $t0 -1052($fp) @@ -7115,8 +7973,8 @@ function_option_at_CellularAutomaton: lw $t1 -1080($fp) seq $t0 $t0 $t1 sw $t0 -1056($fp) - j label_200 - label_200: + j label_304 + label_304: lw $t0 -1056($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7127,14 +7985,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -1092($fp) lw $t0 -1092($fp) - bne $t0 $zero label_309 + bne $t0 $zero label_413 li $t0 4 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -1004($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -7158,26 +8016,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -1012($fp) lw $t0 -1012($fp) - bne $t0 $zero label_201 + bne $t0 $zero label_305 lw $t0 -1028($fp) lw $t1 -1020($fp) seq $t0 $t0 $t1 sw $t0 -1012($fp) lw $t0 -1012($fp) - bne $t0 $zero label_202 + bne $t0 $zero label_306 lw $t0 -1028($fp) lw $t1 -1016($fp) seq $t0 $t0 $t1 sw $t0 -1012($fp) lw $t0 -1012($fp) - bne $t0 $zero label_203 - lw $t0 -1488($fp) + bne $t0 $zero label_307 + lw $t0 -1588($fp) lw $t1 -1004($fp) seq $t0 $t0 $t1 sw $t0 -1008($fp) - j label_204 - label_201: - lw $t0 -1488($fp) + j label_308 + label_305: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -1036($fp) lw $t0 -1004($fp) @@ -7187,9 +8045,9 @@ function_option_at_CellularAutomaton: lw $t1 -1032($fp) seq $t0 $t0 $t1 sw $t0 -1008($fp) - j label_204 - label_202: - lw $t0 -1488($fp) + j label_308 + label_306: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -1036($fp) lw $t0 -1004($fp) @@ -7201,9 +8059,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -1008($fp) - j label_204 - label_203: - lw $t0 -1488($fp) + j label_308 + label_307: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -1036($fp) lw $t0 -1004($fp) @@ -7213,8 +8071,8 @@ function_option_at_CellularAutomaton: lw $t1 -1032($fp) seq $t0 $t0 $t1 sw $t0 -1008($fp) - j label_204 - label_204: + j label_308 + label_308: lw $t0 -1008($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7225,14 +8083,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -1044($fp) lw $t0 -1044($fp) - bne $t0 $zero label_307 + bne $t0 $zero label_411 li $t0 5 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -956($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -7256,26 +8114,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -964($fp) lw $t0 -964($fp) - bne $t0 $zero label_205 + bne $t0 $zero label_309 lw $t0 -980($fp) lw $t1 -972($fp) seq $t0 $t0 $t1 sw $t0 -964($fp) lw $t0 -964($fp) - bne $t0 $zero label_206 + bne $t0 $zero label_310 lw $t0 -980($fp) lw $t1 -968($fp) seq $t0 $t0 $t1 sw $t0 -964($fp) lw $t0 -964($fp) - bne $t0 $zero label_207 - lw $t0 -1488($fp) + bne $t0 $zero label_311 + lw $t0 -1588($fp) lw $t1 -956($fp) seq $t0 $t0 $t1 sw $t0 -960($fp) - j label_208 - label_205: - lw $t0 -1488($fp) + j label_312 + label_309: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -988($fp) lw $t0 -956($fp) @@ -7285,9 +8143,9 @@ function_option_at_CellularAutomaton: lw $t1 -984($fp) seq $t0 $t0 $t1 sw $t0 -960($fp) - j label_208 - label_206: - lw $t0 -1488($fp) + j label_312 + label_310: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -988($fp) lw $t0 -956($fp) @@ -7299,9 +8157,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -960($fp) - j label_208 - label_207: - lw $t0 -1488($fp) + j label_312 + label_311: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -988($fp) lw $t0 -956($fp) @@ -7311,8 +8169,8 @@ function_option_at_CellularAutomaton: lw $t1 -984($fp) seq $t0 $t0 $t1 sw $t0 -960($fp) - j label_208 - label_208: + j label_312 + label_312: lw $t0 -960($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7323,14 +8181,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -996($fp) lw $t0 -996($fp) - bne $t0 $zero label_305 + bne $t0 $zero label_409 li $t0 6 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -908($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -7354,26 +8212,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -916($fp) lw $t0 -916($fp) - bne $t0 $zero label_209 + bne $t0 $zero label_313 lw $t0 -932($fp) lw $t1 -924($fp) seq $t0 $t0 $t1 sw $t0 -916($fp) lw $t0 -916($fp) - bne $t0 $zero label_210 + bne $t0 $zero label_314 lw $t0 -932($fp) lw $t1 -920($fp) seq $t0 $t0 $t1 sw $t0 -916($fp) lw $t0 -916($fp) - bne $t0 $zero label_211 - lw $t0 -1488($fp) + bne $t0 $zero label_315 + lw $t0 -1588($fp) lw $t1 -908($fp) seq $t0 $t0 $t1 sw $t0 -912($fp) - j label_212 - label_209: - lw $t0 -1488($fp) + j label_316 + label_313: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -940($fp) lw $t0 -908($fp) @@ -7383,9 +8241,9 @@ function_option_at_CellularAutomaton: lw $t1 -936($fp) seq $t0 $t0 $t1 sw $t0 -912($fp) - j label_212 - label_210: - lw $t0 -1488($fp) + j label_316 + label_314: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -940($fp) lw $t0 -908($fp) @@ -7397,9 +8255,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -912($fp) - j label_212 - label_211: - lw $t0 -1488($fp) + j label_316 + label_315: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -940($fp) lw $t0 -908($fp) @@ -7409,8 +8267,8 @@ function_option_at_CellularAutomaton: lw $t1 -936($fp) seq $t0 $t0 $t1 sw $t0 -912($fp) - j label_212 - label_212: + j label_316 + label_316: lw $t0 -912($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7421,14 +8279,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -948($fp) lw $t0 -948($fp) - bne $t0 $zero label_303 + bne $t0 $zero label_407 li $t0 7 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -860($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -7452,26 +8310,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -868($fp) lw $t0 -868($fp) - bne $t0 $zero label_213 + bne $t0 $zero label_317 lw $t0 -884($fp) lw $t1 -876($fp) seq $t0 $t0 $t1 sw $t0 -868($fp) lw $t0 -868($fp) - bne $t0 $zero label_214 + bne $t0 $zero label_318 lw $t0 -884($fp) lw $t1 -872($fp) seq $t0 $t0 $t1 sw $t0 -868($fp) lw $t0 -868($fp) - bne $t0 $zero label_215 - lw $t0 -1488($fp) + bne $t0 $zero label_319 + lw $t0 -1588($fp) lw $t1 -860($fp) seq $t0 $t0 $t1 sw $t0 -864($fp) - j label_216 - label_213: - lw $t0 -1488($fp) + j label_320 + label_317: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -892($fp) lw $t0 -860($fp) @@ -7481,9 +8339,9 @@ function_option_at_CellularAutomaton: lw $t1 -888($fp) seq $t0 $t0 $t1 sw $t0 -864($fp) - j label_216 - label_214: - lw $t0 -1488($fp) + j label_320 + label_318: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -892($fp) lw $t0 -860($fp) @@ -7495,9 +8353,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -864($fp) - j label_216 - label_215: - lw $t0 -1488($fp) + j label_320 + label_319: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -892($fp) lw $t0 -860($fp) @@ -7507,8 +8365,8 @@ function_option_at_CellularAutomaton: lw $t1 -888($fp) seq $t0 $t0 $t1 sw $t0 -864($fp) - j label_216 - label_216: + j label_320 + label_320: lw $t0 -864($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7519,14 +8377,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -900($fp) lw $t0 -900($fp) - bne $t0 $zero label_301 + bne $t0 $zero label_405 li $t0 8 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -812($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -7550,26 +8408,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -820($fp) lw $t0 -820($fp) - bne $t0 $zero label_217 + bne $t0 $zero label_321 lw $t0 -836($fp) lw $t1 -828($fp) seq $t0 $t0 $t1 sw $t0 -820($fp) lw $t0 -820($fp) - bne $t0 $zero label_218 + bne $t0 $zero label_322 lw $t0 -836($fp) lw $t1 -824($fp) seq $t0 $t0 $t1 sw $t0 -820($fp) lw $t0 -820($fp) - bne $t0 $zero label_219 - lw $t0 -1488($fp) + bne $t0 $zero label_323 + lw $t0 -1588($fp) lw $t1 -812($fp) seq $t0 $t0 $t1 sw $t0 -816($fp) - j label_220 - label_217: - lw $t0 -1488($fp) + j label_324 + label_321: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -844($fp) lw $t0 -812($fp) @@ -7579,9 +8437,9 @@ function_option_at_CellularAutomaton: lw $t1 -840($fp) seq $t0 $t0 $t1 sw $t0 -816($fp) - j label_220 - label_218: - lw $t0 -1488($fp) + j label_324 + label_322: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -844($fp) lw $t0 -812($fp) @@ -7593,9 +8451,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -816($fp) - j label_220 - label_219: - lw $t0 -1488($fp) + j label_324 + label_323: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -844($fp) lw $t0 -812($fp) @@ -7605,8 +8463,8 @@ function_option_at_CellularAutomaton: lw $t1 -840($fp) seq $t0 $t0 $t1 sw $t0 -816($fp) - j label_220 - label_220: + j label_324 + label_324: lw $t0 -816($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7617,14 +8475,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -852($fp) lw $t0 -852($fp) - bne $t0 $zero label_299 + bne $t0 $zero label_403 li $t0 9 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -764($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -7648,26 +8506,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -772($fp) lw $t0 -772($fp) - bne $t0 $zero label_221 + bne $t0 $zero label_325 lw $t0 -788($fp) lw $t1 -780($fp) seq $t0 $t0 $t1 sw $t0 -772($fp) lw $t0 -772($fp) - bne $t0 $zero label_222 + bne $t0 $zero label_326 lw $t0 -788($fp) lw $t1 -776($fp) seq $t0 $t0 $t1 sw $t0 -772($fp) lw $t0 -772($fp) - bne $t0 $zero label_223 - lw $t0 -1488($fp) + bne $t0 $zero label_327 + lw $t0 -1588($fp) lw $t1 -764($fp) seq $t0 $t0 $t1 sw $t0 -768($fp) - j label_224 - label_221: - lw $t0 -1488($fp) + j label_328 + label_325: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -796($fp) lw $t0 -764($fp) @@ -7677,9 +8535,9 @@ function_option_at_CellularAutomaton: lw $t1 -792($fp) seq $t0 $t0 $t1 sw $t0 -768($fp) - j label_224 - label_222: - lw $t0 -1488($fp) + j label_328 + label_326: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -796($fp) lw $t0 -764($fp) @@ -7691,9 +8549,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -768($fp) - j label_224 - label_223: - lw $t0 -1488($fp) + j label_328 + label_327: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -796($fp) lw $t0 -764($fp) @@ -7703,8 +8561,8 @@ function_option_at_CellularAutomaton: lw $t1 -792($fp) seq $t0 $t0 $t1 sw $t0 -768($fp) - j label_224 - label_224: + j label_328 + label_328: lw $t0 -768($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7715,14 +8573,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -804($fp) lw $t0 -804($fp) - bne $t0 $zero label_297 + bne $t0 $zero label_401 li $t0 10 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -716($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -7746,26 +8604,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -724($fp) lw $t0 -724($fp) - bne $t0 $zero label_225 + bne $t0 $zero label_329 lw $t0 -740($fp) lw $t1 -732($fp) seq $t0 $t0 $t1 sw $t0 -724($fp) lw $t0 -724($fp) - bne $t0 $zero label_226 + bne $t0 $zero label_330 lw $t0 -740($fp) lw $t1 -728($fp) seq $t0 $t0 $t1 sw $t0 -724($fp) lw $t0 -724($fp) - bne $t0 $zero label_227 - lw $t0 -1488($fp) + bne $t0 $zero label_331 + lw $t0 -1588($fp) lw $t1 -716($fp) seq $t0 $t0 $t1 sw $t0 -720($fp) - j label_228 - label_225: - lw $t0 -1488($fp) + j label_332 + label_329: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -748($fp) lw $t0 -716($fp) @@ -7775,9 +8633,9 @@ function_option_at_CellularAutomaton: lw $t1 -744($fp) seq $t0 $t0 $t1 sw $t0 -720($fp) - j label_228 - label_226: - lw $t0 -1488($fp) + j label_332 + label_330: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -748($fp) lw $t0 -716($fp) @@ -7789,9 +8647,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -720($fp) - j label_228 - label_227: - lw $t0 -1488($fp) + j label_332 + label_331: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -748($fp) lw $t0 -716($fp) @@ -7801,8 +8659,8 @@ function_option_at_CellularAutomaton: lw $t1 -744($fp) seq $t0 $t0 $t1 sw $t0 -720($fp) - j label_228 - label_228: + j label_332 + label_332: lw $t0 -720($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7813,14 +8671,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -756($fp) lw $t0 -756($fp) - bne $t0 $zero label_295 + bne $t0 $zero label_399 li $t0 11 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -668($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -7844,26 +8702,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -676($fp) lw $t0 -676($fp) - bne $t0 $zero label_229 + bne $t0 $zero label_333 lw $t0 -692($fp) lw $t1 -684($fp) seq $t0 $t0 $t1 sw $t0 -676($fp) lw $t0 -676($fp) - bne $t0 $zero label_230 + bne $t0 $zero label_334 lw $t0 -692($fp) lw $t1 -680($fp) seq $t0 $t0 $t1 sw $t0 -676($fp) lw $t0 -676($fp) - bne $t0 $zero label_231 - lw $t0 -1488($fp) + bne $t0 $zero label_335 + lw $t0 -1588($fp) lw $t1 -668($fp) seq $t0 $t0 $t1 sw $t0 -672($fp) - j label_232 - label_229: - lw $t0 -1488($fp) + j label_336 + label_333: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -700($fp) lw $t0 -668($fp) @@ -7873,9 +8731,9 @@ function_option_at_CellularAutomaton: lw $t1 -696($fp) seq $t0 $t0 $t1 sw $t0 -672($fp) - j label_232 - label_230: - lw $t0 -1488($fp) + j label_336 + label_334: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -700($fp) lw $t0 -668($fp) @@ -7887,9 +8745,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -672($fp) - j label_232 - label_231: - lw $t0 -1488($fp) + j label_336 + label_335: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -700($fp) lw $t0 -668($fp) @@ -7899,8 +8757,8 @@ function_option_at_CellularAutomaton: lw $t1 -696($fp) seq $t0 $t0 $t1 sw $t0 -672($fp) - j label_232 - label_232: + j label_336 + label_336: lw $t0 -672($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -7911,14 +8769,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -708($fp) lw $t0 -708($fp) - bne $t0 $zero label_293 + bne $t0 $zero label_397 li $t0 12 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -620($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -7942,26 +8800,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -628($fp) lw $t0 -628($fp) - bne $t0 $zero label_233 + bne $t0 $zero label_337 lw $t0 -644($fp) lw $t1 -636($fp) seq $t0 $t0 $t1 sw $t0 -628($fp) lw $t0 -628($fp) - bne $t0 $zero label_234 + bne $t0 $zero label_338 lw $t0 -644($fp) lw $t1 -632($fp) seq $t0 $t0 $t1 sw $t0 -628($fp) lw $t0 -628($fp) - bne $t0 $zero label_235 - lw $t0 -1488($fp) + bne $t0 $zero label_339 + lw $t0 -1588($fp) lw $t1 -620($fp) seq $t0 $t0 $t1 sw $t0 -624($fp) - j label_236 - label_233: - lw $t0 -1488($fp) + j label_340 + label_337: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -652($fp) lw $t0 -620($fp) @@ -7971,9 +8829,9 @@ function_option_at_CellularAutomaton: lw $t1 -648($fp) seq $t0 $t0 $t1 sw $t0 -624($fp) - j label_236 - label_234: - lw $t0 -1488($fp) + j label_340 + label_338: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -652($fp) lw $t0 -620($fp) @@ -7985,9 +8843,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -624($fp) - j label_236 - label_235: - lw $t0 -1488($fp) + j label_340 + label_339: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -652($fp) lw $t0 -620($fp) @@ -7997,8 +8855,8 @@ function_option_at_CellularAutomaton: lw $t1 -648($fp) seq $t0 $t0 $t1 sw $t0 -624($fp) - j label_236 - label_236: + j label_340 + label_340: lw $t0 -624($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8009,14 +8867,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -660($fp) lw $t0 -660($fp) - bne $t0 $zero label_291 + bne $t0 $zero label_395 li $t0 13 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -572($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -8040,26 +8898,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -580($fp) lw $t0 -580($fp) - bne $t0 $zero label_237 + bne $t0 $zero label_341 lw $t0 -596($fp) lw $t1 -588($fp) seq $t0 $t0 $t1 sw $t0 -580($fp) lw $t0 -580($fp) - bne $t0 $zero label_238 + bne $t0 $zero label_342 lw $t0 -596($fp) lw $t1 -584($fp) seq $t0 $t0 $t1 sw $t0 -580($fp) lw $t0 -580($fp) - bne $t0 $zero label_239 - lw $t0 -1488($fp) + bne $t0 $zero label_343 + lw $t0 -1588($fp) lw $t1 -572($fp) seq $t0 $t0 $t1 sw $t0 -576($fp) - j label_240 - label_237: - lw $t0 -1488($fp) + j label_344 + label_341: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -604($fp) lw $t0 -572($fp) @@ -8069,9 +8927,9 @@ function_option_at_CellularAutomaton: lw $t1 -600($fp) seq $t0 $t0 $t1 sw $t0 -576($fp) - j label_240 - label_238: - lw $t0 -1488($fp) + j label_344 + label_342: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -604($fp) lw $t0 -572($fp) @@ -8083,9 +8941,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -576($fp) - j label_240 - label_239: - lw $t0 -1488($fp) + j label_344 + label_343: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -604($fp) lw $t0 -572($fp) @@ -8095,8 +8953,8 @@ function_option_at_CellularAutomaton: lw $t1 -600($fp) seq $t0 $t0 $t1 sw $t0 -576($fp) - j label_240 - label_240: + j label_344 + label_344: lw $t0 -576($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8107,14 +8965,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -612($fp) lw $t0 -612($fp) - bne $t0 $zero label_289 + bne $t0 $zero label_393 li $t0 14 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -524($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -8138,26 +8996,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -532($fp) lw $t0 -532($fp) - bne $t0 $zero label_241 + bne $t0 $zero label_345 lw $t0 -548($fp) lw $t1 -540($fp) seq $t0 $t0 $t1 sw $t0 -532($fp) lw $t0 -532($fp) - bne $t0 $zero label_242 + bne $t0 $zero label_346 lw $t0 -548($fp) lw $t1 -536($fp) seq $t0 $t0 $t1 sw $t0 -532($fp) lw $t0 -532($fp) - bne $t0 $zero label_243 - lw $t0 -1488($fp) + bne $t0 $zero label_347 + lw $t0 -1588($fp) lw $t1 -524($fp) seq $t0 $t0 $t1 sw $t0 -528($fp) - j label_244 - label_241: - lw $t0 -1488($fp) + j label_348 + label_345: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -556($fp) lw $t0 -524($fp) @@ -8167,9 +9025,9 @@ function_option_at_CellularAutomaton: lw $t1 -552($fp) seq $t0 $t0 $t1 sw $t0 -528($fp) - j label_244 - label_242: - lw $t0 -1488($fp) + j label_348 + label_346: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -556($fp) lw $t0 -524($fp) @@ -8181,9 +9039,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -528($fp) - j label_244 - label_243: - lw $t0 -1488($fp) + j label_348 + label_347: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -556($fp) lw $t0 -524($fp) @@ -8193,8 +9051,8 @@ function_option_at_CellularAutomaton: lw $t1 -552($fp) seq $t0 $t0 $t1 sw $t0 -528($fp) - j label_244 - label_244: + j label_348 + label_348: lw $t0 -528($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8205,14 +9063,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -564($fp) lw $t0 -564($fp) - bne $t0 $zero label_287 + bne $t0 $zero label_391 li $t0 15 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -476($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -8236,26 +9094,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -484($fp) lw $t0 -484($fp) - bne $t0 $zero label_245 + bne $t0 $zero label_349 lw $t0 -500($fp) lw $t1 -492($fp) seq $t0 $t0 $t1 sw $t0 -484($fp) lw $t0 -484($fp) - bne $t0 $zero label_246 + bne $t0 $zero label_350 lw $t0 -500($fp) lw $t1 -488($fp) seq $t0 $t0 $t1 sw $t0 -484($fp) lw $t0 -484($fp) - bne $t0 $zero label_247 - lw $t0 -1488($fp) + bne $t0 $zero label_351 + lw $t0 -1588($fp) lw $t1 -476($fp) seq $t0 $t0 $t1 sw $t0 -480($fp) - j label_248 - label_245: - lw $t0 -1488($fp) + j label_352 + label_349: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -508($fp) lw $t0 -476($fp) @@ -8265,9 +9123,9 @@ function_option_at_CellularAutomaton: lw $t1 -504($fp) seq $t0 $t0 $t1 sw $t0 -480($fp) - j label_248 - label_246: - lw $t0 -1488($fp) + j label_352 + label_350: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -508($fp) lw $t0 -476($fp) @@ -8279,9 +9137,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -480($fp) - j label_248 - label_247: - lw $t0 -1488($fp) + j label_352 + label_351: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -508($fp) lw $t0 -476($fp) @@ -8291,8 +9149,8 @@ function_option_at_CellularAutomaton: lw $t1 -504($fp) seq $t0 $t0 $t1 sw $t0 -480($fp) - j label_248 - label_248: + j label_352 + label_352: lw $t0 -480($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8303,14 +9161,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -516($fp) lw $t0 -516($fp) - bne $t0 $zero label_285 + bne $t0 $zero label_389 li $t0 16 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -428($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -8334,26 +9192,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -436($fp) lw $t0 -436($fp) - bne $t0 $zero label_249 + bne $t0 $zero label_353 lw $t0 -452($fp) lw $t1 -444($fp) seq $t0 $t0 $t1 sw $t0 -436($fp) lw $t0 -436($fp) - bne $t0 $zero label_250 + bne $t0 $zero label_354 lw $t0 -452($fp) lw $t1 -440($fp) seq $t0 $t0 $t1 sw $t0 -436($fp) lw $t0 -436($fp) - bne $t0 $zero label_251 - lw $t0 -1488($fp) + bne $t0 $zero label_355 + lw $t0 -1588($fp) lw $t1 -428($fp) seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_252 - label_249: - lw $t0 -1488($fp) + sw $t0 -432($fp) + j label_356 + label_353: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -460($fp) lw $t0 -428($fp) @@ -8363,9 +9221,9 @@ function_option_at_CellularAutomaton: lw $t1 -456($fp) seq $t0 $t0 $t1 sw $t0 -432($fp) - j label_252 - label_250: - lw $t0 -1488($fp) + j label_356 + label_354: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -460($fp) lw $t0 -428($fp) @@ -8377,9 +9235,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -432($fp) - j label_252 - label_251: - lw $t0 -1488($fp) + j label_356 + label_355: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -460($fp) lw $t0 -428($fp) @@ -8389,8 +9247,8 @@ function_option_at_CellularAutomaton: lw $t1 -456($fp) seq $t0 $t0 $t1 sw $t0 -432($fp) - j label_252 - label_252: + j label_356 + label_356: lw $t0 -432($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8401,14 +9259,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -468($fp) lw $t0 -468($fp) - bne $t0 $zero label_283 + bne $t0 $zero label_387 li $t0 17 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -380($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -8432,26 +9290,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) - bne $t0 $zero label_253 + bne $t0 $zero label_357 lw $t0 -404($fp) lw $t1 -396($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) - bne $t0 $zero label_254 + bne $t0 $zero label_358 lw $t0 -404($fp) lw $t1 -392($fp) seq $t0 $t0 $t1 sw $t0 -388($fp) lw $t0 -388($fp) - bne $t0 $zero label_255 - lw $t0 -1488($fp) + bne $t0 $zero label_359 + lw $t0 -1588($fp) lw $t1 -380($fp) seq $t0 $t0 $t1 sw $t0 -384($fp) - j label_256 - label_253: - lw $t0 -1488($fp) + j label_360 + label_357: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -380($fp) @@ -8461,9 +9319,9 @@ function_option_at_CellularAutomaton: lw $t1 -408($fp) seq $t0 $t0 $t1 sw $t0 -384($fp) - j label_256 - label_254: - lw $t0 -1488($fp) + j label_360 + label_358: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -380($fp) @@ -8475,9 +9333,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -384($fp) - j label_256 - label_255: - lw $t0 -1488($fp) + j label_360 + label_359: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -412($fp) lw $t0 -380($fp) @@ -8487,8 +9345,8 @@ function_option_at_CellularAutomaton: lw $t1 -408($fp) seq $t0 $t0 $t1 sw $t0 -384($fp) - j label_256 - label_256: + j label_360 + label_360: lw $t0 -384($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8499,14 +9357,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -420($fp) lw $t0 -420($fp) - bne $t0 $zero label_281 + bne $t0 $zero label_385 li $t0 18 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -332($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -8530,26 +9388,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -340($fp) lw $t0 -340($fp) - bne $t0 $zero label_257 + bne $t0 $zero label_361 lw $t0 -356($fp) lw $t1 -348($fp) seq $t0 $t0 $t1 sw $t0 -340($fp) lw $t0 -340($fp) - bne $t0 $zero label_258 + bne $t0 $zero label_362 lw $t0 -356($fp) lw $t1 -344($fp) seq $t0 $t0 $t1 sw $t0 -340($fp) lw $t0 -340($fp) - bne $t0 $zero label_259 - lw $t0 -1488($fp) + bne $t0 $zero label_363 + lw $t0 -1588($fp) lw $t1 -332($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) - j label_260 - label_257: - lw $t0 -1488($fp) + j label_364 + label_361: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -364($fp) lw $t0 -332($fp) @@ -8559,9 +9417,9 @@ function_option_at_CellularAutomaton: lw $t1 -360($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) - j label_260 - label_258: - lw $t0 -1488($fp) + j label_364 + label_362: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -364($fp) lw $t0 -332($fp) @@ -8573,9 +9431,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -336($fp) - j label_260 - label_259: - lw $t0 -1488($fp) + j label_364 + label_363: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -364($fp) lw $t0 -332($fp) @@ -8585,8 +9443,8 @@ function_option_at_CellularAutomaton: lw $t1 -360($fp) seq $t0 $t0 $t1 sw $t0 -336($fp) - j label_260 - label_260: + j label_364 + label_364: lw $t0 -336($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8597,14 +9455,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -372($fp) lw $t0 -372($fp) - bne $t0 $zero label_279 + bne $t0 $zero label_383 li $t0 19 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -284($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -8628,26 +9486,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -292($fp) lw $t0 -292($fp) - bne $t0 $zero label_261 + bne $t0 $zero label_365 lw $t0 -308($fp) lw $t1 -300($fp) seq $t0 $t0 $t1 sw $t0 -292($fp) lw $t0 -292($fp) - bne $t0 $zero label_262 + bne $t0 $zero label_366 lw $t0 -308($fp) lw $t1 -296($fp) seq $t0 $t0 $t1 sw $t0 -292($fp) lw $t0 -292($fp) - bne $t0 $zero label_263 - lw $t0 -1488($fp) + bne $t0 $zero label_367 + lw $t0 -1588($fp) lw $t1 -284($fp) seq $t0 $t0 $t1 sw $t0 -288($fp) - j label_264 - label_261: - lw $t0 -1488($fp) + j label_368 + label_365: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -316($fp) lw $t0 -284($fp) @@ -8657,9 +9515,9 @@ function_option_at_CellularAutomaton: lw $t1 -312($fp) seq $t0 $t0 $t1 sw $t0 -288($fp) - j label_264 - label_262: - lw $t0 -1488($fp) + j label_368 + label_366: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -316($fp) lw $t0 -284($fp) @@ -8671,9 +9529,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -288($fp) - j label_264 - label_263: - lw $t0 -1488($fp) + j label_368 + label_367: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -316($fp) lw $t0 -284($fp) @@ -8683,8 +9541,8 @@ function_option_at_CellularAutomaton: lw $t1 -312($fp) seq $t0 $t0 $t1 sw $t0 -288($fp) - j label_264 - label_264: + j label_368 + label_368: lw $t0 -288($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8695,14 +9553,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -324($fp) lw $t0 -324($fp) - bne $t0 $zero label_277 + bne $t0 $zero label_381 li $t0 20 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -236($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -8726,26 +9584,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -244($fp) lw $t0 -244($fp) - bne $t0 $zero label_265 + bne $t0 $zero label_369 lw $t0 -260($fp) lw $t1 -252($fp) seq $t0 $t0 $t1 sw $t0 -244($fp) lw $t0 -244($fp) - bne $t0 $zero label_266 + bne $t0 $zero label_370 lw $t0 -260($fp) lw $t1 -248($fp) seq $t0 $t0 $t1 sw $t0 -244($fp) lw $t0 -244($fp) - bne $t0 $zero label_267 - lw $t0 -1488($fp) + bne $t0 $zero label_371 + lw $t0 -1588($fp) lw $t1 -236($fp) seq $t0 $t0 $t1 sw $t0 -240($fp) - j label_268 - label_265: - lw $t0 -1488($fp) + j label_372 + label_369: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -268($fp) lw $t0 -236($fp) @@ -8755,9 +9613,9 @@ function_option_at_CellularAutomaton: lw $t1 -264($fp) seq $t0 $t0 $t1 sw $t0 -240($fp) - j label_268 - label_266: - lw $t0 -1488($fp) + j label_372 + label_370: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -268($fp) lw $t0 -236($fp) @@ -8769,9 +9627,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -240($fp) - j label_268 - label_267: - lw $t0 -1488($fp) + j label_372 + label_371: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -268($fp) lw $t0 -236($fp) @@ -8781,8 +9639,8 @@ function_option_at_CellularAutomaton: lw $t1 -264($fp) seq $t0 $t0 $t1 sw $t0 -240($fp) - j label_268 - label_268: + j label_372 + label_372: lw $t0 -240($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8793,14 +9651,14 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -276($fp) lw $t0 -276($fp) - bne $t0 $zero label_275 + bne $t0 $zero label_379 li $t0 21 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 sw $v0 -188($fp) - lw $t0 -1488($fp) + lw $t0 -1588($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -8824,26 +9682,26 @@ function_option_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -196($fp) lw $t0 -196($fp) - bne $t0 $zero label_269 + bne $t0 $zero label_373 lw $t0 -212($fp) lw $t1 -204($fp) seq $t0 $t0 $t1 sw $t0 -196($fp) lw $t0 -196($fp) - bne $t0 $zero label_270 + bne $t0 $zero label_374 lw $t0 -212($fp) lw $t1 -200($fp) seq $t0 $t0 $t1 sw $t0 -196($fp) lw $t0 -196($fp) - bne $t0 $zero label_271 - lw $t0 -1488($fp) + bne $t0 $zero label_375 + lw $t0 -1588($fp) lw $t1 -188($fp) seq $t0 $t0 $t1 sw $t0 -192($fp) - j label_272 - label_269: - lw $t0 -1488($fp) + j label_376 + label_373: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -220($fp) lw $t0 -188($fp) @@ -8853,9 +9711,9 @@ function_option_at_CellularAutomaton: lw $t1 -216($fp) seq $t0 $t0 $t1 sw $t0 -192($fp) - j label_272 - label_270: - lw $t0 -1488($fp) + j label_376 + label_374: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -220($fp) lw $t0 -188($fp) @@ -8867,9 +9725,9 @@ function_option_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -192($fp) - j label_272 - label_271: - lw $t0 -1488($fp) + j label_376 + label_375: + lw $t0 -1588($fp) lw $t1 12($t0) sw $t1 -220($fp) lw $t0 -188($fp) @@ -8879,8 +9737,8 @@ function_option_at_CellularAutomaton: lw $t1 -216($fp) seq $t0 $t0 $t1 sw $t0 -192($fp) - j label_272 - label_272: + j label_376 + label_376: lw $t0 -192($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -8891,8 +9749,8 @@ function_option_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -228($fp) lw $t0 -228($fp) - bne $t0 $zero label_273 - la $t0 data_78 + bne $t0 $zero label_377 + la $t0 data_130 sw $t0 -184($fp) lw $t0 -184($fp) addi $sp $sp -4 @@ -8902,9 +9760,9 @@ function_option_at_CellularAutomaton: sw $v0 -180($fp) lw $t0 -180($fp) sw $t0 -232($fp) - j label_274 - label_273: - la $t0 data_79 + j label_378 + label_377: + la $t0 data_131 sw $t0 -176($fp) lw $t0 -176($fp) addi $sp $sp -4 @@ -8914,12 +9772,12 @@ function_option_at_CellularAutomaton: sw $v0 -172($fp) lw $t0 -172($fp) sw $t0 -232($fp) - label_274: + label_378: lw $t0 -232($fp) sw $t0 -280($fp) - j label_276 - label_275: - la $t0 data_80 + j label_380 + label_379: + la $t0 data_132 sw $t0 -168($fp) lw $t0 -168($fp) addi $sp $sp -4 @@ -8929,12 +9787,12 @@ function_option_at_CellularAutomaton: sw $v0 -164($fp) lw $t0 -164($fp) sw $t0 -280($fp) - label_276: + label_380: lw $t0 -280($fp) sw $t0 -328($fp) - j label_278 - label_277: - la $t0 data_81 + j label_382 + label_381: + la $t0 data_133 sw $t0 -160($fp) lw $t0 -160($fp) addi $sp $sp -4 @@ -8944,12 +9802,12 @@ function_option_at_CellularAutomaton: sw $v0 -156($fp) lw $t0 -156($fp) sw $t0 -328($fp) - label_278: + label_382: lw $t0 -328($fp) sw $t0 -376($fp) - j label_280 - label_279: - la $t0 data_82 + j label_384 + label_383: + la $t0 data_134 sw $t0 -152($fp) lw $t0 -152($fp) addi $sp $sp -4 @@ -8959,12 +9817,12 @@ function_option_at_CellularAutomaton: sw $v0 -148($fp) lw $t0 -148($fp) sw $t0 -376($fp) - label_280: + label_384: lw $t0 -376($fp) sw $t0 -424($fp) - j label_282 - label_281: - la $t0 data_83 + j label_386 + label_385: + la $t0 data_135 sw $t0 -144($fp) lw $t0 -144($fp) addi $sp $sp -4 @@ -8974,12 +9832,12 @@ function_option_at_CellularAutomaton: sw $v0 -140($fp) lw $t0 -140($fp) sw $t0 -424($fp) - label_282: + label_386: lw $t0 -424($fp) sw $t0 -472($fp) - j label_284 - label_283: - la $t0 data_84 + j label_388 + label_387: + la $t0 data_136 sw $t0 -136($fp) lw $t0 -136($fp) addi $sp $sp -4 @@ -8989,12 +9847,12 @@ function_option_at_CellularAutomaton: sw $v0 -132($fp) lw $t0 -132($fp) sw $t0 -472($fp) - label_284: + label_388: lw $t0 -472($fp) sw $t0 -520($fp) - j label_286 - label_285: - la $t0 data_85 + j label_390 + label_389: + la $t0 data_137 sw $t0 -128($fp) lw $t0 -128($fp) addi $sp $sp -4 @@ -9004,12 +9862,12 @@ function_option_at_CellularAutomaton: sw $v0 -124($fp) lw $t0 -124($fp) sw $t0 -520($fp) - label_286: + label_390: lw $t0 -520($fp) sw $t0 -568($fp) - j label_288 - label_287: - la $t0 data_86 + j label_392 + label_391: + la $t0 data_138 sw $t0 -120($fp) lw $t0 -120($fp) addi $sp $sp -4 @@ -9019,12 +9877,12 @@ function_option_at_CellularAutomaton: sw $v0 -116($fp) lw $t0 -116($fp) sw $t0 -568($fp) - label_288: + label_392: lw $t0 -568($fp) sw $t0 -616($fp) - j label_290 - label_289: - la $t0 data_87 + j label_394 + label_393: + la $t0 data_139 sw $t0 -112($fp) lw $t0 -112($fp) addi $sp $sp -4 @@ -9034,12 +9892,12 @@ function_option_at_CellularAutomaton: sw $v0 -108($fp) lw $t0 -108($fp) sw $t0 -616($fp) - label_290: + label_394: lw $t0 -616($fp) sw $t0 -664($fp) - j label_292 - label_291: - la $t0 data_88 + j label_396 + label_395: + la $t0 data_140 sw $t0 -104($fp) lw $t0 -104($fp) addi $sp $sp -4 @@ -9049,12 +9907,12 @@ function_option_at_CellularAutomaton: sw $v0 -100($fp) lw $t0 -100($fp) sw $t0 -664($fp) - label_292: + label_396: lw $t0 -664($fp) sw $t0 -712($fp) - j label_294 - label_293: - la $t0 data_89 + j label_398 + label_397: + la $t0 data_141 sw $t0 -96($fp) lw $t0 -96($fp) addi $sp $sp -4 @@ -9064,12 +9922,12 @@ function_option_at_CellularAutomaton: sw $v0 -92($fp) lw $t0 -92($fp) sw $t0 -712($fp) - label_294: + label_398: lw $t0 -712($fp) sw $t0 -760($fp) - j label_296 - label_295: - la $t0 data_90 + j label_400 + label_399: + la $t0 data_142 sw $t0 -88($fp) lw $t0 -88($fp) addi $sp $sp -4 @@ -9079,12 +9937,12 @@ function_option_at_CellularAutomaton: sw $v0 -84($fp) lw $t0 -84($fp) sw $t0 -760($fp) - label_296: + label_400: lw $t0 -760($fp) sw $t0 -808($fp) - j label_298 - label_297: - la $t0 data_91 + j label_402 + label_401: + la $t0 data_143 sw $t0 -80($fp) lw $t0 -80($fp) addi $sp $sp -4 @@ -9094,12 +9952,12 @@ function_option_at_CellularAutomaton: sw $v0 -76($fp) lw $t0 -76($fp) sw $t0 -808($fp) - label_298: + label_402: lw $t0 -808($fp) sw $t0 -856($fp) - j label_300 - label_299: - la $t0 data_92 + j label_404 + label_403: + la $t0 data_144 sw $t0 -72($fp) lw $t0 -72($fp) addi $sp $sp -4 @@ -9109,12 +9967,12 @@ function_option_at_CellularAutomaton: sw $v0 -68($fp) lw $t0 -68($fp) sw $t0 -856($fp) - label_300: + label_404: lw $t0 -856($fp) sw $t0 -904($fp) - j label_302 - label_301: - la $t0 data_93 + j label_406 + label_405: + la $t0 data_145 sw $t0 -64($fp) lw $t0 -64($fp) addi $sp $sp -4 @@ -9124,12 +9982,12 @@ function_option_at_CellularAutomaton: sw $v0 -60($fp) lw $t0 -60($fp) sw $t0 -904($fp) - label_302: + label_406: lw $t0 -904($fp) sw $t0 -952($fp) - j label_304 - label_303: - la $t0 data_94 + j label_408 + label_407: + la $t0 data_146 sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 @@ -9139,12 +9997,12 @@ function_option_at_CellularAutomaton: sw $v0 -52($fp) lw $t0 -52($fp) sw $t0 -952($fp) - label_304: + label_408: lw $t0 -952($fp) sw $t0 -1000($fp) - j label_306 - label_305: - la $t0 data_95 + j label_410 + label_409: + la $t0 data_147 sw $t0 -48($fp) lw $t0 -48($fp) addi $sp $sp -4 @@ -9154,12 +10012,12 @@ function_option_at_CellularAutomaton: sw $v0 -44($fp) lw $t0 -44($fp) sw $t0 -1000($fp) - label_306: + label_410: lw $t0 -1000($fp) sw $t0 -1048($fp) - j label_308 - label_307: - la $t0 data_96 + j label_412 + label_411: + la $t0 data_148 sw $t0 -40($fp) lw $t0 -40($fp) addi $sp $sp -4 @@ -9169,12 +10027,12 @@ function_option_at_CellularAutomaton: sw $v0 -36($fp) lw $t0 -36($fp) sw $t0 -1048($fp) - label_308: + label_412: lw $t0 -1048($fp) sw $t0 -1096($fp) - j label_310 - label_309: - la $t0 data_97 + j label_414 + label_413: + la $t0 data_149 sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 @@ -9184,12 +10042,12 @@ function_option_at_CellularAutomaton: sw $v0 -28($fp) lw $t0 -28($fp) sw $t0 -1096($fp) - label_310: + label_414: lw $t0 -1096($fp) sw $t0 -1144($fp) - j label_312 - label_311: - la $t0 data_98 + j label_416 + label_415: + la $t0 data_150 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -9199,12 +10057,12 @@ function_option_at_CellularAutomaton: sw $v0 -20($fp) lw $t0 -20($fp) sw $t0 -1144($fp) - label_312: + label_416: lw $t0 -1144($fp) sw $t0 -1192($fp) - j label_314 - label_313: - la $t0 data_99 + j label_418 + label_417: + la $t0 data_151 sw $t0 -16($fp) lw $t0 -16($fp) addi $sp $sp -4 @@ -9214,9 +10072,9 @@ function_option_at_CellularAutomaton: sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -1192($fp) - label_314: + label_418: lw $v0 -1192($fp) - addi $sp $sp 1496 + addi $sp $sp 1596 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -9229,27 +10087,41 @@ function_prompt_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -120 + addi $sp $sp -136 la $t0 data_10 - sw $t0 -112($fp) - lw $t0 -112($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -112($fp) - la $t0 data_100 - sw $t0 -104($fp) - lw $t0 -104($fp) + sw $v0 -128($fp) + la $t0 data_152 + sw $t0 -124($fp) + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -100($fp) + sw $v0 -120($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_419 + j label_420 + label_419: + li $v0 4 + la $a0 data_153 + syscall + li $v0 10 + syscall + label_420: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -100($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9261,19 +10133,33 @@ function_prompt_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -108($fp) - la $t0 data_101 - sw $t0 -92($fp) - lw $t0 -92($fp) + sw $v0 -112($fp) + la $t0 data_154 + sw $t0 -108($fp) + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -88($fp) + sw $v0 -104($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_421 + j label_422 + label_421: + li $v0 4 + la $a0 data_155 + syscall + li $v0 10 + syscall + label_422: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -88($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9287,6 +10173,20 @@ function_prompt_at_CellularAutomaton: addi $sp $sp 8 sw $v0 -96($fp) lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_423 + j label_424 + label_423: + li $v0 4 + la $a0 data_156 + syscall + li $v0 10 + syscall + label_424: + lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9298,21 +10198,35 @@ function_prompt_at_CellularAutomaton: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -84($fp) + sw $v0 -88($fp) + lw $t0 -88($fp) + sw $t0 -128($fp) + la $t0 data_157 + sw $t0 -84($fp) lw $t0 -84($fp) - sw $t0 -112($fp) - la $t0 data_102 - sw $t0 -76($fp) - lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -72($fp) + sw $v0 -80($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_425 + j label_426 + label_425: + li $v0 4 + la $a0 data_158 + syscall + li $v0 10 + syscall + label_426: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -72($fp) + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9324,8 +10238,8 @@ function_prompt_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -80($fp) - la $t0 data_103 + sw $v0 -72($fp) + la $t0 data_159 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -9333,7 +10247,7 @@ function_prompt_at_CellularAutomaton: jal __init_at_String addi $sp $sp 4 sw $v0 -20($fp) - lw $t0 -112($fp) + lw $t0 -128($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -9357,26 +10271,26 @@ function_prompt_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) - bne $t0 $zero label_315 + bne $t0 $zero label_427 lw $t0 -48($fp) lw $t1 -40($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) - bne $t0 $zero label_316 + bne $t0 $zero label_428 lw $t0 -48($fp) lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) - bne $t0 $zero label_317 - lw $t0 -112($fp) + bne $t0 $zero label_429 + lw $t0 -128($fp) lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) - j label_318 - label_315: - lw $t0 -112($fp) + j label_430 + label_427: + lw $t0 -128($fp) lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) @@ -9386,9 +10300,9 @@ function_prompt_at_CellularAutomaton: lw $t1 -52($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) - j label_318 - label_316: - lw $t0 -112($fp) + j label_430 + label_428: + lw $t0 -128($fp) lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) @@ -9400,9 +10314,9 @@ function_prompt_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -28($fp) - j label_318 - label_317: - lw $t0 -112($fp) + j label_430 + label_429: + lw $t0 -128($fp) lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) @@ -9412,8 +10326,8 @@ function_prompt_at_CellularAutomaton: lw $t1 -52($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) - j label_318 - label_318: + j label_430 + label_430: lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -9424,7 +10338,7 @@ function_prompt_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -64($fp) lw $t0 -64($fp) - bne $t0 $zero label_319 + bne $t0 $zero label_431 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) @@ -9433,8 +10347,8 @@ function_prompt_at_CellularAutomaton: sw $v0 -16($fp) lw $t0 -16($fp) sw $t0 -68($fp) - j label_320 - label_319: + j label_432 + label_431: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -9443,9 +10357,9 @@ function_prompt_at_CellularAutomaton: sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -68($fp) - label_320: + label_432: lw $v0 -68($fp) - addi $sp $sp 120 + addi $sp $sp 136 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -9458,27 +10372,41 @@ function_prompt2_at_CellularAutomaton: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -120 - la $t0 data_10 - sw $t0 -112($fp) - lw $t0 -112($fp) + addi $sp $sp -136 + la $t0 data_10 + sw $t0 -128($fp) + lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -112($fp) - la $t0 data_104 - sw $t0 -104($fp) - lw $t0 -104($fp) + sw $v0 -128($fp) + la $t0 data_160 + sw $t0 -124($fp) + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -100($fp) + sw $v0 -120($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_433 + j label_434 + label_433: + li $v0 4 + la $a0 data_161 + syscall + li $v0 10 + syscall + label_434: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -100($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9490,19 +10418,33 @@ function_prompt2_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -108($fp) - la $t0 data_105 - sw $t0 -92($fp) - lw $t0 -92($fp) + sw $v0 -112($fp) + la $t0 data_162 + sw $t0 -108($fp) + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -88($fp) + sw $v0 -104($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_435 + j label_436 + label_435: + li $v0 4 + la $a0 data_163 + syscall + li $v0 10 + syscall + label_436: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -88($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9515,18 +10457,32 @@ function_prompt2_at_CellularAutomaton: jalr $ra $t0 addi $sp $sp 8 sw $v0 -96($fp) - la $t0 data_106 - sw $t0 -80($fp) - lw $t0 -80($fp) + la $t0 data_164 + sw $t0 -92($fp) + lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -76($fp) + sw $v0 -88($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_437 + j label_438 + label_437: + li $v0 4 + la $a0 data_165 + syscall + li $v0 10 + syscall + label_438: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -76($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9538,7 +10494,21 @@ function_prompt2_at_CellularAutomaton: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -84($fp) + sw $v0 -80($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_439 + j label_440 + label_439: + li $v0 4 + la $a0 data_166 + syscall + li $v0 10 + syscall + label_440: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -9553,8 +10523,8 @@ function_prompt2_at_CellularAutomaton: addi $sp $sp 4 sw $v0 -72($fp) lw $t0 -72($fp) - sw $t0 -112($fp) - la $t0 data_107 + sw $t0 -128($fp) + la $t0 data_167 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -9562,7 +10532,7 @@ function_prompt2_at_CellularAutomaton: jal __init_at_String addi $sp $sp 4 sw $v0 -20($fp) - lw $t0 -112($fp) + lw $t0 -128($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table @@ -9586,26 +10556,26 @@ function_prompt2_at_CellularAutomaton: seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) - bne $t0 $zero label_321 + bne $t0 $zero label_441 lw $t0 -48($fp) lw $t1 -40($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) - bne $t0 $zero label_322 + bne $t0 $zero label_442 lw $t0 -48($fp) lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) - bne $t0 $zero label_323 - lw $t0 -112($fp) + bne $t0 $zero label_443 + lw $t0 -128($fp) lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) - j label_324 - label_321: - lw $t0 -112($fp) + j label_444 + label_441: + lw $t0 -128($fp) lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) @@ -9615,9 +10585,9 @@ function_prompt2_at_CellularAutomaton: lw $t1 -52($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) - j label_324 - label_322: - lw $t0 -112($fp) + j label_444 + label_442: + lw $t0 -128($fp) lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) @@ -9629,9 +10599,9 @@ function_prompt2_at_CellularAutomaton: move $a1 $t0 jal equal_str sw $v0 -28($fp) - j label_324 - label_323: - lw $t0 -112($fp) + j label_444 + label_443: + lw $t0 -128($fp) lw $t1 12($t0) sw $t1 -56($fp) lw $t0 -20($fp) @@ -9641,8 +10611,8 @@ function_prompt2_at_CellularAutomaton: lw $t1 -52($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) - j label_324 - label_324: + j label_444 + label_444: lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -9653,7 +10623,7 @@ function_prompt2_at_CellularAutomaton: lw $t1 12($t0) sw $t1 -64($fp) lw $t0 -64($fp) - bne $t0 $zero label_325 + bne $t0 $zero label_445 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -9662,8 +10632,8 @@ function_prompt2_at_CellularAutomaton: sw $v0 -16($fp) lw $t0 -16($fp) sw $t0 -68($fp) - j label_326 - label_325: + j label_446 + label_445: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) @@ -9672,9 +10642,9 @@ function_prompt2_at_CellularAutomaton: sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -68($fp) - label_326: + label_446: lw $v0 -68($fp) - addi $sp $sp 120 + addi $sp $sp 136 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -9745,33 +10715,47 @@ function_main_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -124 + addi $sp $sp -144 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -112($fp) + sw $v0 -132($fp) la $t0 data_10 - sw $t0 -108($fp) - lw $t0 -108($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -108($fp) - la $t0 data_108 - sw $t0 -100($fp) - lw $t0 -100($fp) + sw $v0 -128($fp) + la $t0 data_168 + sw $t0 -124($fp) + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -96($fp) + sw $v0 -120($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -116($fp) + lw $t0 -116($fp) + bne $t0 $zero label_447 + j label_448 + label_447: + li $v0 4 + la $a0 data_169 + syscall + li $v0 10 + syscall + label_448: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -96($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9783,19 +10767,33 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -104($fp) - la $t0 data_109 - sw $t0 -88($fp) - lw $t0 -88($fp) + sw $v0 -112($fp) + la $t0 data_170 + sw $t0 -108($fp) + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -84($fp) + sw $v0 -104($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -100($fp) + lw $t0 -100($fp) + bne $t0 $zero label_449 + j label_450 + label_449: + li $v0 4 + la $a0 data_171 + syscall + li $v0 10 + syscall + label_450: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -84($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -9807,8 +10805,22 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -92($fp) - label_327: + sw $v0 -96($fp) + label_451: + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_452 + j label_453 + label_452: + li $v0 4 + la $a0 data_172 + syscall + li $v0 10 + syscall + label_453: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -9821,22 +10833,36 @@ function_main_at_Main: lw $t0 88($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_328 - j label_342 - label_328: + sw $t1 -92($fp) + lw $t0 -92($fp) + bne $t0 $zero label_454 + j label_472 + label_454: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -112($fp) + sw $v0 -80($fp) + lw $t0 -80($fp) + sw $t0 -132($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_455 + j label_456 + label_455: + li $v0 4 + la $a0 data_173 + syscall + li $v0 10 + syscall + label_456: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -9849,32 +10875,32 @@ function_main_at_Main: lw $t0 76($t0) jalr $ra $t0 addi $sp $sp 4 + sw $v0 -72($fp) + lw $t0 -72($fp) + sw $t0 -128($fp) + jal __init_at_CellularAutomaton sw $v0 -68($fp) lw $t0 -68($fp) - sw $t0 -108($fp) - jal __init_at_CellularAutomaton - sw $v0 -64($fp) - lw $t0 -64($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_329 - j label_330 - label_329: + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_457 + j label_458 + label_457: li $v0 4 - la $a0 data_110 + la $a0 data_174 syscall li $v0 10 syscall - label_330: - lw $t0 -64($fp) + label_458: + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -108($fp) + lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -64($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -9883,8 +10909,8 @@ function_main_at_Main: lw $t0 52($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -56($fp) - lw $t0 -56($fp) + sw $v0 -60($fp) + lw $t0 -60($fp) lw $t1 0($fp) addi $t1 $t1 28 sw $t0 0($t1) @@ -9896,17 +10922,17 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_331 - j label_332 - label_331: + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_459 + j label_460 + label_459: li $v0 4 - la $a0 data_111 + la $a0 data_175 syscall li $v0 10 syscall - label_332: + label_460: lw $t4 0($fp) lw $t4 28($t4) addi $sp $sp -4 @@ -9929,15 +10955,29 @@ function_main_at_Main: lw $t0 80($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -48($fp) - label_333: - lw $t0 -112($fp) + sw $v0 -52($fp) + label_461: + lw $t0 -132($fp) lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_334 - j label_341 - label_334: + sw $t1 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_462 + j label_471 + label_462: + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -36($fp) + lw $t0 -36($fp) + bne $t0 $zero label_463 + j label_464 + label_463: + li $v0 4 + la $a0 data_176 + syscall + li $v0 10 + syscall + label_464: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -9953,9 +10993,9 @@ function_main_at_Main: sw $v0 -32($fp) lw $t0 -32($fp) lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_335 + sw $t1 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_465 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -9963,11 +11003,11 @@ function_main_at_Main: addi $sp $sp 4 sw $v0 -28($fp) lw $t0 -28($fp) - sw $t0 -112($fp) - lw $t0 -112($fp) - sw $t0 -40($fp) - j label_340 - label_335: + sw $t0 -132($fp) + lw $t0 -132($fp) + sw $t0 -44($fp) + j label_470 + label_465: lw $t4 0($fp) lw $t4 28($t4) addi $sp $sp -4 @@ -9978,15 +11018,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_336 - j label_337 - label_336: + bne $t0 $zero label_466 + j label_467 + label_466: li $v0 4 - la $a0 data_112 + la $a0 data_177 syscall li $v0 10 syscall - label_337: + label_467: lw $t4 0($fp) lw $t4 28($t4) addi $sp $sp -4 @@ -10020,15 +11060,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_338 - j label_339 - label_338: + bne $t0 $zero label_468 + j label_469 + label_468: li $v0 4 - la $a0 data_113 + la $a0 data_178 syscall li $v0 10 syscall - label_339: + label_469: lw $t4 0($fp) lw $t4 28($t4) addi $sp $sp -4 @@ -10053,14 +11093,14 @@ function_main_at_Main: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -40($fp) - label_340: - j label_333 - label_341: - j label_327 - label_342: + sw $t0 -44($fp) + label_470: + j label_461 + label_471: + j label_451 + label_472: lw $v0 0($fp) - addi $sp $sp 124 + addi $sp $sp 144 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index e52b48060..b88392533 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -32,13 +32,13 @@ data_14: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_15: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_16: .asciiz " " +data_16: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_17: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_18: .asciiz "\n" +data_18: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" +data_19: .asciiz " " .word 0 data_20: .asciiz "RuntimeError: Function call in a void instance" .word 0 @@ -46,11 +46,25 @@ data_21: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_22: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" +data_23: .asciiz "\n" .word 0 data_24: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_25: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_26: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_27: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_28: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_29: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_30: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_31: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_32: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -740,7 +754,21 @@ function_head_at_List: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -8 + addi $sp $sp -12 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_13 + syscall + li $v0 10 + syscall + label_4: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -761,7 +789,7 @@ function_head_at_List: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 8 + addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -774,7 +802,21 @@ function_tail_at_List: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -4 + addi $sp $sp -8 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_6: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -789,7 +831,7 @@ function_tail_at_List: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 0($fp) - addi $sp $sp 4 + addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -810,15 +852,15 @@ function_cons_at_List: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_3 - j label_4 - label_3: + bne $t0 $zero label_7 + j label_8 + label_7: li $v0 4 - la $a0 data_13 + la $a0 data_15 syscall li $v0 10 syscall - label_4: + label_8: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1055,21 +1097,21 @@ function_print_list_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -68 + addi $sp $sp -84 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_5 - j label_6 - label_5: + sw $t0 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_9 + j label_10 + label_9: li $v0 4 - la $a0 data_14 + la $a0 data_16 syscall li $v0 10 syscall - label_6: + label_10: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1082,26 +1124,26 @@ function_print_list_at_Main: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) + sw $v0 -76($fp) + lw $t0 -76($fp) lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_11 + sw $t1 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_21 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_7 - j label_8 - label_7: + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_11 + j label_12 + label_11: li $v0 4 - la $a0 data_15 + la $a0 data_17 syscall li $v0 10 syscall - label_8: + label_12: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1114,11 +1156,25 @@ function_print_list_at_Main: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -48($fp) + sw $v0 -68($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_14: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -48($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -1130,19 +1186,33 @@ function_print_list_at_Main: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -56($fp) - la $t0 data_16 - sw $t0 -40($fp) - lw $t0 -40($fp) + sw $v0 -60($fp) + la $t0 data_19 + sw $t0 -56($fp) + lw $t0 -56($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -36($fp) + sw $v0 -52($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_16: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -36($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -1158,17 +1228,17 @@ function_print_list_at_Main: lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_9 - j label_10 - label_9: + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_17 + j label_18 + label_17: li $v0 4 - la $a0 data_17 + la $a0 data_21 syscall li $v0 10 syscall - label_10: + label_18: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1181,11 +1251,25 @@ function_print_list_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -24($fp) + sw $v0 -36($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_19 + j label_20 + label_19: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_20: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -24($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -1197,23 +1281,37 @@ function_print_list_at_Main: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -72($fp) - j label_12 - label_11: - la $t0 data_18 - sw $t0 -16($fp) - lw $t0 -16($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -88($fp) + j label_24 + label_21: + la $t0 data_23 + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_22 + j label_23 + label_22: + li $v0 4 + la $a0 data_24 + syscall + li $v0 10 + syscall + label_23: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -1225,12 +1323,12 @@ function_print_list_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -72($fp) - label_12: - lw $v0 -72($fp) - addi $sp $sp 68 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -88($fp) + label_24: + lw $v0 -88($fp) + addi $sp $sp 84 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1243,60 +1341,60 @@ function_main_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -104 + addi $sp $sp -108 li $t0 5 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -108($fp) + sw $v0 -112($fp) li $t0 4 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -104($fp) + sw $v0 -108($fp) li $t0 3 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -100($fp) + sw $v0 -104($fp) li $t0 2 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -96($fp) + sw $v0 -100($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -92($fp) + sw $v0 -96($fp) jal __init_at_List - sw $v0 -88($fp) - lw $t0 -88($fp) + sw $v0 -92($fp) + lw $t0 -92($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_13 - j label_14 - label_13: + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_25 + j label_26 + label_25: li $v0 4 - la $a0 data_19 + la $a0 data_25 syscall li $v0 10 syscall - label_14: - lw $t0 -88($fp) + label_26: + lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -92($fp) + lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -88($fp) + lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1305,28 +1403,28 @@ function_main_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -80($fp) - lw $t0 -80($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_15 - j label_16 - label_15: + sw $t0 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_27 + j label_28 + label_27: li $v0 4 - la $a0 data_20 + la $a0 data_26 syscall li $v0 10 syscall - label_16: - lw $t0 -80($fp) + label_28: + lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -96($fp) + lw $t0 -100($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -80($fp) + lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1335,28 +1433,28 @@ function_main_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -72($fp) - lw $t0 -72($fp) + sw $v0 -76($fp) + lw $t0 -76($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_17 - j label_18 - label_17: + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_29 + j label_30 + label_29: li $v0 4 - la $a0 data_21 + la $a0 data_27 syscall li $v0 10 syscall - label_18: - lw $t0 -72($fp) + label_30: + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -100($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -72($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1365,28 +1463,28 @@ function_main_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -64($fp) - lw $t0 -64($fp) + sw $v0 -68($fp) + lw $t0 -68($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_19 - j label_20 - label_19: + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_31 + j label_32 + label_31: li $v0 4 - la $a0 data_22 + la $a0 data_28 syscall li $v0 10 syscall - label_20: - lw $t0 -64($fp) + label_32: + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -104($fp) + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -64($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1395,28 +1493,28 @@ function_main_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -56($fp) - lw $t0 -56($fp) + sw $v0 -60($fp) + lw $t0 -60($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_21 - j label_22 - label_21: + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_33 + j label_34 + label_33: li $v0 4 - la $a0 data_23 + la $a0 data_29 syscall li $v0 10 syscall - label_22: - lw $t0 -56($fp) + label_34: + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -108($fp) + lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -56($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1425,12 +1523,12 @@ function_main_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -48($fp) - lw $t0 -48($fp) + sw $v0 -52($fp) + lw $t0 -52($fp) lw $t1 0($fp) addi $t1 $t1 12 sw $t0 0($t1) - label_23: + label_35: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1439,17 +1537,17 @@ function_main_at_Main: addi $sp $sp 4 li $t1 0 seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_24 - j label_25 - label_24: + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_36 + j label_37 + label_36: li $v0 4 - la $a0 data_24 + la $a0 data_30 syscall li $v0 10 syscall - label_25: + label_37: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1472,26 +1570,40 @@ function_main_at_Main: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -36($fp) + sw $t1 -40($fp) + lw $t0 -40($fp) xori $t0 $t0 1 - sw $t0 -32($fp) - lw $t0 -32($fp) + sw $t0 -36($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - lw $t1 12($t0) - sw $t1 -44($fp) + sw $v0 -44($fp) lw $t0 -44($fp) - bne $t0 $zero label_26 - j label_29 - label_26: + lw $t1 12($t0) + sw $t1 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_38 + j label_43 + label_38: + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_39 + j label_40 + label_39: + li $v0 4 + la $a0 data_31 + syscall + li $v0 10 + syscall + label_40: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1523,15 +1635,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_27 - j label_28 - label_27: + bne $t0 $zero label_41 + j label_42 + label_41: li $v0 4 - la $a0 data_25 + la $a0 data_32 syscall li $v0 10 syscall - label_28: + label_42: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1559,10 +1671,10 @@ function_main_at_Main: lw $t1 0($fp) addi $t1 $t1 12 sw $t0 0($t1) - j label_23 - label_29: + j label_35 + label_43: li $v0 0 - addi $sp $sp 104 + addi $sp $sp 108 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index c40447822..7ff429dcd 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -32,9 +32,9 @@ data_14: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_15: .asciiz "=(\n" .word 0 -data_16: .asciiz "=)\n" +data_16: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" +data_17: .asciiz "=)\n" .word 0 data_18: .asciiz "RuntimeError: Function call in a void instance" .word 0 @@ -42,19 +42,35 @@ data_19: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_20: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_21: .asciiz "I" +data_21: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_22: .asciiz "+" +data_22: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" +data_23: .asciiz "=(\n" .word 0 data_24: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" +data_25: .asciiz "=)\n" .word 0 data_26: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" +data_27: .asciiz "I" +.word 0 +data_28: .asciiz "+" +.word 0 +data_29: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_30: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_31: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_32: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_33: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_34: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_35: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -708,26 +724,26 @@ function_main_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -148 + addi $sp $sp -188 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -152($fp) + sw $v0 -192($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -148($fp) + sw $v0 -188($fp) jal __init_at_Complex - sw $v0 -144($fp) - lw $t0 -144($fp) + sw $v0 -184($fp) + lw $t0 -184($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) + sw $t0 -180($fp) + lw $t0 -180($fp) bne $t0 $zero label_3 j label_4 label_3: @@ -737,16 +753,16 @@ function_main_at_Main: li $v0 10 syscall label_4: - lw $t0 -144($fp) + lw $t0 -184($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -152($fp) + lw $t0 -192($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -148($fp) + lw $t0 -188($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -144($fp) + lw $t0 -184($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -755,14 +771,14 @@ function_main_at_Main: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -136($fp) - lw $t0 -136($fp) - sw $t0 -156($fp) - lw $t0 -156($fp) + sw $v0 -176($fp) + lw $t0 -176($fp) + sw $t0 -196($fp) + lw $t0 -196($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) + sw $t0 -128($fp) + lw $t0 -128($fp) bne $t0 $zero label_5 j label_6 label_5: @@ -772,10 +788,10 @@ function_main_at_Main: li $v0 10 syscall label_6: - lw $t0 -156($fp) + lw $t0 -196($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -156($fp) + lw $t0 -196($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -784,12 +800,12 @@ function_main_at_Main: lw $t0 44($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -156($fp) + sw $v0 -124($fp) + lw $t0 -196($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) + sw $t0 -120($fp) + lw $t0 -120($fp) bne $t0 $zero label_7 j label_8 label_7: @@ -799,10 +815,10 @@ function_main_at_Main: li $v0 10 syscall label_8: - lw $t0 -156($fp) + lw $t0 -196($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -156($fp) + lw $t0 -196($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -811,111 +827,125 @@ function_main_at_Main: lw $t0 40($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -84($fp) + sw $v0 -116($fp) + lw $t0 -124($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -112($fp) + sw $t1 -152($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -108($fp) + sw $t0 -148($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -104($fp) + sw $t0 -144($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -100($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) + sw $t0 -140($fp) + lw $t0 -152($fp) + lw $t1 -148($fp) seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) + sw $t0 -136($fp) + lw $t0 -136($fp) bne $t0 $zero label_9 - lw $t0 -112($fp) - lw $t1 -104($fp) + lw $t0 -152($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) + sw $t0 -136($fp) + lw $t0 -136($fp) bne $t0 $zero label_10 - lw $t0 -112($fp) - lw $t1 -100($fp) + lw $t0 -152($fp) + lw $t1 -140($fp) seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) + sw $t0 -136($fp) + lw $t0 -136($fp) bne $t0 $zero label_11 - lw $t0 -84($fp) - lw $t1 -76($fp) + lw $t0 -124($fp) + lw $t1 -116($fp) seq $t0 $t0 $t1 - sw $t0 -92($fp) + sw $t0 -132($fp) j label_12 label_9: - lw $t0 -84($fp) + lw $t0 -124($fp) lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -76($fp) + sw $t1 -160($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) + sw $t1 -156($fp) + lw $t0 -160($fp) + lw $t1 -156($fp) seq $t0 $t0 $t1 - sw $t0 -92($fp) + sw $t0 -132($fp) j label_12 label_10: - lw $t0 -84($fp) + lw $t0 -124($fp) lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -76($fp) + sw $t1 -160($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) + sw $t1 -156($fp) + lw $t0 -160($fp) move $a0 $t0 - lw $t0 -116($fp) + lw $t0 -156($fp) move $a1 $t0 jal equal_str - sw $v0 -92($fp) + sw $v0 -132($fp) j label_12 label_11: - lw $t0 -84($fp) + lw $t0 -124($fp) lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -76($fp) + sw $t1 -160($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) + sw $t1 -156($fp) + lw $t0 -160($fp) + lw $t1 -156($fp) seq $t0 $t0 $t1 - sw $t0 -92($fp) + sw $t0 -132($fp) j label_12 label_12: - lw $t0 -92($fp) + lw $t0 -132($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -124($fp) + sw $v0 -164($fp) + lw $t0 -164($fp) lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_13 + sw $t1 -168($fp) + lw $t0 -168($fp) + bne $t0 $zero label_15 la $t0 data_15 - sw $t0 -68($fp) - lw $t0 -68($fp) + sw $t0 -112($fp) + lw $t0 -112($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -64($fp) + sw $v0 -108($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -104($fp) + lw $t0 -104($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 + la $a0 data_16 + syscall + li $v0 10 + syscall + label_14: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -64($fp) + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -927,23 +957,37 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -132($fp) - j label_14 - label_13: - la $t0 data_16 - sw $t0 -56($fp) - lw $t0 -56($fp) + sw $v0 -100($fp) + lw $t0 -100($fp) + sw $t0 -172($fp) + j label_18 + label_15: + la $t0 data_17 + sw $t0 -96($fp) + lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -52($fp) + sw $v0 -92($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + bne $t0 $zero label_16 + j label_17 + label_16: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_17: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -92($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -955,28 +999,28 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -132($fp) - label_14: - lw $t0 -156($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) + sw $t0 -172($fp) + label_18: + lw $t0 -196($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_15 - j label_16 - label_15: + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_19 + j label_20 + label_19: li $v0 4 - la $a0 data_17 + la $a0 data_19 syscall li $v0 10 syscall - label_16: - lw $t0 -156($fp) + label_20: + lw $t0 -196($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -156($fp) + lw $t0 -196($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -985,25 +1029,25 @@ function_main_at_Main: lw $t0 40($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -156($fp) + sw $v0 -68($fp) + lw $t0 -196($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_17 - j label_18 - label_17: + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_21 + j label_22 + label_21: li $v0 4 - la $a0 data_18 + la $a0 data_20 syscall li $v0 10 syscall - label_18: - lw $t0 -156($fp) + label_22: + lw $t0 -196($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -156($fp) + lw $t0 -196($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1012,25 +1056,25 @@ function_main_at_Main: lw $t0 44($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -60($fp) + lw $t0 -60($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_19 - j label_20 - label_19: + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_23 + j label_24 + label_23: li $v0 4 - la $a0 data_19 + la $a0 data_21 syscall li $v0 10 syscall - label_20: - lw $t0 -28($fp) + label_24: + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -28($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1039,31 +1083,127 @@ function_main_at_Main: lw $t0 48($t0) jalr $ra $t0 addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_25 + j label_26 + label_25: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_26: + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 28($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -44($fp) + lw $t0 -44($fp) + lw $t1 12($t0) + sw $t1 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_29 + la $t0 data_23 + sw $t0 -40($fp) + lw $t0 -40($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -36($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_27 + j label_28 + label_27: + li $v0 4 + la $a0 data_24 + syscall + li $v0 10 + syscall + label_28: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -80($fp) + j label_32 + label_29: + la $t0 data_25 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 sw $v0 -20($fp) - lw $t0 -20($fp) + lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_21 - j label_22 - label_21: + bne $t0 $zero label_30 + j label_31 + label_30: li $v0 4 - la $a0 data_20 + la $a0 data_26 syscall li $v0 10 syscall - label_22: - lw $t0 -20($fp) + label_31: + lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -36($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -20($fp) + lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - addi $sp $sp 148 + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -80($fp) + label_32: + lw $v0 -80($fp) + addi $sp $sp 188 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1094,7 +1234,7 @@ __init_at_Main: addi $sp $sp -4 sw $t0 0($sp) jal __init_attr_at_Main - addi $sp $sp 16 + addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) addi $sp $sp 8 @@ -1173,19 +1313,19 @@ function_init_at_Complex: seq $t0 $t0 $t1 sw $t0 -52($fp) lw $t0 -52($fp) - bne $t0 $zero label_23 + bne $t0 $zero label_33 lw $t0 -68($fp) lw $t1 -60($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) lw $t0 -52($fp) - bne $t0 $zero label_24 + bne $t0 $zero label_34 lw $t0 -68($fp) lw $t1 -56($fp) seq $t0 $t0 $t1 sw $t0 -52($fp) lw $t0 -52($fp) - bne $t0 $zero label_25 + bne $t0 $zero label_35 lw $t4 8($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1195,8 +1335,8 @@ function_init_at_Complex: lw $t1 4($fp) seq $t0 $t0 $t1 sw $t0 -48($fp) - j label_26 - label_23: + j label_36 + label_33: lw $t4 8($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1212,8 +1352,8 @@ function_init_at_Complex: lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -48($fp) - j label_26 - label_24: + j label_36 + label_34: lw $t4 8($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1231,8 +1371,8 @@ function_init_at_Complex: move $a1 $t0 jal equal_str sw $v0 -48($fp) - j label_26 - label_25: + j label_36 + label_35: lw $t4 8($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1248,8 +1388,8 @@ function_init_at_Complex: lw $t1 -72($fp) seq $t0 $t0 $t1 sw $t0 -48($fp) - j label_26 - label_26: + j label_36 + label_36: lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1285,19 +1425,19 @@ function_init_at_Complex: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_27 + bne $t0 $zero label_37 lw $t0 -32($fp) lw $t1 -24($fp) seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_28 + bne $t0 $zero label_38 lw $t0 -32($fp) lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_29 + bne $t0 $zero label_39 lw $t4 8($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1307,8 +1447,8 @@ function_init_at_Complex: lw $t1 0($fp) seq $t0 $t0 $t1 sw $t0 -12($fp) - j label_30 - label_27: + j label_40 + label_37: lw $t4 8($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1324,8 +1464,8 @@ function_init_at_Complex: lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -12($fp) - j label_30 - label_28: + j label_40 + label_38: lw $t4 8($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1343,8 +1483,8 @@ function_init_at_Complex: move $a1 $t0 jal equal_str sw $v0 -12($fp) - j label_30 - label_29: + j label_40 + label_39: lw $t4 8($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1360,8 +1500,8 @@ function_init_at_Complex: lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -12($fp) - j label_30 - label_30: + j label_40 + label_40: lw $t0 -12($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1382,13 +1522,13 @@ function_print_at_Complex: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -104 + addi $sp $sp -112 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -60($fp) + sw $v0 -68($fp) lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1400,48 +1540,48 @@ function_print_at_Complex: la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -84($fp) + sw $t1 -92($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -80($fp) + sw $t0 -88($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -76($fp) + sw $t0 -84($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -72($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) + sw $t0 -80($fp) + lw $t0 -92($fp) + lw $t1 -88($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_31 - lw $t0 -84($fp) - lw $t1 -76($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_41 + lw $t0 -92($fp) + lw $t1 -84($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_32 - lw $t0 -84($fp) - lw $t1 -72($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_42 + lw $t0 -92($fp) + lw $t1 -80($fp) seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_33 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_43 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - lw $t1 -60($fp) + lw $t1 -68($fp) seq $t0 $t0 $t1 - sw $t0 -64($fp) - j label_34 - label_31: + sw $t0 -72($fp) + j label_44 + label_41: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1449,16 +1589,16 @@ function_print_at_Complex: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -64($fp) - j label_34 - label_32: + sw $t0 -72($fp) + j label_44 + label_42: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1466,18 +1606,18 @@ function_print_at_Complex: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) move $a0 $t0 - lw $t0 -88($fp) + lw $t0 -96($fp) move $a1 $t0 jal equal_str - sw $v0 -64($fp) - j label_34 - label_33: + sw $v0 -72($fp) + j label_44 + label_43: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1485,28 +1625,36 @@ function_print_at_Complex: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -60($fp) + sw $t1 -100($fp) + lw $t0 -68($fp) lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) + sw $t1 -96($fp) + lw $t0 -100($fp) + lw $t1 -96($fp) seq $t0 $t0 $t1 - sw $t0 -64($fp) - j label_34 - label_34: - lw $t0 -64($fp) + sw $t0 -72($fp) + j label_44 + label_44: + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) + sw $v0 -104($fp) + lw $t0 -104($fp) lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_41 - la $t0 data_21 + sw $t1 -108($fp) + lw $t0 -108($fp) + bne $t0 $zero label_53 + la $t0 data_27 + sw $t0 -64($fp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 + sw $v0 -60($fp) + la $t0 data_28 sw $t0 -56($fp) lw $t0 -56($fp) addi $sp $sp -4 @@ -1514,14 +1662,20 @@ function_print_at_Complex: jal __init_at_String addi $sp $sp 4 sw $v0 -52($fp) - la $t0 data_22 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 sw $t0 -48($fp) lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) + bne $t0 $zero label_45 + j label_46 + label_45: + li $v0 4 + la $a0 data_29 + syscall + li $v0 10 + syscall + label_46: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1542,28 +1696,28 @@ function_print_at_Complex: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) + sw $v0 -44($fp) + lw $t0 -44($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_35 - j label_36 - label_35: + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_47 + j label_48 + label_47: li $v0 4 - la $a0 data_23 + la $a0 data_30 syscall li $v0 10 syscall - label_36: - lw $t0 -40($fp) + label_48: + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -44($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -40($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1572,22 +1726,22 @@ function_print_at_Complex: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_37 - j label_38 - label_37: + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_49 + j label_50 + label_49: li $v0 4 - la $a0 data_24 + la $a0 data_31 syscall li $v0 10 syscall - label_38: - lw $t0 -32($fp) + label_50: + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t4 0($fp) @@ -1598,7 +1752,7 @@ function_print_at_Complex: addi $sp $sp 4 addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -32($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1607,28 +1761,28 @@ function_print_at_Complex: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -24($fp) - lw $t0 -24($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_39 - j label_40 - label_39: + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_51 + j label_52 + label_51: li $v0 4 - la $a0 data_25 + la $a0 data_32 syscall li $v0 10 syscall - label_40: - lw $t0 -24($fp) + label_52: + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -24($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -1637,11 +1791,25 @@ function_print_at_Complex: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -16($fp) + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -112($fp) + j label_56 + label_53: + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) lw $t0 -16($fp) - sw $t0 -104($fp) - j label_42 - label_41: + bne $t0 $zero label_54 + j label_55 + label_54: + li $v0 4 + la $a0 data_33 + syscall + li $v0 10 + syscall + label_55: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1664,10 +1832,10 @@ function_print_at_Complex: addi $sp $sp 8 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -104($fp) - label_42: - lw $v0 -104($fp) - addi $sp $sp 104 + sw $t0 -112($fp) + label_56: + lw $v0 -112($fp) + addi $sp $sp 112 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1728,19 +1896,19 @@ function_reflect_0_at_Complex: seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) - bne $t0 $zero label_43 + bne $t0 $zero label_57 lw $t0 -92($fp) lw $t1 -84($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) - bne $t0 $zero label_44 + bne $t0 $zero label_58 lw $t0 -92($fp) lw $t1 -80($fp) seq $t0 $t0 $t1 sw $t0 -76($fp) lw $t0 -76($fp) - bne $t0 $zero label_45 + bne $t0 $zero label_59 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1750,8 +1918,8 @@ function_reflect_0_at_Complex: lw $t1 -68($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) - j label_46 - label_43: + j label_60 + label_57: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1767,8 +1935,8 @@ function_reflect_0_at_Complex: lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) - j label_46 - label_44: + j label_60 + label_58: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1786,8 +1954,8 @@ function_reflect_0_at_Complex: move $a1 $t0 jal equal_str sw $v0 -72($fp) - j label_46 - label_45: + j label_60 + label_59: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1803,8 +1971,8 @@ function_reflect_0_at_Complex: lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -72($fp) - j label_46 - label_46: + j label_60 + label_60: lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1858,19 +2026,19 @@ function_reflect_0_at_Complex: seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_47 + bne $t0 $zero label_61 lw $t0 -44($fp) lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_48 + bne $t0 $zero label_62 lw $t0 -44($fp) lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_49 + bne $t0 $zero label_63 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1880,8 +2048,8 @@ function_reflect_0_at_Complex: lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_50 - label_47: + j label_64 + label_61: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1897,8 +2065,8 @@ function_reflect_0_at_Complex: lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_50 - label_48: + j label_64 + label_62: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1916,8 +2084,8 @@ function_reflect_0_at_Complex: move $a1 $t0 jal equal_str sw $v0 -24($fp) - j label_50 - label_49: + j label_64 + label_63: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1933,8 +2101,8 @@ function_reflect_0_at_Complex: lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_50 - label_50: + j label_64 + label_64: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2003,19 +2171,19 @@ function_reflect_X_at_Complex: seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_51 + bne $t0 $zero label_65 lw $t0 -44($fp) lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_52 + bne $t0 $zero label_66 lw $t0 -44($fp) lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_53 + bne $t0 $zero label_67 lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2025,8 +2193,8 @@ function_reflect_X_at_Complex: lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_54 - label_51: + j label_68 + label_65: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2042,8 +2210,8 @@ function_reflect_X_at_Complex: lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_54 - label_52: + j label_68 + label_66: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2061,8 +2229,8 @@ function_reflect_X_at_Complex: move $a1 $t0 jal equal_str sw $v0 -24($fp) - j label_54 - label_53: + j label_68 + label_67: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2078,8 +2246,8 @@ function_reflect_X_at_Complex: lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_54 - label_54: + j label_68 + label_68: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2148,19 +2316,19 @@ function_reflect_Y_at_Complex: seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_55 + bne $t0 $zero label_69 lw $t0 -44($fp) lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_56 + bne $t0 $zero label_70 lw $t0 -44($fp) lw $t1 -32($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_57 + bne $t0 $zero label_71 lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2170,8 +2338,8 @@ function_reflect_Y_at_Complex: lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_58 - label_55: + j label_72 + label_69: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2187,8 +2355,8 @@ function_reflect_Y_at_Complex: lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_58 - label_56: + j label_72 + label_70: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2206,8 +2374,8 @@ function_reflect_Y_at_Complex: move $a1 $t0 jal equal_str sw $v0 -24($fp) - j label_58 - label_57: + j label_72 + label_71: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2223,8 +2391,8 @@ function_reflect_Y_at_Complex: lw $t1 -48($fp) seq $t0 $t0 $t1 sw $t0 -24($fp) - j label_58 - label_58: + j label_72 + label_72: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2251,15 +2419,15 @@ function_equal_at_Complex: seq $t0 $t0 $t1 sw $t0 -80($fp) lw $t0 -80($fp) - bne $t0 $zero label_59 - j label_60 - label_59: + bne $t0 $zero label_73 + j label_74 + label_73: li $v0 4 - la $a0 data_26 + la $a0 data_34 syscall li $v0 10 syscall - label_60: + label_74: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2302,19 +2470,19 @@ function_equal_at_Complex: seq $t0 $t0 $t1 sw $t0 -88($fp) lw $t0 -88($fp) - bne $t0 $zero label_61 + bne $t0 $zero label_75 lw $t0 -104($fp) lw $t1 -96($fp) seq $t0 $t0 $t1 sw $t0 -88($fp) lw $t0 -88($fp) - bne $t0 $zero label_62 + bne $t0 $zero label_76 lw $t0 -104($fp) lw $t1 -92($fp) seq $t0 $t0 $t1 sw $t0 -88($fp) lw $t0 -88($fp) - bne $t0 $zero label_63 + bne $t0 $zero label_77 lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2324,8 +2492,8 @@ function_equal_at_Complex: lw $t1 -76($fp) seq $t0 $t0 $t1 sw $t0 -84($fp) - j label_64 - label_61: + j label_78 + label_75: lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2341,8 +2509,8 @@ function_equal_at_Complex: lw $t1 -108($fp) seq $t0 $t0 $t1 sw $t0 -84($fp) - j label_64 - label_62: + j label_78 + label_76: lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2360,8 +2528,8 @@ function_equal_at_Complex: move $a1 $t0 jal equal_str sw $v0 -84($fp) - j label_64 - label_63: + j label_78 + label_77: lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2377,8 +2545,8 @@ function_equal_at_Complex: lw $t1 -108($fp) seq $t0 $t0 $t1 sw $t0 -84($fp) - j label_64 - label_64: + j label_78 + label_78: lw $t0 -84($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2389,7 +2557,7 @@ function_equal_at_Complex: lw $t1 12($t0) sw $t1 -120($fp) lw $t0 -120($fp) - bne $t0 $zero label_65 + bne $t0 $zero label_79 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -2398,22 +2566,22 @@ function_equal_at_Complex: sw $v0 -72($fp) lw $t0 -72($fp) sw $t0 -124($fp) - j label_74 - label_65: + j label_88 + label_79: lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_66 - j label_67 - label_66: + bne $t0 $zero label_80 + j label_81 + label_80: li $v0 4 - la $a0 data_27 + la $a0 data_35 syscall li $v0 10 syscall - label_67: + label_81: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2456,19 +2624,19 @@ function_equal_at_Complex: seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) - bne $t0 $zero label_68 + bne $t0 $zero label_82 lw $t0 -48($fp) lw $t1 -40($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) - bne $t0 $zero label_69 + bne $t0 $zero label_83 lw $t0 -48($fp) lw $t1 -36($fp) seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) - bne $t0 $zero label_70 + bne $t0 $zero label_84 lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2478,8 +2646,8 @@ function_equal_at_Complex: lw $t1 -20($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) - j label_71 - label_68: + j label_85 + label_82: lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2495,8 +2663,8 @@ function_equal_at_Complex: lw $t1 -52($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) - j label_71 - label_69: + j label_85 + label_83: lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2514,8 +2682,8 @@ function_equal_at_Complex: move $a1 $t0 jal equal_str sw $v0 -28($fp) - j label_71 - label_70: + j label_85 + label_84: lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -2531,8 +2699,8 @@ function_equal_at_Complex: lw $t1 -52($fp) seq $t0 $t0 $t1 sw $t0 -28($fp) - j label_71 - label_71: + j label_85 + label_85: lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2543,7 +2711,7 @@ function_equal_at_Complex: lw $t1 12($t0) sw $t1 -64($fp) lw $t0 -64($fp) - bne $t0 $zero label_72 + bne $t0 $zero label_86 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) @@ -2552,8 +2720,8 @@ function_equal_at_Complex: sw $v0 -16($fp) lw $t0 -16($fp) sw $t0 -68($fp) - j label_73 - label_72: + j label_87 + label_86: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) @@ -2562,10 +2730,10 @@ function_equal_at_Complex: sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -68($fp) - label_73: + label_87: lw $t0 -68($fp) sw $t0 -124($fp) - label_74: + label_88: lw $v0 -124($fp) addi $sp $sp 124 lw $fp 0($sp) diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index 00e588a4f..05e09f86d 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -36,11 +36,23 @@ data_16: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_17: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_18: .asciiz "enter a string\n" +data_18: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_19: .asciiz "that was not a palindrome\n" +data_19: .asciiz "enter a string\n" .word 0 -data_20: .asciiz "that was a palindrome\n" +data_20: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_21: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_22: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_23: .asciiz "that was not a palindrome\n" +.word 0 +data_24: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_25: .asciiz "that was a palindrome\n" +.word 0 +data_26: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -675,12 +687,12 @@ function_pal_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -272 + addi $sp $sp -276 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) + sw $t0 -236($fp) + lw $t0 -236($fp) bne $t0 $zero label_3 j label_4 label_3: @@ -702,110 +714,110 @@ function_pal_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -228($fp) + sw $v0 -232($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -224($fp) - lw $t0 -228($fp) + sw $v0 -228($fp) + lw $t0 -232($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -256($fp) + sw $t1 -260($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -252($fp) + sw $t0 -256($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -248($fp) + sw $t0 -252($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -244($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) + sw $t0 -248($fp) + lw $t0 -260($fp) + lw $t1 -256($fp) seq $t0 $t0 $t1 - sw $t0 -240($fp) - lw $t0 -240($fp) + sw $t0 -244($fp) + lw $t0 -244($fp) bne $t0 $zero label_5 - lw $t0 -256($fp) - lw $t1 -248($fp) + lw $t0 -260($fp) + lw $t1 -252($fp) seq $t0 $t0 $t1 - sw $t0 -240($fp) - lw $t0 -240($fp) + sw $t0 -244($fp) + lw $t0 -244($fp) bne $t0 $zero label_6 - lw $t0 -256($fp) - lw $t1 -244($fp) + lw $t0 -260($fp) + lw $t1 -248($fp) seq $t0 $t0 $t1 - sw $t0 -240($fp) - lw $t0 -240($fp) + sw $t0 -244($fp) + lw $t0 -244($fp) bne $t0 $zero label_7 - lw $t0 -228($fp) - lw $t1 -224($fp) + lw $t0 -232($fp) + lw $t1 -228($fp) seq $t0 $t0 $t1 - sw $t0 -236($fp) + sw $t0 -240($fp) j label_8 label_5: + lw $t0 -232($fp) + lw $t1 12($t0) + sw $t1 -268($fp) lw $t0 -228($fp) lw $t1 12($t0) sw $t1 -264($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 -264($fp) - lw $t1 -260($fp) + lw $t0 -268($fp) + lw $t1 -264($fp) seq $t0 $t0 $t1 - sw $t0 -236($fp) + sw $t0 -240($fp) j label_8 label_6: + lw $t0 -232($fp) + lw $t1 12($t0) + sw $t1 -268($fp) lw $t0 -228($fp) lw $t1 12($t0) sw $t1 -264($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 -264($fp) + lw $t0 -268($fp) move $a0 $t0 - lw $t0 -260($fp) + lw $t0 -264($fp) move $a1 $t0 jal equal_str - sw $v0 -236($fp) + sw $v0 -240($fp) j label_8 label_7: + lw $t0 -232($fp) + lw $t1 12($t0) + sw $t1 -268($fp) lw $t0 -228($fp) lw $t1 12($t0) sw $t1 -264($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 -264($fp) - lw $t1 -260($fp) + lw $t0 -268($fp) + lw $t1 -264($fp) seq $t0 $t0 $t1 - sw $t0 -236($fp) + sw $t0 -240($fp) j label_8 label_8: - lw $t0 -236($fp) + lw $t0 -240($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -268($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -272($fp) + sw $v0 -272($fp) lw $t0 -272($fp) - bne $t0 $zero label_33 + lw $t1 12($t0) + sw $t1 -276($fp) + lw $t0 -276($fp) + bne $t0 $zero label_35 lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) + sw $t0 -180($fp) + lw $t0 -180($fp) bne $t0 $zero label_9 j label_10 label_9: @@ -827,122 +839,122 @@ function_pal_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -172($fp) + sw $v0 -176($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 -172($fp) + sw $v0 -172($fp) + lw $t0 -176($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -200($fp) + sw $t1 -204($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -196($fp) + sw $t0 -200($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -192($fp) + sw $t0 -196($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -188($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) + sw $t0 -192($fp) + lw $t0 -204($fp) + lw $t1 -200($fp) seq $t0 $t0 $t1 - sw $t0 -184($fp) - lw $t0 -184($fp) + sw $t0 -188($fp) + lw $t0 -188($fp) bne $t0 $zero label_11 - lw $t0 -200($fp) - lw $t1 -192($fp) + lw $t0 -204($fp) + lw $t1 -196($fp) seq $t0 $t0 $t1 - sw $t0 -184($fp) - lw $t0 -184($fp) + sw $t0 -188($fp) + lw $t0 -188($fp) bne $t0 $zero label_12 - lw $t0 -200($fp) - lw $t1 -188($fp) + lw $t0 -204($fp) + lw $t1 -192($fp) seq $t0 $t0 $t1 - sw $t0 -184($fp) - lw $t0 -184($fp) + sw $t0 -188($fp) + lw $t0 -188($fp) bne $t0 $zero label_13 - lw $t0 -172($fp) - lw $t1 -168($fp) + lw $t0 -176($fp) + lw $t1 -172($fp) seq $t0 $t0 $t1 - sw $t0 -180($fp) + sw $t0 -184($fp) j label_14 label_11: + lw $t0 -176($fp) + lw $t1 12($t0) + sw $t1 -212($fp) lw $t0 -172($fp) lw $t1 12($t0) sw $t1 -208($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -208($fp) - lw $t1 -204($fp) + lw $t0 -212($fp) + lw $t1 -208($fp) seq $t0 $t0 $t1 - sw $t0 -180($fp) + sw $t0 -184($fp) j label_14 label_12: + lw $t0 -176($fp) + lw $t1 12($t0) + sw $t1 -212($fp) lw $t0 -172($fp) lw $t1 12($t0) sw $t1 -208($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -208($fp) + lw $t0 -212($fp) move $a0 $t0 - lw $t0 -204($fp) + lw $t0 -208($fp) move $a1 $t0 jal equal_str - sw $v0 -180($fp) + sw $v0 -184($fp) j label_14 label_13: + lw $t0 -176($fp) + lw $t1 12($t0) + sw $t1 -212($fp) lw $t0 -172($fp) lw $t1 12($t0) sw $t1 -208($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -208($fp) - lw $t1 -204($fp) + lw $t0 -212($fp) + lw $t1 -208($fp) seq $t0 $t0 $t1 - sw $t0 -180($fp) + sw $t0 -184($fp) j label_14 label_14: - lw $t0 -180($fp) + lw $t0 -184($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -212($fp) - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -216($fp) + sw $v0 -216($fp) lw $t0 -216($fp) - bne $t0 $zero label_31 + lw $t1 12($t0) + sw $t1 -220($fp) + lw $t0 -220($fp) + bne $t0 $zero label_33 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -120($fp) + sw $v0 -124($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -116($fp) + sw $v0 -120($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) + sw $t0 -116($fp) + lw $t0 -116($fp) bne $t0 $zero label_15 j label_16 label_15: @@ -955,10 +967,10 @@ function_pal_at_Main: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -120($fp) + lw $t0 -124($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -116($fp) + lw $t0 -120($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -970,12 +982,12 @@ function_pal_at_Main: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -108($fp) + sw $v0 -112($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) + sw $t0 -92($fp) + lw $t0 -92($fp) bne $t0 $zero label_17 j label_18 label_17: @@ -997,40 +1009,40 @@ function_pal_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) + sw $v0 -88($fp) + lw $t0 -88($fp) lw $t1 12($t0) - sw $t1 -100($fp) + sw $t1 -104($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) + sw $t1 -100($fp) + lw $t0 -104($fp) + lw $t1 -100($fp) sub $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) + sw $t0 -96($fp) + lw $t0 -96($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -104($fp) + sw $v0 -108($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -76($fp) + sw $v0 -80($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) + sw $t0 -76($fp) + lw $t0 -76($fp) bne $t0 $zero label_19 j label_20 label_19: @@ -1043,10 +1055,10 @@ function_pal_at_Main: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -104($fp) + lw $t0 -108($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -76($fp) + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1058,120 +1070,120 @@ function_pal_at_Main: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -68($fp) - lw $t0 -108($fp) + sw $v0 -72($fp) + lw $t0 -112($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -144($fp) + sw $t1 -148($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -140($fp) + sw $t0 -144($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -136($fp) + sw $t0 -140($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) + sw $t0 -136($fp) + lw $t0 -148($fp) + lw $t1 -144($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) bne $t0 $zero label_21 - lw $t0 -144($fp) - lw $t1 -136($fp) + lw $t0 -148($fp) + lw $t1 -140($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) bne $t0 $zero label_22 - lw $t0 -144($fp) - lw $t1 -132($fp) + lw $t0 -148($fp) + lw $t1 -136($fp) seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) bne $t0 $zero label_23 - lw $t0 -108($fp) - lw $t1 -68($fp) + lw $t0 -112($fp) + lw $t1 -72($fp) seq $t0 $t0 $t1 - sw $t0 -124($fp) + sw $t0 -128($fp) j label_24 label_21: - lw $t0 -108($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -68($fp) + sw $t1 -156($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) + sw $t1 -152($fp) + lw $t0 -156($fp) + lw $t1 -152($fp) seq $t0 $t0 $t1 - sw $t0 -124($fp) + sw $t0 -128($fp) j label_24 label_22: - lw $t0 -108($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -68($fp) + sw $t1 -156($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) + sw $t1 -152($fp) + lw $t0 -156($fp) move $a0 $t0 - lw $t0 -148($fp) + lw $t0 -152($fp) move $a1 $t0 jal equal_str - sw $v0 -124($fp) + sw $v0 -128($fp) j label_24 label_23: - lw $t0 -108($fp) + lw $t0 -112($fp) lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -68($fp) + sw $t1 -156($fp) + lw $t0 -72($fp) lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) + sw $t1 -152($fp) + lw $t0 -156($fp) + lw $t1 -152($fp) seq $t0 $t0 $t1 - sw $t0 -124($fp) + sw $t0 -128($fp) j label_24 label_24: - lw $t0 -124($fp) + lw $t0 -128($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) + sw $v0 -160($fp) lw $t0 -160($fp) + lw $t1 12($t0) + sw $t1 -164($fp) + lw $t0 -164($fp) bne $t0 $zero label_25 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - sw $t0 -164($fp) - j label_30 + sw $v0 -68($fp) + lw $t0 -68($fp) + sw $t0 -168($fp) + j label_32 label_25: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -56($fp) + sw $v0 -64($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) + sw $t0 -44($fp) + lw $t0 -44($fp) bne $t0 $zero label_26 j label_27 label_26: @@ -1193,34 +1205,34 @@ function_pal_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) + sw $v0 -40($fp) + lw $t0 -40($fp) lw $t1 12($t0) - sw $t1 -48($fp) + sw $t1 -56($fp) li $t0 2 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) + sw $t1 -52($fp) + lw $t0 -56($fp) + lw $t1 -52($fp) sub $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) + sw $t0 -48($fp) + lw $t0 -48($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -52($fp) + sw $v0 -60($fp) lw $t0 0($fp) li $t1 0 seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) + sw $t0 -32($fp) + lw $t0 -32($fp) bne $t0 $zero label_28 j label_29 label_28: @@ -1233,10 +1245,10 @@ function_pal_at_Main: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -56($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1248,11 +1260,25 @@ function_pal_at_Main: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 12 - sw $v0 -20($fp) + sw $v0 -28($fp) + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_30 + j label_31 + label_30: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_31: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -20($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 4($fp) @@ -1264,14 +1290,14 @@ function_pal_at_Main: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -164($fp) - label_30: - lw $t0 -164($fp) - sw $t0 -220($fp) - j label_32 - label_31: + sw $v0 -20($fp) + lw $t0 -20($fp) + sw $t0 -168($fp) + label_32: + lw $t0 -168($fp) + sw $t0 -224($fp) + j label_34 + label_33: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) @@ -1279,12 +1305,12 @@ function_pal_at_Main: addi $sp $sp 4 sw $v0 -16($fp) lw $t0 -16($fp) - sw $t0 -220($fp) - label_32: - lw $t0 -220($fp) - sw $t0 -276($fp) - j label_34 - label_33: + sw $t0 -224($fp) + label_34: + lw $t0 -224($fp) + sw $t0 -280($fp) + j label_36 + label_35: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) @@ -1292,10 +1318,10 @@ function_pal_at_Main: addi $sp $sp 4 sw $v0 -12($fp) lw $t0 -12($fp) - sw $t0 -276($fp) - label_34: - lw $v0 -276($fp) - addi $sp $sp 272 + sw $t0 -280($fp) + label_36: + lw $v0 -280($fp) + addi $sp $sp 276 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1308,42 +1334,56 @@ function_main_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -72 + addi $sp $sp -92 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) + sw $v0 -84($fp) + lw $t0 -84($fp) lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -72($fp) + sw $t1 -92($fp) + lw $t0 -92($fp) not $t0 $t0 addi $t0 $t0 1 - sw $t0 -68($fp) - lw $t0 -68($fp) + sw $t0 -88($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) + sw $v0 -96($fp) + lw $t0 -96($fp) lw $t1 0($fp) addi $t1 $t1 12 sw $t0 0($t1) - la $t0 data_18 - sw $t0 -56($fp) - lw $t0 -56($fp) + la $t0 data_19 + sw $t0 -80($fp) + lw $t0 -80($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -52($fp) + sw $v0 -76($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -72($fp) + lw $t0 -72($fp) + bne $t0 $zero label_37 + j label_38 + label_37: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_38: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -52($fp) + lw $t0 -76($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1355,7 +1395,21 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -60($fp) + sw $v0 -68($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_39 + j label_40 + label_39: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_40: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1368,11 +1422,25 @@ function_main_at_Main: lw $t0 16($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -36($fp) + sw $v0 -52($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_41 + j label_42 + label_41: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_42: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -36($fp) + lw $t0 -52($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1384,24 +1452,38 @@ function_main_at_Main: lw $t0 32($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) - lw $t1 12($t0) - sw $t1 -44($fp) + sw $v0 -44($fp) lw $t0 -44($fp) - bne $t0 $zero label_35 - la $t0 data_19 - sw $t0 -28($fp) - lw $t0 -28($fp) + lw $t1 12($t0) + sw $t1 -60($fp) + lw $t0 -60($fp) + bne $t0 $zero label_45 + la $t0 data_23 + sw $t0 -40($fp) + lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -24($fp) + sw $v0 -36($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_43 + j label_44 + label_43: + li $v0 4 + la $a0 data_24 + syscall + li $v0 10 + syscall + label_44: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -24($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1413,23 +1495,37 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -48($fp) - j label_36 - label_35: - la $t0 data_20 - sw $t0 -16($fp) - lw $t0 -16($fp) + sw $v0 -28($fp) + lw $t0 -28($fp) + sw $t0 -64($fp) + j label_48 + label_45: + la $t0 data_25 + sw $t0 -24($fp) + lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -12($fp) + sw $v0 -20($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_46 + j label_47 + label_46: + li $v0 4 + la $a0 data_26 + syscall + li $v0 10 + syscall + label_47: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -12($fp) + lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1441,12 +1537,12 @@ function_main_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -48($fp) - label_36: - lw $v0 -48($fp) - addi $sp $sp 72 + sw $v0 -12($fp) + lw $t0 -12($fp) + sw $t0 -64($fp) + label_48: + lw $v0 -64($fp) + addi $sp $sp 92 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index 9aac79288..cf0bfb264 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -24,15 +24,21 @@ data_10: .asciiz "Substring out of range" .word 0 data_11: .asciiz "2 is trivially prime.\n" .word 0 -data_12: .asciiz "RuntimeError: Division by zero" +data_12: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_13: .asciiz " is prime.\n" +data_13: .asciiz "RuntimeError: Division by zero" .word 0 -data_14: .asciiz "continue" +data_14: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_15: .asciiz "halt" +data_15: .asciiz " is prime.\n" .word 0 data_16: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_17: .asciiz "continue" +.word 0 +data_18: .asciiz "halt" +.word 0 +data_19: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -646,19 +652,33 @@ __init_attr_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -376 + addi $sp $sp -388 la $t0 data_11 - sw $t0 -356($fp) - lw $t0 -356($fp) + sw $t0 -372($fp) + lw $t0 -372($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -352($fp) + sw $v0 -368($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -364($fp) + lw $t0 -364($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_12 + syscall + li $v0 10 + syscall + label_4: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -352($fp) + lw $t0 -368($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -676,11 +696,11 @@ __init_attr_at_Main: sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -348($fp) - lw $t0 -348($fp) - sw $t0 -364($fp) + sw $v0 -356($fp) + lw $t0 -356($fp) + sw $t0 -376($fp) lw $t0 0($fp) - lw $t1 -364($fp) + lw $t1 -376($fp) sw $t1 20($t0) lw $t4 0($fp) lw $t4 20($t4) @@ -688,44 +708,44 @@ __init_attr_at_Main: sw $t4 0($sp) lw $t0 0($sp) addi $sp $sp 4 - sw $t0 -344($fp) + sw $t0 -352($fp) lw $t0 0($fp) - lw $t1 -344($fp) + lw $t1 -352($fp) sw $t1 28($t0) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -340($fp) + sw $v0 -348($fp) lw $t0 0($fp) - lw $t1 -340($fp) + lw $t1 -348($fp) sw $t1 12($t0) li $t0 500 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -332($fp) - lw $t0 -332($fp) - sw $t0 -336($fp) + sw $v0 -340($fp) + lw $t0 -340($fp) + sw $t0 -344($fp) lw $t0 0($fp) - lw $t1 -336($fp) + lw $t1 -344($fp) sw $t1 24($t0) - label_3: + label_5: li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -320($fp) - lw $t0 -320($fp) + sw $v0 -328($fp) + lw $t0 -328($fp) lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -324($fp) - bne $t0 $zero label_4 - j label_24 - label_4: + sw $t1 -332($fp) + lw $t0 -332($fp) + bne $t0 $zero label_6 + j label_30 + label_6: lw $t4 0($fp) lw $t4 28($t4) addi $sp $sp -4 @@ -733,27 +753,27 @@ __init_attr_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -312($fp) + sw $t1 -320($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 -300($fp) + sw $v0 -308($fp) + lw $t0 -308($fp) lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -312($fp) - lw $t1 -308($fp) + sw $t1 -316($fp) + lw $t0 -320($fp) + lw $t1 -316($fp) add $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) + sw $t0 -312($fp) + lw $t0 -312($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -316($fp) - lw $t0 -316($fp) + sw $v0 -324($fp) + lw $t0 -324($fp) lw $t1 0($fp) addi $t1 $t1 28 sw $t0 0($t1) @@ -762,12 +782,12 @@ __init_attr_at_Main: sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -296($fp) - lw $t0 -296($fp) + sw $v0 -304($fp) + lw $t0 -304($fp) lw $t1 0($fp) addi $t1 $t1 12 sw $t0 0($t1) - label_5: + label_7: lw $t4 0($fp) lw $t4 28($t4) addi $sp $sp -4 @@ -775,7 +795,7 @@ __init_attr_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -276($fp) + sw $t1 -284($fp) lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -783,7 +803,7 @@ __init_attr_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -260($fp) + sw $t1 -268($fp) lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -791,35 +811,35 @@ __init_attr_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -260($fp) - lw $t1 -256($fp) + sw $t1 -264($fp) + lw $t0 -268($fp) + lw $t1 -264($fp) mul $t0 $t0 $t1 - sw $t0 -252($fp) - lw $t0 -252($fp) + sw $t0 -260($fp) + lw $t0 -260($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -264($fp) - lw $t0 -264($fp) + sw $v0 -272($fp) + lw $t0 -272($fp) lw $t1 12($t0) - sw $t1 -272($fp) - lw $t0 -276($fp) - lw $t1 -272($fp) + sw $t1 -280($fp) + lw $t0 -284($fp) + lw $t1 -280($fp) slt $t1 $t0 $t1 - sw $t1 -268($fp) - lw $t0 -268($fp) + sw $t1 -276($fp) + lw $t0 -276($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -280($fp) - lw $t0 -280($fp) + sw $v0 -288($fp) + lw $t0 -288($fp) lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_14 + sw $t1 -292($fp) + lw $t0 -292($fp) + bne $t0 $zero label_16 lw $t4 0($fp) lw $t4 28($t4) addi $sp $sp -4 @@ -827,7 +847,7 @@ __init_attr_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -200($fp) + sw $t1 -208($fp) lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -835,7 +855,7 @@ __init_attr_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -184($fp) + sw $t1 -192($fp) lw $t4 0($fp) lw $t4 28($t4) addi $sp $sp -4 @@ -843,16 +863,16 @@ __init_attr_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -168($fp) + sw $t1 -176($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) + sw $v0 -164($fp) + lw $t0 -164($fp) lw $t1 12($t0) - sw $t1 -156($fp) + sw $t1 -164($fp) lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -860,195 +880,195 @@ __init_attr_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -156($fp) - lw $t1 -164($fp) + sw $t1 -172($fp) + lw $t0 -164($fp) + lw $t1 -172($fp) seq $t0 $t0 $t1 - sw $t0 -156($fp) - lw $t0 -156($fp) - bne $t0 $zero label_6 - j label_7 - label_6: + sw $t0 -164($fp) + lw $t0 -164($fp) + bne $t0 $zero label_8 + j label_9 + label_8: li $v0 4 - la $a0 data_12 + la $a0 data_13 syscall li $v0 10 syscall - label_7: - lw $t0 -168($fp) - lw $t1 -164($fp) + label_9: + lw $t0 -176($fp) + lw $t1 -172($fp) div $t0 $t1 mflo $t0 - sw $t0 -160($fp) - lw $t0 -160($fp) + sw $t0 -168($fp) + lw $t0 -168($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -172($fp) - lw $t0 -172($fp) + sw $v0 -180($fp) + lw $t0 -180($fp) lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) + sw $t1 -188($fp) + lw $t0 -192($fp) + lw $t1 -188($fp) mul $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) + sw $t0 -184($fp) + lw $t0 -184($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) + sw $v0 -196($fp) + lw $t0 -196($fp) lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) + sw $t1 -204($fp) + lw $t0 -208($fp) + lw $t1 -204($fp) sub $t0 $t0 $t1 - sw $t0 -192($fp) - lw $t0 -192($fp) + sw $t0 -200($fp) + lw $t0 -200($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -204($fp) + sw $v0 -212($fp) li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -204($fp) + sw $v0 -160($fp) + lw $t0 -212($fp) lw $t1 0($t0) sll $t1 $t1 2 la $t0 types_table add $t0 $t0 $t1 lw $t1 0($t0) - sw $t1 -228($fp) + sw $t1 -236($fp) la $t0 types_table addi $t0 $t0 12 lw $t0 0($t0) - sw $t0 -224($fp) + sw $t0 -232($fp) la $t0 types_table addi $t0 $t0 8 lw $t0 0($t0) - sw $t0 -220($fp) + sw $t0 -228($fp) la $t0 types_table addi $t0 $t0 16 lw $t0 0($t0) - sw $t0 -216($fp) - lw $t0 -228($fp) - lw $t1 -224($fp) + sw $t0 -224($fp) + lw $t0 -236($fp) + lw $t1 -232($fp) seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_8 - lw $t0 -228($fp) - lw $t1 -220($fp) + sw $t0 -220($fp) + lw $t0 -220($fp) + bne $t0 $zero label_10 + lw $t0 -236($fp) + lw $t1 -228($fp) seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_9 - lw $t0 -228($fp) - lw $t1 -216($fp) + sw $t0 -220($fp) + lw $t0 -220($fp) + bne $t0 $zero label_11 + lw $t0 -236($fp) + lw $t1 -224($fp) seq $t0 $t0 $t1 - sw $t0 -212($fp) + sw $t0 -220($fp) + lw $t0 -220($fp) + bne $t0 $zero label_12 lw $t0 -212($fp) - bne $t0 $zero label_10 - lw $t0 -204($fp) - lw $t1 -152($fp) + lw $t1 -160($fp) seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_11 - label_8: - lw $t0 -204($fp) + sw $t0 -216($fp) + j label_13 + label_10: + lw $t0 -212($fp) lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -152($fp) + sw $t1 -244($fp) + lw $t0 -160($fp) lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) + sw $t1 -240($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_11 - label_9: - lw $t0 -204($fp) + sw $t0 -216($fp) + j label_13 + label_11: + lw $t0 -212($fp) lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -152($fp) + sw $t1 -244($fp) + lw $t0 -160($fp) lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) + sw $t1 -240($fp) + lw $t0 -244($fp) move $a0 $t0 - lw $t0 -232($fp) + lw $t0 -240($fp) move $a1 $t0 jal equal_str - sw $v0 -208($fp) - j label_11 - label_10: - lw $t0 -204($fp) + sw $v0 -216($fp) + j label_13 + label_12: + lw $t0 -212($fp) lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -152($fp) + sw $t1 -244($fp) + lw $t0 -160($fp) lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) + sw $t1 -240($fp) + lw $t0 -244($fp) + lw $t1 -240($fp) seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_11 - label_11: - lw $t0 -208($fp) + sw $t0 -216($fp) + j label_13 + label_13: + lw $t0 -216($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -240($fp) - lw $t0 -240($fp) + sw $v0 -248($fp) + lw $t0 -248($fp) lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_12 + sw $t1 -252($fp) + lw $t0 -252($fp) + bne $t0 $zero label_14 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - sw $t0 -248($fp) - j label_13 - label_12: + sw $v0 -156($fp) + lw $t0 -156($fp) + sw $t0 -256($fp) + j label_15 + label_14: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) - sw $t0 -248($fp) - label_13: - lw $t0 -248($fp) - sw $t0 -288($fp) - j label_15 - label_14: + sw $v0 -152($fp) + lw $t0 -152($fp) + sw $t0 -256($fp) + label_15: + lw $t0 -256($fp) + sw $t0 -296($fp) + j label_17 + label_16: li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) - sw $t0 -288($fp) - label_15: - lw $t0 -288($fp) + sw $v0 -148($fp) + lw $t0 -148($fp) + sw $t0 -296($fp) + label_17: + lw $t0 -296($fp) lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_16 - j label_17 - label_16: + sw $t1 -300($fp) + lw $t0 -300($fp) + bne $t0 $zero label_18 + j label_19 + label_18: lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1056,32 +1076,32 @@ __init_attr_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -132($fp) + sw $t1 -140($fp) li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -120($fp) + sw $v0 -128($fp) + lw $t0 -128($fp) lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) + sw $t1 -136($fp) + lw $t0 -140($fp) + lw $t1 -136($fp) add $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) + sw $t0 -132($fp) + lw $t0 -132($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 -136($fp) + sw $v0 -144($fp) + lw $t0 -144($fp) lw $t1 0($fp) addi $t1 $t1 12 sw $t0 0($t1) - j label_5 - label_17: + j label_7 + label_19: lw $t4 0($fp) lw $t4 28($t4) addi $sp $sp -4 @@ -1089,7 +1109,7 @@ __init_attr_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -104($fp) + sw $t1 -112($fp) lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1097,7 +1117,7 @@ __init_attr_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -88($fp) + sw $t1 -96($fp) lw $t4 0($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -1105,45 +1125,45 @@ __init_attr_at_Main: lw $t0 0($sp) addi $sp $sp 4 lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) + sw $t1 -92($fp) + lw $t0 -96($fp) + lw $t1 -92($fp) mul $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) + sw $t0 -88($fp) + lw $t0 -88($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) + sw $v0 -100($fp) + lw $t0 -100($fp) lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) + sw $t1 -108($fp) + lw $t0 -112($fp) + lw $t1 -108($fp) slt $t1 $t0 $t1 - sw $t1 -96($fp) - lw $t0 -96($fp) + sw $t1 -104($fp) + lw $t0 -104($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Bool addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) + sw $v0 -116($fp) + lw $t0 -116($fp) lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_18 + sw $t1 -120($fp) + lw $t0 -120($fp) + bne $t0 $zero label_20 li $t0 0 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -116($fp) - j label_19 - label_18: + sw $v0 -84($fp) + lw $t0 -84($fp) + sw $t0 -124($fp) + j label_25 + label_20: lw $t4 0($fp) lw $t4 28($t4) addi $sp $sp -4 @@ -1154,6 +1174,20 @@ __init_attr_at_Main: addi $t1 $t1 20 sw $t0 0($t1) lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -80($fp) + lw $t0 -80($fp) + bne $t0 $zero label_21 + j label_22 + label_21: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_22: + lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t4 0($fp) @@ -1173,19 +1207,33 @@ __init_attr_at_Main: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -72($fp) - la $t0 data_13 - sw $t0 -64($fp) - lw $t0 -64($fp) + sw $v0 -76($fp) + la $t0 data_15 + sw $t0 -72($fp) + lw $t0 -72($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -60($fp) + sw $v0 -68($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -64($fp) + lw $t0 -64($fp) + bne $t0 $zero label_23 + j label_24 + label_23: + li $v0 4 + la $a0 data_16 + syscall + li $v0 10 + syscall + label_24: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -60($fp) + lw $t0 -68($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1197,10 +1245,10 @@ __init_attr_at_Main: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -116($fp) - label_19: + sw $v0 -60($fp) + lw $t0 -60($fp) + sw $t0 -124($fp) + label_25: lw $t4 0($fp) lw $t4 24($t4) addi $sp $sp -4 @@ -1231,8 +1279,8 @@ __init_attr_at_Main: lw $t1 12($t0) sw $t1 -52($fp) lw $t0 -52($fp) - bne $t0 $zero label_20 - la $t0 data_14 + bne $t0 $zero label_26 + la $t0 data_17 sw $t0 -32($fp) lw $t0 -32($fp) addi $sp $sp -4 @@ -1242,9 +1290,9 @@ __init_attr_at_Main: sw $v0 -28($fp) lw $t0 -28($fp) sw $t0 -56($fp) - j label_23 - label_20: - la $t0 data_15 + j label_29 + label_26: + la $t0 data_18 sw $t0 -24($fp) lw $t0 -24($fp) addi $sp $sp -4 @@ -1257,15 +1305,15 @@ __init_attr_at_Main: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_21 - j label_22 - label_21: + bne $t0 $zero label_27 + j label_28 + label_27: li $v0 4 - la $a0 data_16 + la $a0 data_19 syscall li $v0 10 syscall - label_22: + label_28: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1281,15 +1329,15 @@ __init_attr_at_Main: sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -56($fp) - label_23: - j label_3 - label_24: - sw $zero -328($fp) + label_29: + j label_5 + label_30: + sw $zero -336($fp) lw $t0 0($fp) - lw $t1 -328($fp) + lw $t1 -336($fp) sw $t1 16($t0) lw $v0 0($fp) - addi $sp $sp 376 + addi $sp $sp 388 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index beff04dd7..9c53891bb 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -21,6 +21,22 @@ data_8: .asciiz "" data_9: .asciiz "Abort called from class " .word 0 data_10: .asciiz "Substring out of range" +.word 0 +data_11: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_12: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_13: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_14: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_15: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_16: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_17: .asciiz "\n" +.word 0 +data_18: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -644,20 +660,263 @@ function_main_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -16 + addi $sp $sp -92 li $t0 1 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 - sw $v0 -24($fp) + sw $v0 -100($fp) li $t0 3 addi $sp $sp -4 sw $t0 0($sp) jal __init_at_Int addi $sp $sp 4 + sw $v0 -96($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -88($fp) + lw $t0 -88($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Bool + addi $sp $sp 4 + sw $v0 -92($fp) + lw $t0 -92($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -84($fp) + lw $t0 -84($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_11 + syscall + li $v0 10 + syscall + label_4: + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -92($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 4($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -80($fp) + lw $t0 -80($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -76($fp) + lw $t0 -76($fp) + bne $t0 $zero label_5 + j label_6 + label_5: + li $v0 4 + la $a0 data_12 + syscall + li $v0 10 + syscall + label_6: + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -100($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -96($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -80($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -72($fp) + li $t0 4 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -68($fp) + li $t0 1 + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_Int + addi $sp $sp 4 + sw $v0 -64($fp) + jal __init_at_Object + sw $v0 -60($fp) + lw $t0 -60($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_13 + syscall + li $v0 10 + syscall + label_8: + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -60($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 4($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -52($fp) + lw $t0 -52($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_10: + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -68($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -64($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -52($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 20($t0) + jalr $ra $t0 + addi $sp $sp 12 + sw $v0 -44($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_11 + j label_12 + label_11: + li $v0 4 + la $a0 data_15 + syscall + li $v0 10 + syscall + label_12: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -44($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -36($fp) + lw $t0 -36($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -32($fp) + lw $t0 -32($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 + la $a0 data_16 + syscall + li $v0 10 + syscall + label_14: + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -72($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -36($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -28($fp) + la $t0 data_17 + sw $t0 -24($fp) + lw $t0 -24($fp) + addi $sp $sp -4 + sw $t0 0($sp) + jal __init_at_String + addi $sp $sp 4 sw $v0 -20($fp) - addi $sp $sp 16 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_16: + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 -20($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($fp) + addi $sp $sp -4 + sw $t0 0($sp) + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 24($t0) + jalr $ra $t0 + addi $sp $sp 8 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 92 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) diff --git a/tests/codegen/d/sort-list.cl b/tests/codegen/sort-list.cl similarity index 100% rename from tests/codegen/d/sort-list.cl rename to tests/codegen/sort-list.cl diff --git a/tests/codegen/d/sort-list.mips b/tests/codegen/sort-list.mips similarity index 91% rename from tests/codegen/d/sort-list.mips rename to tests/codegen/sort-list.mips index 107015682..2685db1ea 100644 --- a/tests/codegen/d/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -48,7 +48,7 @@ data_22: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_23: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_24: .asciiz "\n" +data_24: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_25: .asciiz "RuntimeError: Function call in a void instance" .word 0 @@ -56,13 +56,41 @@ data_26: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_27: .asciiz "RuntimeError: Function call in a void instance" .word 0 -data_28: .asciiz "How many numbers to sort? " +data_28: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_29: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_30: .asciiz "RuntimeError: Function call in a void instance" .word 0 data_31: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_32: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_33: .asciiz "\n" +.word 0 +data_34: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_35: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_36: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_37: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_38: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_39: .asciiz "How many numbers to sort? " +.word 0 +data_40: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_41: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_42: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_43: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_44: .asciiz "RuntimeError: Function call in a void instance" +.word 0 +data_45: .asciiz "RuntimeError: Function call in a void instance" types_table: @@ -778,7 +806,21 @@ function_isNil_at_List: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -8 + addi $sp $sp -12 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_3 + j label_4 + label_3: + li $v0 4 + la $a0 data_14 + syscall + li $v0 10 + syscall + label_4: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -799,7 +841,7 @@ function_isNil_at_List: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 8 + addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -822,15 +864,15 @@ function_cons_at_List: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_3 - j label_4 - label_3: + bne $t0 $zero label_5 + j label_6 + label_5: li $v0 4 - la $a0 data_14 + la $a0 data_15 syscall li $v0 10 syscall - label_4: + label_6: lw $t0 -24($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -864,7 +906,21 @@ function_car_at_List: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -8 + addi $sp $sp -12 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_7 + j label_8 + label_7: + li $v0 4 + la $a0 data_16 + syscall + li $v0 10 + syscall + label_8: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -885,7 +941,7 @@ function_car_at_List: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 8 + addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -898,7 +954,21 @@ function_cdr_at_List: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -8 + addi $sp $sp -12 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -20($fp) + lw $t0 -20($fp) + bne $t0 $zero label_9 + j label_10 + label_9: + li $v0 4 + la $a0 data_17 + syscall + li $v0 10 + syscall + label_10: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -915,7 +985,7 @@ function_cdr_at_List: jal __init_at_List sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 8 + addi $sp $sp 12 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -928,7 +998,21 @@ function_rev_at_List: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -4 + addi $sp $sp -8 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_11 + j label_12 + label_11: + li $v0 4 + la $a0 data_18 + syscall + li $v0 10 + syscall + label_12: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -943,7 +1027,7 @@ function_rev_at_List: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 4 + addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -956,7 +1040,21 @@ function_sort_at_List: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -4 + addi $sp $sp -8 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_13 + j label_14 + label_13: + li $v0 4 + la $a0 data_19 + syscall + li $v0 10 + syscall + label_14: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -971,7 +1069,7 @@ function_sort_at_List: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 4 + addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -984,7 +1082,21 @@ function_insert_at_List: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -4 + addi $sp $sp -8 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_15 + j label_16 + label_15: + li $v0 4 + la $a0 data_20 + syscall + li $v0 10 + syscall + label_16: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -999,7 +1111,7 @@ function_insert_at_List: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 4 + addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1012,7 +1124,21 @@ function_rcons_at_List: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -4 + addi $sp $sp -8 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_17 + j label_18 + label_17: + li $v0 4 + la $a0 data_21 + syscall + li $v0 10 + syscall + label_18: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1027,7 +1153,7 @@ function_rcons_at_List: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 4 + addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1040,7 +1166,21 @@ function_print_list_at_List: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -4 + addi $sp $sp -8 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_19 + j label_20 + label_19: + li $v0 4 + la $a0 data_22 + syscall + li $v0 10 + syscall + label_20: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1055,7 +1195,7 @@ function_print_list_at_List: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 4 + addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1230,15 +1370,15 @@ function_rev_at_Cons: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_5 - j label_6 - label_5: + bne $t0 $zero label_21 + j label_22 + label_21: li $v0 4 - la $a0 data_15 + la $a0 data_23 syscall li $v0 10 syscall - label_6: + label_22: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1267,15 +1407,15 @@ function_rev_at_Cons: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_7 - j label_8 - label_7: + bne $t0 $zero label_23 + j label_24 + label_23: li $v0 4 - la $a0 data_16 + la $a0 data_24 syscall li $v0 10 syscall - label_8: + label_24: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1322,15 +1462,15 @@ function_sort_at_Cons: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_9 - j label_10 - label_9: + bne $t0 $zero label_25 + j label_26 + label_25: li $v0 4 - la $a0 data_17 + la $a0 data_25 syscall li $v0 10 syscall - label_10: + label_26: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1359,15 +1499,15 @@ function_sort_at_Cons: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_11 - j label_12 - label_11: + bne $t0 $zero label_27 + j label_28 + label_27: li $v0 4 - la $a0 data_18 + la $a0 data_26 syscall li $v0 10 syscall - label_12: + label_28: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1429,7 +1569,7 @@ function_insert_at_Cons: lw $t1 12($t0) sw $t1 -60($fp) lw $t0 -60($fp) - bne $t0 $zero label_17 + bne $t0 $zero label_33 lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1440,15 +1580,15 @@ function_insert_at_Cons: seq $t0 $t0 $t1 sw $t0 -40($fp) lw $t0 -40($fp) - bne $t0 $zero label_13 - j label_14 - label_13: + bne $t0 $zero label_29 + j label_30 + label_29: li $v0 4 - la $a0 data_19 + la $a0 data_27 syscall li $v0 10 syscall - label_14: + label_30: lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1482,15 +1622,15 @@ function_insert_at_Cons: seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_15 - j label_16 - label_15: + bne $t0 $zero label_31 + j label_32 + label_31: li $v0 4 - la $a0 data_20 + la $a0 data_28 syscall li $v0 10 syscall - label_16: + label_32: lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1517,8 +1657,8 @@ function_insert_at_Cons: sw $v0 -24($fp) lw $t0 -24($fp) sw $t0 -64($fp) - j label_20 - label_17: + j label_36 + label_33: jal __init_at_Cons sw $v0 -20($fp) lw $t0 -20($fp) @@ -1526,15 +1666,15 @@ function_insert_at_Cons: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_18 - j label_19 - label_18: + bne $t0 $zero label_34 + j label_35 + label_34: li $v0 4 - la $a0 data_21 + la $a0 data_29 syscall li $v0 10 syscall - label_19: + label_35: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1556,7 +1696,7 @@ function_insert_at_Cons: sw $v0 -12($fp) lw $t0 -12($fp) sw $t0 -64($fp) - label_20: + label_36: lw $v0 -64($fp) addi $sp $sp 64 lw $fp 0($sp) @@ -1582,15 +1722,15 @@ function_rcons_at_Cons: seq $t0 $t0 $t1 sw $t0 -28($fp) lw $t0 -28($fp) - bne $t0 $zero label_21 - j label_22 - label_21: + bne $t0 $zero label_37 + j label_38 + label_37: li $v0 4 - la $a0 data_22 + la $a0 data_30 syscall li $v0 10 syscall - label_22: + label_38: lw $t4 4($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1624,15 +1764,15 @@ function_rcons_at_Cons: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_23 - j label_24 - label_23: + bne $t0 $zero label_39 + j label_40 + label_39: li $v0 4 - la $a0 data_23 + la $a0 data_31 syscall li $v0 10 syscall - label_24: + label_40: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1671,7 +1811,21 @@ function_print_list_at_Cons: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -32 + addi $sp $sp -40 + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_41 + j label_42 + label_41: + li $v0 4 + la $a0 data_32 + syscall + li $v0 10 + syscall + label_42: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1692,19 +1846,33 @@ function_print_list_at_Cons: lw $t0 20($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -32($fp) - la $t0 data_24 - sw $t0 -24($fp) - lw $t0 -24($fp) + sw $v0 -36($fp) + la $t0 data_33 + sw $t0 -32($fp) + lw $t0 -32($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -20($fp) + sw $v0 -28($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -24($fp) + lw $t0 -24($fp) + bne $t0 $zero label_43 + j label_44 + label_43: + li $v0 4 + la $a0 data_34 + syscall + li $v0 10 + syscall + label_44: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -20($fp) + lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -1716,7 +1884,7 @@ function_print_list_at_Cons: lw $t0 24($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -28($fp) + sw $v0 -20($fp) lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1727,15 +1895,15 @@ function_print_list_at_Cons: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_25 - j label_26 - label_25: + bne $t0 $zero label_45 + j label_46 + label_45: li $v0 4 - la $a0 data_25 + la $a0 data_35 syscall li $v0 10 syscall - label_26: + label_46: lw $t4 0($fp) lw $t4 16($t4) addi $sp $sp -4 @@ -1760,7 +1928,7 @@ function_print_list_at_Cons: addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 32 + addi $sp $sp 40 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1879,7 +2047,21 @@ function_insert_at_Nil: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -4 + addi $sp $sp -8 + lw $t0 4($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -16($fp) + lw $t0 -16($fp) + bne $t0 $zero label_47 + j label_48 + label_47: + li $v0 4 + la $a0 data_36 + syscall + li $v0 10 + syscall + label_48: lw $t0 4($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -1897,7 +2079,7 @@ function_insert_at_Nil: addi $sp $sp 8 sw $v0 -12($fp) lw $v0 -12($fp) - addi $sp $sp 4 + addi $sp $sp 8 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -1918,15 +2100,15 @@ function_rcons_at_Nil: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_27 - j label_28 - label_27: + bne $t0 $zero label_49 + j label_50 + label_49: li $v0 4 - la $a0 data_26 + la $a0 data_37 syscall li $v0 10 syscall - label_28: + label_50: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2048,7 +2230,7 @@ function_iota_at_Main: sw $v0 -64($fp) lw $t0 -64($fp) sw $t0 -68($fp) - label_29: + label_51: lw $t0 -68($fp) lw $t1 12($t0) sw $t1 -52($fp) @@ -2069,9 +2251,9 @@ function_iota_at_Main: lw $t1 12($t0) sw $t1 -60($fp) lw $t0 -60($fp) - bne $t0 $zero label_30 - j label_33 - label_30: + bne $t0 $zero label_52 + j label_55 + label_52: jal __init_at_Cons sw $v0 -40($fp) lw $t0 -40($fp) @@ -2079,15 +2261,15 @@ function_iota_at_Main: seq $t0 $t0 $t1 sw $t0 -36($fp) lw $t0 -36($fp) - bne $t0 $zero label_31 - j label_32 - label_31: + bne $t0 $zero label_53 + j label_54 + label_53: li $v0 4 - la $a0 data_27 + la $a0 data_38 syscall li $v0 10 syscall - label_32: + label_54: lw $t0 -40($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2140,8 +2322,8 @@ function_iota_at_Main: sw $v0 -28($fp) lw $t0 -28($fp) sw $t0 -68($fp) - j label_29 - label_33: + j label_51 + label_55: lw $t4 4($fp) lw $t4 12($t4) addi $sp $sp -4 @@ -2161,19 +2343,33 @@ function_main_at_Main: addi $sp $sp -4 sw $fp 0($sp) addi $fp $sp 8 - addi $sp $sp -48 - la $t0 data_28 - sw $t0 -48($fp) - lw $t0 -48($fp) + addi $sp $sp -60 + la $t0 data_39 + sw $t0 -64($fp) + lw $t0 -64($fp) addi $sp $sp -4 sw $t0 0($sp) jal __init_at_String addi $sp $sp 4 - sw $v0 -44($fp) + sw $v0 -60($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -56($fp) + lw $t0 -56($fp) + bne $t0 $zero label_56 + j label_57 + label_56: + li $v0 4 + la $a0 data_40 + syscall + li $v0 10 + syscall + label_57: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -44($fp) + lw $t0 -60($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -2187,6 +2383,20 @@ function_main_at_Main: addi $sp $sp 8 sw $v0 -52($fp) lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -48($fp) + lw $t0 -48($fp) + bne $t0 $zero label_58 + j label_59 + label_58: + li $v0 4 + la $a0 data_41 + syscall + li $v0 10 + syscall + label_59: + lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -2198,11 +2408,25 @@ function_main_at_Main: lw $t0 12($t0) jalr $ra $t0 addi $sp $sp 4 - sw $v0 -36($fp) + sw $v0 -44($fp) + lw $t0 0($fp) + li $t1 0 + seq $t0 $t0 $t1 + sw $t0 -40($fp) + lw $t0 -40($fp) + bne $t0 $zero label_60 + j label_61 + label_60: + li $v0 4 + la $a0 data_42 + syscall + li $v0 10 + syscall + label_61: lw $t0 0($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -36($fp) + lw $t0 -44($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($fp) @@ -2214,25 +2438,25 @@ function_main_at_Main: lw $t0 28($t0) jalr $ra $t0 addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) + sw $v0 -36($fp) + lw $t0 -36($fp) li $t1 0 seq $t0 $t0 $t1 sw $t0 -32($fp) lw $t0 -32($fp) - bne $t0 $zero label_34 - j label_35 - label_34: + bne $t0 $zero label_62 + j label_63 + label_62: li $v0 4 - la $a0 data_29 + la $a0 data_43 syscall li $v0 10 syscall - label_35: - lw $t0 -40($fp) + label_63: + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) - lw $t0 -40($fp) + lw $t0 -36($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 0($sp) @@ -2247,15 +2471,15 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -24($fp) lw $t0 -24($fp) - bne $t0 $zero label_36 - j label_37 - label_36: + bne $t0 $zero label_64 + j label_65 + label_64: li $v0 4 - la $a0 data_30 + la $a0 data_44 syscall li $v0 10 syscall - label_37: + label_65: lw $t0 -28($fp) addi $sp $sp -4 sw $t0 0($sp) @@ -2274,22 +2498,30 @@ function_main_at_Main: seq $t0 $t0 $t1 sw $t0 -16($fp) lw $t0 -16($fp) - bne $t0 $zero label_38 - j label_39 - label_38: + bne $t0 $zero label_66 + j label_67 + label_66: li $v0 4 - la $a0 data_31 + la $a0 data_45 syscall li $v0 10 syscall - label_39: + label_67: lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) lw $t0 -20($fp) addi $sp $sp -4 sw $t0 0($sp) - addi $sp $sp 48 + lw $t0 0($sp) + addi $sp $sp 4 + lw $t0 8($t0) + lw $t0 48($t0) + jalr $ra $t0 + addi $sp $sp 4 + sw $v0 -12($fp) + lw $v0 -12($fp) + addi $sp $sp 60 lw $fp 0($sp) addi $sp $sp 4 lw $ra 0($sp) @@ -2320,7 +2552,7 @@ __init_at_Main: addi $sp $sp -4 sw $t0 0($sp) jal __init_attr_at_Main - addi $sp $sp 12 + addi $sp $sp 4 sw $v0 -12($fp) lw $v0 -12($fp) addi $sp $sp 12 diff --git a/tests/codegen/d/sort-list_input.txt b/tests/codegen/sort-list_input.txt similarity index 100% rename from tests/codegen/d/sort-list_input.txt rename to tests/codegen/sort-list_input.txt diff --git a/tests/codegen/d/sort-list_output.txt b/tests/codegen/sort-list_output.txt similarity index 100% rename from tests/codegen/d/sort-list_output.txt rename to tests/codegen/sort-list_output.txt diff --git a/tests/lexer_test.py b/tests/lexer_test.py index effd4ede0..7cc100b22 100644 --- a/tests/lexer_test.py +++ b/tests/lexer_test.py @@ -1,16 +1,16 @@ -# import pytest -# import os -# from utils import compare_errors +import pytest +import os +from utils import compare_errors -# tests_dir = __file__.rpartition("/")[0] + "/lexer/" -# tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] -# @pytest.mark.lexer -# @pytest.mark.error -# @pytest.mark.run(order=1) -# @pytest.mark.parametrize("cool_file", tests) -# def test_lexer_errors(compiler_path, cool_file): -# print(compiler_path) -# print(cool_file) -# compare_errors( -# compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" -# ) +tests_dir = __file__.rpartition("/")[0] + "/lexer/" +tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +@pytest.mark.lexer +@pytest.mark.error +@pytest.mark.run(order=1) +@pytest.mark.parametrize("cool_file", tests) +def test_lexer_errors(compiler_path, cool_file): + print(compiler_path) + print(cool_file) + compare_errors( + compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" + ) diff --git a/tests/parser_test.py b/tests/parser_test.py index 78037b3fe..5c98fd1b2 100644 --- a/tests/parser_test.py +++ b/tests/parser_test.py @@ -1,14 +1,14 @@ -# import pytest -# import os -# from utils import compare_errors +import pytest +import os +from utils import compare_errors -# tests_dir = __file__.rpartition("/")[0] + "/parser/" -# tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] -# @pytest.mark.parser -# @pytest.mark.error -# @pytest.mark.run(order=2) -# @pytest.mark.parametrize("cool_file", tests) -# def test_parser_errors(compiler_path, cool_file): -# compare_errors( -# compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" -# ) +tests_dir = __file__.rpartition("/")[0] + "/parser/" +tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +@pytest.mark.parser +@pytest.mark.error +@pytest.mark.run(order=2) +@pytest.mark.parametrize("cool_file", tests) +def test_parser_errors(compiler_path, cool_file): + compare_errors( + compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + "_error.txt" + ) diff --git a/tests/semantic_test.py b/tests/semantic_test.py index 8ec6fcf79..5e8fae4b7 100644 --- a/tests/semantic_test.py +++ b/tests/semantic_test.py @@ -1,15 +1,15 @@ -# import pytest -# import os -# from utils import compare_errors, first_error_only_line +import pytest +import os +from utils import compare_errors, first_error_only_line -# tests_dir = __file__.rpartition("/")[0] + "/semantic/" -# tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] +tests_dir = __file__.rpartition("/")[0] + "/semantic/" +tests = [(file) for file in os.listdir(tests_dir) if file.endswith(".cl")] -# @pytest.mark.semantic -# @pytest.mark.error -# @pytest.mark.run(order=3) -# @pytest.mark.parametrize("cool_file", tests) -# def test_semantic_errors(compiler_path, cool_file): -# compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ -# cmp=first_error_only_line) +@pytest.mark.semantic +@pytest.mark.error +@pytest.mark.run(order=3) +@pytest.mark.parametrize("cool_file", tests) +def test_semantic_errors(compiler_path, cool_file): + compare_errors(compiler_path, tests_dir + cool_file, tests_dir + cool_file[:-3] + '_error.txt', \ + cmp=first_error_only_line) From fc04e4d0cd08b15fa85aa7ee04508a7e4fd8e94a Mon Sep 17 00:00:00 2001 From: regnod Date: Sun, 27 Feb 2022 21:15:14 -0500 Subject: [PATCH 77/93] mips --- src/.vscode/settings.json | 12 + src/__main__.py | 134 +-- src/coolc.sh | 2 +- src/makefile | 3 - src/out | 4 - src/pipeline.py | 50 +- src/utils/mip_utils.py | 2 +- src/visitors/Builder.py | 22 - src/visitors/Checker.py | 33 - src/visitors/Cil2MipsCurrent.py | 1225 ++++++++++++++++++++ src/visitors/CiltoMips.py | 1863 ++++++++++++++++++------------- src/visitors/CooltoCil.py | 139 ++- 12 files changed, 2462 insertions(+), 1027 deletions(-) create mode 100644 src/.vscode/settings.json delete mode 100644 src/out create mode 100644 src/visitors/Cil2MipsCurrent.py diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json new file mode 100644 index 000000000..4af6a0711 --- /dev/null +++ b/src/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "cSpell.words": [ + "addi", + "addiu", + "addu", + "asciiz", + "heeerreeee", + "heerrrre", + "proto", + "subu" + ] +} \ No newline at end of file diff --git a/src/__main__.py b/src/__main__.py index 0edff1fe3..98a6d3771 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -3,120 +3,28 @@ import c_parser.parser as parser from pipeline import Pipeline -# with open('/home/yumenio/Documents/cmp/cool-compiler-2021/cool-compiler-2021/tests/semantic/self4.cl') as f: -# with open('./tests/codegen/hello_world.cl') as f: -# program = f.read() - -# coolLexer = lexer.CoolLexer() -# coolLexer.build() -# tokens = coolLexer.input(program) -# # for error in coolLexer.errors: -# # print(error) -# Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) -# coolParser = parser.CoolParser() - -# ast = coolParser.parse(lexer.CoolLexer(), program) -# for lexing_error in coolParser.lexer.errors: -# print(lexing_error) -# for parsing_error in coolParser.errors: -# print(parsing_error) -# a = 0 - -# if __name__ == '__main__': -# # with open('examles/hello_world.cl', 'r') as fd: -# with open(f'{sys.argv[1]}', 'r') as fd: -# program = '' -# temp = fd.read() -# while temp: -# program += temp -# temp = fd.read() -# coolLexer = lexer.CoolLexer() -# coolLexer.build() -# tokens = coolLexer.input(program) -# # for error in coolLexer.errors: -# # print(error) -# Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) -# coolParser = parser.CoolParser() - -# ast = coolParser.parse(lexer.CoolLexer(), program) -# if len(coolParser.lexer.errors) == 0 and len(coolParser.errors) == 0: -# exit(0) -# else: -# for lexing_error in coolParser.lexer.errors: -# print(lexing_error) -# for parsing_error in coolParser.errors: -# print(parsing_error) -# exit(1) - - # parser_object = parser.make_parser() - # ast = parser_object.parse(inp) - # semantic_object = check_semantic.CheckSemantic() - # cil_object = cil.Cool2cil() - # scope_root = semantic_object.visit(ast, None) - # cil_object.visit(ast, scope_root) - # mips_object = MIPS(cil_object) - # mips_object.generate_mips() - # inp = '' - # with open('src/staticMipsCode.asm', 'r') as fd: - # temp = fd.read() - # while temp: - # inp += temp - # temp = fd.read() - # with open(f'{argv[2]}', 'w') as fd: - # fd.write(inp) - # fd.write("\n") - # fd.write("# Start Mips Generated Code") - # fd.write("\n") - # for line in mips_object.mips_code: - # fd.write("\n" + line) - - def main(): if len(sys.argv) > 1: - input_file = sys.argv[1] # + " " + sys.argv[2] + " " + sys.argv[3] + input_file = sys.argv[1] else: - input_file = "./tests/codegen/hello_world.cl"#"debbuging/tests/Auto/call1.cl" - # raise Exception("Incorrect number of arguments") - try: - program_file = open(input_file) - program = program_file.read() - program_file.close() - - # coolLexer = lexer.CoolLexer() - # coolLexer.build() - # tokens = coolLexer.input(program) - # if coolLexer.errors: - # for error in coolLexer.errors: - # print(error.__str__()) - # exit(1) - - pipe = Pipeline(program, lexer.CoolLexer(),parser.CoolParser(), False) - if pipe.errors: - for error in pipe.errors: - print(error) - exit(1) - except Exception as e: - print(e) + input_file = "./tests/codegen/basic.cl" + raise Exception("Incorrect number of arguments") + + program_file = open(input_file) + program = program_file.read() + program_file.close() + + pipe = Pipeline(program, lexer.CoolLexer(), parser.CoolParser()) + if pipe.errors: + for error in pipe.errors: + print(error) exit(1) - # coolParser = parser.CoolParser() - - # ast = coolParser.parse(lexer.CoolLexer(), program) - # if coolParser.lexer.errors: - # for lexing_error in coolParser.lexer.errors: - # print(lexing_error.__str__()) - # exit(1) - # if coolParser.errors: - # for parsing_error in coolParser.errors: - # print(parsing_error) - # exit(1) - # parser = Parser(Lexer()) - # ast = parser.parse(program) - # if parser.errors: - # for error in parser.errors: - # print(error) - # exit(1) - - # run_pipeline(ast) - - -main() + else: + out_file = input_file.split(".") + out_file[-1] = "mips" + out_file = ".".join(out_file) + with open(out_file, 'w') as f: + f.write(pipe.mipsCode) + +if __name__ == "__main__": + main() diff --git a/src/coolc.sh b/src/coolc.sh index f47182595..b04eb6308 100755 --- a/src/coolc.sh +++ b/src/coolc.sh @@ -10,4 +10,4 @@ echo "Copyright (c) 2021: Richard García De la Osa, Andy A. Castañeda Guerra." # Llamar al compilador # echo "Compiling $INPUT_FILE into $OUTPUT_FILE" -exec python3 __main__.py $INPUT_FILE +exec python3 __main__.py $INPUT_FILE diff --git a/src/makefile b/src/makefile index 6f531b553..a539ee604 100644 --- a/src/makefile +++ b/src/makefile @@ -9,6 +9,3 @@ clean: test: pytest ../tests -v --tb=short -m=${TAG} - -poetest: - poetry run make test diff --git a/src/out b/src/out deleted file mode 100644 index c4a7f2c9c..000000000 --- a/src/out +++ /dev/null @@ -1,4 +0,0 @@ -.data -p_error: .asciiz "Aborting from String" -zero_error: .asciiz "Division by zero" -range_error: .asciiz "Index out of range" diff --git a/src/pipeline.py b/src/pipeline.py index c3f0d3061..8a75f99e4 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -1,34 +1,21 @@ from utils.semantic import Scope, Context -from visitors.Depicter import Depicter#, Formatter +from visitors.Depicter import Depicter from visitors.Collector import TypeCollector from visitors.Builder import TypeBuilder from visitors.Checker import TypeChecker -from visitors.Inferencer import Inferencer -from visitors.Executor import Executor, RuntimeException from visitors.CooltoCil import COOLToCILVisitor -from visitors.CilDepicter import get_formatter from visitors.CiltoMips import CiltoMipsVisitor class Pipeline(): def __init__(self, program, lexer, parser, verbose=False): self.context: Context = Context() - self.errors = [] self.scope: Scope = Scope() self.program = program - self.lexer = lexer self.parser = parser - - # current_position = 0 - # for char in self.program: - - # self.tokens = self.lexer.lexer(self.program) - - # self.tokens = [ token for token in self.tokens if token.token_type not in ['space', 'newLine', 'chunkComment', 'lineComment', 'tab']] - - # derivations, operations = self.parser.Parser(self.tokens, True) - - self.ast = self.parser.parse(lexer, program)#= evaluate_reverse_parse(derivations, operations, self.tokens) + self.lexer = lexer + self.ast = self.parser.parse(lexer, program) self.errors = self.lexer.errors + self.parser.errors + if len(self.errors) != 0: return @@ -37,7 +24,7 @@ def __init__(self, program, lexer, parser, verbose=False): self.depicter = Depicter() if verbose: - print(self.depicter.visit(self.ast,0), '\n') + print(self.depicter.visit(self.ast, 0), '\n') print() self.typeCollector = TypeCollector(self.context, self.errors) @@ -52,28 +39,7 @@ def __init__(self, program, lexer, parser, verbose=False): if len(self.errors) == 0: self.coolToCil = COOLToCILVisitor(self.context) cil_ast = self.coolToCil.visit(self.ast, scope) - # print(get_formatter(cil_ast)) + self.cilToMips = CiltoMipsVisitor(self.context) - self.cilToMips.visit(cil_ast) - with open('out', 'w') as f: - mips_code = self.cilToMips.data + self.cilToMips.code - for line in mips_code: - f.write(line+'\n') - if verbose: - print('This is after infering types:') - print() - print(self.depicter.visit(self.ast,0)) - print() - # self.executor = Executor(self.context) - - # if len(self.errors) == 0: - # try: - # executorScope = Scope() - # self.executor.visit(self.ast,executorScope) - # print() - # print('Done!!') - # except RuntimeException as e: - # print(e) - # print() - # for error in self.errors: - # print(error) \ No newline at end of file + self.mipsCode = self.cilToMips.visit(cil_ast) + return \ No newline at end of file diff --git a/src/utils/mip_utils.py b/src/utils/mip_utils.py index 7d478de28..26fbf9b7d 100644 --- a/src/utils/mip_utils.py +++ b/src/utils/mip_utils.py @@ -173,4 +173,4 @@ class datatype: half = '.half' double = '.double' floatt = '.float' - \ No newline at end of file + diff --git a/src/visitors/Builder.py b/src/visitors/Builder.py index 826f47b68..5c57db9ef 100755 --- a/src/visitors/Builder.py +++ b/src/visitors/Builder.py @@ -51,12 +51,6 @@ def visit(self, node): self.check_node = Check_Node('Object') - # cyclicHeritage = self.CheckHeritageTree() - - # if cyclicHeritage: - # self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Class {node.id}, or an ancestor of {node.id}, is involve in an inheritance cycle.' )) - # self.errors.append('CyclicError: Cyclic heritage is not allowed') - types = self.context.types main_type = None for type in types.values(): @@ -67,7 +61,6 @@ def visit(self, node): methods = main_type.methods main_method = None for m in methods: - # if m.name == 'main' and len(m.param_names) == 0: if m.name == 'main': main_method = m break @@ -98,7 +91,6 @@ def visit(self, node): if typo not in parents: parents.append(typo) else: - # self.errors.append() self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[3].col, f'Class {node.id}, or an ancestor of {node.id}, is involved in an inheritance cycle.' )) break else: @@ -106,14 +98,9 @@ def visit(self, node): except SemanticError as e: self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[3].col, f'Class {node.id} inherit from an undefined class {node.parent}' )) - # self.errors.append(e.text) else: self.current_type.set_parent(self.context.get_type('Object')) - - # self_attr = AttrDeclarationNode('self', self.current_type.name) - # self.visit(self_attr) - for feature in node.features: self.visit(feature) @@ -123,7 +110,6 @@ def visit(self, node): t_attr = self.context.get_type(node.type) except SemanticError as e: self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[2].col, f'Class {node.type} of attribute {node.id} is undefined.')) - # self.errors.append(e.text) t_attr = ErrorType() try: self.current_type.define_attribute(node.id, t_attr) @@ -131,9 +117,6 @@ def visit(self, node): attr, owner = self.current_type.get_attribute(node.id, self.current_type, False, get_owner=True) if owner == self.current_type: self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Attribute {node.id} is multply defined in class {self.current_type.name}.')) - # else: - # self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Attribute {node.id} is an attribute of an inherited class.')) - # self.errors.append(e.text) @visitor.when(FuncDeclarationNode) def visit(self, node): @@ -146,14 +129,12 @@ def visit(self, node): except SemanticError as e: param_types.append(ErrorType()) self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f'Class {typex} of formal parameter {name} is undefined.')) - # self.errors.append(e.text) try: return_type = self.context.get_type(node.type) except SemanticError as e: self.errors.append(_TypeError % (node.token_list[4].lineno, node.token_list[4].col, f'Undefined return type {node.type} in method {node.id}.')) return_type = ErrorType() - # self.errors.append(e.text) try: self.current_type.define_method(node.id, param_names, param_types, return_type) except SemanticError as e: @@ -256,7 +237,6 @@ def visit(self, node): try: attribute, owner = self.current_type.parent.get_attribute(node.id,self.current_type, False, True) self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Attribute {node.id} is an attribute of an inherited class.')) - # self.errors.append(f'The attribute {attribute.name} is already defined in {owner.name}') except: pass @@ -267,7 +247,6 @@ def visit(self, node): method, owner = self.current_type.parent.get_method(node.id, self.current_type, False, get_owner=True) if current_method.return_type != method.return_type: - # self.errors.append(f'Function {node.id} is already defined in {owner.name}.') self.errors.append(_SemanticError % (node.token_list[4].lineno, node.token_list[4].col, f'In redefined method {current_method.name}, return type {current_method.return_type.name} is diferent from original return type {method.return_type.name}.')) if len(current_method.param_types) != len(method.param_types): self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'Incompatible number of formal parameters in redefined method {current_method.name}.')) @@ -275,6 +254,5 @@ def visit(self, node): for pt1, pt2 in zip(current_method.param_types, method.param_types): if pt1 != pt2: self.errors.append(_SemanticError % (node.token_list[0].lineno, node.token_list[0].col, f'In redefined method {current_method.name}, parameter type {pt1.name} is diferent from original type {pt2.name}.')) - # if method != current_method: except: pass \ No newline at end of file diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py index 7764e4e63..899c54af3 100755 --- a/src/visitors/Checker.py +++ b/src/visitors/Checker.py @@ -31,22 +31,10 @@ def visit(self, node, scope): if _char not in ''.join(chr(n) for n in range(ord('A'),ord('Z')+1)): self.errors.append((f'Class names must be capitalized')) - # attrs = [] - # methods = [] - # for feature in node.features: - # if isinstance(feature,AttrDeclarationNode): - # attrs.append(feature) - # else: - # methods.append(feature) for attr, owner in self.current_type.all_attributes(): #definir atributos de los ancestros if owner != self.current_type: scope.define_variable(attr.name, attr.type) - # for attr in attrs: - # self.visit(attr, scope) - - # for method in methods: - # self.visit(method, scope.create_child()) for feature in node.features: if isinstance(feature, AttrDeclarationNode): @@ -62,7 +50,6 @@ def visit(self, node, scope): if _char not in ''.join(chr(n) for n in range(ord('a'),ord('z')+1)): self.errors.append((f'Class names must be capitalized')) - # for param_name, param_type in zip(self.current_method.param_names, self.current_method.param_types): for i in range(len(self.current_method.param_names)): ithParamName = self.current_method.param_names[i] ithParamType = self.current_method.param_types[i] @@ -74,14 +61,8 @@ def visit(self, node, scope): self.errors.append('SELF_TYPE cannot be the type of a parameter.') scope.define_variable(ithParamName, ErrorType()) else: - # try: - # param_t = self.context.get_type(ithParamType.name) - # except SemanticError as es: - # self.errors.append(es.text()) - # param_t = ErrorType() scope.define_variable(ithParamName, self.context.get_type(ithParamType.name)) else: - # self.errors.append(f'Variable {ithParamName} is already defined in {self.current_method.name}.') self.errors.append(_SemanticError %(node.token_list[0].lineno, node.token_list[0].col, f'Formal parameter {ithParamName} is multiply defined.')) if node.type != 'SELF_TYPE': @@ -93,7 +74,6 @@ def visit(self, node, scope): if not exprType.conforms_to(rType): self.errors.append(_TypeError %(node.body.token_list[0].lineno, node.body.token_list[0].col, f'Infered return type {exprType.name} of method {node.id} does not conform to declared return type {rType.name}.')) - # self.errors.append(f'{exprType.name} does not conform {rType.name}.') @visitor.when(ConditionalNode) def visit(self, node, scope): @@ -127,14 +107,9 @@ def visit(self, node, scope): else: var_type = self.current_type except SemanticError as e: - # self.errors.append(e.text) self.errors.append(_TypeError %(node.decl_list[iteration].token_list[0].lineno, node.decl_list[iteration].token_list[2].col, f"Class {_t} of let-bound identifier {_id} is undefined.")) var_type = ErrorType() - # if scope.is_local(_id): - # self.errors.append(f'Variable {_id} is already defined in {self.current_method.name}.') - # else: - # scope.define_variable(_id, var_type) if _e is not None: expr = self.visit(_e, scope.create_child()) @@ -223,7 +198,6 @@ def visit(self, node, scope): self.visit(node.expr, scope) types = [] t_set = set() - # for i, t, e in node.case_list: for i, t, e, token_list in node.case_list: child_scope = scope.create_child() try: @@ -239,7 +213,6 @@ def visit(self, node, scope): except SemanticError as exc: child_scope.define_variable(i, ErrorType()) self.errors.append(_TypeError % (token_list[2].lineno, token_list[2].col, f'Class {t} of case branch is undefined.')) - # self.errors.append(exc.text) types.append(self.visit(e, child_scope)) @@ -309,7 +282,6 @@ def visit(self, node, scope): ancestor_type = self.context.get_type(node.parent) except SemanticError as e: ancestor_type = ErrorType() - # self.errors.append(e.text) if not obj_type.conforms_to(ancestor_type): self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f'Expression type {obj_type.name} does not conform to declared static dispatch type {ancestor_type.name}.')) @@ -321,14 +293,10 @@ def visit(self, node, scope): method = ancestor_type.get_method(node.method, self.current_type, False) except SemanticError as e: self.errors.append(_AtributeError % (node.token_list[0].lineno, node.token_list[0].col, f'Dispatch to undefined method {node.method}')) - # self.errors.append(e.text) for arg in node.args: self.visit(arg, scope) return ErrorType() - # if len(node.args) != len(method.param_names): - # self.errors.append(f'Function {method.name} is already defined in {obj_type.name}.') - if len(node.args) != len(method.param_types): self.errors.append(_SemanticError %(node.token_list[1].lineno, node.token_list[1].col, f"Method {method.name} called with wrong number of arguments")) else: @@ -386,7 +354,6 @@ def visit(self, node, scope): return self.current_type except SemanticError as e: self.errors.append(_TypeError % (node.token_list[1].lineno, node.token_list[1].col, f"'new' used with undefined class {node.lex}.")) - # self.errors.append(e.text) return ErrorType() @visitor.when(NotNode) diff --git a/src/visitors/Cil2MipsCurrent.py b/src/visitors/Cil2MipsCurrent.py new file mode 100644 index 000000000..1f8d9f98d --- /dev/null +++ b/src/visitors/Cil2MipsCurrent.py @@ -0,0 +1,1225 @@ +from utils.mip_utils import registers as r, operations as o, datatype as dt +import visitors.visitor as visitor +from cil_ast.cil_ast import * + +#heeerreeee con heerrrre carrrill + +class Function(): + def __init__(self, label, params, localvars): + self.label = label + self.localvars = localvars + self.params = params + self.instructions = [] + + def to_str(self): + code = f'{self.label}:\n' + code += '\n'.join(i for i in self.instructions) + return code + + def register_instruction(self, instruction): + self.instructions.append(instruction) + + def register_instructions(self, instructions): + self.instructions.extend(instructions) + + def find_location_param(self, name): + index = self.params.index(name) + offset = ((len(self.params) - 1) - index) * 4 + return '{}({})'.format(offset, r.fp) + + def find_location_local(self, name): + index = self.localvars.index(name) + offset = (len(self.localvars) + 2 - index) * 4 + return '{}({})'.format(-offset, r.fp) + + def find_var_loc(self, name): + try: + return self.find_location_param(name) + except ValueError: + return self.find_location_local(name) + +class MType(): + def __init__(self, name, label, code, index, attrs, methods): + self.name = name + self.label = label + self.index = index + self.methods = methods + self.attributes = attrs + self.code = code + +class DataHandler(): + def __init__(self, label, msg): + self.label = label + self.string = msg + self.code = '{}: {} "{}"'.format(self.label, dt.asciiz, self.string) + +class CILToMipsVisitor: + def __init__(self): + + self.type_lab_cnt = 0 + self.data_lab_cnt = 0 + self.code_lab_cnt = 0 + self.stack_args = 0 + self._function_names = {} + self._labels = {} + + self._data_section = {} + self._types_section = {} + self._functions_section = {} + self._current_function : FunctionNode = None + + def register_instruction(self, instruction): + self._current_function.register_instruction(instruction) + + def register_instructions(self, instructions): + self._current_function.register_instructions( instructions) + + def build_type_label(self): + self.type_lab_cnt += 1 + return f'type_{self.type_lab_cnt}' + + def build_data_label(self): + self.data_lab_cnt += 1 + return f'data_{self.data_lab_cnt}' + + def build_code_label(self): + self.code_lab_cnt += 1 + return f'label_{self.code_lab_cnt}' + + def start_function(self, name, function): + self._functions_section[name] = function + self._current_function = function + self._labels = {} + + def end_function(self): + self._current_function = None + + def register_label(self, label, new_label): + self._labels[label] = new_label + + def get_label(self, label): + return self._labels[label] + + def push_register(self, reg): + move_stack = '{} {} {} {}'.format(o.addi, r.sp, r.sp, -4) + save_location = '{}({})'.format(0, r.sp) + save_register = '{} {} {}'.format(o.sw, reg, save_location) + return [move_stack, save_register] + + def pop_register(self, reg): + load_value = '{} {} {}({})'.format(o.lw, reg, 0, r.sp) + move_stack = '{} {} {} {}'.format(o.addi, r.sp, r.sp, 4) + return [load_value, move_stack] + + def initialize_object(self, reg1, reg2): + instructions = [] + + instructions.append('{} {} {} {}'.format(o.sll, reg1, reg1, 2)) + instructions.append('{} {} {}'.format(o.la, reg2, 'prototype_table')) + instructions.append('{} {} {} {}'.format(o.add, reg2, reg2, reg1)) + instructions.append("{} {} {}({})".format(o.lw, reg2, 0, reg2)) + instructions.append("{} {} {}({})".format(o.lw, r.a0, 4, reg2)) + instructions.append('{} {} {} {}'.format(o.sll, r.a0, r.a0, 2)) + instructions.append('{} {}'.format(o.jal, "allocate")) + instructions.append("{} {} {}".format(o.move, r.a2, r.a0)) + instructions.append("{} {} {}".format(o.move, r.a0, reg2)) + instructions.append("{} {} {}".format(o.move, r.a1, r.v0)) + instructions.append('{} {}'.format(o.jal, "copy")) + + return instructions + + def find_var_loc(self, node): + if isinstance(node, AttributeNode): + return '0({})'.format(r.sp) + if isinstance(node, str): + return self._current_function.find_var_loc(node) + return self._current_function.find_var_loc(node.name) + + @visitor.on('node') + def collector_fnames(self, node): + pass + + @visitor.when(ProgramNode) + def collector_fnames(self, node): + for f in node.dotcode: + self.collector_fnames(f) + + @visitor.when(FunctionNode) + def collector_fnames(self, node): + if node.name == "entry": + self._function_names[node.name] = 'main' + else: + self._function_names[node.name] = node.name + + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + self.collector_fnames(node) + self._data_section["default_str"] = DataHandler("default_str", "") + + for i in node.dottypes: + self.visit(i) + for i in node.dotdata: + self.visit(i) + for i in node.dotcode: + self.visit(i) + + data = f'.data\n' + '\n.word 0\n'.join(d.code for d in self._data_section.values()) + '\n' + names_table = f"types_table:\n" + "\n".join([f".word {tp.name}" for tp in self._types_section.values()]) + proto_table = f"prototype_table:\n" + "\n".join([f" .word {tp.label}_prototype" for tp in self._types_section.values()]) + types_table = "\n\n\n".join([tp.code for tp in self._types_section.values()]) + code = '\n\n'.join(f.to_str() for f in self._functions_section.values()) + '\n' + + mipsCode = f'{data}\n\n{names_table}\n\n{proto_table}\n\n{types_table}\n\n\n.text\n.globl main\n{code}\n\n' + mipsCode += '\n'+self.define_util_functions() + + return mipsCode + + @visitor.when(TypeNode) + def visit(self, node): + name_label = self.build_data_label() + self._data_section[node.name] = DataHandler(name_label, node.name) + + type_label = self.build_type_label() + methods = [self._function_names[key] for key in node.methods.values()] + + type_attrs = list(node.attributes.keys()) + + _methods = "\n".join([f".word {m}" for m in methods]) + dispatch_table = f"{type_label}_dispatch:\n{_methods}" + begin = f"{type_label}_prototype:\n.word {len(self._types_section)}\n.word {len(type_attrs) + 4}\n.word {type_label}_dispatch" + attr = "\n".join([f'.word 0' for attr in type_attrs]) + end = f".word\t-1" + proto = f"{begin}\n{attr}\n{end}" if attr != "" else f"{begin}\n{end}" + + code = f'{dispatch_table}\n\n{proto}' + + self._types_section[node.name] = MType(name_label, type_label, code, len(self._types_section), type_attrs, methods) + + @visitor.when(DataNode) + def visit(self, node): + label = self.build_data_label() + self._data_section[node.name] = DataHandler(label, node.value) + + @visitor.when(FunctionNode) + def visit(self, node): + label = self._function_names[node.name] + params = [param.name for param in node.params] + localvars = [local.name for local in node.localvars] + size_for_locals = len(localvars) * 4 + + new_func = Function(label, params, localvars) + self.start_function(node.name, new_func) + + for instruction in node.instructions: + if isinstance(instruction, LabelNode): + mips_label = self.build_code_label() + self.register_label(instruction.label, mips_label) + + instructions = [] + instructions.extend(self.push_register(r.ra)) + instructions.extend(self.push_register(r.fp)) + instructions.append('{} {} {} {}'.format(o.addi, r.fp, r.sp, 8)) + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, -size_for_locals)) + + for i in node.instructions: + instructions.extend(self.visit(i)) + + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, size_for_locals)) + instructions.extend(self.pop_register(r.fp)) + instructions.extend(self.pop_register(r.ra)) + + if self._current_function.label != 'main': + instructions.append('{} {}'.format(o.jr, r.ra)) + else: + instructions.append('{} {} {}'.format(o.li, r.v0, 10)) + instructions.append('{}'.format(o.syscall)) + + new_func.register_instructions( instructions) + self.end_function() + + @visitor.when(AssignNode) + def visit(self, node): + instructions = [] + + if isinstance(node.source, VoidNode): + register = r.zero + elif isinstance(node.source, int): + register = r.t0 + instructions.append('{} {} {}'.format(o.li, r.t0, int(node.source))) + else: + register = r.t0 + instructions.extend(self.visit(node.source)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.source))) + if isinstance(node.source, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if isinstance(node.dest, AttributeNode): + self_var = self._current_function.params[0] + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(self_var))) + + index = self._types_section[node.dest.type].attributes.index(node.dest.name) + 3 + instructions.append('{} {} {} {}'.format(o.addi, r.t1, r.t1, index * 4)) + instructions.append('{} {} 0({})'.format(o.sw, register, r.t1)) + else: + instructions.append('{} {} {}'.format(o.sw, register, self.find_var_loc(node.dest))) + + return instructions + + @visitor.when(PlusNode) + def visit(self, node): + instructions = [] + + if isinstance(node.left, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if isinstance(node.right, int): + instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.add, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(MinusNode) + def visit(self, node): + instructions = [] + + if isinstance(node.left, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if isinstance(node.right, int): + instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.sub, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(StarNode) + def visit(self, node): + instructions = [] + + if isinstance(node.left, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if isinstance(node.right, int): + instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(DivNode) + def visit(self, node): + instructions = [] + + if isinstance(node.left, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if isinstance(node.right, int): + instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.div, r.t0, r.t1)) + instructions.append('{} {}'.format(o.mflo, r.t0)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(AllocateNode) + def visit(self, node): + instructions = [] + + if isinstance(node.type, int): + _type = node.type + else: + _type = self._types_section[node.type].index + instructions.append('{} {} {}'.format(o.li, r.t0, _type)) + instructions.extend(self.initialize_object(r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(TypeOfNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.obj)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) + if isinstance(node.obj, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} 0({})'.format(o.lw, r.t1, r.t0)) + instructions.append('{} {} {} {}'.format(o.sll, r.t1, r.t1, 2)) + instructions.append('{} {} {}'.format(o.la, r.t0, 'types_table')) + instructions.append('{} {} {} {}'.format(o.add, r.t0, r.t0, r.t1)) + instructions.append('{} {} 0({})'.format(o.lw, r.t1, r.t0)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(StaticCallNode) + def visit(self, node): + instructions = [] + + func_name = self._function_names[node.function] + instructions.append('{} {}'.format(o.jal, func_name)) + if self.stack_args > 0: + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, self.stack_args * 4)) + self.stack_args = 0 + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(DynamicCallNode) + def visit(self, node): + instructions = [] + + _type = self._types_section[node.type] + method = _type.methods.index(self._function_names[node.method]) + + instructions.append('{} {} 0({})'.format(o.lw, r.t0, r.sp)) + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + self.stack_args -= 1 + + instructions.append('{} {} 8({})'.format(o.lw, r.t0, r.t0)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, method * 4, r.t0)) + instructions.append('{} {} {}'.format(o.jalr, r.ra, r.t0)) + + if self.stack_args > 0: + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, self.stack_args * 4)) + self.stack_args = 0 + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(ArgNode) + def visit(self, node): + instructions = [] + + self.stack_args += 1 + if isinstance(node.name, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.name)) + else: + instructions.extend(self.visit(node.name)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.name))) + if isinstance(node.name, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.extend(self.push_register(r.t0)) + + return instructions + + @visitor.when(ReturnNode) + def visit(self, node): + instructions = [] + + if node.value is None or isinstance(node.value, VoidNode): + instructions.append('{} {} {}'.format(o.li, r.v0, 0)) + elif isinstance(node.value, int): + instructions.append('{} {} {}'.format(o.li, r.v0, node.value)) + else: + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.v0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(LoadNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.la, r.t0, self._data_section[node.msg.name].label)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(PrintStringNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.li, r.v0, 4)) + instructions.extend(self.visit(node.str_addr)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.str_addr))) + if isinstance(node.str_addr, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{}'.format(o.syscall)) + + return instructions + + @visitor.when(PrintIntNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.li, r.v0, 1)) + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{}'.format(o.syscall)) + + return instructions + + @visitor.when(ExitNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.li, r.v0, 10)) + instructions.append('{}'.format(o.syscall)) + + return instructions + + @visitor.when(CopyNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} 4({})'.format(o.lw, r.a0, r.t0)) + instructions.append('{} {} {} {}'.format(o.sll, r.a0, r.a0, 2)) + instructions.append('{} {}'.format(o.jal, "allocate")) + instructions.append('{} {} {}'.format(o.move, r.a2, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t0)) + instructions.append('{} {} {}'.format(o.move, r.a1, r.v0)) + instructions.append('{} {}'.format(o.jal, "copy")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(GetAttribNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.obj)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) + if isinstance(node.obj, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + tp = self._types_section[node.computed_type] + offset = (tp.attributes.index(node.attr) + 3) * 4 + instructions.append('{} {} {}({})'.format(o.lw, r.t1, offset, r.t0)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(ErrorNode) + def visit(self, node): + instructions = [] + + mips_label = self._data_section[node.data.name].label + instructions.append('{} {} {}'.format(o.li, r.v0, 4)) + instructions.append('{} {} {}'.format(o.la, r.a0, mips_label)) + instructions.append('{}'.format(o.syscall)) + instructions.append('{} {} {}'.format(o.li, r.v0, 10)) + instructions.append('{}'.format(o.syscall)) + + return instructions + + @visitor.when(ReadIntNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.li, r.v0, 5)) + instructions.append('{}'.format(o.syscall)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(ReadStringNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {}'.format(o.jal, "read_string")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(SetAttribNode) + def visit(self, node): + instructions = [] + + tp = self._types_section[node.computed_type] + offset = (tp.attributes.index(node.attr) + 3) * 4 + + instructions.extend(self.visit(node.obj)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) + if isinstance(node.obj, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if type(node.value) == int: + instructions.append('{} {} {}'.format(o.li, r.t1, node.value)) + else: + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {}({})'.format(o.sw, r.t1, offset, r.t0)) + + return instructions + + @visitor.when(LessNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.slt, r.t1, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(GotoIfNode) + def visit(self, node): + instructions = [] + + mips_label = self.get_label(node.label) + instructions.extend(self.visit(node.condition)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.condition))) + if isinstance(node.condition, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.bne, r.t0, r.zero, mips_label)) + + return instructions + + @visitor.when(GotoNode) + def visit(self, node): + instructions = [] + + mips_label = self.get_label(node.label) + instructions.append('{} {}'.format(o.j, mips_label)) + + return instructions + + @visitor.when(LabelNode) + def visit(self, node): + instructions = [] + + mips_label = self.get_label(node.label) + instructions.append('{}:'.format(mips_label)) + + return instructions + + @visitor.when(SubstringNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.str_value)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.str_value))) + if isinstance(node.str_value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if type(node.index) == int: + instructions.append('{} {} {}'.format(o.li, r.a1, node.index)) + else: + instructions.extend(self.visit(node.index)) + instructions.append('{} {} {}'.format(o.lw, r.a1, self.find_var_loc(node.index))) + if isinstance(node.index, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if type(node.index) == int: + instructions.append('{} {} {}'.format(o.li, r.a2, node.length)) + else: + instructions.extend(self.visit(node.length)) + instructions.append('{} {} {}'.format(o.lw, r.a2, self.find_var_loc(node.length))) + if isinstance(node.length, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {}'.format(o.jal, "substr")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(ConcatNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.prefix)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.prefix))) + if isinstance(node.prefix, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.extend(self.visit(node.suffix)) + instructions.append('{} {} {}'.format(o.lw, r.a1, self.find_var_loc(node.suffix))) + if isinstance(node.suffix, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.extend(self.visit(node.length)) + instructions.append('{} {} {}'.format(o.lw, r.a2, self.find_var_loc(node.length))) + if isinstance(node.length, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {}'.format(o.jal, "concat")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(LengthNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.source)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.source))) + if isinstance(node.source, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {}'.format(o.jal, "length")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(EqualNode) + def visit(self, node): + instructions = [] + + if type(node.left) == VoidNode: + instructions.append('{} {} {}'.format(o.li, r.t0, 0)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if type(node.right) == VoidNode: + instructions.append('{} {} {}'.format(o.li, r.t1, 0)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {} {}'.format(o.seq, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(NameNode) + def visit(self, node): + instructions = [] + + instructions.append('{} {} {}'.format(o.la, r.t0, 'types_table')) + + tp_number = self._types_section[node.value].index + instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, tp_number * 4)) + instructions.append('{} {} 0({})'.format(o.lw, r.t0, r.t0)) + + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(EqualStringNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t0)) + + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.move, r.a1, r.t0)) + + instructions.append('{} {}'.format(o.jal, "equal_str")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(ComplementNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {}'.format(o.not_bw, r.t0, r.t0)) + instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, 1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(LessEqualNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {} {}'.format(o.sle, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(NotNode) + def visit(self, node): + instructions = [] + + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.xori, r.t0, r.t0)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(VarNode) + def visit(self, node): + return [] + + @visitor.when(ParamNode) + def visit(self, node): + return [] + + @visitor.when(AttributeNode) + def visit(self, node): + instructions = [] + + self_var = self._current_function.params[0] + instructions.append('{} {} {}'.format(o.lw, r.t4, self.find_var_loc(self_var))) + + index = self._types_section[node.type].attributes.index(node.name) + 3 + instructions.append('{} {} {}({})'.format(o.lw, r.t4, index * 4, r.t4)) + instructions.extend(self.push_register(r.t4)) + + return instructions + + + def allocate(self): + instructions = [] + + instructions.append('{}:'.format('allocate')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -12)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) + instructions.append('{} {} {}'.format(o.li, r.t0, 4)) + instructions.append('{} {} {}'.format(o.div, r.a0, r.t0)) + instructions.append('{} {}'.format(o.mfhi, r.t1)) + instructions.append('{} {} {} {}'.format(o.sub, r.t0, r.t0, r.t1)) + instructions.append('{} {} {} {}'.format(o.add, r.a0, r.a0, r.t0)) + instructions.append('{} {} {}'.format(o.li, r.v0, 9)) + instructions.append('{}'.format(o.syscall)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 12)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def copy(self): + instructions = [] + + instructions.append('{}:'.format('copy')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -16)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 12, r.sp)) + instructions.append('{}:'.format('while_copy')) + instructions.append('{} {} {} {}'.format(o.beq, r.a2, r.zero, 'copy_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.a0)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.a1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a0, 4)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a1, r.a1, 4)) + instructions.append('{} {} {} {}'.format(o.addi, r.a2, r.a2, -4)) + instructions.append('{} {}'.format(o.j, 'while_copy')) + instructions.append('{}:'.format('copy_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 12, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 16)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def length(self): + instructions = [] + + instructions.append('{}:'.format('length')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -8)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) + instructions.append('{}:'.format('while_len')) + instructions.append('{} {} {}({})'.format(o.lb, r.t1, 0, r.t0)) + instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.zero, 'len_end')) + instructions.append('{} {} {} {}'.format(o.addi, r.v0, r.v0, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {}'.format(o.j, 'while_len')) + instructions.append('{}:'.format('len_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 8)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def substring(self): + instructions = [] + + instructions.append('{}:'.format('substr')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -32)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t3, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a2, 24, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 28, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {} {}'.format(o.add, r.t0, r.t0, r.a1)) + instructions.append('{} {} {}'.format(o.li, r.t1, 4)) + instructions.append('{} {} {}'.format(o.div, r.a2, r.t1)) + instructions.append('{} {}'.format(o.mfhi, r.t2)) + instructions.append('{} {} {} {}'.format(o.bne, r.t2, r.zero, 'substr_allign_size')) + instructions.append('{} {} {}'.format(o.move, r.t1, r.a2)) + instructions.append('{} {}'.format(o.j, 'substr_new_chunk')) + instructions.append('{}:'.format('substr_allign_size')) + instructions.append('{} {} {} {}'.format(o.sub, r.t1, r.t1, r.t2)) + instructions.append('{} {} {} {}'.format(o.add, r.t1, r.t1, r.a2)) + instructions.append('{}:'.format('substr_new_chunk')) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t1)) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.t3, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.zero)) + instructions.append('{}:'.format('while_substr_copy')) + instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.a2, 'substr_end')) + instructions.append('{} {} {}({})'.format(o.lb, r.t2, 0, r.t0)) + instructions.append('{} {} {}({})'.format(o.sb, r.t2, 0, r.t3)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t3, r.t3, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t1, r.t1, 1)) + instructions.append('{} {}'.format(o.j, 'while_substr_copy')) + instructions.append('{}:'.format('substr_end')) + instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t3)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t3, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a2, 24, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 28, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 32)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def concat(self): + instructions = [] + + instructions.append('{}:'.format('concat')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -24)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 20, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.a1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a2, 1)) + instructions.append('{} {} {}'.format(o.li, r.t2, 4)) + instructions.append('{} {} {}'.format(o.div, r.a0, r.t2)) + instructions.append('{} {}'.format(o.mfhi, r.a0)) + instructions.append('{} {} {} {}'.format(o.bne, r.a0, r.zero, 'concat_allign_size')) + instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a2, 1)) + instructions.append('{} {}'.format(o.j, 'concat_size_allignned')) + instructions.append('{}:'.format('concat_allign_size')) + instructions.append('{} {} {} {}'.format(o.sub, r.t2, r.t2, r.a0)) + instructions.append('{} {} {} {}'.format(o.add, r.a0, r.a2, r.t2)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a0, 1)) + instructions.append('{}:'.format('concat_size_allignned')) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.t2, r.v0)) + instructions.append('{} {}'.format(o.j, 'first_while_concat_copy')) + instructions.append('{}:'.format('first_while_concat_copy')) + instructions.append('{} {} {}({})'.format(o.lb, r.a0, 0, r.t0)) + instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'second_while_concat_copy')) + instructions.append('{} {} {}({})'.format(o.sb, r.a0, 0, r.t2)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t2, r.t2, 1)) + instructions.append('{} {}'.format(o.j, 'first_while_concat_copy')) + instructions.append('{}:'.format('second_while_concat_copy')) + instructions.append('{} {} {}({})'.format(o.lb, r.a0, 0, r.t1)) + instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'concat_end')) + instructions.append('{} {} {}({})'.format(o.sb, r.a0, 0, r.t2)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t1, r.t1, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t2, r.t2, 1)) + instructions.append('{} {}'.format(o.j, 'second_while_concat_copy')) + instructions.append('{}:'.format('concat_end')) + instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t2)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 20, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 24)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def read_string(self): + instructions = [] + + instructions.append('{}:'.format('read_string')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -28)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a2, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 24, r.sp)) + instructions.append('{} {} {}'.format(o.li, r.t0, 8)) + instructions.append('{} {} {} {}'.format(o.addi, r.a0, r.t0, 4)) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.t1, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.t2, r.zero)) + instructions.append('{}:'.format('while_read_string')) + instructions.append('{} {} {} {}'.format(o.addu, r.a0, r.t1, r.t2)) + instructions.append('{} {} {} {}'.format(o.subu, r.a1, r.t0, r.t2)) + instructions.append('{} {} {} {}'.format(o.addu, r.t2, r.t2, r.a1)) + instructions.append('{} {}'.format(o.jal, 'read_string_up_to')) + instructions.append('{} {} {} {}'.format(o.beq, r.v0, r.zero, 'read_string_not_finished')) + instructions.append('{} {} {}'.format(o.move, r.v0, r.t1)) + instructions.append('{} {}'.format(o.j, 'end_read_string')) + instructions.append('{}:'.format('read_string_not_finished')) + instructions.append('{} {} {} {}'.format(o.sll, r.t0, r.t0, 1)) + instructions.append('{} {} {} {}'.format(o.addi, r.a0, r.t0, 4)) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t1)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.a1, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.a2, r.t2)) + instructions.append('{} {}'.format(o.jal, 'copy')) + instructions.append('{} {}'.format(o.j, 'while_read_string')) + instructions.append('{}:'.format('end_read_string')) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a2, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 24, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 28)) + instructions.append('{} {}'.format(o.jr, r.ra)) + instructions.append('{}:'.format('read_string_up_to')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -28)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t3, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t4, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t5, 24, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.zero)) + instructions.append('{} {} {}'.format(o.li, r.t2, 10)) + instructions.append('{} {} {} {}'.format(o.addu, r.t3, r.t0, r.a1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a1, r.a1, 1)) + instructions.append('{} {} {}'.format(o.li, r.v0, 8)) + instructions.append('{}'.format(o.syscall)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.a0)) + instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'eol_terminated')) + instructions.append('{} {} {}'.format(o.li, r.v0, 0)) + instructions.append('{}:'.format('eol_check')) + instructions.append('{} {} {} {}'.format(o.beq, r.t0, r.t3, 'read_loop_continue')) + instructions.append('{} {} {}({})'.format(o.lb, r.t1, 0, r.t0)) + instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.t2, 'eol_terminated')) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {}'.format(o.j, 'eol_check')) + instructions.append('{}:'.format('eol_terminated')) + instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t0)) + instructions.append('{} {} {}'.format(o.li, r.v0, 1)) + instructions.append('{}:'.format('read_loop_continue')) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t3, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t4, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t5, 24, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 28)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def string_equals(self): + instructions = [] + + instructions.append('{}:'.format('equal_str')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -24)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t3, 20, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.a1)) + instructions.append('{}:'.format('while_equal_str')) + instructions.append('{} {} {}({})'.format(o.lb, r.t2, 0, r.t0)) + instructions.append('{} {} {}({})'.format(o.lb, r.t3, 0, r.t1)) + instructions.append('{} {} {} {}'.format(o.bne, r.t2, r.t3, 'equal_str_different_strings')) + instructions.append('{} {} {} {}'.format(o.beq, r.t2, r.zero, 'first_end_equal_str')) + instructions.append('{} {} {} {}'.format(o.beq, r.t3, r.zero, 'second_end_equal_str')) + instructions.append('{} {} {} {}'.format(o.addi, r.t1, r.t1, 1)) + instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, 1)) + instructions.append('{} {}'.format(o.j, 'while_equal_str')) + instructions.append('{}:'.format('equal_str_different_strings')) + instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) + instructions.append('{} {}'.format(o.j, 'equal_str_end')) + instructions.append('{}:'.format('first_end_equal_str')) + instructions.append('{} {} {} {}'.format(o.beq, r.t3, r.zero, 'second_end_equal_str')) + instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) + instructions.append('{} {}'.format(o.j, 'equal_str_end')) + instructions.append('{}:'.format('second_end_equal_str')) + instructions.append('{} {} {}'.format(o.li, r.v0, 1)) + instructions.append('{}:'.format('equal_str_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t3, 20, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 24)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def define_util_functions(self): + # instructions = [self.allocate(), self.copy(), self.length(), self.substring(), self.concat(), self.read_string(), self.string_equals()] + instructions = [self.allocate(), self.copy(), self.length(), self.concat(), self.substring(), self.string_equals(), self.read_string()] + + code = '\n\n'.join('\n'.join(i for i in j) for j in instructions) + return code + diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index cab51b443..1f8d9f98d 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -2,899 +2,1224 @@ import visitors.visitor as visitor from cil_ast.cil_ast import * -class CiltoMipsVisitor: - def __init__(self, context): - self.dottypes = [] - self.dotdata =[] - self.dotcode =[] - self.context = context - self.code = [] - self.data = [] - self.label_id = 0 - self.current_function: FunctionNode = None - self.conform = {} - def stack_offset(self, name): +#heeerreeee con heerrrre carrrill + +class Function(): + def __init__(self, label, params, localvars): + self.label = label + self.localvars = localvars + self.params = params + self.instructions = [] + + def to_str(self): + code = f'{self.label}:\n' + code += '\n'.join(i for i in self.instructions) + return code + + def register_instruction(self, instruction): + self.instructions.append(instruction) + + def register_instructions(self, instructions): + self.instructions.extend(instructions) + + def find_location_param(self, name): + index = self.params.index(name) + offset = ((len(self.params) - 1) - index) * 4 + return '{}({})'.format(offset, r.fp) + + def find_location_local(self, name): + index = self.localvars.index(name) + offset = (len(self.localvars) + 2 - index) * 4 + return '{}({})'.format(-offset, r.fp) + + def find_var_loc(self, name): try: - all_ = [] - for i in self.current_function.params: - if isinstance(i, ParamNode): - all_.append(i.name) - else: - all_.append(i) - for i in self.current_function.localvars: - if isinstance(i, LocalNode): - all_.append(i.name) - else: - all_.append(i) - return -4*all_.index(name) - except: - a = 0 - return 0 - def write_data(self, instruction): - self.data.append(instruction) - - def write_code(self, instruction): - self.code.append(instruction) - - def compute_parents(self, inherit): - self.conform['Object'] = ['Object'] - class_list = [] - for c, _ in inherit.items(): - self.conform[c] = [c] - class_list.append(c) - for c in class_list: - current = c - while not current == 'Object': - self.conform[c].append(inherit[current]) - current = inherit[current] + return self.find_location_param(name) + except ValueError: + return self.find_location_local(name) + +class MType(): + def __init__(self, name, label, code, index, attrs, methods): + self.name = name + self.label = label + self.index = index + self.methods = methods + self.attributes = attrs + self.code = code + +class DataHandler(): + def __init__(self, label, msg): + self.label = label + self.string = msg + self.code = '{}: {} "{}"'.format(self.label, dt.asciiz, self.string) + +class CILToMipsVisitor: + def __init__(self): + + self.type_lab_cnt = 0 + self.data_lab_cnt = 0 + self.code_lab_cnt = 0 + self.stack_args = 0 + self._function_names = {} + self._labels = {} + + self._data_section = {} + self._types_section = {} + self._functions_section = {} + self._current_function : FunctionNode = None + + def register_instruction(self, instruction): + self._current_function.register_instruction(instruction) - @visitor.on('node') - def visit(self, node): - pass + def register_instructions(self, instructions): + self._current_function.register_instructions( instructions) + + def build_type_label(self): + self.type_lab_cnt += 1 + return f'type_{self.type_lab_cnt}' - @visitor.when(ProgramNode) - def visit(self, node): - self.dottypes = node.dottypes - self.dotdata = node.dotdata - self.dotcode = node.dotcode - self.attrs = node.cattrs - self.functions = node.dfunc - self.parents = node.dparents - self.compute_parents(self.parents) - - self.write_data('.data') # initialize the .data segment - self.write_data(f'p_error: {dt.asciiz} "Aborting from String"') - self.write_data(f'zero_error: {dt.asciiz} "Division by zero"') - self.write_data(f'range_error: {dt.asciiz} "Index out of range"') - - for c in self.attrs: - self.write_data(c + '_class_name' + ': .asciiz "' + c + '"') - - for c, conform_list in self.conform.items(): - line = c + '_conforms_to: .word '+ conform_list[0] + '_class_name' - n = len(conform_list) - for i in range(1, n): line += ', ' + conform_list[i] + '_class_name' - self.write_data(line) - - for usr_data in self.dotdata: - data_addr = usr_data.name - data_value = usr_data.value - self.write_data('{}: {} {}'.format(usr_data.name, dt.asciiz, usr_data.value)) - - self.write_code('.text') - self.write_code('.globl main') - self.write_code(''' - str_len: - li $v0,0 - move $v1, $a0 - __lenLoop: - lbu $t1, 0($v1) - beq $t1,$0,__lenExit - addu $v0,$v0,1 - addu $v1,$v1,1 - b __lenLoop - __lenExit: - jr $ra - - str_copy: - lw $a0, -4($fp) - lw $a1, -8($fp) - lw $a2, -12($fp) - - move $v0, $a0 - - str__while_copy: - beqz $a2, str__end_copy - - xor $t0, $t0, $t0 - lb $t0, 0($a1) - sb $t0, 0($a0) - - subu $a2, $a2,1 - addu $a0, $a0,1 - addu $a1, $a1,1 - j str__while_copy - - str__end_copy: - jr $ra - - str_index_error: - li $v0, 4 - la $a0, range_error - syscall - li $v0, 10 - syscall - jr $ra - - str_substring: - # load arguments - move $t5, $a0 - move $t3, $a1 - li $t4, 0 - move $t2, $a2 - - # check for index out of range - move $a3, $ra - jal str_len - move $ra, $a3 - - addu $t6, $t3, $t2 - bgt $t6, $v0, str_index_error - - # create substring - move $a0, $t2 #length - addu $a0, $a0, 1 - li $v0, 9 #make space - syscall - # tenemos en $v0 la direccion del nuevo string - - addu $t5, $t5, $t3 - - subu $sp, $sp, 4 - sw $ra, 0($sp) - subu $sp, $sp, 4 - sw $fp, 0($sp) - move $fp,$sp - subu $sp, $sp, 4 - sw $v0, 0($sp) - subu $sp, $sp, 4 - sw $t5, 0($sp) - subu $sp, $sp, 4 - sw $t2, 0($sp) - - jal str_copy - move $sp,$fp - - lw $fp, 0($sp) - addi $sp,$sp, 4 - - lw $ra, 0($sp) - addi $sp,$sp, 4 - - addu $t9, $v0, $t2 #null terminated - sb $0, 0($t9) - jr $ra - - - #$a0 el prefijo, y en $a1, el str. - - str1_prefix_of_str2: - lb $t0, 0($a0) - lb $t1, 0($a1) - beqz $t0, prefixTrue - bne $t0, $t1, prefixFalse - addu $a0,$a0,1 - addu $a1,$a1,1 - b str1_prefix_of_str2 - prefixFalse: - li $v0, 0 - jr $ra - prefixTrue: - li $v0, 1 - jr $ra - - str_comparer: - move $a0, $a2 - move $a1, $ra - jal str_len #$v0=len(message1) - move $ra, $a1 - - move $s1, $v0 - - move $a0, $a3 - - move $a1, $ra - jal str_len #$v0=len(message2) - move $ra, $a1 - - beq $v0, $s1, string_length_comparer_end - li $v0, 0 - j string_comparer_end - - string_length_comparer_end: - move $a0, $a2 - move $a1, $a3 - move $s1, $ra - jal str1_prefix_of_str2 - move $ra, $s1 - string_comparer_end: - jr $ra - - case_conform: - move $s0, $a0 - move $s1, $a1 - START_CASE_LOOP: - - lw $a1, 0($s0) - - addi $s0, $s0, 4 - - move $t0, $s1 # Address of 1st element in array. - li $v0, 4 # System call code 4 (print_string). - li $t1, 0 # Initialize array offset. - - loop_INTERNAL: - - # Use the address mode label(register). - - lw $a0, 0($t0) # Load value at address str_array + $t1 (offset). - - beq $a0, $a1, END_CASE_LOOP - - addi $t0, $t0, 4 # Next element, i.e., increment offset by 4. - addi $t1, $t1, 4 # Next element, i.e., increment offset by 4. - - # Done or loop once more? + def build_data_label(self): + self.data_lab_cnt += 1 + return f'data_{self.data_lab_cnt}' - ble $t1, $a2, loop_INTERNAL - b START_CASE_LOOP - END_CASE_LOOP: - move $v0, $a0 - jr $ra + def build_code_label(self): + self.code_lab_cnt += 1 + return f'label_{self.code_lab_cnt}' - str_concat: - move $a3, $ra - jal str_len - move $ra, $a3 + def start_function(self, name, function): + self._functions_section[name] = function + self._current_function = function + self._labels = {} - # guardamos en $t4, la longitud de str1 - move $t4, $v0 - # el str1 - move $t5, $a0 - move $a0, $a1 - move $t8, $a1 + def end_function(self): + self._current_function = None - move $a3, $ra - jal str_len - move $ra, $a3 + def register_label(self, label, new_label): + self._labels[label] = new_label - # reservamos espacio para el nuevo string - # guardamos en $t7 la longitud de str2 - move $t7, $v0 - addu $v0, $t4, $v0 - addu $v0, $v0, 1 - move $a0, $v0 - li $v0, 9 - syscall + def get_label(self, label): + return self._labels[label] + + def push_register(self, reg): + move_stack = '{} {} {} {}'.format(o.addi, r.sp, r.sp, -4) + save_location = '{}({})'.format(0, r.sp) + save_register = '{} {} {}'.format(o.sw, reg, save_location) + return [move_stack, save_register] + + def pop_register(self, reg): + load_value = '{} {} {}({})'.format(o.lw, reg, 0, r.sp) + move_stack = '{} {} {} {}'.format(o.addi, r.sp, r.sp, 4) + return [load_value, move_stack] + + def initialize_object(self, reg1, reg2): + instructions = [] + + instructions.append('{} {} {} {}'.format(o.sll, reg1, reg1, 2)) + instructions.append('{} {} {}'.format(o.la, reg2, 'prototype_table')) + instructions.append('{} {} {} {}'.format(o.add, reg2, reg2, reg1)) + instructions.append("{} {} {}({})".format(o.lw, reg2, 0, reg2)) + instructions.append("{} {} {}({})".format(o.lw, r.a0, 4, reg2)) + instructions.append('{} {} {} {}'.format(o.sll, r.a0, r.a0, 2)) + instructions.append('{} {}'.format(o.jal, "allocate")) + instructions.append("{} {} {}".format(o.move, r.a2, r.a0)) + instructions.append("{} {} {}".format(o.move, r.a0, reg2)) + instructions.append("{} {} {}".format(o.move, r.a1, r.v0)) + instructions.append('{} {}'.format(o.jal, "copy")) + + return instructions - # en $t5 esta str1, y en $t8, str2------------------------- + def find_var_loc(self, node): + if isinstance(node, AttributeNode): + return '0({})'.format(r.sp) + if isinstance(node, str): + return self._current_function.find_var_loc(node) + return self._current_function.find_var_loc(node.name) - # save str1 part------------------------------------------ - # push $ra - subu $sp, $sp, 4 - sw $ra, 0($sp) - # push $fp - subu $sp, $sp, 4 - sw $fp, 0($sp) + @visitor.on('node') + def collector_fnames(self, node): + pass - move $fp, $sp + @visitor.when(ProgramNode) + def collector_fnames(self, node): + for f in node.dotcode: + self.collector_fnames(f) - # push dest to copy pointer - subu $sp, $sp, 4 - sw $v0, 0($sp) + @visitor.when(FunctionNode) + def collector_fnames(self, node): + if node.name == "entry": + self._function_names[node.name] = 'main' + else: + self._function_names[node.name] = node.name - # push copy from - subu $sp, $sp, 4 - sw $t5, 0($sp) + @visitor.on('node') + def visit(self, node): + pass + + @visitor.when(ProgramNode) + def visit(self, node): + self.collector_fnames(node) + self._data_section["default_str"] = DataHandler("default_str", "") + + for i in node.dottypes: + self.visit(i) + for i in node.dotdata: + self.visit(i) + for i in node.dotcode: + self.visit(i) + + data = f'.data\n' + '\n.word 0\n'.join(d.code for d in self._data_section.values()) + '\n' + names_table = f"types_table:\n" + "\n".join([f".word {tp.name}" for tp in self._types_section.values()]) + proto_table = f"prototype_table:\n" + "\n".join([f" .word {tp.label}_prototype" for tp in self._types_section.values()]) + types_table = "\n\n\n".join([tp.code for tp in self._types_section.values()]) + code = '\n\n'.join(f.to_str() for f in self._functions_section.values()) + '\n' + + mipsCode = f'{data}\n\n{names_table}\n\n{proto_table}\n\n{types_table}\n\n\n.text\n.globl main\n{code}\n\n' + mipsCode += '\n'+self.define_util_functions() + + return mipsCode - # push how much to copy - subu $sp, $sp, 4 - sw $t4, 0($sp) + @visitor.when(TypeNode) + def visit(self, node): + name_label = self.build_data_label() + self._data_section[node.name] = DataHandler(name_label, node.name) - jal str_copy + type_label = self.build_type_label() + methods = [self._function_names[key] for key in node.methods.values()] - move $sp, $fp + type_attrs = list(node.attributes.keys()) + + _methods = "\n".join([f".word {m}" for m in methods]) + dispatch_table = f"{type_label}_dispatch:\n{_methods}" + begin = f"{type_label}_prototype:\n.word {len(self._types_section)}\n.word {len(type_attrs) + 4}\n.word {type_label}_dispatch" + attr = "\n".join([f'.word 0' for attr in type_attrs]) + end = f".word\t-1" + proto = f"{begin}\n{attr}\n{end}" if attr != "" else f"{begin}\n{end}" + + code = f'{dispatch_table}\n\n{proto}' + + self._types_section[node.name] = MType(name_label, type_label, code, len(self._types_section), type_attrs, methods) - lw $fp, 0($sp) - addu $sp, $sp, 4 + @visitor.when(DataNode) + def visit(self, node): + label = self.build_data_label() + self._data_section[node.name] = DataHandler(label, node.value) - lw $ra, 0($sp) - addu $sp, $sp, 4 + @visitor.when(FunctionNode) + def visit(self, node): + label = self._function_names[node.name] + params = [param.name for param in node.params] + localvars = [local.name for local in node.localvars] + size_for_locals = len(localvars) * 4 - # save str2 part------------- - # push $ra - subu $sp, $sp, 4 - sw $ra, 0($sp) + new_func = Function(label, params, localvars) + self.start_function(node.name, new_func) - # push $fp - subu $sp, $sp, 4 - sw $fp, 0($sp) + for instruction in node.instructions: + if isinstance(instruction, LabelNode): + mips_label = self.build_code_label() + self.register_label(instruction.label, mips_label) - move $fp, $sp + instructions = [] + instructions.extend(self.push_register(r.ra)) + instructions.extend(self.push_register(r.fp)) + instructions.append('{} {} {} {}'.format(o.addi, r.fp, r.sp, 8)) + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, -size_for_locals)) - # push where to copy - move $t9, $v0 - addu $t0, $v0, $t4 - subu $sp, $sp, 4 - sw $t0, 0($sp) + for i in node.instructions: + instructions.extend(self.visit(i)) - # push copy from - subu $sp, $sp, 4 - sw $t8, 0($sp) + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, size_for_locals)) + instructions.extend(self.pop_register(r.fp)) + instructions.extend(self.pop_register(r.ra)) - subu $sp, $sp, 4 - sw $t7, 0($sp) + if self._current_function.label != 'main': + instructions.append('{} {}'.format(o.jr, r.ra)) + else: + instructions.append('{} {} {}'.format(o.li, r.v0, 10)) + instructions.append('{}'.format(o.syscall)) - jal str_copy + new_func.register_instructions( instructions) + self.end_function() - move $sp, $fp + @visitor.when(AssignNode) + def visit(self, node): + instructions = [] - lw $fp, 0($sp) - addu $sp, $sp, 4 + if isinstance(node.source, VoidNode): + register = r.zero + elif isinstance(node.source, int): + register = r.t0 + instructions.append('{} {} {}'.format(o.li, r.t0, int(node.source))) + else: + register = r.t0 + instructions.extend(self.visit(node.source)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.source))) + if isinstance(node.source, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if isinstance(node.dest, AttributeNode): + self_var = self._current_function.params[0] + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(self_var))) + + index = self._types_section[node.dest.type].attributes.index(node.dest.name) + 3 + instructions.append('{} {} {} {}'.format(o.addi, r.t1, r.t1, index * 4)) + instructions.append('{} {} 0({})'.format(o.sw, register, r.t1)) + else: + instructions.append('{} {} {}'.format(o.sw, register, self.find_var_loc(node.dest))) - lw $ra, 0($sp) - addu $sp, $sp, 4 + return instructions - addu $v0, $t7, $v0 - sb $0, 0($v0) + @visitor.when(PlusNode) + def visit(self, node): + instructions = [] - move $v0, $t9 - jr $ra - ''') + if isinstance(node.left, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if isinstance(node.right, int): + instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.add, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions - for c in self.dotcode: - self.visit(c) + @visitor.when(MinusNode) + def visit(self, node): + instructions = [] + if isinstance(node.left, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if isinstance(node.right, int): + instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.sub, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions - @visitor.when(TypeNode) + @visitor.when(StarNode) def visit(self, node): - pass + instructions = [] - @visitor.when(DataNode) + if isinstance(node.left, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if isinstance(node.right, int): + instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(DivNode) def visit(self, node): - pass + instructions = [] - @visitor.when(FunctionNode) + if isinstance(node.left, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + if isinstance(node.right, int): + instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.div, r.t0, r.t1)) + instructions.append('{} {}'.format(o.mflo, r.t0)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(AllocateNode) def visit(self, node): - # methods = [ - # 'Object_abort', - # 'Object_type_name', - # 'Object_copy', - # 'String_concat', - # 'String_substr', - # 'String_length', - # 'IO_in_int', - # 'IO_out_int', - # 'IO_in_string', - # 'IO_out_string', - # ] - # if node.fname in methods: - # return - - self.current_function = node - self.write_code(node.name + ':') - - #ya se guardaron los argumentos en la pila - #tenemos que guardar espacio para las variables locales - self.write_code('{} {}, {}, -{}'.format(o.addi, r.sp, r.sp, str(4*len(node.localvars)))) - - self.write_code('{} {}, {}, -8'.format(o.addi, r.sp, r.sp)) - self.write_code('{} {}, 4({}) # save $ra'.format(o.sw, r.ra, r.sp)) - self.write_code('{} {}, 0({}) # save $fp'.format(o.sw, r.fp, r.sp)) - - n = 4*(len(node.params) + len(node.localvars) + 1) - self.write_code('{} {}, {}, {}'.format(o.addi, r.fp, r.sp, n)) + instructions = [] - for instruction in node.instructions: - self.visit(instruction) - + if isinstance(node.type, int): + _type = node.type + else: + _type = self._types_section[node.type].index + instructions.append('{} {} {}'.format(o.li, r.t0, _type)) + instructions.extend(self.initialize_object(r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - self.write_code('{} {}, 4({}) # restore $ra'.format(o.lw, r.ra, r.sp)) - self.write_code('{} {}, 0({})'.format(o.lw, r.t1, r.sp)) - self.write_code('{} {}, {}, 4'.format(o.addi, r.sp, r.fp)) - self.write_code('{} {}, {} # restore $fp'.format(o.move, r.fp, r.t1)) - - self.write_code('{} {}'.format(o.jr, r.ra)) # and return - self.current_function = None - - @visitor.when(ParamNode) + return instructions + + @visitor.when(TypeOfNode) def visit(self, node): - pass + instructions = [] + + instructions.extend(self.visit(node.obj)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) + if isinstance(node.obj, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} 0({})'.format(o.lw, r.t1, r.t0)) + instructions.append('{} {} {} {}'.format(o.sll, r.t1, r.t1, 2)) + instructions.append('{} {} {}'.format(o.la, r.t0, 'types_table')) + instructions.append('{} {} {} {}'.format(o.add, r.t0, r.t0, r.t1)) + instructions.append('{} {} 0({})'.format(o.lw, r.t1, r.t0)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions - @visitor.when(LocalNode) + @visitor.when(StaticCallNode) def visit(self, node): - pass + instructions = [] - @visitor.when(AssignNode) + func_name = self._function_names[node.function] + instructions.append('{} {}'.format(o.jal, func_name)) + if self.stack_args > 0: + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, self.stack_args * 4)) + self.stack_args = 0 + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(DynamicCallNode) def visit(self, node): - src = self.stack_pos(node.source) - dest = self.stack_pos(node.dest) + instructions = [] - self.write_code('# Assign ') - self.write_code('{} {}, {}({})'.format(o.lw, r.t0, src, r.fp)) - self.write_code('{} {}, {}({})'.format(o.lw, r.t1, dest, r.fp)) + _type = self._types_section[node.type] + method = _type.methods.index(self._function_names[node.method]) - n = self.attributes[node.type] - for i in range(n): - self.write_code('{} {}, {}({})'.format(o.lw, r.s0, 4*(i+2), r.t0)) - self.write_code('{} {}, {}({})'.format(o.sw, r.s0, 4*(i+2), r.t1)) + instructions.append('{} {} 0({})'.format(o.lw, r.t0, r.sp)) + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + self.stack_args -= 1 - @visitor.when(PlusNode) + instructions.append('{} {} 8({})'.format(o.lw, r.t0, r.t0)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, method * 4, r.t0)) + instructions.append('{} {} {}'.format(o.jalr, r.ra, r.t0)) + + if self.stack_args > 0: + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, self.stack_args * 4)) + self.stack_args = 0 + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(ArgNode) def visit(self, node): - left_pos = self.stack_offset(node.left) - right_pos = self.stack_offset(node.right) - dest_pos = self.stack_offset(node.dest) - self.write_code('# Plus') - self.write_code('{} {}, {}({}) # heap address of the left Int'.format(o.lw, r.t0, left_pos, r.fp)) - self.write_code('{} {}, 8({}) # left Int value'.format(o.lw, r.t1, r.t0)) - self.write_code('{} {}, {}({}) # heap address of the right Int'.format(o.lw, r.t0, right_pos, r.fp)) - self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, right_pos, r.t0)) - self.write_code('{} {}, {}, {} # saving to $t1 the result'.format(o.add, r.t1, r.t1, r.t2)) - self.write_code('{} {}, {}({}) # heap address of dest'.format(o.lw, r.t0, dest_pos, r.fp)) - self.write_code('{} {}, 8({}) # store result'.format(o.sw, r.t1, r.t0)) + instructions = [] - @visitor.when(MinusNode) - def visit(self, node): - left_pos = self.stack_offset(node.left) - right_pos = self.stack_offset(node.right) - dest_pos = self.stack_offset(node.dest) - self.write_code('# Plus') - self.write_code('{} {}, {}({}) # heap address of the left Int'.format(o.lw, r.t0, left_pos, r.fp)) - self.write_code('{} {}, 8({}) # left Int value'.format(o.lw, r.t1, r.t0)) - self.write_code('{} {}, {}({}) # heap address of the right Int'.format(o.lw, r.t0, right_pos, r.fp)) - self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, right_pos, r.t0)) - self.write_code('{} {}, {}, {} # saving to $t1 the result'.format(o.sub, r.t1, r.t1, r.t2)) - self.write_code('{} {}, {}({}) # heap address of dest'.format(o.lw, r.t0, dest_pos, r.fp)) - self.write_code('{} {}, 8({}) # store result'.format(o.sw, r.t1, r.t0)) + self.stack_args += 1 + if isinstance(node.name, int): + instructions.append('{} {} {}'.format(o.li, r.t0, node.name)) + else: + instructions.extend(self.visit(node.name)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.name))) + if isinstance(node.name, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.extend(self.push_register(r.t0)) + + return instructions - @visitor.when(StarNode) + @visitor.when(ReturnNode) def visit(self, node): - left_pos = self.stack_offset(node.left) - right_pos = self.stack_offset(node.right) - dest_pos = self.stack_offset(node.dest) - self.write_code('# Plus') - self.write_code('{} {}, {}({}) # heap address of the left Int'.format(o.lw, r.t0, left_pos, r.fp)) - self.write_code('{} {}, 8({}) # left Int value'.format(o.lw, r.t1, r.t0)) - self.write_code('{} {}, {}({}) # heap address of the right Int'.format(o.lw, r.t0, right_pos, r.fp)) - self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, right_pos, r.t0)) - self.write_code('{} {}, {} # multiply'.format(o.mul, r.t1, r.t2)) - self.write_code('{} {} # get the result in lo'.format(o.mflo, r.t1, r.t2)) - self.write_code('{} {}, {}({}) # heap address of dest'.format(o.lw, r.t0, dest_pos, r.fp)) - self.write_code('{} {}, 8({}) # store result'.format(o.sw, r.t1, r.t0)) + instructions = [] - @visitor.when(DivNode) + if node.value is None or isinstance(node.value, VoidNode): + instructions.append('{} {} {}'.format(o.li, r.v0, 0)) + elif isinstance(node.value, int): + instructions.append('{} {} {}'.format(o.li, r.v0, node.value)) + else: + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.v0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(LoadNode) def visit(self, node): - left_pos = self.stack_offset(node.left) - right_pos = self.stack_offset(node.right) - dest_pos = self.stack_offset(node.dest) - self.write_code('# Plus') - self.write_code('{} {}, {}({}) # heap address of the left Int'.format(o.lw, r.t0, left_pos, r.fp)) - self.write_code('{} {}, 8({}) # left Int value'.format(o.lw, r.t1, r.t0)) - self.write_code('{} {}, {}({}) # heap address of the right Int'.format(o.lw, r.t0, right_pos, r.fp)) - self.write_code('{} {}, 8({}) # right Int value'.format(o.lw, r.t2, right_pos, r.t0)) - # zero exception - # self.write_code("la $t0, zero_error") - # self.write_code("sw $t0, ($sp)") - # self.write_code("subu $sp, $sp, 4") - self.write_code("beqz $t2, .raise") - # self.write_code("addu $sp, $sp, 4") - # - self.write_code('{} {}, {} # divide'.format(o.div, r.t1, r.t2)) - self.write_code('{} {} # get the result in lo'.format(o.mflo, r.t1, r.t2)) - self.write_code('{} {}, {}({}) # heap address of dest'.format(o.lw, r.t0, dest_pos, r.fp)) - self.write_code('{} {}, 8({}) # store result'.format(o.sw, r.t1, r.t0)) + instructions = [] - @visitor.when(EqualNode) + instructions.append('{} {} {}'.format(o.la, r.t0, self._data_section[node.msg.name].label)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(PrintStringNode) def visit(self, node): - pos_dest = self.stack_offset(node.dest) - pos_left = self.stack_offset(node.left) - pos_right = self.stack_offset(node.right) + instructions = [] - self.write_code('# equal ') - self.write_code('{} {}, {}({})'.format(o.lw, r.t2, pos_left, r.fp)) - self.write_code('{} {}, {}({})'.format(o.lw, r.t3, pos_right, r.fp)) + instructions.append('{} {} {}'.format(o.li, r.v0, 4)) + instructions.extend(self.visit(node.str_addr)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.str_addr))) + if isinstance(node.str_addr, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{}'.format(o.syscall)) - self.write_code('{} {}, 8({})'.format(o.lw, r.a0, r.t2)) - self.write_code('{} {}, 8({})'.format(o.lw, r.a1, r.t3)) + return instructions - self.write_code('{} {}, 0 # initialize with 0 '.format(o.li, r.t1)) - label = 'not_equal_label_{}'.format(self.label_id) - self.label_id+=1 - self.write_code('{} {}, {} {} # branch if not equal to label'.format(o.bne, r.a0, r.a1, label)) - self.write_code('{} {}, 1 # change value to 1 if equal'. format(o.li, r.t1)) - self.write_code('{}:'.format(label)) - self.write_code('{} {}, {}({})'.format(o.lw, r.t0, pos_dest, r.fp)) - self.write_code('{} {}, 8({})'.format(o.sw, r.t1, r.t0)) - - @visitor.when(LeqNode) + @visitor.when(PrintIntNode) def visit(self, node): - pos_dest = self.stack_offset(node.dest) - pos_left = self.stack_offset(node.left) - pos_right = self.stack_offset(node.right) + instructions = [] - self.write_code('# less than or equal ') - self.write_code('{} {}, {}({})'.format(o.lw, r.t2, pos_left, r.fp)) - self.write_code('{} {}, {}({})'.format(o.lw, r.t3, pos_right, r.fp)) + instructions.append('{} {} {}'.format(o.li, r.v0, 1)) + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{}'.format(o.syscall)) - self.write_code('{} {}, 8({})'.format(o.lw, r.a0, r.t2)) - self.write_code('{} {}, 8({})'.format(o.lw, r.a1, r.t3)) - - self.write_code('{} {}, 0 # initialize with 0 '.format(o.li, r.t1)) - label = 'not_less_than_ or_equal_label_{}'.format(self.label_id) - self.label_id+=1 - self.write_code('{} {}, {} {} # branch if not less than or equal to label'.format(o.bgt, r.a0, r.a1, label)) - self.write_code('{} {}, 1 # change value to 1 if equal'. format(o.li, r.t1)) - self.write_code('{}:'.format(label)) - self.write_code('{} {}, {}({})'.format(o.lw, r.t0, pos_dest, r.fp)) - self.write_code('{} {}, 8({})'.format(o.sw, r.t1, r.t0)) + return instructions - @visitor.when(LessNode) + @visitor.when(ExitNode) def visit(self, node): - pos_dest = self.stack_offset(node.dest) - pos_left = self.stack_offset(node.left) - pos_right = self.stack_offset(node.right) - - self.write_code('# less than ') - self.write_code('{} {}, {}({})'.format(o.lw, r.t2, pos_left, r.fp)) - self.write_code('{} {}, {}({})'.format(o.lw, r.t3, pos_right, r.fp)) + instructions = [] - self.write_code('{} {}, 8({})'.format(o.lw, r.a0, r.t2)) - self.write_code('{} {}, 8({})'.format(o.lw, r.a1, r.t3)) + instructions.append('{} {} {}'.format(o.li, r.v0, 10)) + instructions.append('{}'.format(o.syscall)) - self.write_code('{} {}, 0 # initialize with 0 '.format(o.li, r.t1)) - label = 'not_less_than_label_{}'.format(self.label_id) - self.label_id+=1 - self.write_code('{} {}, {} {} # branch if not less than to label'.format(o.bge, r.a0, r.a1, label)) - self.write_code('{} {}, 1 # change value to 1 if equal'. format(o.li, r.t1)) - self.write_code('{}:'.format(label)) - self.write_code('{} {}, {}({})'.format(o.lw, r.t0, pos_dest, r.fp)) - self.write_code('{} {}, 8({})'.format(o.sw, r.t1, r.t0)) + return instructions - @visitor.when(GotoNode) + @visitor.when(CopyNode) def visit(self, node): - self.write_code('# goto ') - self.write_code('{} {} # jump unconditionally'.format(o.j, node.label)) + instructions = [] + + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} 4({})'.format(o.lw, r.a0, r.t0)) + instructions.append('{} {} {} {}'.format(o.sll, r.a0, r.a0, 2)) + instructions.append('{} {}'.format(o.jal, "allocate")) + instructions.append('{} {} {}'.format(o.move, r.a2, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t0)) + instructions.append('{} {} {}'.format(o.move, r.a1, r.v0)) + instructions.append('{} {}'.format(o.jal, "copy")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions - @visitor.when(GotoIfNode) - def visit(self, node): - pos = self.stack_offset(node.condition) - self.write_code('# goto if') - self.write_code( '{} {} {}({}) # heap address'.format(o.lw, r.t0, pos, r.fp)) - self.write_code('{} {} 8({}) # value of condition'.format(o.lw, r.t1, r.t0)) - self.write_code('{} {} {} # branch on not equal to 0'.format(o.bnez, r.t1, node.label)) - @visitor.when(GetAttribNode) def visit(self, node): - inst = self.stack_offset(node.inst) - dest = self.stack_offset(node.dest) - self.write_code('# GetAttrib') - self.write_code('{} {}, {}({})'.format(o.lw, r.s1, inst, r.fp)) - self.write_code('{} {}, {}({})'.format(o.lw, r.s0, 4*node.attr + 8, r.s1)) - self.write_code('{} {}, {}({})'.format(o.sw, r.s0, dest, r.fp)) + instructions = [] - @visitor.when(SetAttribNode) - def visit(self, node): - inst = self.stack_offset(node.inst) + instructions.extend(self.visit(node.obj)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) + if isinstance(node.obj, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - self.write_code('# SetAttrib') - self.write_code('{} {}, {}({})'.format(o.lw, r.s1, inst, r.fp)) + tp = self._types_section[node.computed_type] + offset = (tp.attributes.index(node.attr) + 3) * 4 + instructions.append('{} {} {}({})'.format(o.lw, r.t1, offset, r.t0)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - if isinstance(node.source, int): - self.write_code('{} {}, {}'.format(o.li, r.s0, node.source)) + return instructions - else: - src = self.stack_offset(node.source) - self.write_code('{} {}, {}({})'.format(o.lw, r.s0, src, r.fp)) + @visitor.when(ErrorNode) + def visit(self, node): + instructions = [] - self.write_code('{} {}, {}({})'.format(o.sw, r.s0, 4*node.attr + 8, r.s1)) + mips_label = self._data_section[node.data.name].label + instructions.append('{} {} {}'.format(o.li, r.v0, 4)) + instructions.append('{} {} {}'.format(o.la, r.a0, mips_label)) + instructions.append('{}'.format(o.syscall)) + instructions.append('{} {} {}'.format(o.li, r.v0, 10)) + instructions.append('{}'.format(o.syscall)) - @visitor.when(AllocateNode) + return instructions + + @visitor.when(ReadIntNode) def visit(self, node): - self.write_code('# Allocate ') - sizeof = self.attrs[node.type]*4 + 8 - self.write_code('{} {}, {}, {}'.format(o.addiu, r.a0, r.zero, sizeof)) - self.write_code('{} {}, 9'.format(o.li, r.v0)) - self.write_code('{}'.format(o.syscall)) - - self.write_code('{} {}, {}, {}'.format(o.addu, r.s1, r.zero, r.v0)) - - count = len(self.functions[node.type]) - sizeof_dispatch = count*4 - self.write_code('{} {}, {}, {}'.format(o.addiu, r.a0, r.zero, sizeof_dispatch)) - self.write_code('{} {}, 9'. format(o.li, r.v0)) - self.write_code('{}'.format(o.syscall)) - - self.write_code('{} {}, {}, {}'.format(o.addu, r.s0, r.zero, r.v0)) - for i in range(count): - self.write_code('{} {}, {}'.format(o.la, r.a0, self.functions[node.type][i])) - self.write_code('{} {}, {}({})'.format(o.sw, r.a0, 4*i, r.s0)) - self.write_code('{} {}, 4({})'.format(o.sw, r.s0, r.s1)) + instructions = [] - #class tag - self.write_code('{} {}, {}'.format(o.la, r.a0, node.type + '_conforms_to')) - self.write_code('{} {}, 0({})'.format(o.sw, r.a0, r.s1)) + instructions.append('{} {} {}'.format(o.li, r.v0, 5)) + instructions.append('{}'.format(o.syscall)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - index = self.stack_offset(node.dest) - self.write_code('{} {}, {}({})'.format(o.sw, r.s1, index, r.fp)) + return instructions - @visitor.when(TypeOfNode) + @visitor.when(ReadStringNode) def visit(self, node): - self.write_code('# TypeOf') - index1 = self.stack_offset(node.obj) - self.write_code('{} {}, {}({})'.format(o.lw, r.s0, index1, r.fp)) - self.write_code('{} {}, 0({})'.format(o.lw, r.t1, r.s0)) - self.write_code('{} {}, 0({})'.format(o.lw, r.t2, r.t1)) - ## $t1 = typeOf - - #el valor esta en $t1 - index = self.stack_offset(node.dest) - self.write_code('{} {}, {}({})'.format(o.sw, r.t2, index, r.fp)) + instructions = [] - @visitor.when(LabelNode) - def visit(self, node): - self.write_code("# a label") - self.write_code("{}:".format(node.name)) + instructions.append('{} {}'.format(o.jal, "read_string")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - @visitor.when(IsTypeNode) - def visit(self, node): - pass + return instructions - @visitor.when(ParentTypeNode) + @visitor.when(SetAttribNode) def visit(self, node): - pass + instructions = [] - @visitor.when(StaticCallNode) - def visit(self, node): - self.write_code('# Static Call') - self.write_code('{} {}'.format(o.jal, node.function)) - pos = self.stack_offset(node.dest) - self.write_code('{} {}, {}({})'.format(o.sw, r.v0, pos, r.fp)) + tp = self._types_section[node.computed_type] + offset = (tp.attributes.index(node.attr) + 3) * 4 - @visitor.when(DynamicCallNode) + instructions.extend(self.visit(node.obj)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) + if isinstance(node.obj, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if type(node.value) == int: + instructions.append('{} {} {}'.format(o.li, r.t1, node.value)) + else: + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {}({})'.format(o.sw, r.t1, offset, r.t0)) + + return instructions + + @visitor.when(LessNode) def visit(self, node): - self.add('# Dynamic_Call') + instructions = [] + + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - _type = self.stack_offset(node.type) - method = self.functions[node.type].index(node.method) - dest = self.stack_offset(node.dest) + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.slt, r.t1, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - self.write_code('{} {}, {}({})'.format(o.lw, r.t0, _type, r.fp)) - self.write_code('{} {}, 4({})'.format(o.lw, r.a0, r.t0)) - self.write_code('{} {}, {}({})'.format(o.lw, r.a1, 4*method, r.a0)) + return instructions - self.write_code('{} {}'.format(o.jalr, r.a1)) + @visitor.when(GotoIfNode) + def visit(self, node): + instructions = [] + + mips_label = self.get_label(node.label) + instructions.extend(self.visit(node.condition)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.condition))) + if isinstance(node.condition, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {} {}'.format(o.bne, r.t0, r.zero, mips_label)) - self.write_code('{} {}, {}({})'.format(o.sw, r.v0, dest, r.fp)) - - @visitor.when(ArgNode) + return instructions + + @visitor.when(GotoNode) def visit(self, node): - self.write_code('# Arg') - self.write_code('{} {}, {}, -4'.format(o.addi, r.sp, r.sp)) + instructions = [] + + mips_label = self.get_label(node.label) + instructions.append('{} {}'.format(o.j, mips_label)) - pos = self.stack_offset(node.name) + return instructions - self.write_code('{} {}, {}({})'.format(o.lw, r.t1, pos, r.fp)) - self.write_code('{} {}, 0({})'.format(o.sw, r.t1, r.sp)) + @visitor.when(LabelNode) + def visit(self, node): + instructions = [] + + mips_label = self.get_label(node.label) + instructions.append('{}:'.format(mips_label)) + + return instructions - @visitor.when(ReturnNode) + @visitor.when(SubstringNode) def visit(self, node): - stack_ptr = self.stack_offset(node.value) - self.write_code('# ReturnNode') - self.write_code(f'{o.lw} {r.t0}, {stack_ptr}({r.fp})') # t0 <- stack pointer to the value - self.write_code(f'{o.move} {r.v0}, {r.t0}') # return the node value + instructions = [] - @visitor.when(LoadNode) + instructions.extend(self.visit(node.str_value)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.str_value))) + if isinstance(node.str_value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if type(node.index) == int: + instructions.append('{} {} {}'.format(o.li, r.a1, node.index)) + else: + instructions.extend(self.visit(node.index)) + instructions.append('{} {} {}'.format(o.lw, r.a1, self.find_var_loc(node.index))) + if isinstance(node.index, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + if type(node.index) == int: + instructions.append('{} {} {}'.format(o.li, r.a2, node.length)) + else: + instructions.extend(self.visit(node.length)) + instructions.append('{} {} {}'.format(o.lw, r.a2, self.find_var_loc(node.length))) + if isinstance(node.length, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {}'.format(o.jal, "substr")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(ConcatNode) def visit(self, node): - index = self.stack_offset(node.dest) - self.write_code('# Load') - self.write_code('{} {}, {}'.format(o.la, r.t1, node.msg.name)) - self.write_code('{} {}, {}({})'.format(o.lw, r.t2, index, r.fp)) #direccion en el heap - self.write_code('{} {}, 8({})'.format(o.sw, r.t1, r.t2)) + instructions = [] + + instructions.extend(self.visit(node.prefix)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.prefix))) + if isinstance(node.prefix, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.extend(self.visit(node.suffix)) + instructions.append('{} {} {}'.format(o.lw, r.a1, self.find_var_loc(node.suffix))) + if isinstance(node.suffix, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.extend(self.visit(node.length)) + instructions.append('{} {} {}'.format(o.lw, r.a2, self.find_var_loc(node.length))) + if isinstance(node.length, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {}'.format(o.jal, "concat")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions @visitor.when(LengthNode) def visit(self, node): - self.write_code('# LengthNode') - dest_addr = self.stack_offset(node.dest) - string_addr = self.stack_offset(node.string) - self.write_code(f'{o.lw} {r.s0}, {string_addr}({r.fp})') # loads to s0(to keep it through calls) the string address - self.write_code(f'{o.lw} {r.a0}, 8({r.s0})') - self.write_code(f'{o.jal} str_len') # jumps to str_len multi-use function, length is stores at v0 - self.write_code(f'{o.sw} {r.v0}, {dest_addr}({r.fp})') + instructions = [] + instructions.extend(self.visit(node.source)) + instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.source))) + if isinstance(node.source, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - @visitor.when(ConcatNode) + instructions.append('{} {}'.format(o.jal, "length")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(EqualNode) def visit(self, node): - self.write_code('# Concat') - str1 = self.stack_offset(node.prefix) - str2 = self.stack_offset(node.sufix) - dest = self.stack_offset(node.dest) + instructions = [] - self.write_code('{} {}, {}({})'.format(o.lw, r.s0, str1, r.fp)) - self.write_code('{} {}, 8({})'. format(o.lw, r.a0, r.s0)) + if type(node.left) == VoidNode: + instructions.append('{} {} {}'.format(o.li, r.t0, 0)) + else: + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - self.write_code('{} {}, {}({})'.format(o.lw, r.s0, str2, r.fp)) - self.write_code('{} {}, 8({})'.format(o.lw, r.a1, r.s0)) + if type(node.right) == VoidNode: + instructions.append('{} {} {}'.format(o.li, r.t1, 0)) + else: + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - self.write_code('{} str_concat'.format(o.jal)) + instructions.append('{} {} {} {}'.format(o.seq, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - #el str esta en $v0 - self.write_code('{} {}, {}({})'.format(o.sw, r.v0, dest, r.fp)) + return instructions - @visitor.when(PrefixNode) + @visitor.when(NameNode) def visit(self, node): - pass + instructions = [] - @visitor.when(SubstringNode) + instructions.append('{} {} {}'.format(o.la, r.t0, 'types_table')) + + tp_number = self._types_section[node.value].index + instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, tp_number * 4)) + instructions.append('{} {} 0({})'.format(o.lw, r.t0, r.t0)) + + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(EqualStringNode) def visit(self, node): - self.write_code('# Substring') - string = self.stack_offset(node.string) - i = self.stack_offset(node.i) - n = self.stack_offset(node.n) - dest = self.stack_offset(node.dest) - self.write_code('{} {}, {}({})'.format(o.lw, r.s0, string, r.fp)) - self.write_code('{} {}, 8({})'.format(o.lw, r.a0, r.s0)) - self.write_code('{} {}, {}({})'.format(o.lw, r.s0, i, r.fp)) - self.write_code('{} {}, 8({})'.format(o.lw, r.a1, r.s0)) - self.write_code('{} {}, {}({})'.format(o.lw, r.s0, n, r.fp)) - self.write_code('{} {}, 8({})'.format(o.lw, r.a2, r.s0)) + instructions = [] + + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t0)) - self.write_code('{} str_substring'.format(o.jal)) + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.move, r.a1, r.t0)) - #el str esta en $v0 - self.write_code('{} {}, {}({})'.format(o.sw, r.v0, dest, r.fp)) + instructions.append('{} {}'.format(o.jal, "equal_str")) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - @visitor.when(ToStrNode) + return instructions + + @visitor.when(ComplementNode) def visit(self, node): - pass + instructions = [] + + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {}'.format(o.not_bw, r.t0, r.t0)) + instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, 1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions - @visitor.when(AbortNode) + @visitor.when(LessEqualNode) def visit(self, node): - pass + instructions = [] - @visitor.when(CopyNode) + instructions.extend(self.visit(node.left)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) + if isinstance(node.left, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.extend(self.visit(node.right)) + instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) + if isinstance(node.right, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + instructions.append('{} {} {} {}'.format(o.sle, r.t0, r.t0, r.t1)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(NotNode) def visit(self, node): - pos_dest = self.stack_offset(node.dest) - pos_source = self.stack_offset(node.source) - self.add('{} {}, {}({})'.format(o.lw, r.t0, pos_source, r.sp)) - self.add('{} {}, {}({})'.format(o.sw, r.t0, pos_dest, r.sp)) - - @visitor.when(PrintStrNode) - def visit(self, node): - self.write_code('## out_string builtin') - self.write_code(f'{o.li} {r.v0}, 4') # syscall print str code, a0 = address of null-terminates string - dest_pos = self.stack_offset(node.output) - self.write_code(f'{o.lw} {r.t0}, {dest_pos}({r.fp})') - self.write_code(f'{o.lw} {r.a0}, 8({r.t0})') - self.write_code(f'{o.syscall}') # syscall with the parameters set - - @visitor.when(ReadStrNode) - def visit(self, node): - self.write_code('## in_string builtin') - self.write_code(f'{o.li} {r.v0}, 9') # syscall code for allocate mem - self.write_code(f'{o.li} {r.a0}, 1024') # buffer size in bytes to allocate - self.write_code(f'{o.syscall}') # stores in v0 address of allocated memory - - # time to set up the actual syscall for read string - self.write_code(f'{o.move} {r.a0}, {r.v0}') # a0 <- v0, a0 = address of input buffer - self.write_code(f'{o.li} {r.v0}, 8') # syscall(8) = read string - self.write_code(f'{o.la} {r.a1}, 1024') # a1 = amount to read, input should be at most n-1 bytes, since last byte is used to null-terminate the stream - self.write_code(f'{o.syscall}') # stores in a0 the data read, if any, an null terminates it - - # gotta add a null character to the input - self.write_code(f'{o.move} {r.t0}, {r.a0}') # t0 <- a0, later used for the address of the last non-null character of the stream to null-terminate it - self.write_code(f'{o.move} {r.a3}, {r.ra}') # store the return address of the current method before calling the length subroutine - self.write_code(f'{o.jal} str_len') # stores in v0 the length+1 of the string, in v1 the v0-th character of the string - self.write_code(f'{o.move} {r.ra}, {r.a3}') #restore the ra address previously saved - self.write_code(f'{o.subu} {r.v0}, {r.v0}, 1') # actual length = v0-1 - self.write_code(f'{o.addu} {r.v1}, {r.v0}, {r.t0}') # v1 = v0 + t0 = address of the last character of the input - self.write_code(f'{o.sb} $0, 0({r.v1})') # null terminate that mf - - dest_pos = self.stack_offset(node.input) - self.write_code(f'{o.move} {r.v0}, {r.t0}') # returns in v0 the address of the received string - self.write_code(f'{o.sw} {r.v0}, {dest_pos}({r.fp})') # store the result in the param variable + instructions = [] - @visitor.when(PrintIntNode) + instructions.extend(self.visit(node.value)) + instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) + if isinstance(node.value, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + instructions.append('{} {} {}'.format(o.xori, r.t0, r.t0)) + instructions.extend(self.visit(node.dest)) + instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) + if isinstance(node.dest, AttributeNode): + instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) + + return instructions + + @visitor.when(VarNode) def visit(self, node): - self.write_code('## out_int builtin') - self.write_code(f'{o.li} {r.v0}, 1') # syscall print str code, a0 = address of null-terminates string - dest_pos = self.stack_offset(node.output) - self.write_code(f'{o.lw} {r.t0}, {dest_pos}({r.fp})') - self.write_code(f'{o.lw} {r.a0}, 8({r.t0})') - self.write_code(f'{o.syscall}') # syscall with the parameters set + return [] - @visitor.when(ReadIntNode) + @visitor.when(ParamNode) + def visit(self, node): + return [] + + @visitor.when(AttributeNode) def visit(self, node): - self.write_code('## out_int builtin') - self.write_code(f'{o.li} {r.v0}, 5') # syscall read int code, result stored in v0 - self.write_code(f'{o.syscall}') - - dest_pos = self.stack_offset(node.input) - self.write_code(f'{o.move} {r.t0}, {r.v0}') - self.write_code(f'{o.sw} {r.t0}, {dest_pos}({r.fp})') # stores the result to the corresponding stack value - -# Input espacio a reservar en $a0 -# Output direccion de memoria reservada en $a0 - def mem_alloc(self): - self.write_code(f"# Declartation of the mem_alloc") - - self.write_code(f"mem_alloc:") - self.write_code(f"{o.add} {r.gp} {r.gp} {r.a0}") - self.write_code(f"{o.blt} {r.gp} {r.s7} mem_alloc_end")# si se pasa del límite de memoria dar error - self.write_code(f"{o.j} mem_error") - self.write_code(f"mem_alloc_end:") - self.write_code(f"{o.sub} {r.a0} {r.gp} {r.a0}") - self.write_code(f"{o.jr} {r.ra}") - self.write_code(f"") - -# en a0 tengo el la instancia - def get_parent_prot(self): - self.write_code(f"# get parent prototype") # - self.write_code(f"get_parent_prot:") - self.write_code(f"{o.lw} {r.t0} ({r.a0})") - self.write_code(f"{o.sll} {r.t0} {r.t0} 2")# mult por 4 pa tener el offset - self.write_code(f"{o.lw} {r.t0} ({r.s4})") - self.write_code(f"{o.move} {r.a0} {r.t0}") - self.write_code(f"{o.jr} {r.ra}") - self.write_code(f"") - -# funciones para errores en runtime - def zero_error(self): # error al dividir por 0 - self.write_code(f"# Declartation of the zero-div runtime error") - - self.write_code(f"zero_error:") - self.write_code(f"{o.la} {r.a0} _zero") - self.write_code(f"") - - self.write_code(f"{o.li} {r.v0} 4") - self.write_code(f"{o.syscall}") - self.write_code(f"{o.li} {r.v0} 10") - self.write_code(f"{o.syscall}") - self.write_code(f"") - - def substr_error(self): - self.write_code(f"# Declartation of the substr-index.out.of.range runtime error") - - self.write_code(f"substr_error:") - self.write_code(f"{o.la} {r.a0} _substr") - self.write_code(f"") - - self.write_code(f"{o.li} {r.v0} 4") - self.write_code(f"{o.syscall}") - self.write_code(f"{o.li} {r.v0} 10") - self.write_code(f"{o.syscall}") - self.write_code(f"") + instructions = [] + + self_var = self._current_function.params[0] + instructions.append('{} {} {}'.format(o.lw, r.t4, self.find_var_loc(self_var))) + + index = self._types_section[node.type].attributes.index(node.name) + 3 + instructions.append('{} {} {}({})'.format(o.lw, r.t4, index * 4, r.t4)) + instructions.extend(self.push_register(r.t4)) + + return instructions + + + def allocate(self): + instructions = [] + + instructions.append('{}:'.format('allocate')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -12)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) + instructions.append('{} {} {}'.format(o.li, r.t0, 4)) + instructions.append('{} {} {}'.format(o.div, r.a0, r.t0)) + instructions.append('{} {}'.format(o.mfhi, r.t1)) + instructions.append('{} {} {} {}'.format(o.sub, r.t0, r.t0, r.t1)) + instructions.append('{} {} {} {}'.format(o.add, r.a0, r.a0, r.t0)) + instructions.append('{} {} {}'.format(o.li, r.v0, 9)) + instructions.append('{}'.format(o.syscall)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 12)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def copy(self): + instructions = [] + + instructions.append('{}:'.format('copy')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -16)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 12, r.sp)) + instructions.append('{}:'.format('while_copy')) + instructions.append('{} {} {} {}'.format(o.beq, r.a2, r.zero, 'copy_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.a0)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.a1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a0, 4)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a1, r.a1, 4)) + instructions.append('{} {} {} {}'.format(o.addi, r.a2, r.a2, -4)) + instructions.append('{} {}'.format(o.j, 'while_copy')) + instructions.append('{}:'.format('copy_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 12, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 16)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def length(self): + instructions = [] + + instructions.append('{}:'.format('length')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -8)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) + instructions.append('{}:'.format('while_len')) + instructions.append('{} {} {}({})'.format(o.lb, r.t1, 0, r.t0)) + instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.zero, 'len_end')) + instructions.append('{} {} {} {}'.format(o.addi, r.v0, r.v0, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {}'.format(o.j, 'while_len')) + instructions.append('{}:'.format('len_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 8)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def substring(self): + instructions = [] + + instructions.append('{}:'.format('substr')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -32)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t3, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a2, 24, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 28, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {} {}'.format(o.add, r.t0, r.t0, r.a1)) + instructions.append('{} {} {}'.format(o.li, r.t1, 4)) + instructions.append('{} {} {}'.format(o.div, r.a2, r.t1)) + instructions.append('{} {}'.format(o.mfhi, r.t2)) + instructions.append('{} {} {} {}'.format(o.bne, r.t2, r.zero, 'substr_allign_size')) + instructions.append('{} {} {}'.format(o.move, r.t1, r.a2)) + instructions.append('{} {}'.format(o.j, 'substr_new_chunk')) + instructions.append('{}:'.format('substr_allign_size')) + instructions.append('{} {} {} {}'.format(o.sub, r.t1, r.t1, r.t2)) + instructions.append('{} {} {} {}'.format(o.add, r.t1, r.t1, r.a2)) + instructions.append('{}:'.format('substr_new_chunk')) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t1)) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.t3, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.zero)) + instructions.append('{}:'.format('while_substr_copy')) + instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.a2, 'substr_end')) + instructions.append('{} {} {}({})'.format(o.lb, r.t2, 0, r.t0)) + instructions.append('{} {} {}({})'.format(o.sb, r.t2, 0, r.t3)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t3, r.t3, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t1, r.t1, 1)) + instructions.append('{} {}'.format(o.j, 'while_substr_copy')) + instructions.append('{}:'.format('substr_end')) + instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t3)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t3, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a2, 24, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 28, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 32)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions - def mem_error(self): - self.write_code(f"# Declartation of the memory-overflow runtime error") - self.write_code(f"mem_error:") - self.write_code(f"{o.la} {r.a0} _mem") - self.write_code(f"") - - self.write_code(f"{o.li} {r.v0} 4") - self.write_code(f"{o.syscall}") - self.write_code(f"{o.li} {r.v0} 10") - self.write_code(f"{o.syscall}") - self.write_code(f"") - - - def utils_functs(self): - self.mem_alloc() - self.get_parent_prot() - self.object_copy() - self.str_eq() - self.str_concat() - self.str_substr() - self.length() - self.zero_error() - self.mem_error() - self.substr_error() \ No newline at end of file + def concat(self): + instructions = [] + + instructions.append('{}:'.format('concat')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -24)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 20, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.a1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a2, 1)) + instructions.append('{} {} {}'.format(o.li, r.t2, 4)) + instructions.append('{} {} {}'.format(o.div, r.a0, r.t2)) + instructions.append('{} {}'.format(o.mfhi, r.a0)) + instructions.append('{} {} {} {}'.format(o.bne, r.a0, r.zero, 'concat_allign_size')) + instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a2, 1)) + instructions.append('{} {}'.format(o.j, 'concat_size_allignned')) + instructions.append('{}:'.format('concat_allign_size')) + instructions.append('{} {} {} {}'.format(o.sub, r.t2, r.t2, r.a0)) + instructions.append('{} {} {} {}'.format(o.add, r.a0, r.a2, r.t2)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a0, 1)) + instructions.append('{}:'.format('concat_size_allignned')) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.t2, r.v0)) + instructions.append('{} {}'.format(o.j, 'first_while_concat_copy')) + instructions.append('{}:'.format('first_while_concat_copy')) + instructions.append('{} {} {}({})'.format(o.lb, r.a0, 0, r.t0)) + instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'second_while_concat_copy')) + instructions.append('{} {} {}({})'.format(o.sb, r.a0, 0, r.t2)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t2, r.t2, 1)) + instructions.append('{} {}'.format(o.j, 'first_while_concat_copy')) + instructions.append('{}:'.format('second_while_concat_copy')) + instructions.append('{} {} {}({})'.format(o.lb, r.a0, 0, r.t1)) + instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'concat_end')) + instructions.append('{} {} {}({})'.format(o.sb, r.a0, 0, r.t2)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t1, r.t1, 1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.t2, r.t2, 1)) + instructions.append('{} {}'.format(o.j, 'second_while_concat_copy')) + instructions.append('{}:'.format('concat_end')) + instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t2)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 20, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 24)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def read_string(self): + instructions = [] + + instructions.append('{}:'.format('read_string')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -28)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a2, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 24, r.sp)) + instructions.append('{} {} {}'.format(o.li, r.t0, 8)) + instructions.append('{} {} {} {}'.format(o.addi, r.a0, r.t0, 4)) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.t1, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.t2, r.zero)) + instructions.append('{}:'.format('while_read_string')) + instructions.append('{} {} {} {}'.format(o.addu, r.a0, r.t1, r.t2)) + instructions.append('{} {} {} {}'.format(o.subu, r.a1, r.t0, r.t2)) + instructions.append('{} {} {} {}'.format(o.addu, r.t2, r.t2, r.a1)) + instructions.append('{} {}'.format(o.jal, 'read_string_up_to')) + instructions.append('{} {} {} {}'.format(o.beq, r.v0, r.zero, 'read_string_not_finished')) + instructions.append('{} {} {}'.format(o.move, r.v0, r.t1)) + instructions.append('{} {}'.format(o.j, 'end_read_string')) + instructions.append('{}:'.format('read_string_not_finished')) + instructions.append('{} {} {} {}'.format(o.sll, r.t0, r.t0, 1)) + instructions.append('{} {} {} {}'.format(o.addi, r.a0, r.t0, 4)) + instructions.append('{} {}'.format(o.jal, 'allocate')) + instructions.append('{} {} {}'.format(o.move, r.a0, r.t1)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.a1, r.v0)) + instructions.append('{} {} {}'.format(o.move, r.a2, r.t2)) + instructions.append('{} {}'.format(o.jal, 'copy')) + instructions.append('{} {}'.format(o.j, 'while_read_string')) + instructions.append('{}:'.format('end_read_string')) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a2, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 24, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 28)) + instructions.append('{} {}'.format(o.jr, r.ra)) + instructions.append('{}:'.format('read_string_up_to')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -28)) + instructions.append('{} {} {}({})'.format(o.sw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t3, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t4, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t5, 24, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.zero)) + instructions.append('{} {} {}'.format(o.li, r.t2, 10)) + instructions.append('{} {} {} {}'.format(o.addu, r.t3, r.t0, r.a1)) + instructions.append('{} {} {} {}'.format(o.addiu, r.a1, r.a1, 1)) + instructions.append('{} {} {}'.format(o.li, r.v0, 8)) + instructions.append('{}'.format(o.syscall)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.a0)) + instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'eol_terminated')) + instructions.append('{} {} {}'.format(o.li, r.v0, 0)) + instructions.append('{}:'.format('eol_check')) + instructions.append('{} {} {} {}'.format(o.beq, r.t0, r.t3, 'read_loop_continue')) + instructions.append('{} {} {}({})'.format(o.lb, r.t1, 0, r.t0)) + instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.t2, 'eol_terminated')) + instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) + instructions.append('{} {}'.format(o.j, 'eol_check')) + instructions.append('{}:'.format('eol_terminated')) + instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t0)) + instructions.append('{} {} {}'.format(o.li, r.v0, 1)) + instructions.append('{}:'.format('read_loop_continue')) + instructions.append('{} {} {}({})'.format(o.lw, r.ra, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t3, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t4, 20, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t5, 24, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 28)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def string_equals(self): + instructions = [] + + instructions.append('{}:'.format('equal_str')) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -24)) + instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a0, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.a1, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t2, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.sw, r.t3, 20, r.sp)) + instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) + instructions.append('{} {} {}'.format(o.move, r.t1, r.a1)) + instructions.append('{}:'.format('while_equal_str')) + instructions.append('{} {} {}({})'.format(o.lb, r.t2, 0, r.t0)) + instructions.append('{} {} {}({})'.format(o.lb, r.t3, 0, r.t1)) + instructions.append('{} {} {} {}'.format(o.bne, r.t2, r.t3, 'equal_str_different_strings')) + instructions.append('{} {} {} {}'.format(o.beq, r.t2, r.zero, 'first_end_equal_str')) + instructions.append('{} {} {} {}'.format(o.beq, r.t3, r.zero, 'second_end_equal_str')) + instructions.append('{} {} {} {}'.format(o.addi, r.t1, r.t1, 1)) + instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, 1)) + instructions.append('{} {}'.format(o.j, 'while_equal_str')) + instructions.append('{}:'.format('equal_str_different_strings')) + instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) + instructions.append('{} {}'.format(o.j, 'equal_str_end')) + instructions.append('{}:'.format('first_end_equal_str')) + instructions.append('{} {} {} {}'.format(o.beq, r.t3, r.zero, 'second_end_equal_str')) + instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) + instructions.append('{} {}'.format(o.j, 'equal_str_end')) + instructions.append('{}:'.format('second_end_equal_str')) + instructions.append('{} {} {}'.format(o.li, r.v0, 1)) + instructions.append('{}:'.format('equal_str_end')) + instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a0, 8, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.a1, 12, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t2, 16, r.sp)) + instructions.append('{} {} {}({})'.format(o.lw, r.t3, 20, r.sp)) + instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 24)) + instructions.append('{} {}'.format(o.jr, r.ra)) + + return instructions + + def define_util_functions(self): + # instructions = [self.allocate(), self.copy(), self.length(), self.substring(), self.concat(), self.read_string(), self.string_equals()] + instructions = [self.allocate(), self.copy(), self.length(), self.concat(), self.substring(), self.string_equals(), self.read_string()] + + code = '\n\n'.join('\n'.join(i for i in j) for j in instructions) + return code + diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index cefb57c7d..2b4399b08 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -89,12 +89,15 @@ def create_ctr(self, class_node, scope): break self.current_function = self.register_function(self.to_function_name('ctor', self.current_type.name)) local_self = self.define_internal_local('self') - self.register_instruction(cil.AllocateNode(self.current_type.name, local_self)) - + allocate = cil.AllocateNode(self.current_type.name, local_self) + # self.localvars.append(local_self) + for i, attr in enumerate(attrs): - set_attr_node = self.visit(attr, scope) - set_attr_node.index = i - self.register_instruction(set_attr_node) + attr_value = self.visit(attr, scope) + # set_attr_node.index = i + self.register_instruction(cil.SetAttribNode(local_self, i, attr_value)) + # self.register_instruction(set_attr_node) + self.instructions.insert(0, allocate) self.register_instruction(cil.ReturnNode(local_self)) @@ -264,10 +267,11 @@ def visit(self, node, scope): instance = vinfo.name self.instances.append(instance) + # self.register_instruction(cil.AllocateNode('Main', instance)) + self.register_instruction(cil.StaticCallNode('function_ctor_at_Main', instance)) + self.register_instruction(cil.ArgNode(instance)) result = self.define_internal_local() main_method_name = self.to_function_name('main', 'Main') - self.register_instruction(cil.AllocateNode('Main', instance)) - self.register_instruction(cil.ArgNode(instance)) self.register_instruction(cil.StaticCallNode(main_method_name, result)) self.register_instruction(cil.ExitNode()) self.current_function = None @@ -357,27 +361,70 @@ def visit(self, node, scope): # node.value = ExpressionNode ############################### # local function to determine the default value of an attribute given its type - def default_value_init(type): - if type == 'Int': - return ConstantNumNode(0) - elif type == 'Bool': - return FalseNode() - elif type == 'String': - return StringNode("") - else: - return VoidNode('void') + instance = self.define_internal_local() + if node.value: value = self.visit(node.value, scope) - + copy = cil.CopyNode(instance, value) + self.register_instruction(copy) else: - default_value = default_value_init(node.type) - if isinstance(default_value, VoidNode): - value = 'void' - else: - value = self.visit(default_value, scope) - self_ref = VariableInfo('self', self.current_type) - self_ref.index = 0 - return cil.SetAttribNode(self_ref, node.id, value) + if node.type == 'Int' or node.type == 'Bool': + setattrb = cil.SetAttribNode(instance, 0, 0) + self.instructions.insert(0, setattrb) + elif node.type == 'String': + string_name = self.define_internal_local() + alloc = cil.AllocateNode('String', string_name) + load = cil.LoadNode(instance, string_name) + allocate = cil.CopyNode(instance, string_name) + self.register_instruction(alloc) + self.register_instruction(load) + self.register_instruction(allocate) + # hacer un load + a = 0 + # self.localvars.append(instance) + # allocate = cil.AllocateNode(node.type, instance) + # self.register_instruction(allocate) + return instance + + # def default_value_init(type): + # if type == 'Int': + # default_inst = self.define_internal_local() + # self.register_instruction(cil.AllocateNode('Int', default_inst)) + # return default_inst + # elif type == 'Bool': + # default_inst = self.define_internal_local() + # self.register_instruction(cil.AllocateNode('Bool', default_inst)) + # return default_inst + # elif type == 'String': + # default_inst = self.define_internal_local() + # self.register_instruction(cil.AllocateNode('String', default_inst)) + # return default_inst + # else: + # default_inst = self.define_internal_local() + # self.register_instruction(cil.AllocateNode('void', default_inst)) + # return default_inst + # # index = None + # # for i, attr in enumerate(self.current_type.attributes): + # # if attr.name == node.id: + # # index = i + # if node.value: + # value = self.visit(node.value, scope) + # return value + # else: + # default_value = default_value_init(node.type) + # # if isinstance(default_value, VoidNode): + # # value = 'void' + # # else: + # # value = self.visit(default_value, scope) + # return default_value + # self_ref = VariableInfo('self', self.current_type) + # self_ref.index = 0 + # a = self.current_type.attributes + # for item in a: + # print(type(item)) + # c = item + # print(type(self.current_type.attributes)) + # index = self.current_type.attributes.index(node.id) ## old code # elif node.type in ["Int", "String", "Object", "IO", "Bool"]: @@ -402,7 +449,7 @@ def visit(self, node, scope): # if self.current_type.name in self.builtin_types: # return self.current_function = self.current_type.get_method(node.id, self.current_type, False) - + self.current_method = node.id # Your code here!!! (Handle PARAMS) self.current_function = self.register_function(self.to_function_name(node.id, self.current_type.name)) @@ -424,6 +471,7 @@ def visit(self, node, scope): self.register_instruction(cil.ReturnNode(result)) self.current_function = None + self.current_method = None @visitor.when(VarDeclarationNode) # AssignNode def visit(self, node, scope): @@ -482,7 +530,7 @@ def visit(self, node, scope): # node.method -> str # node.args -> [ ExpressionNode ... ] ############################### - error_label = self.define_internal_local() + # error_label = self.define_internal_local() dest = self.define_internal_local() if node.obj is not None and node.obj.lex != 'self': # dynamic obj = self.visit(node.obj, scope) @@ -495,9 +543,9 @@ def visit(self, node, scope): local = self.define_internal_local() self.register_instruction(cil.TypeOfNode(obj, local)) - condition = self.define_internal_local() - self.register_instruction(cil.IsTypeNode(condition, local, "Void")) - self.register_instruction(cil.GotoIfNode(error_label, condition)) + # condition = self.define_internal_local() + # self.register_instruction(cil.IsTypeNode(condition, local, "Void")) + # self.register_instruction(cil.GotoIfNode(error_label, condition)) self.register_instruction(cil.ArgNode(obj)) for arg in node.args: @@ -506,12 +554,13 @@ def visit(self, node, scope): obj_type = obj_type if node.parent == None else node.parent self.register_instruction(cil.DynamicCallNode(local, self.to_function_name(node.method, obj_type), dest)) self.instances.pop() - self.register_instruction(cil.LabelNode(error_label)) + # self.register_instruction(cil.LabelNode(error_label)) else: # static - self.register_instruction(cil.ArgNode(self.instances[-1])) + args = [] for arg in node.args: - self.register_instruction(cil.ArgNode(self.visit(arg, scope))) - + args.append(self.visit(arg, scope)) + self.register_instruction(cil.ArgNode(self.instances[-1])) + for arg in args: self.register_instruction(cil.ArgNode(arg)) fname = self.get_function_name(self.current_type.name, node.method, self.dottypes[-1].methods, True) self.register_instruction(cil.StaticCallNode(fname , dest)) @@ -549,6 +598,17 @@ def visit(self, node, scope): ############################### # node.lex -> str ############################### + if node.lex == self.instances[-1]: + return self.instances[-1] + n = len(self.localvars)-1 + for i in range(n, -1, -1): + local_id = self.localvars[i].name + if local_id == node.lex: + return local_id + if self.current_method: + for arg in self.current_function.params: + if arg.name == node.lex: + return arg.name var = self.define_internal_local() if node.lex in self.locals: var_aux = self.locals[node.lex].name @@ -737,7 +797,7 @@ def visit(self, node, scope): zero = self.define_internal_local() self.register_instruction(cil.AllocateNode("Int", zero)) self.register_instruction(cil.MinusNode(var, zero, value)) - self.regster_instruction(cil.SetAttribNode(value, 0, var)) + self.register_instruction(cil.SetAttribNode(value, 0, var)) return value @visitor.when(SwitchCaseNode) @@ -813,10 +873,11 @@ def visit(self, node, scope): def visit(self, node, scope): data_node = self.register_data(node.lex) var = self.define_internal_local() - data_node.name = var - self.register_instruction(cil.AllocateNode('String', var)) - self.register_instruction(cil.LoadNode(var, data_node)) - return data_node.name + # data_node.name = var + self.instructions.insert(0, cil.LoadNode(var, data_node)) + self.instructions.insert(0, cil.AllocateNode('String', var)) + # self.localvars.append(var) + return var @visitor.when(LessNode) def visit(self, node, scope): From f18de3bc4df16a5ee37914523a14ab403d10f44c Mon Sep 17 00:00:00 2001 From: regnod Date: Sun, 27 Feb 2022 21:16:28 -0500 Subject: [PATCH 78/93] changes --- .vscode/settings.json | 4 + out | 641 ++++++++++++++++++++--------------------- tests/codegen/basic.cl | 21 +- 3 files changed, 322 insertions(+), 344 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 2e6d987cc..f0a500c65 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,8 +14,12 @@ "dividir", "dparents", "funciones", + "heeerreeee", + "heerrrre", + "Inmediate", "límite", "mult", + "proto", "pusieron", "reservada", "reservar", diff --git a/out b/out index cab118518..60b1a29e2 100644 --- a/out +++ b/out @@ -14,319 +14,28 @@ IO_conforms_to: .word IO_class_name, Object_class_name Int_conforms_to: .word Int_class_name, Object_class_name Bool_conforms_to: .word Bool_class_name, Object_class_name Main_conforms_to: .word Main_class_name, IO_class_name, Object_class_name -local_main_at_Main_internal_2: .asciiz "Hello world" +data_0: .asciiz "Hello, World.\n" .text .globl main - - str_len: - li $v0,0 - move $v1, $a0 - __lenLoop: - lbu $t1, 0($v1) - beq $t1,$0,__lenExit - addu $v0,$v0,1 - addu $v1,$v1,1 - b __lenLoop - __lenExit: - jr $ra - - str_copy: - lw $a0, -4($fp) - lw $a1, -8($fp) - lw $a2, -12($fp) - - move $v0, $a0 - - str__while_copy: - beqz $a2, str__end_copy - - xor $t0, $t0, $t0 - lb $t0, 0($a1) - sb $t0, 0($a0) - - subu $a2, $a2,1 - addu $a0, $a0,1 - addu $a1, $a1,1 - j str__while_copy - - str__end_copy: - jr $ra - - str_index_error: - li $v0, 4 - la $a0, range_error - syscall - li $v0, 10 - syscall - jr $ra - - str_substring: - # load arguments - move $t5, $a0 - move $t3, $a1 - li $t4, 0 - move $t2, $a2 - - # check for index out of range - move $a3, $ra - jal str_len - move $ra, $a3 - - addu $t6, $t3, $t2 - bgt $t6, $v0, str_index_error - - # create substring - move $a0, $t2 #length - addu $a0, $a0, 1 - li $v0, 9 #make space - syscall - # tenemos en $v0 la direccion del nuevo string - - addu $t5, $t5, $t3 - - subu $sp, $sp, 4 - sw $ra, 0($sp) - subu $sp, $sp, 4 - sw $fp, 0($sp) - move $fp,$sp - subu $sp, $sp, 4 - sw $v0, 0($sp) - subu $sp, $sp, 4 - sw $t5, 0($sp) - subu $sp, $sp, 4 - sw $t2, 0($sp) - - jal str_copy - move $sp,$fp - - lw $fp, 0($sp) - addi $sp,$sp, 4 - - lw $ra, 0($sp) - addi $sp,$sp, 4 - - addu $t9, $v0, $t2 #null terminated - sb $0, 0($t9) - jr $ra - - - #$a0 el prefijo, y en $a1, el str. - - str1_prefix_of_str2: - lb $t0, 0($a0) - lb $t1, 0($a1) - beqz $t0, prefixTrue - bne $t0, $t1, prefixFalse - addu $a0,$a0,1 - addu $a1,$a1,1 - b str1_prefix_of_str2 - prefixFalse: - li $v0, 0 - jr $ra - prefixTrue: - li $v0, 1 - jr $ra - - str_comparer: - move $a0, $a2 - move $a1, $ra - jal str_len #$v0=len(message1) - move $ra, $a1 - - move $s1, $v0 - - move $a0, $a3 - - move $a1, $ra - jal str_len #$v0=len(message2) - move $ra, $a1 - - beq $v0, $s1, string_length_comparer_end - li $v0, 0 - j string_comparer_end - - string_length_comparer_end: - move $a0, $a2 - move $a1, $a3 - move $s1, $ra - jal str1_prefix_of_str2 - move $ra, $s1 - string_comparer_end: - jr $ra - - case_conform: - move $s0, $a0 - move $s1, $a1 - START_CASE_LOOP: - - lw $a1, 0($s0) - - addi $s0, $s0, 4 - - move $t0, $s1 # Address of 1st element in array. - li $v0, 4 # System call code 4 (print_string). - li $t1, 0 # Initialize array offset. - - loop_INTERNAL: - - # Use the address mode label(register). - - lw $a0, 0($t0) # Load value at address str_array + $t1 (offset). - - beq $a0, $a1, END_CASE_LOOP - - addi $t0, $t0, 4 # Next element, i.e., increment offset by 4. - addi $t1, $t1, 4 # Next element, i.e., increment offset by 4. - - # Done or loop once more? - - ble $t1, $a2, loop_INTERNAL - b START_CASE_LOOP - END_CASE_LOOP: - move $v0, $a0 - jr $ra - - str_concat: - move $a3, $ra - jal str_len - move $ra, $a3 - - # guardamos en $t4, la longitud de str1 - move $t4, $v0 - # el str1 - move $t5, $a0 - move $a0, $a1 - move $t8, $a1 - - move $a3, $ra - jal str_len - move $ra, $a3 - - # reservamos espacio para el nuevo string - # guardamos en $t7 la longitud de str2 - move $t7, $v0 - addu $v0, $t4, $v0 - addu $v0, $v0, 1 - move $a0, $v0 - li $v0, 9 - syscall - - # en $t5 esta str1, y en $t8, str2------------------------- - - # save str1 part------------------------------------------ - # push $ra - subu $sp, $sp, 4 - sw $ra, 0($sp) - # push $fp - subu $sp, $sp, 4 - sw $fp, 0($sp) - - move $fp, $sp - - # push dest to copy pointer - subu $sp, $sp, 4 - sw $v0, 0($sp) - - # push copy from - subu $sp, $sp, 4 - sw $t5, 0($sp) - - # push how much to copy - subu $sp, $sp, 4 - sw $t4, 0($sp) - - jal str_copy - - move $sp, $fp - - lw $fp, 0($sp) - addu $sp, $sp, 4 - - lw $ra, 0($sp) - addu $sp, $sp, 4 - - # save str2 part------------- - # push $ra - subu $sp, $sp, 4 - sw $ra, 0($sp) - - # push $fp - subu $sp, $sp, 4 - sw $fp, 0($sp) - - move $fp, $sp - - # push where to copy - move $t9, $v0 - addu $t0, $v0, $t4 - subu $sp, $sp, 4 - sw $t0, 0($sp) - - # push copy from - subu $sp, $sp, 4 - sw $t8, 0($sp) - - subu $sp, $sp, 4 - sw $t7, 0($sp) - - jal str_copy - - move $sp, $fp - - lw $fp, 0($sp) - addu $sp, $sp, 4 - - lw $ra, 0($sp) - addu $sp, $sp, 4 - - addu $v0, $t7, $v0 - sb $0, 0($v0) - - move $v0, $t9 - jr $ra - main: addi $sp, $sp, -8 addi $sp, $sp, -8 sw $ra, 4($sp) # save $ra sw $fp, 0($sp) # save $fp addi $fp, $sp, 12 -# Allocate -addiu $a0, $zero, 8 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 32 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_in_string_at_IO -sw $a0, 12($s0) -la $a0, function_out_string_at_IO -sw $a0, 16($s0) -la $a0, function_in_int_at_IO -sw $a0, 20($s0) -la $a0, function_out_int_at_IO -sw $a0, 24($s0) -la $a0, function_main_at_Main -sw $a0, 28($s0) -sw $s0, 4($s1) -la $a0, Main_conforms_to -sw $a0, 0($s1) -sw $s1, 0($fp) +# Static Call +jal function_ctor_at_Main +sw $v0, 0($fp) # Arg addi $sp, $sp, -4 lw $t1, 0($fp) sw $t1, 0($sp) -# Call +# Static Call jal function_main_at_Main sw $v0, -4($fp) +# Exit +li $v0, 10 +syscall lw $ra, 4($sp) # restore $ra lw $t1, 0($sp) addi $sp, $fp, 4 @@ -687,13 +396,13 @@ addi $sp, $fp, 4 move $fp, $t1 # restore $fp jr $ra function_ctor_at_Main: -addi $sp, $sp, -4 +addi $sp, $sp, -12 addi $sp, $sp, -8 sw $ra, 4($sp) # save $ra sw $fp, 0($sp) # save $fp -addi $fp, $sp, 8 +addi $fp, $sp, 16 # Allocate -addiu $a0, $zero, 8 +addiu $a0, $zero, 12 li $v0, 9 syscall addu $s1, $zero, $v0 @@ -721,24 +430,6 @@ sw $s0, 4($s1) la $a0, Main_conforms_to sw $a0, 0($s1) sw $s1, 0($fp) -# ReturnNode -lw $t0, 0($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_main_at_Main: -addi $sp, $sp, -12 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 20 -# Arg -addi $sp, $sp, -4 -lw $t1, 0($fp) -sw $t1, 0($sp) # Allocate addiu $a0, $zero, 12 li $v0, 9 @@ -763,23 +454,319 @@ sw $a0, 20($s0) sw $s0, 4($s1) la $a0, String_conforms_to sw $a0, 0($s1) -sw $s1, -12($fp) +sw $s1, -8($fp) # Load -la $t1, local_main_at_Main_internal_2 -lw $t2, -12($fp) +la $t1, data_0 +lw $t2, -8($fp) sw $t1, 8($t2) +lw $t0, -8($sp) +sw $t0, -4($sp) +# SetAttrib +lw $s1, 0($fp) +lw $s0, -4($fp) +sw $s0, 8($s1) +# ReturnNode +lw $t0, 0($fp) +move $v0, $t0 +lw $ra, 4($sp) # restore $ra +lw $t1, 0($sp) +addi $sp, $fp, 4 +move $fp, $t1 # restore $fp +jr $ra +function_main_at_Main: +addi $sp, $sp, -8 +addi $sp, $sp, -8 +sw $ra, 4($sp) # save $ra +sw $fp, 0($sp) # save $fp +addi $fp, $sp, 16 +# GetAttrib +lw $s1, 0($fp) +lw $s0, 8($s1) +sw $s0, -8($fp) +# Arg +addi $sp, $sp, -4 +lw $t1, 0($fp) +sw $t1, 0($sp) # Arg addi $sp, $sp, -4 -lw $t1, -12($fp) +lw $t1, -8($fp) sw $t1, 0($sp) -# Call +# Static Call jal function_out_string_at_IO -sw $v0, -8($fp) +sw $v0, -4($fp) # ReturnNode -lw $t0, -8($fp) +lw $t0, -4($fp) move $v0, $t0 lw $ra, 4($sp) # restore $ra lw $t1, 0($sp) addi $sp, $fp, 4 move $fp, $t1 # restore $fp jr $ra + + str_len: + li $v0,0 + move $v1, $a0 + __lenLoop: + lbu $t1, 0($v1) + beq $t1,$0,__lenExit + addu $v0,$v0,1 + addu $v1,$v1,1 + b __lenLoop + __lenExit: + jr $ra + + str_copy: + lw $a0, -4($fp) + lw $a1, -8($fp) + lw $a2, -12($fp) + + move $v0, $a0 + + str__while_copy: + beqz $a2, str__end_copy + + xor $t0, $t0, $t0 + lb $t0, 0($a1) + sb $t0, 0($a0) + + subu $a2, $a2,1 + addu $a0, $a0,1 + addu $a1, $a1,1 + j str__while_copy + + str__end_copy: + jr $ra + + str_index_error: + li $v0, 4 + la $a0, range_error + syscall + li $v0, 10 + syscall + jr $ra + + str_substring: + # load arguments + move $t5, $a0 + move $t3, $a1 + li $t4, 0 + move $t2, $a2 + + # check for index out of range + move $a3, $ra + jal str_len + move $ra, $a3 + + addu $t6, $t3, $t2 + bgt $t6, $v0, str_index_error + + # create substring + move $a0, $t2 #length + addu $a0, $a0, 1 + li $v0, 9 #make space + syscall + # tenemos en $v0 la direccion del nuevo string + + addu $t5, $t5, $t3 + + subu $sp, $sp, 4 + sw $ra, 0($sp) + subu $sp, $sp, 4 + sw $fp, 0($sp) + move $fp,$sp + subu $sp, $sp, 4 + sw $v0, 0($sp) + subu $sp, $sp, 4 + sw $t5, 0($sp) + subu $sp, $sp, 4 + sw $t2, 0($sp) + + jal str_copy + move $sp,$fp + + lw $fp, 0($sp) + addi $sp,$sp, 4 + + lw $ra, 0($sp) + addi $sp,$sp, 4 + + addu $t9, $v0, $t2 #null terminated + sb $0, 0($t9) + jr $ra + + + #$a0 el prefijo, y en $a1, el str. + + str1_prefix_of_str2: + lb $t0, 0($a0) + lb $t1, 0($a1) + beqz $t0, prefixTrue + bne $t0, $t1, prefixFalse + addu $a0,$a0,1 + addu $a1,$a1,1 + b str1_prefix_of_str2 + prefixFalse: + li $v0, 0 + jr $ra + prefixTrue: + li $v0, 1 + jr $ra + + str_comparer: + move $a0, $a2 + move $a1, $ra + jal str_len #$v0=len(message1) + move $ra, $a1 + + move $s1, $v0 + + move $a0, $a3 + + move $a1, $ra + jal str_len #$v0=len(message2) + move $ra, $a1 + + beq $v0, $s1, string_length_comparer_end + li $v0, 0 + j string_comparer_end + + string_length_comparer_end: + move $a0, $a2 + move $a1, $a3 + move $s1, $ra + jal str1_prefix_of_str2 + move $ra, $s1 + string_comparer_end: + jr $ra + + case_conform: + move $s0, $a0 + move $s1, $a1 + START_CASE_LOOP: + + lw $a1, 0($s0) + + addi $s0, $s0, 4 + + move $t0, $s1 # Address of 1st element in array. + li $v0, 4 # System call code 4 (print_string). + li $t1, 0 # Initialize array offset. + + loop_INTERNAL: + + # Use the address mode label(register). + + lw $a0, 0($t0) # Load value at address str_array + $t1 (offset). + + beq $a0, $a1, END_CASE_LOOP + + addi $t0, $t0, 4 # Next element, i.e., increment offset by 4. + addi $t1, $t1, 4 # Next element, i.e., increment offset by 4. + + # Done or loop once more? + + ble $t1, $a2, loop_INTERNAL + b START_CASE_LOOP + END_CASE_LOOP: + move $v0, $a0 + jr $ra + + str_concat: + move $a3, $ra + jal str_len + move $ra, $a3 + + # guardamos en $t4, la longitud de str1 + move $t4, $v0 + # el str1 + move $t5, $a0 + move $a0, $a1 + move $t8, $a1 + + move $a3, $ra + jal str_len + move $ra, $a3 + + # reservamos espacio para el nuevo string + # guardamos en $t7 la longitud de str2 + move $t7, $v0 + addu $v0, $t4, $v0 + addu $v0, $v0, 1 + move $a0, $v0 + li $v0, 9 + syscall + + # en $t5 esta str1, y en $t8, str2------------------------- + + # save str1 part------------------------------------------ + # push $ra + subu $sp, $sp, 4 + sw $ra, 0($sp) + # push $fp + subu $sp, $sp, 4 + sw $fp, 0($sp) + + move $fp, $sp + + # push dest to copy pointer + subu $sp, $sp, 4 + sw $v0, 0($sp) + + # push copy from + subu $sp, $sp, 4 + sw $t5, 0($sp) + + # push how much to copy + subu $sp, $sp, 4 + sw $t4, 0($sp) + + jal str_copy + + move $sp, $fp + + lw $fp, 0($sp) + addu $sp, $sp, 4 + + lw $ra, 0($sp) + addu $sp, $sp, 4 + + # save str2 part------------- + # push $ra + subu $sp, $sp, 4 + sw $ra, 0($sp) + + # push $fp + subu $sp, $sp, 4 + sw $fp, 0($sp) + + move $fp, $sp + + # push where to copy + move $t9, $v0 + addu $t0, $v0, $t4 + subu $sp, $sp, 4 + sw $t0, 0($sp) + + # push copy from + subu $sp, $sp, 4 + sw $t8, 0($sp) + + subu $sp, $sp, 4 + sw $t7, 0($sp) + + jal str_copy + + move $sp, $fp + + lw $fp, 0($sp) + addu $sp, $sp, 4 + + lw $ra, 0($sp) + addu $sp, $sp, 4 + + addu $v0, $t7, $v0 + sb $0, 0($v0) + + move $v0, $t9 + jr $ra + diff --git a/tests/codegen/basic.cl b/tests/codegen/basic.cl index 53012ef14..bfbc7a179 100755 --- a/tests/codegen/basic.cl +++ b/tests/codegen/basic.cl @@ -1,19 +1,6 @@ class Main inherits IO { - a : A <- new B; - main(): Int { - out_string("Hello, World.\n") + a : String <- "Hello, World.\n"; + main(): IO { + out_string(a) }; -}; - -class A : Int{ - aa : Int <- 101; - a(): Int { - aa - } -} -class B : Int{ - bb : Int <- 102; - a(): Int { - bb - } -} +}; \ No newline at end of file From fad6439fab4f501af785c6e22431eac2b033587b Mon Sep 17 00:00:00 2001 From: regnod Date: Sun, 27 Feb 2022 21:53:24 -0500 Subject: [PATCH 79/93] siuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu --- src/__main__.py | 4 +- src/pipeline.py | 4 +- src/visitors/CiltoMips.py | 6 +- tests/codegen/arith.mips | 24373 +++++++++++++++---------------- tests/codegen/atoi.mips | 10167 +++++++------ tests/codegen/basic.cl | 6 - tests/codegen/book_list.mips | 5061 ++++--- tests/codegen/cells.mips | 5471 ++++--- tests/codegen/complex.mips | 4827 +++--- tests/codegen/fib.mips | 2531 ++-- tests/codegen/graph.mips | 13949 +++++++++--------- tests/codegen/hairyscary.mips | 4347 +++--- tests/codegen/hello_world.mips | 1883 ++- tests/codegen/io.mips | 3103 ++-- tests/codegen/life.mips | 21927 ++++++++++++++------------- tests/codegen/list.mips | 3705 +++-- tests/codegen/new_complex.mips | 5915 ++++---- tests/codegen/palindrome.mips | 3531 +++-- tests/codegen/primes.mips | 3195 ++-- tests/codegen/print-cool.mips | 2315 ++- tests/codegen/sort-list.mips | 5265 ++++--- tests/utils/utils.py | 5 - 22 files changed, 59880 insertions(+), 61710 deletions(-) delete mode 100755 tests/codegen/basic.cl diff --git a/src/__main__.py b/src/__main__.py index 98a6d3771..ffd9e1576 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -7,8 +7,8 @@ def main(): if len(sys.argv) > 1: input_file = sys.argv[1] else: - input_file = "./tests/codegen/basic.cl" - raise Exception("Incorrect number of arguments") + input_file = "./tests/codegen/fib.cl" + # raise Exception("Incorrect number of arguments") program_file = open(input_file) program = program_file.read() diff --git a/src/pipeline.py b/src/pipeline.py index 353e804af..820618cb5 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -4,7 +4,7 @@ from visitors.Builder import TypeBuilder from visitors.Checker import TypeChecker from visitors.CooltoCil import COOLToCILVisitor -from visitors.CiltoMips import CiltoMipsVisitor +from visitors.CiltoMips import CILToMipsVisitor class Pipeline(): def __init__(self, program, lexer, parser, verbose=False): @@ -40,6 +40,6 @@ def __init__(self, program, lexer, parser, verbose=False): self.coolToCil = COOLToCILVisitor(self.context) cil_ast = self.coolToCil.visit(self.ast, scope) - self.cilToMips = CiltoMipsVisitor(self.context) + self.cilToMips = CILToMipsVisitor() self.mipsCode = self.cilToMips.visit(cil_ast) return diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 1f8d9f98d..87bd13fbd 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -339,7 +339,7 @@ def visit(self, node): instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) if isinstance(node.right, AttributeNode): instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {} {}'.format(r.t0, r.t0, r.t1)) + instructions.append('{} {} {} {}'.format(o.mul, r.t0, r.t0, r.t1)) instructions.extend(self.visit(node.dest)) instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) if isinstance(node.dest, AttributeNode): @@ -877,7 +877,7 @@ def visit(self, node): instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) if isinstance(node.value, AttributeNode): instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {}'.format(o.xori, r.t0, r.t0)) + instructions.append('{} {} {} {}'.format(o.xori, r.t0, r.t0, 1)) instructions.extend(self.visit(node.dest)) instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) if isinstance(node.dest, AttributeNode): @@ -1222,4 +1222,4 @@ def define_util_functions(self): code = '\n\n'.join('\n'.join(i for i in j) for j in instructions) return code - + \ No newline at end of file diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index a20bbb01d..675bd7a60 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -454,12433 +454,12326 @@ data_225: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 - .word data_10 - .word data_11 - .word data_12 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 +.word data_9 +.word data_10 +.word data_11 +.word data_12 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype - .word type_10_prototype - .word type_11_prototype - .word type_12_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + .word type_11_prototype + .word type_12_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_method1_at_A - .word function_method2_at_A - .word function_method3_at_A - .word function_method4_at_A - .word function_method5_at_A - .word function_set_var_at_A - .word function_value_at_A - .word __init_attr_at_A - .word __init_at_A +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_method1_at_A +.word function_method2_at_A +.word function_method3_at_A +.word function_method4_at_A +.word function_method5_at_A +.word function_set_var_at_A +.word function_value_at_A +.word __init_attr_at_A +.word __init_at_A type_6_prototype: - .word 5 - .word 5 - .word type_6_dispatch - .word 0 - .word -1 +.word 5 +.word 5 +.word type_6_dispatch +.word 0 +.word -1 type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_method1_at_A - .word function_method2_at_A - .word function_method3_at_A - .word function_method4_at_A - .word function_method5_at_B - .word function_set_var_at_A - .word function_value_at_A - .word __init_attr_at_B - .word __init_at_B +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_method1_at_A +.word function_method2_at_A +.word function_method3_at_A +.word function_method4_at_A +.word function_method5_at_B +.word function_set_var_at_A +.word function_value_at_A +.word __init_attr_at_B +.word __init_at_B type_7_prototype: - .word 6 - .word 5 - .word type_7_dispatch - .word 0 - .word -1 +.word 6 +.word 5 +.word type_7_dispatch +.word 0 +.word -1 type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_method1_at_A - .word function_method2_at_A - .word function_method3_at_A - .word function_method4_at_A - .word function_method5_at_C - .word function_set_var_at_A - .word function_value_at_A - .word function_method6_at_C - .word __init_attr_at_C - .word __init_at_C +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_method1_at_A +.word function_method2_at_A +.word function_method3_at_A +.word function_method4_at_A +.word function_method5_at_C +.word function_set_var_at_A +.word function_value_at_A +.word function_method6_at_C +.word __init_attr_at_C +.word __init_at_C type_8_prototype: - .word 7 - .word 5 - .word type_8_dispatch - .word 0 - .word -1 +.word 7 +.word 5 +.word type_8_dispatch +.word 0 +.word -1 type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_method1_at_A - .word function_method2_at_A - .word function_method3_at_A - .word function_method4_at_A - .word function_method5_at_B - .word function_set_var_at_A - .word function_value_at_A - .word function_method7_at_D - .word __init_attr_at_D - .word __init_at_D +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_method1_at_A +.word function_method2_at_A +.word function_method3_at_A +.word function_method4_at_A +.word function_method5_at_B +.word function_set_var_at_A +.word function_value_at_A +.word function_method7_at_D +.word __init_attr_at_D +.word __init_at_D type_9_prototype: - .word 8 - .word 5 - .word type_9_dispatch - .word 0 - .word -1 +.word 8 +.word 5 +.word type_9_dispatch +.word 0 +.word -1 type_10_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_method1_at_A - .word function_method2_at_A - .word function_method3_at_A - .word function_method4_at_A - .word function_method5_at_B - .word function_set_var_at_A - .word function_value_at_A - .word function_method7_at_D - .word function_method6_at_E - .word __init_attr_at_E - .word __init_at_E +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_method1_at_A +.word function_method2_at_A +.word function_method3_at_A +.word function_method4_at_A +.word function_method5_at_B +.word function_set_var_at_A +.word function_value_at_A +.word function_method7_at_D +.word function_method6_at_E +.word __init_attr_at_E +.word __init_at_E type_10_prototype: - .word 9 - .word 5 - .word type_10_dispatch - .word 0 - .word -1 +.word 9 +.word 5 +.word type_10_dispatch +.word 0 +.word -1 type_11_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_a2i_at_A2I - .word function_a2i_aux_at_A2I - .word function_c2i_at_A2I - .word function_i2a_at_A2I - .word function_i2a_aux_at_A2I - .word function_i2c_at_A2I - .word __init_attr_at_A2I - .word __init_at_A2I +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_a2i_at_A2I +.word function_a2i_aux_at_A2I +.word function_c2i_at_A2I +.word function_i2a_at_A2I +.word function_i2a_aux_at_A2I +.word function_i2c_at_A2I +.word __init_attr_at_A2I +.word __init_at_A2I type_11_prototype: - .word 10 - .word 4 - .word type_11_dispatch - .word -1 +.word 10 +.word 4 +.word type_11_dispatch +.word -1 type_12_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_class_type_at_Main - .word function_get_int_at_Main - .word function_is_even_at_Main - .word function_main_at_Main - .word function_menu_at_Main - .word function_print_at_Main - .word function_prompt_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_class_type_at_Main +.word function_get_int_at_Main +.word function_is_even_at_Main +.word function_main_at_Main +.word function_menu_at_Main +.word function_print_at_Main +.word function_prompt_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_12_prototype: - .word 11 - .word 8 - .word type_12_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 +.word 11 +.word 8 +.word type_12_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_15 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_13 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_15 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_13 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_value_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_set_var_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_method1_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_method2_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -40($fp) - jal __init_at_B - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_4: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -32($fp) +lw $t1 -28($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -40($fp) +jal __init_at_B +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_4: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_method3_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -32 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -28($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -36($fp) - jal __init_at_C - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 32 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -32 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -28($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -36($fp) +jal __init_at_C +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 32 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_method4_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -92 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - slt $t1 $t0 $t1 - sw $t1 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_9 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - sub $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -72($fp) - jal __init_at_D - sw $v0 -52($fp) - lw $t0 -52($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -96($fp) - j label_12 - label_9: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) - sub $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -40($fp) - jal __init_at_D - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_10 - j label_11 - label_10: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_11: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -96($fp) - label_12: - lw $v0 -96($fp) - addi $sp $sp 92 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -92 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +slt $t1 $t0 $t1 +sw $t1 -76($fp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_9 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -64($fp) +lw $t1 -60($fp) +sub $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +sw $t0 -72($fp) +jal __init_at_D +sw $v0 -52($fp) +lw $t0 -52($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_8: +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -96($fp) +j label_12 +label_9: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -32($fp) +lw $t1 -28($fp) +sub $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -40($fp) +jal __init_at_D +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_10 +j label_11 +label_10: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_11: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -96($fp) +label_12: +lw $v0 -96($fp) +addi $sp $sp 92 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_method5_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -88 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - sw $t0 -92($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -84($fp) - label_13: - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - sle $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_14 - j label_15 - label_14: - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - mul $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - sw $t0 -92($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 -36($fp) - lw $t1 -32($fp) - add $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -84($fp) - j label_13 - label_15: - jal __init_at_E - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_16 - j label_17 - label_16: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_17: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 88 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -88 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +sw $t0 -92($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 -80($fp) +sw $t0 -84($fp) +label_13: +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +sle $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_14 +j label_15 +label_14: +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +mul $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +sw $t0 -92($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -36($fp) +lw $t1 -32($fp) +add $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -84($fp) +j label_13 +label_15: +jal __init_at_E +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_16 +j label_17 +label_16: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_17: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 88 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_A +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_B: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_A +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_method5_at_B: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) - mul $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -40($fp) - jal __init_at_E - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_18 - j label_19 - label_18: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_19: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -32($fp) +lw $t1 -28($fp) +mul $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -40($fp) +jal __init_at_E +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_18 +j label_19 +label_18: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_19: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_B: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_B - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_B +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_B - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_B +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_method6_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -32 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -28($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -36($fp) - jal __init_at_A - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_20 - j label_21 - label_20: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_21: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 32 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -32 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -28($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -36($fp) +jal __init_at_A +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_20 +j label_21 +label_20: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_21: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 32 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_method5_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -52 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) - mul $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - mul $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -56($fp) - jal __init_at_E - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_22 - j label_23 - label_22: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_23: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 52 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -52 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -32($fp) +lw $t1 -28($fp) +mul $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +mul $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -56($fp) +jal __init_at_E +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_22 +j label_23 +label_22: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_23: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 52 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_C - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_C +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_D: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_B - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_B +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_method7_at_D: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -240 - lw $t0 0($fp) - sw $t0 -244($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -228($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 -216($fp) - lw $t1 12($t0) - sw $t1 -224($fp) - lw $t0 -228($fp) - lw $t1 -224($fp) - slt $t1 $t0 $t1 - sw $t1 -220($fp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -232($fp) - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -236($fp) - bne $t0 $zero label_44 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 -168($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -192($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -184($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -180($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_24 - lw $t0 -192($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_25 - lw $t0 -192($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_26 - lw $t0 -168($fp) - lw $t1 -244($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_27 - label_24: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_27 - label_25: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - move $a0 $t0 - lw $t0 -196($fp) - move $a1 $t0 - jal equal_str - sw $v0 -172($fp) - j label_27 - label_26: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_27 - label_27: - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_42 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -120($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_28 - lw $t0 -144($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_29 - lw $t0 -144($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_30 - lw $t0 -120($fp) - lw $t1 -244($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_31 - label_28: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_31 - label_29: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - move $a0 $t0 - lw $t0 -148($fp) - move $a1 $t0 - jal equal_str - sw $v0 -124($fp) - j label_31 - label_30: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_31 - label_31: - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_40 - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -96($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -92($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -84($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_32 - lw $t0 -96($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_33 - lw $t0 -96($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_34 - lw $t0 -72($fp) - lw $t1 -244($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - j label_35 - label_32: - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - j label_35 - label_33: - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - move $a0 $t0 - lw $t0 -100($fp) - move $a1 $t0 - jal equal_str - sw $v0 -76($fp) - j label_35 - label_34: - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - j label_35 - label_35: - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_38 - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - sub $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_36 - j label_37 - label_36: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_37: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -116($fp) - j label_39 - label_38: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -116($fp) - label_39: - lw $t0 -116($fp) - sw $t0 -164($fp) - j label_41 - label_40: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -164($fp) - label_41: - lw $t0 -164($fp) - sw $t0 -212($fp) - j label_43 - label_42: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -212($fp) - label_43: - lw $t0 -212($fp) - sw $t0 -240($fp) - j label_47 - label_44: - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -24($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -20($fp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_45 - j label_46 - label_45: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_46: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -240($fp) - label_47: - lw $v0 -240($fp) - addi $sp $sp 240 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -240 +lw $t0 0($fp) +sw $t0 -244($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 -216($fp) +lw $t1 12($t0) +sw $t1 -224($fp) +lw $t0 -228($fp) +lw $t1 -224($fp) +slt $t1 $t0 $t1 +sw $t1 -220($fp) +lw $t0 -220($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -232($fp) +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -236($fp) +bne $t0 $zero label_44 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -168($fp) +lw $t0 -168($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -192($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -188($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -184($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -180($fp) +lw $t0 -192($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_24 +lw $t0 -192($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_25 +lw $t0 -192($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_26 +lw $t0 -168($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_27 +label_24: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_27 +label_25: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +move $a0 $t0 +lw $t0 -196($fp) +move $a1 $t0 +jal equal_str +sw $v0 -172($fp) +j label_27 +label_26: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_27 +label_27: +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -208($fp) +bne $t0 $zero label_42 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 -120($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -136($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_28 +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_29 +lw $t0 -144($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_30 +lw $t0 -120($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_31 +label_28: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_31 +label_29: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +move $a0 $t0 +lw $t0 -148($fp) +move $a1 $t0 +jal equal_str +sw $v0 -124($fp) +j label_31 +label_30: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_31 +label_31: +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_40 +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -96($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -92($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -84($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_32 +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_33 +lw $t0 -96($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_34 +lw $t0 -72($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +j label_35 +label_32: +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -104($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +j label_35 +label_33: +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -104($fp) +move $a0 $t0 +lw $t0 -100($fp) +move $a1 $t0 +jal equal_str +sw $v0 -76($fp) +j label_35 +label_34: +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -104($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +j label_35 +label_35: +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -112($fp) +bne $t0 $zero label_38 +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -64($fp) +lw $t1 -60($fp) +sub $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_36 +j label_37 +label_36: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_37: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -116($fp) +j label_39 +label_38: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -116($fp) +label_39: +lw $t0 -116($fp) +sw $t0 -164($fp) +j label_41 +label_40: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -164($fp) +label_41: +lw $t0 -164($fp) +sw $t0 -212($fp) +j label_43 +label_42: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -212($fp) +label_43: +lw $t0 -212($fp) +sw $t0 -240($fp) +j label_47 +label_44: +lw $t0 -244($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -24($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -20($fp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_45 +j label_46 +label_45: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_46: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -240($fp) +label_47: +lw $v0 -240($fp) +addi $sp $sp 240 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_D: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_D - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 8 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_D +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_E: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_D - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_D +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_method6_at_E: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -44 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -28($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_48 - j label_49 - label_48: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_49: - lw $t0 -40($fp) - lw $t1 -36($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -48($fp) - jal __init_at_A - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_50 - j label_51 - label_50: - li $v0 4 - la $a0 data_28 - syscall - li $v0 10 - syscall - label_51: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 44 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -44 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -24($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -28($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_48 +j label_49 +label_48: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_49: +lw $t0 -40($fp) +lw $t1 -36($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -48($fp) +jal __init_at_A +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_50 +j label_51 +label_50: +li $v0 4 +la $a0 data_28 +syscall +li $v0 10 +syscall +label_51: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 44 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_E: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 9 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_E - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 9 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_E +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_c2i_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -572 - la $t0 data_29 - sw $t0 -536($fp) - lw $t0 -536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -532($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -560($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -556($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -552($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -548($fp) - lw $t0 -560($fp) - lw $t1 -556($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_52 - lw $t0 -560($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_53 - lw $t0 -560($fp) - lw $t1 -548($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_54 - lw $t0 0($fp) - lw $t1 -532($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_55 - label_52: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_55 - label_53: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - move $a0 $t0 - lw $t0 -564($fp) - move $a1 $t0 - jal equal_str - sw $v0 -540($fp) - j label_55 - label_54: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_55 - label_55: - lw $t0 -540($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -572($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -576($fp) - lw $t0 -576($fp) - bne $t0 $zero label_112 - la $t0 data_30 - sw $t0 -484($fp) - lw $t0 -484($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -480($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -508($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -504($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -500($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -496($fp) - lw $t0 -508($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_56 - lw $t0 -508($fp) - lw $t1 -500($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_57 - lw $t0 -508($fp) - lw $t1 -496($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_58 - lw $t0 0($fp) - lw $t1 -480($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_59 - label_56: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_59 - label_57: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - move $a0 $t0 - lw $t0 -512($fp) - move $a1 $t0 - jal equal_str - sw $v0 -488($fp) - j label_59 - label_58: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_59 - label_59: - lw $t0 -488($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -520($fp) - lw $t0 -520($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -524($fp) - bne $t0 $zero label_110 - la $t0 data_31 - sw $t0 -432($fp) - lw $t0 -432($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -456($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -452($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -448($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -444($fp) - lw $t0 -456($fp) - lw $t1 -452($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_60 - lw $t0 -456($fp) - lw $t1 -448($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_61 - lw $t0 -456($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_62 - lw $t0 0($fp) - lw $t1 -428($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_63 - label_60: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_63 - label_61: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - move $a0 $t0 - lw $t0 -460($fp) - move $a1 $t0 - jal equal_str - sw $v0 -436($fp) - j label_63 - label_62: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_63 - label_63: - lw $t0 -436($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -468($fp) - lw $t0 -468($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -472($fp) - bne $t0 $zero label_108 - la $t0 data_32 - sw $t0 -380($fp) - lw $t0 -380($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -376($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -404($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -400($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -396($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -392($fp) - lw $t0 -404($fp) - lw $t1 -400($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_64 - lw $t0 -404($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_65 - lw $t0 -404($fp) - lw $t1 -392($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_66 - lw $t0 0($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_67 - label_64: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_67 - label_65: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - move $a0 $t0 - lw $t0 -408($fp) - move $a1 $t0 - jal equal_str - sw $v0 -384($fp) - j label_67 - label_66: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_67 - label_67: - lw $t0 -384($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -416($fp) - lw $t0 -416($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -420($fp) - bne $t0 $zero label_106 - la $t0 data_33 - sw $t0 -328($fp) - lw $t0 -328($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -324($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -352($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -348($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -344($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -340($fp) - lw $t0 -352($fp) - lw $t1 -348($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_68 - lw $t0 -352($fp) - lw $t1 -344($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_69 - lw $t0 -352($fp) - lw $t1 -340($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_70 - lw $t0 0($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_71 - label_68: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_71 - label_69: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - move $a0 $t0 - lw $t0 -356($fp) - move $a1 $t0 - jal equal_str - sw $v0 -332($fp) - j label_71 - label_70: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_71 - label_71: - lw $t0 -332($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -364($fp) - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -368($fp) - lw $t0 -368($fp) - bne $t0 $zero label_104 - la $t0 data_34 - sw $t0 -276($fp) - lw $t0 -276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -300($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -296($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -292($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -288($fp) - lw $t0 -300($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_72 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_73 - lw $t0 -300($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_74 - lw $t0 0($fp) - lw $t1 -272($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_75 - label_72: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_75 - label_73: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - move $a0 $t0 - lw $t0 -304($fp) - move $a1 $t0 - jal equal_str - sw $v0 -280($fp) - j label_75 - label_74: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_75 - label_75: - lw $t0 -280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -312($fp) - lw $t0 -312($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_102 - la $t0 data_35 - sw $t0 -224($fp) - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -220($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -248($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -244($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -240($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -236($fp) - lw $t0 -248($fp) - lw $t1 -244($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_76 - lw $t0 -248($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_77 - lw $t0 -248($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_78 - lw $t0 0($fp) - lw $t1 -220($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_79 - label_76: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_79 - label_77: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - move $a0 $t0 - lw $t0 -252($fp) - move $a1 $t0 - jal equal_str - sw $v0 -228($fp) - j label_79 - label_78: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_79 - label_79: - lw $t0 -228($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -260($fp) - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -264($fp) - bne $t0 $zero label_100 - la $t0 data_36 - sw $t0 -172($fp) - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -196($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -192($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -184($fp) - lw $t0 -196($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_80 - lw $t0 -196($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_81 - lw $t0 -196($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_82 - lw $t0 0($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_83 - label_80: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_83 - label_81: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - move $a0 $t0 - lw $t0 -200($fp) - move $a1 $t0 - jal equal_str - sw $v0 -176($fp) - j label_83 - label_82: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_83 - label_83: - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -208($fp) - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_98 - la $t0 data_37 - sw $t0 -120($fp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_84 - lw $t0 -144($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_85 - lw $t0 -144($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_86 - lw $t0 0($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_87 - label_84: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_87 - label_85: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - move $a0 $t0 - lw $t0 -148($fp) - move $a1 $t0 - jal equal_str - sw $v0 -124($fp) - j label_87 - label_86: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_87 - label_87: - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_96 - la $t0 data_38 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_88 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_89 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_90 - lw $t0 0($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_91 - label_88: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_91 - label_89: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_91 - label_90: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_91 - label_91: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_94 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_92 - j label_93 - label_92: - li $v0 4 - la $a0 data_39 - syscall - li $v0 10 - syscall - label_93: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -56($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -112($fp) - j label_95 - label_94: - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -112($fp) - label_95: - lw $t0 -112($fp) - sw $t0 -164($fp) - j label_97 - label_96: - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -164($fp) - label_97: - lw $t0 -164($fp) - sw $t0 -216($fp) - j label_99 - label_98: - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -216($fp) - label_99: - lw $t0 -216($fp) - sw $t0 -268($fp) - j label_101 - label_100: - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -268($fp) - label_101: - lw $t0 -268($fp) - sw $t0 -320($fp) - j label_103 - label_102: - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -320($fp) - label_103: - lw $t0 -320($fp) - sw $t0 -372($fp) - j label_105 - label_104: - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -372($fp) - label_105: - lw $t0 -372($fp) - sw $t0 -424($fp) - j label_107 - label_106: - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -424($fp) - label_107: - lw $t0 -424($fp) - sw $t0 -476($fp) - j label_109 - label_108: - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -476($fp) - label_109: - lw $t0 -476($fp) - sw $t0 -528($fp) - j label_111 - label_110: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -528($fp) - label_111: - lw $t0 -528($fp) - sw $t0 -580($fp) - j label_113 - label_112: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -580($fp) - label_113: - lw $v0 -580($fp) - addi $sp $sp 572 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -572 +la $t0 data_29 +sw $t0 -536($fp) +lw $t0 -536($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -532($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -560($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -556($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -552($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -548($fp) +lw $t0 -560($fp) +lw $t1 -556($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_52 +lw $t0 -560($fp) +lw $t1 -552($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_53 +lw $t0 -560($fp) +lw $t1 -548($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_54 +lw $t0 0($fp) +lw $t1 -532($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_55 +label_52: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -568($fp) +lw $t1 -564($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_55 +label_53: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -568($fp) +move $a0 $t0 +lw $t0 -564($fp) +move $a1 $t0 +jal equal_str +sw $v0 -540($fp) +j label_55 +label_54: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -568($fp) +lw $t1 -564($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_55 +label_55: +lw $t0 -540($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -572($fp) +lw $t0 -572($fp) +lw $t1 12($t0) +sw $t1 -576($fp) +lw $t0 -576($fp) +bne $t0 $zero label_112 +la $t0 data_30 +sw $t0 -484($fp) +lw $t0 -484($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -480($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -508($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -504($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -500($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -496($fp) +lw $t0 -508($fp) +lw $t1 -504($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_56 +lw $t0 -508($fp) +lw $t1 -500($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_57 +lw $t0 -508($fp) +lw $t1 -496($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_58 +lw $t0 0($fp) +lw $t1 -480($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_59 +label_56: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -512($fp) +lw $t0 -516($fp) +lw $t1 -512($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_59 +label_57: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -512($fp) +lw $t0 -516($fp) +move $a0 $t0 +lw $t0 -512($fp) +move $a1 $t0 +jal equal_str +sw $v0 -488($fp) +j label_59 +label_58: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -512($fp) +lw $t0 -516($fp) +lw $t1 -512($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_59 +label_59: +lw $t0 -488($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -520($fp) +lw $t0 -520($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -524($fp) +bne $t0 $zero label_110 +la $t0 data_31 +sw $t0 -432($fp) +lw $t0 -432($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -428($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -456($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -452($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -448($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -444($fp) +lw $t0 -456($fp) +lw $t1 -452($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_60 +lw $t0 -456($fp) +lw $t1 -448($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_61 +lw $t0 -456($fp) +lw $t1 -444($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_62 +lw $t0 0($fp) +lw $t1 -428($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_63 +label_60: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -464($fp) +lw $t1 -460($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_63 +label_61: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -464($fp) +move $a0 $t0 +lw $t0 -460($fp) +move $a1 $t0 +jal equal_str +sw $v0 -436($fp) +j label_63 +label_62: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -464($fp) +lw $t1 -460($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_63 +label_63: +lw $t0 -436($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -468($fp) +lw $t0 -468($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -472($fp) +bne $t0 $zero label_108 +la $t0 data_32 +sw $t0 -380($fp) +lw $t0 -380($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -376($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -404($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -400($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -396($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -392($fp) +lw $t0 -404($fp) +lw $t1 -400($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_64 +lw $t0 -404($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_65 +lw $t0 -404($fp) +lw $t1 -392($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_66 +lw $t0 0($fp) +lw $t1 -376($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_67 +label_64: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -408($fp) +lw $t0 -412($fp) +lw $t1 -408($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_67 +label_65: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -408($fp) +lw $t0 -412($fp) +move $a0 $t0 +lw $t0 -408($fp) +move $a1 $t0 +jal equal_str +sw $v0 -384($fp) +j label_67 +label_66: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -408($fp) +lw $t0 -412($fp) +lw $t1 -408($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_67 +label_67: +lw $t0 -384($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -416($fp) +lw $t0 -416($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -420($fp) +bne $t0 $zero label_106 +la $t0 data_33 +sw $t0 -328($fp) +lw $t0 -328($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -324($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -352($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -348($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -344($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -340($fp) +lw $t0 -352($fp) +lw $t1 -348($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_68 +lw $t0 -352($fp) +lw $t1 -344($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_69 +lw $t0 -352($fp) +lw $t1 -340($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_70 +lw $t0 0($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_71 +label_68: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -356($fp) +lw $t0 -360($fp) +lw $t1 -356($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_71 +label_69: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -356($fp) +lw $t0 -360($fp) +move $a0 $t0 +lw $t0 -356($fp) +move $a1 $t0 +jal equal_str +sw $v0 -332($fp) +j label_71 +label_70: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -356($fp) +lw $t0 -360($fp) +lw $t1 -356($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_71 +label_71: +lw $t0 -332($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -364($fp) +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -368($fp) +lw $t0 -368($fp) +bne $t0 $zero label_104 +la $t0 data_34 +sw $t0 -276($fp) +lw $t0 -276($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -300($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -292($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -288($fp) +lw $t0 -300($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_72 +lw $t0 -300($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_73 +lw $t0 -300($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_74 +lw $t0 0($fp) +lw $t1 -272($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_75 +label_72: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_75 +label_73: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +move $a0 $t0 +lw $t0 -304($fp) +move $a1 $t0 +jal equal_str +sw $v0 -280($fp) +j label_75 +label_74: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_75 +label_75: +lw $t0 -280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -312($fp) +lw $t0 -312($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_102 +la $t0 data_35 +sw $t0 -224($fp) +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -220($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -248($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -244($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -240($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -236($fp) +lw $t0 -248($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_76 +lw $t0 -248($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_77 +lw $t0 -248($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_78 +lw $t0 0($fp) +lw $t1 -220($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_79 +label_76: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -256($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_79 +label_77: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -256($fp) +move $a0 $t0 +lw $t0 -252($fp) +move $a1 $t0 +jal equal_str +sw $v0 -228($fp) +j label_79 +label_78: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -256($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_79 +label_79: +lw $t0 -228($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -260($fp) +lw $t0 -260($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -264($fp) +bne $t0 $zero label_100 +la $t0 data_36 +sw $t0 -172($fp) +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -168($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -196($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -192($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -188($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -184($fp) +lw $t0 -196($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_80 +lw $t0 -196($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_81 +lw $t0 -196($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_82 +lw $t0 0($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_83 +label_80: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -204($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_83 +label_81: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -204($fp) +move $a0 $t0 +lw $t0 -200($fp) +move $a1 $t0 +jal equal_str +sw $v0 -176($fp) +j label_83 +label_82: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -204($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_83 +label_83: +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -208($fp) +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_98 +la $t0 data_37 +sw $t0 -120($fp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -136($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_84 +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_85 +lw $t0 -144($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_86 +lw $t0 0($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_87 +label_84: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_87 +label_85: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +move $a0 $t0 +lw $t0 -148($fp) +move $a1 $t0 +jal equal_str +sw $v0 -124($fp) +j label_87 +label_86: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_87 +label_87: +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_96 +la $t0 data_38 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -92($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -80($fp) +lw $t0 -92($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_88 +lw $t0 -92($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_89 +lw $t0 -92($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_90 +lw $t0 0($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_91 +label_88: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_91 +label_89: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -96($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_91 +label_90: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_91 +label_91: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_94 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_92 +j label_93 +label_92: +li $v0 4 +la $a0 data_39 +syscall +li $v0 10 +syscall +label_93: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -56($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -112($fp) +j label_95 +label_94: +li $t0 9 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +sw $t0 -112($fp) +label_95: +lw $t0 -112($fp) +sw $t0 -164($fp) +j label_97 +label_96: +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -164($fp) +label_97: +lw $t0 -164($fp) +sw $t0 -216($fp) +j label_99 +label_98: +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -216($fp) +label_99: +lw $t0 -216($fp) +sw $t0 -268($fp) +j label_101 +label_100: +li $t0 6 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -268($fp) +label_101: +lw $t0 -268($fp) +sw $t0 -320($fp) +j label_103 +label_102: +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -320($fp) +label_103: +lw $t0 -320($fp) +sw $t0 -372($fp) +j label_105 +label_104: +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -372($fp) +label_105: +lw $t0 -372($fp) +sw $t0 -424($fp) +j label_107 +label_106: +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -424($fp) +label_107: +lw $t0 -424($fp) +sw $t0 -476($fp) +j label_109 +label_108: +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -476($fp) +label_109: +lw $t0 -476($fp) +sw $t0 -528($fp) +j label_111 +label_110: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -528($fp) +label_111: +lw $t0 -528($fp) +sw $t0 -580($fp) +j label_113 +label_112: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -580($fp) +label_113: +lw $v0 -580($fp) +addi $sp $sp 572 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_i2c_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -576 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -540($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -564($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -560($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -556($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -552($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) - seq $t0 $t0 $t1 - sw $t0 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_114 - lw $t0 -564($fp) - lw $t1 -556($fp) - seq $t0 $t0 $t1 - sw $t0 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_115 - lw $t0 -564($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_116 - lw $t0 0($fp) - lw $t1 -540($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - j label_117 - label_114: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -540($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -572($fp) - lw $t1 -568($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - j label_117 - label_115: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -540($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -572($fp) - move $a0 $t0 - lw $t0 -568($fp) - move $a1 $t0 - jal equal_str - sw $v0 -544($fp) - j label_117 - label_116: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -540($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -572($fp) - lw $t1 -568($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - j label_117 - label_117: - lw $t0 -544($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -576($fp) - lw $t0 -576($fp) - lw $t1 12($t0) - sw $t1 -580($fp) - lw $t0 -580($fp) - bne $t0 $zero label_174 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -492($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -516($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -512($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -508($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -504($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -500($fp) - lw $t0 -500($fp) - bne $t0 $zero label_118 - lw $t0 -516($fp) - lw $t1 -508($fp) - seq $t0 $t0 $t1 - sw $t0 -500($fp) - lw $t0 -500($fp) - bne $t0 $zero label_119 - lw $t0 -516($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -500($fp) - lw $t0 -500($fp) - bne $t0 $zero label_120 - lw $t0 0($fp) - lw $t1 -492($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - j label_121 - label_118: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -492($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -524($fp) - lw $t1 -520($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - j label_121 - label_119: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -492($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -524($fp) - move $a0 $t0 - lw $t0 -520($fp) - move $a1 $t0 - jal equal_str - sw $v0 -496($fp) - j label_121 - label_120: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -492($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -524($fp) - lw $t1 -520($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - j label_121 - label_121: - lw $t0 -496($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -528($fp) - lw $t0 -528($fp) - lw $t1 12($t0) - sw $t1 -532($fp) - lw $t0 -532($fp) - bne $t0 $zero label_172 - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -444($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -468($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -464($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -460($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -456($fp) - lw $t0 -468($fp) - lw $t1 -464($fp) - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_122 - lw $t0 -468($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_123 - lw $t0 -468($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_124 - lw $t0 0($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - j label_125 - label_122: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -476($fp) - lw $t0 -444($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -476($fp) - lw $t1 -472($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - j label_125 - label_123: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -476($fp) - lw $t0 -444($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -476($fp) - move $a0 $t0 - lw $t0 -472($fp) - move $a1 $t0 - jal equal_str - sw $v0 -448($fp) - j label_125 - label_124: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -476($fp) - lw $t0 -444($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -476($fp) - lw $t1 -472($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - j label_125 - label_125: - lw $t0 -448($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -480($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_170 - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -396($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -420($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -416($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -412($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -408($fp) - lw $t0 -420($fp) - lw $t1 -416($fp) - seq $t0 $t0 $t1 - sw $t0 -404($fp) - lw $t0 -404($fp) - bne $t0 $zero label_126 - lw $t0 -420($fp) - lw $t1 -412($fp) - seq $t0 $t0 $t1 - sw $t0 -404($fp) - lw $t0 -404($fp) - bne $t0 $zero label_127 - lw $t0 -420($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -404($fp) - lw $t0 -404($fp) - bne $t0 $zero label_128 - lw $t0 0($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - j label_129 - label_126: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -396($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -428($fp) - lw $t1 -424($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - j label_129 - label_127: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -396($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -428($fp) - move $a0 $t0 - lw $t0 -424($fp) - move $a1 $t0 - jal equal_str - sw $v0 -400($fp) - j label_129 - label_128: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -396($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -428($fp) - lw $t1 -424($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - j label_129 - label_129: - lw $t0 -400($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -432($fp) - lw $t0 -432($fp) - lw $t1 12($t0) - sw $t1 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_168 - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -348($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -372($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -368($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -364($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -360($fp) - lw $t0 -372($fp) - lw $t1 -368($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_130 - lw $t0 -372($fp) - lw $t1 -364($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_131 - lw $t0 -372($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_132 - lw $t0 0($fp) - lw $t1 -348($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_133 - label_130: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_133 - label_131: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - move $a0 $t0 - lw $t0 -376($fp) - move $a1 $t0 - jal equal_str - sw $v0 -352($fp) - j label_133 - label_132: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_133 - label_133: - lw $t0 -352($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -384($fp) - lw $t0 -384($fp) - lw $t1 12($t0) - sw $t1 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_166 - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -324($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -320($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -316($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -312($fp) - lw $t0 -324($fp) - lw $t1 -320($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - lw $t0 -308($fp) - bne $t0 $zero label_134 - lw $t0 -324($fp) - lw $t1 -316($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - lw $t0 -308($fp) - bne $t0 $zero label_135 - lw $t0 -324($fp) - lw $t1 -312($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - lw $t0 -308($fp) - bne $t0 $zero label_136 - lw $t0 0($fp) - lw $t1 -300($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - j label_137 - label_134: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -332($fp) - lw $t1 -328($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - j label_137 - label_135: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -332($fp) - move $a0 $t0 - lw $t0 -328($fp) - move $a1 $t0 - jal equal_str - sw $v0 -304($fp) - j label_137 - label_136: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -332($fp) - lw $t1 -328($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - j label_137 - label_137: - lw $t0 -304($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -336($fp) - lw $t0 -336($fp) - lw $t1 12($t0) - sw $t1 -340($fp) - lw $t0 -340($fp) - bne $t0 $zero label_164 - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -252($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -276($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -272($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -268($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -264($fp) - lw $t0 -276($fp) - lw $t1 -272($fp) - seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_138 - lw $t0 -276($fp) - lw $t1 -268($fp) - seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_139 - lw $t0 -276($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_140 - lw $t0 0($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_141 - label_138: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -252($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_141 - label_139: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -252($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - move $a0 $t0 - lw $t0 -280($fp) - move $a1 $t0 - jal equal_str - sw $v0 -256($fp) - j label_141 - label_140: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -252($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_141 - label_141: - lw $t0 -256($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -288($fp) - lw $t0 -288($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_162 - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -228($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -224($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -220($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -216($fp) - lw $t0 -228($fp) - lw $t1 -224($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_142 - lw $t0 -228($fp) - lw $t1 -220($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_143 - lw $t0 -228($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_144 - lw $t0 0($fp) - lw $t1 -204($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_145 - label_142: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_145 - label_143: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - move $a0 $t0 - lw $t0 -232($fp) - move $a1 $t0 - jal equal_str - sw $v0 -208($fp) - j label_145 - label_144: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_145 - label_145: - lw $t0 -208($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -240($fp) - lw $t0 -240($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_160 - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -180($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -176($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -172($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -168($fp) - lw $t0 -180($fp) - lw $t1 -176($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_146 - lw $t0 -180($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_147 - lw $t0 -180($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_148 - lw $t0 0($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_149 - label_146: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_149 - label_147: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - move $a0 $t0 - lw $t0 -184($fp) - move $a1 $t0 - jal equal_str - sw $v0 -160($fp) - j label_149 - label_148: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_149 - label_149: - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -192($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_158 - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -132($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -124($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_150 - lw $t0 -132($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_151 - lw $t0 -132($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_152 - lw $t0 0($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_153 - label_150: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_153 - label_151: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - move $a0 $t0 - lw $t0 -136($fp) - move $a1 $t0 - jal equal_str - sw $v0 -112($fp) - j label_153 - label_152: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_153 - label_153: - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_156 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_154 - j label_155 - label_154: - li $v0 4 - la $a0 data_40 - syscall - li $v0 10 - syscall - label_155: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -100($fp) - la $t0 data_41 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -152($fp) - j label_157 - label_156: - la $t0 data_42 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -152($fp) - label_157: - lw $t0 -152($fp) - sw $t0 -200($fp) - j label_159 - label_158: - la $t0 data_43 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -200($fp) - label_159: - lw $t0 -200($fp) - sw $t0 -248($fp) - j label_161 - label_160: - la $t0 data_44 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -248($fp) - label_161: - lw $t0 -248($fp) - sw $t0 -296($fp) - j label_163 - label_162: - la $t0 data_45 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -296($fp) - label_163: - lw $t0 -296($fp) - sw $t0 -344($fp) - j label_165 - label_164: - la $t0 data_46 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -344($fp) - label_165: - lw $t0 -344($fp) - sw $t0 -392($fp) - j label_167 - label_166: - la $t0 data_47 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -392($fp) - label_167: - lw $t0 -392($fp) - sw $t0 -440($fp) - j label_169 - label_168: - la $t0 data_48 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -440($fp) - label_169: - lw $t0 -440($fp) - sw $t0 -488($fp) - j label_171 - label_170: - la $t0 data_49 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -488($fp) - label_171: - lw $t0 -488($fp) - sw $t0 -536($fp) - j label_173 - label_172: - la $t0 data_50 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -536($fp) - label_173: - lw $t0 -536($fp) - sw $t0 -584($fp) - j label_175 - label_174: - la $t0 data_51 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -584($fp) - label_175: - lw $v0 -584($fp) - addi $sp $sp 576 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -576 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -540($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -564($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -560($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -556($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -552($fp) +lw $t0 -564($fp) +lw $t1 -560($fp) +seq $t0 $t0 $t1 +sw $t0 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_114 +lw $t0 -564($fp) +lw $t1 -556($fp) +seq $t0 $t0 $t1 +sw $t0 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_115 +lw $t0 -564($fp) +lw $t1 -552($fp) +seq $t0 $t0 $t1 +sw $t0 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_116 +lw $t0 0($fp) +lw $t1 -540($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +j label_117 +label_114: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -572($fp) +lw $t0 -540($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -572($fp) +lw $t1 -568($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +j label_117 +label_115: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -572($fp) +lw $t0 -540($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -572($fp) +move $a0 $t0 +lw $t0 -568($fp) +move $a1 $t0 +jal equal_str +sw $v0 -544($fp) +j label_117 +label_116: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -572($fp) +lw $t0 -540($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -572($fp) +lw $t1 -568($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +j label_117 +label_117: +lw $t0 -544($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -576($fp) +lw $t0 -576($fp) +lw $t1 12($t0) +sw $t1 -580($fp) +lw $t0 -580($fp) +bne $t0 $zero label_174 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -492($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -516($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -512($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -508($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -504($fp) +lw $t0 -516($fp) +lw $t1 -512($fp) +seq $t0 $t0 $t1 +sw $t0 -500($fp) +lw $t0 -500($fp) +bne $t0 $zero label_118 +lw $t0 -516($fp) +lw $t1 -508($fp) +seq $t0 $t0 $t1 +sw $t0 -500($fp) +lw $t0 -500($fp) +bne $t0 $zero label_119 +lw $t0 -516($fp) +lw $t1 -504($fp) +seq $t0 $t0 $t1 +sw $t0 -500($fp) +lw $t0 -500($fp) +bne $t0 $zero label_120 +lw $t0 0($fp) +lw $t1 -492($fp) +seq $t0 $t0 $t1 +sw $t0 -496($fp) +j label_121 +label_118: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -492($fp) +lw $t1 12($t0) +sw $t1 -520($fp) +lw $t0 -524($fp) +lw $t1 -520($fp) +seq $t0 $t0 $t1 +sw $t0 -496($fp) +j label_121 +label_119: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -492($fp) +lw $t1 12($t0) +sw $t1 -520($fp) +lw $t0 -524($fp) +move $a0 $t0 +lw $t0 -520($fp) +move $a1 $t0 +jal equal_str +sw $v0 -496($fp) +j label_121 +label_120: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -492($fp) +lw $t1 12($t0) +sw $t1 -520($fp) +lw $t0 -524($fp) +lw $t1 -520($fp) +seq $t0 $t0 $t1 +sw $t0 -496($fp) +j label_121 +label_121: +lw $t0 -496($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -528($fp) +lw $t0 -528($fp) +lw $t1 12($t0) +sw $t1 -532($fp) +lw $t0 -532($fp) +bne $t0 $zero label_172 +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -444($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -468($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -464($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -460($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -456($fp) +lw $t0 -468($fp) +lw $t1 -464($fp) +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_122 +lw $t0 -468($fp) +lw $t1 -460($fp) +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_123 +lw $t0 -468($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_124 +lw $t0 0($fp) +lw $t1 -444($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +j label_125 +label_122: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -476($fp) +lw $t0 -444($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -476($fp) +lw $t1 -472($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +j label_125 +label_123: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -476($fp) +lw $t0 -444($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -476($fp) +move $a0 $t0 +lw $t0 -472($fp) +move $a1 $t0 +jal equal_str +sw $v0 -448($fp) +j label_125 +label_124: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -476($fp) +lw $t0 -444($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -476($fp) +lw $t1 -472($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +j label_125 +label_125: +lw $t0 -448($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -480($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -484($fp) +lw $t0 -484($fp) +bne $t0 $zero label_170 +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -396($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -420($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -416($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -412($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -408($fp) +lw $t0 -420($fp) +lw $t1 -416($fp) +seq $t0 $t0 $t1 +sw $t0 -404($fp) +lw $t0 -404($fp) +bne $t0 $zero label_126 +lw $t0 -420($fp) +lw $t1 -412($fp) +seq $t0 $t0 $t1 +sw $t0 -404($fp) +lw $t0 -404($fp) +bne $t0 $zero label_127 +lw $t0 -420($fp) +lw $t1 -408($fp) +seq $t0 $t0 $t1 +sw $t0 -404($fp) +lw $t0 -404($fp) +bne $t0 $zero label_128 +lw $t0 0($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -400($fp) +j label_129 +label_126: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -396($fp) +lw $t1 12($t0) +sw $t1 -424($fp) +lw $t0 -428($fp) +lw $t1 -424($fp) +seq $t0 $t0 $t1 +sw $t0 -400($fp) +j label_129 +label_127: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -396($fp) +lw $t1 12($t0) +sw $t1 -424($fp) +lw $t0 -428($fp) +move $a0 $t0 +lw $t0 -424($fp) +move $a1 $t0 +jal equal_str +sw $v0 -400($fp) +j label_129 +label_128: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -396($fp) +lw $t1 12($t0) +sw $t1 -424($fp) +lw $t0 -428($fp) +lw $t1 -424($fp) +seq $t0 $t0 $t1 +sw $t0 -400($fp) +j label_129 +label_129: +lw $t0 -400($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -432($fp) +lw $t0 -432($fp) +lw $t1 12($t0) +sw $t1 -436($fp) +lw $t0 -436($fp) +bne $t0 $zero label_168 +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -348($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -372($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -368($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -364($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -360($fp) +lw $t0 -372($fp) +lw $t1 -368($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_130 +lw $t0 -372($fp) +lw $t1 -364($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_131 +lw $t0 -372($fp) +lw $t1 -360($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_132 +lw $t0 0($fp) +lw $t1 -348($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_133 +label_130: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -376($fp) +lw $t0 -380($fp) +lw $t1 -376($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_133 +label_131: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -376($fp) +lw $t0 -380($fp) +move $a0 $t0 +lw $t0 -376($fp) +move $a1 $t0 +jal equal_str +sw $v0 -352($fp) +j label_133 +label_132: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -376($fp) +lw $t0 -380($fp) +lw $t1 -376($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_133 +label_133: +lw $t0 -352($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -384($fp) +lw $t0 -384($fp) +lw $t1 12($t0) +sw $t1 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_166 +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -300($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -324($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -320($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -316($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -312($fp) +lw $t0 -324($fp) +lw $t1 -320($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +lw $t0 -308($fp) +bne $t0 $zero label_134 +lw $t0 -324($fp) +lw $t1 -316($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +lw $t0 -308($fp) +bne $t0 $zero label_135 +lw $t0 -324($fp) +lw $t1 -312($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +lw $t0 -308($fp) +bne $t0 $zero label_136 +lw $t0 0($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +j label_137 +label_134: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -332($fp) +lw $t1 -328($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +j label_137 +label_135: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -332($fp) +move $a0 $t0 +lw $t0 -328($fp) +move $a1 $t0 +jal equal_str +sw $v0 -304($fp) +j label_137 +label_136: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -332($fp) +lw $t1 -328($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +j label_137 +label_137: +lw $t0 -304($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -336($fp) +lw $t0 -336($fp) +lw $t1 12($t0) +sw $t1 -340($fp) +lw $t0 -340($fp) +bne $t0 $zero label_164 +li $t0 6 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -252($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -276($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -272($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -268($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -264($fp) +lw $t0 -276($fp) +lw $t1 -272($fp) +seq $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_138 +lw $t0 -276($fp) +lw $t1 -268($fp) +seq $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_139 +lw $t0 -276($fp) +lw $t1 -264($fp) +seq $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_140 +lw $t0 0($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -256($fp) +j label_141 +label_138: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -252($fp) +lw $t1 12($t0) +sw $t1 -280($fp) +lw $t0 -284($fp) +lw $t1 -280($fp) +seq $t0 $t0 $t1 +sw $t0 -256($fp) +j label_141 +label_139: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -252($fp) +lw $t1 12($t0) +sw $t1 -280($fp) +lw $t0 -284($fp) +move $a0 $t0 +lw $t0 -280($fp) +move $a1 $t0 +jal equal_str +sw $v0 -256($fp) +j label_141 +label_140: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -252($fp) +lw $t1 12($t0) +sw $t1 -280($fp) +lw $t0 -284($fp) +lw $t1 -280($fp) +seq $t0 $t0 $t1 +sw $t0 -256($fp) +j label_141 +label_141: +lw $t0 -256($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -288($fp) +lw $t0 -288($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -292($fp) +bne $t0 $zero label_162 +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -228($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -224($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -220($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -216($fp) +lw $t0 -228($fp) +lw $t1 -224($fp) +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_142 +lw $t0 -228($fp) +lw $t1 -220($fp) +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_143 +lw $t0 -228($fp) +lw $t1 -216($fp) +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_144 +lw $t0 0($fp) +lw $t1 -204($fp) +seq $t0 $t0 $t1 +sw $t0 -208($fp) +j label_145 +label_142: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -232($fp) +lw $t0 -236($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -208($fp) +j label_145 +label_143: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -232($fp) +lw $t0 -236($fp) +move $a0 $t0 +lw $t0 -232($fp) +move $a1 $t0 +jal equal_str +sw $v0 -208($fp) +j label_145 +label_144: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -232($fp) +lw $t0 -236($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -208($fp) +j label_145 +label_145: +lw $t0 -208($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -240($fp) +lw $t0 -240($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_160 +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -180($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -176($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -172($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -168($fp) +lw $t0 -180($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_146 +lw $t0 -180($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_147 +lw $t0 -180($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_148 +lw $t0 0($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +j label_149 +label_146: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -188($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +j label_149 +label_147: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -188($fp) +move $a0 $t0 +lw $t0 -184($fp) +move $a1 $t0 +jal equal_str +sw $v0 -160($fp) +j label_149 +label_148: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -188($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +j label_149 +label_149: +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -192($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_158 +li $t0 9 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -132($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -124($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -120($fp) +lw $t0 -132($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_150 +lw $t0 -132($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_151 +lw $t0 -132($fp) +lw $t1 -120($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_152 +lw $t0 0($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_153 +label_150: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_153 +label_151: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +move $a0 $t0 +lw $t0 -136($fp) +move $a1 $t0 +jal equal_str +sw $v0 -112($fp) +j label_153 +label_152: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_153 +label_153: +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -144($fp) +lw $t0 -144($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -148($fp) +bne $t0 $zero label_156 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_154 +j label_155 +label_154: +li $v0 4 +la $a0 data_40 +syscall +li $v0 10 +syscall +label_155: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -100($fp) +la $t0 data_41 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +sw $t0 -152($fp) +j label_157 +label_156: +la $t0 data_42 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -152($fp) +label_157: +lw $t0 -152($fp) +sw $t0 -200($fp) +j label_159 +label_158: +la $t0 data_43 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -200($fp) +label_159: +lw $t0 -200($fp) +sw $t0 -248($fp) +j label_161 +label_160: +la $t0 data_44 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +sw $t0 -248($fp) +label_161: +lw $t0 -248($fp) +sw $t0 -296($fp) +j label_163 +label_162: +la $t0 data_45 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +sw $t0 -296($fp) +label_163: +lw $t0 -296($fp) +sw $t0 -344($fp) +j label_165 +label_164: +la $t0 data_46 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -344($fp) +label_165: +lw $t0 -344($fp) +sw $t0 -392($fp) +j label_167 +label_166: +la $t0 data_47 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -392($fp) +label_167: +lw $t0 -392($fp) +sw $t0 -440($fp) +j label_169 +label_168: +la $t0 data_48 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -440($fp) +label_169: +lw $t0 -440($fp) +sw $t0 -488($fp) +j label_171 +label_170: +la $t0 data_49 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -488($fp) +label_171: +lw $t0 -488($fp) +sw $t0 -536($fp) +j label_173 +label_172: +la $t0 data_50 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -536($fp) +label_173: +lw $t0 -536($fp) +sw $t0 -584($fp) +j label_175 +label_174: +la $t0 data_51 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -584($fp) +label_175: +lw $v0 -584($fp) +addi $sp $sp 576 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_a2i_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -312 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -276($fp) - lw $t0 -276($fp) - bne $t0 $zero label_176 - j label_177 - label_176: - li $v0 4 - la $a0 data_52 - syscall - li $v0 10 - syscall - label_177: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -272($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -268($fp) - lw $t0 -272($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -300($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -296($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -292($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -288($fp) - lw $t0 -300($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_178 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_179 - lw $t0 -300($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_180 - lw $t0 -272($fp) - lw $t1 -268($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_181 - label_178: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_181 - label_179: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - move $a0 $t0 - lw $t0 -304($fp) - move $a1 $t0 - jal equal_str - sw $v0 -280($fp) - j label_181 - label_180: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_181 - label_181: - lw $t0 -280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -312($fp) - lw $t0 -312($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_212 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -220($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_182 - j label_183 - label_182: - li $v0 4 - la $a0 data_53 - syscall - li $v0 10 - syscall - label_183: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -216($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -208($fp) - la $t0 data_54 - sw $t0 -204($fp) - lw $t0 -204($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -200($fp) - lw $t0 -208($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -244($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -240($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -236($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -232($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_184 - lw $t0 -244($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_185 - lw $t0 -244($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_186 - lw $t0 -208($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_187 - label_184: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_187 - label_185: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - move $a0 $t0 - lw $t0 -248($fp) - move $a1 $t0 - jal equal_str - sw $v0 -224($fp) - j label_187 - label_186: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_187 - label_187: - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_204 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_188 - j label_189 - label_188: - li $v0 4 - la $a0 data_55 - syscall - li $v0 10 - syscall - label_189: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -140($fp) - la $t0 data_56 - sw $t0 -136($fp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 -140($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -176($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -172($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -168($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -164($fp) - lw $t0 -176($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_190 - lw $t0 -176($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_191 - lw $t0 -176($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_192 - lw $t0 -140($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_193 - label_190: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_193 - label_191: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - move $a0 $t0 - lw $t0 -180($fp) - move $a1 $t0 - jal equal_str - sw $v0 -156($fp) - j label_193 - label_192: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_193 - label_193: - lw $t0 -156($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -192($fp) - bne $t0 $zero label_196 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_194 - j label_195 - label_194: - li $v0 4 - la $a0 data_57 - syscall - li $v0 10 - syscall - label_195: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -124($fp) - lw $t0 -124($fp) - sw $t0 -196($fp) - j label_203 - label_196: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_197 - j label_198 - label_197: - li $v0 4 - la $a0 data_58 - syscall - li $v0 10 - syscall - label_198: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -112($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - sub $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_199 - j label_200 - label_199: - li $v0 4 - la $a0 data_59 - syscall - li $v0 10 - syscall - label_200: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -84($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_201 - j label_202 - label_201: - li $v0 4 - la $a0 data_60 - syscall - li $v0 10 - syscall - label_202: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -196($fp) - label_203: - lw $t0 -196($fp) - sw $t0 -264($fp) - j label_211 - label_204: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_205 - j label_206 - label_205: - li $v0 4 - la $a0 data_61 - syscall - li $v0 10 - syscall - label_206: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - sub $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_207 - j label_208 - label_207: - li $v0 4 - la $a0 data_62 - syscall - li $v0 10 - syscall - label_208: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -24($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_209 - j label_210 - label_209: - li $v0 4 - la $a0 data_63 - syscall - li $v0 10 - syscall - label_210: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -16($fp) - lw $t0 -16($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -68($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -264($fp) - label_211: - lw $t0 -264($fp) - sw $t0 -320($fp) - j label_213 - label_212: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -320($fp) - label_213: - lw $v0 -320($fp) - addi $sp $sp 312 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -312 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -276($fp) +lw $t0 -276($fp) +bne $t0 $zero label_176 +j label_177 +label_176: +li $v0 4 +la $a0 data_52 +syscall +li $v0 10 +syscall +label_177: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -272($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -268($fp) +lw $t0 -272($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -300($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -292($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -288($fp) +lw $t0 -300($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_178 +lw $t0 -300($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_179 +lw $t0 -300($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_180 +lw $t0 -272($fp) +lw $t1 -268($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_181 +label_178: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_181 +label_179: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +move $a0 $t0 +lw $t0 -304($fp) +move $a1 $t0 +jal equal_str +sw $v0 -280($fp) +j label_181 +label_180: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_181 +label_181: +lw $t0 -280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -312($fp) +lw $t0 -312($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_212 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -220($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_182 +j label_183 +label_182: +li $v0 4 +la $a0 data_53 +syscall +li $v0 10 +syscall +label_183: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -220($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -216($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -208($fp) +la $t0 data_54 +sw $t0 -204($fp) +lw $t0 -204($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -200($fp) +lw $t0 -208($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -244($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -240($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -236($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -232($fp) +lw $t0 -244($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_184 +lw $t0 -244($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_185 +lw $t0 -244($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_186 +lw $t0 -208($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_187 +label_184: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -252($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_187 +label_185: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -252($fp) +move $a0 $t0 +lw $t0 -248($fp) +move $a1 $t0 +jal equal_str +sw $v0 -224($fp) +j label_187 +label_186: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -252($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_187 +label_187: +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -256($fp) +lw $t0 -256($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_204 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -152($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_188 +j label_189 +label_188: +li $v0 4 +la $a0 data_55 +syscall +li $v0 10 +syscall +label_189: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -140($fp) +la $t0 data_56 +sw $t0 -136($fp) +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -132($fp) +lw $t0 -140($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -176($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -172($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -168($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -164($fp) +lw $t0 -176($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_190 +lw $t0 -176($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_191 +lw $t0 -176($fp) +lw $t1 -164($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_192 +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_193 +label_190: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -184($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_193 +label_191: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -184($fp) +move $a0 $t0 +lw $t0 -180($fp) +move $a1 $t0 +jal equal_str +sw $v0 -156($fp) +j label_193 +label_192: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -184($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_193 +label_193: +lw $t0 -156($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -188($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -192($fp) +bne $t0 $zero label_196 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_194 +j label_195 +label_194: +li $v0 4 +la $a0 data_57 +syscall +li $v0 10 +syscall +label_195: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -124($fp) +lw $t0 -124($fp) +sw $t0 -196($fp) +j label_203 +label_196: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_197 +j label_198 +label_197: +li $v0 4 +la $a0 data_58 +syscall +li $v0 10 +syscall +label_198: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +sub $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_199 +j label_200 +label_199: +li $v0 4 +la $a0 data_59 +syscall +li $v0 10 +syscall +label_200: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -84($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_201 +j label_202 +label_201: +li $v0 4 +la $a0 data_60 +syscall +li $v0 10 +syscall +label_202: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -196($fp) +label_203: +lw $t0 -196($fp) +sw $t0 -264($fp) +j label_211 +label_204: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_205 +j label_206 +label_205: +li $v0 4 +la $a0 data_61 +syscall +li $v0 10 +syscall +label_206: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +sub $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_207 +j label_208 +label_207: +li $v0 4 +la $a0 data_62 +syscall +li $v0 10 +syscall +label_208: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -24($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_209 +j label_210 +label_209: +li $v0 4 +la $a0 data_63 +syscall +li $v0 10 +syscall +label_210: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -16($fp) +lw $t0 -16($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -68($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -264($fp) +label_211: +lw $t0 -264($fp) +sw $t0 -320($fp) +j label_213 +label_212: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -320($fp) +label_213: +lw $v0 -320($fp) +addi $sp $sp 312 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_a2i_aux_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -124 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -128($fp) - lw $t0 -128($fp) - sw $t0 -132($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_214 - j label_215 - label_214: - li $v0 4 - la $a0 data_64 - syscall - li $v0 10 - syscall - label_215: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - sw $t0 -124($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) - sw $t0 -112($fp) - label_216: - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - slt $t1 $t0 $t1 - sw $t1 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_217 - j label_222 - label_217: - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - mul $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_218 - j label_219 - label_218: - li $v0 4 - la $a0 data_65 - syscall - li $v0 10 - syscall - label_219: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -40($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_220 - j label_221 - label_220: - li $v0 4 - la $a0 data_66 - syscall - li $v0 10 - syscall - label_221: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - add $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -132($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -112($fp) - j label_216 - label_222: - lw $v0 -132($fp) - addi $sp $sp 124 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -124 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -128($fp) +lw $t0 -128($fp) +sw $t0 -132($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_214 +j label_215 +label_214: +li $v0 4 +la $a0 data_64 +syscall +li $v0 10 +syscall +label_215: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +sw $t0 -124($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 -108($fp) +sw $t0 -112($fp) +label_216: +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +slt $t1 $t0 $t1 +sw $t1 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_217 +j label_222 +label_217: +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -64($fp) +lw $t1 -60($fp) +mul $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_218 +j label_219 +label_218: +li $v0 4 +la $a0 data_65 +syscall +li $v0 10 +syscall +label_219: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -40($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_220 +j label_221 +label_220: +li $v0 4 +la $a0 data_66 +syscall +li $v0 10 +syscall +label_221: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +lw $t1 -76($fp) +add $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -132($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -112($fp) +j label_216 +label_222: +lw $v0 -132($fp) +addi $sp $sp 124 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_i2a_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -148 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -136($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -132($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -124($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_223 - lw $t0 -136($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_224 - lw $t0 -136($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_225 - lw $t0 0($fp) - lw $t1 -112($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_226 - label_223: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_226 - label_224: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - move $a0 $t0 - lw $t0 -140($fp) - move $a1 $t0 - jal equal_str - sw $v0 -116($fp) - j label_226 - label_225: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_226 - label_226: - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -152($fp) - bne $t0 $zero label_235 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - slt $t1 $t0 $t1 - sw $t1 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_231 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -60($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - mul $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_227 - j label_228 - label_227: - li $v0 4 - la $a0 data_67 - syscall - li $v0 10 - syscall - label_228: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - la $t0 data_68 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_229 - j label_230 - label_229: - li $v0 4 - la $a0 data_69 - syscall - li $v0 10 - syscall - label_230: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -108($fp) - j label_234 - label_231: - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_232 - j label_233 - label_232: - li $v0 4 - la $a0 data_70 - syscall - li $v0 10 - syscall - label_233: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -108($fp) - label_234: - lw $t0 -108($fp) - sw $t0 -156($fp) - j label_236 - label_235: - la $t0 data_71 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -156($fp) - label_236: - lw $v0 -156($fp) - addi $sp $sp 148 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -148 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -136($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -124($fp) +lw $t0 -136($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_223 +lw $t0 -136($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_224 +lw $t0 -136($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_225 +lw $t0 0($fp) +lw $t1 -112($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_226 +label_223: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_226 +label_224: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -144($fp) +move $a0 $t0 +lw $t0 -140($fp) +move $a1 $t0 +jal equal_str +sw $v0 -116($fp) +j label_226 +label_225: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_226 +label_226: +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -152($fp) +bne $t0 $zero label_235 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +slt $t1 $t0 $t1 +sw $t1 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_231 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -60($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +mul $t0 $t0 $t1 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_227 +j label_228 +label_227: +li $v0 4 +la $a0 data_67 +syscall +li $v0 10 +syscall +label_228: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +la $t0 data_68 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_229 +j label_230 +label_229: +li $v0 4 +la $a0 data_69 +syscall +li $v0 10 +syscall +label_230: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -108($fp) +j label_234 +label_231: +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_232 +j label_233 +label_232: +li $v0 4 +la $a0 data_70 +syscall +li $v0 10 +syscall +label_233: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -108($fp) +label_234: +lw $t0 -108($fp) +sw $t0 -156($fp) +j label_236 +label_235: +la $t0 data_71 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -156($fp) +label_236: +lw $v0 -156($fp) +addi $sp $sp 148 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_i2a_aux_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -144 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -132($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -124($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_237 - lw $t0 -132($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_238 - lw $t0 -132($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_239 - lw $t0 0($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_240 - label_237: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_240 - label_238: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - move $a0 $t0 - lw $t0 -136($fp) - move $a1 $t0 - jal equal_str - sw $v0 -112($fp) - j label_240 - label_239: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_240 - label_240: - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_249 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -80($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -84($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_241 - j label_242 - label_241: - li $v0 4 - la $a0 data_72 - syscall - li $v0 10 - syscall - label_242: - lw $t0 -96($fp) - lw $t1 -92($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -104($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - mul $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - sub $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_243 - j label_244 - label_243: - li $v0 4 - la $a0 data_73 - syscall - li $v0 10 - syscall - label_244: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_245 - j label_246 - label_245: - li $v0 4 - la $a0 data_74 - syscall - li $v0 10 - syscall - label_246: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_247 - j label_248 - label_247: - li $v0 4 - la $a0 data_75 - syscall - li $v0 10 - syscall - label_248: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -152($fp) - j label_250 - label_249: - la $t0 data_76 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -152($fp) - label_250: - lw $v0 -152($fp) - addi $sp $sp 144 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -144 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -132($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -124($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -120($fp) +lw $t0 -132($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_237 +lw $t0 -132($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_238 +lw $t0 -132($fp) +lw $t1 -120($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_239 +lw $t0 0($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_240 +label_237: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_240 +label_238: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +move $a0 $t0 +lw $t0 -136($fp) +move $a1 $t0 +jal equal_str +sw $v0 -112($fp) +j label_240 +label_239: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_240 +label_240: +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -144($fp) +lw $t0 -144($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -148($fp) +bne $t0 $zero label_249 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -80($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -80($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -84($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_241 +j label_242 +label_241: +li $v0 4 +la $a0 data_72 +syscall +li $v0 10 +syscall +label_242: +lw $t0 -96($fp) +lw $t1 -92($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +sw $t0 -104($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +mul $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -72($fp) +lw $t1 -68($fp) +sub $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_243 +j label_244 +label_243: +li $v0 4 +la $a0 data_73 +syscall +li $v0 10 +syscall +label_244: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_245 +j label_246 +label_245: +li $v0 4 +la $a0 data_74 +syscall +li $v0 10 +syscall +label_246: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_247 +j label_248 +label_247: +li $v0 4 +la $a0 data_75 +syscall +li $v0 10 +syscall +label_248: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -152($fp) +j label_250 +label_249: +la $t0 data_76 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -152($fp) +label_250: +lw $v0 -152($fp) +addi $sp $sp 144 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 10 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A2I - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 10 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_A2I +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - la $t0 data_14 - sw $t0 -28($fp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - lw $t1 -28($fp) - sw $t1 20($t0) - lw $t0 0($fp) - lw $t1 -24($fp) - sw $t1 16($t0) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 12($t0) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 24($t0) - lw $v0 0($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +la $t0 data_14 +sw $t0 -28($fp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 0($fp) +lw $t1 -28($fp) +sw $t1 20($t0) +lw $t0 0($fp) +lw $t1 -24($fp) +sw $t1 16($t0) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 12($t0) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 24($t0) +lw $v0 0($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_menu_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -376 - la $t0 data_77 - sw $t0 -368($fp) - lw $t0 -368($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -364($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -360($fp) - lw $t0 -360($fp) - bne $t0 $zero label_251 - j label_252 - label_251: - li $v0 4 - la $a0 data_78 - syscall - li $v0 10 - syscall - label_252: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -364($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -356($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_253 - j label_254 - label_253: - li $v0 4 - la $a0 data_79 - syscall - li $v0 10 - syscall - label_254: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -348($fp) - la $t0 data_80 - sw $t0 -344($fp) - lw $t0 -344($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -340($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_255 - j label_256 - label_255: - li $v0 4 - la $a0 data_81 - syscall - li $v0 10 - syscall - label_256: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -340($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -332($fp) - la $t0 data_82 - sw $t0 -328($fp) - lw $t0 -328($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -324($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -320($fp) - lw $t0 -320($fp) - bne $t0 $zero label_257 - j label_258 - label_257: - li $v0 4 - la $a0 data_83 - syscall - li $v0 10 - syscall - label_258: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -324($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -316($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -312($fp) - lw $t0 -312($fp) - bne $t0 $zero label_259 - j label_260 - label_259: - li $v0 4 - la $a0 data_84 - syscall - li $v0 10 - syscall - label_260: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -308($fp) - la $t0 data_85 - sw $t0 -304($fp) - lw $t0 -304($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -296($fp) - lw $t0 -296($fp) - bne $t0 $zero label_261 - j label_262 - label_261: - li $v0 4 - la $a0 data_86 - syscall - li $v0 10 - syscall - label_262: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -300($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -292($fp) - la $t0 data_87 - sw $t0 -288($fp) - lw $t0 -288($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -284($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_263 - j label_264 - label_263: - li $v0 4 - la $a0 data_88 - syscall - li $v0 10 - syscall - label_264: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -284($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -276($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_265 - j label_266 - label_265: - li $v0 4 - la $a0 data_89 - syscall - li $v0 10 - syscall - label_266: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -268($fp) - la $t0 data_90 - sw $t0 -264($fp) - lw $t0 -264($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -260($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_267 - j label_268 - label_267: - li $v0 4 - la $a0 data_91 - syscall - li $v0 10 - syscall - label_268: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -260($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -252($fp) - la $t0 data_92 - sw $t0 -248($fp) - lw $t0 -248($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -244($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -240($fp) - lw $t0 -240($fp) - bne $t0 $zero label_269 - j label_270 - label_269: - li $v0 4 - la $a0 data_93 - syscall - li $v0 10 - syscall - label_270: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -244($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -236($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_271 - j label_272 - label_271: - li $v0 4 - la $a0 data_94 - syscall - li $v0 10 - syscall - label_272: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -228($fp) - la $t0 data_95 - sw $t0 -224($fp) - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -220($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_273 - j label_274 - label_273: - li $v0 4 - la $a0 data_96 - syscall - li $v0 10 - syscall - label_274: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -212($fp) - la $t0 data_97 - sw $t0 -208($fp) - lw $t0 -208($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -200($fp) - lw $t0 -200($fp) - bne $t0 $zero label_275 - j label_276 - label_275: - li $v0 4 - la $a0 data_98 - syscall - li $v0 10 - syscall - label_276: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -204($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -196($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -192($fp) - lw $t0 -192($fp) - bne $t0 $zero label_277 - j label_278 - label_277: - li $v0 4 - la $a0 data_99 - syscall - li $v0 10 - syscall - label_278: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -188($fp) - la $t0 data_100 - sw $t0 -184($fp) - lw $t0 -184($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -180($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_279 - j label_280 - label_279: - li $v0 4 - la $a0 data_101 - syscall - li $v0 10 - syscall - label_280: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -180($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -172($fp) - la $t0 data_102 - sw $t0 -168($fp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_281 - j label_282 - label_281: - li $v0 4 - la $a0 data_103 - syscall - li $v0 10 - syscall - label_282: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -164($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -156($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -152($fp) - lw $t0 -152($fp) - bne $t0 $zero label_283 - j label_284 - label_283: - li $v0 4 - la $a0 data_104 - syscall - li $v0 10 - syscall - label_284: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -148($fp) - la $t0 data_105 - sw $t0 -144($fp) - lw $t0 -144($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_285 - j label_286 - label_285: - li $v0 4 - la $a0 data_106 - syscall - li $v0 10 - syscall - label_286: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -132($fp) - la $t0 data_107 - sw $t0 -128($fp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_287 - j label_288 - label_287: - li $v0 4 - la $a0 data_108 - syscall - li $v0 10 - syscall - label_288: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -116($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_289 - j label_290 - label_289: - li $v0 4 - la $a0 data_109 - syscall - li $v0 10 - syscall - label_290: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -108($fp) - la $t0 data_110 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_291 - j label_292 - label_291: - li $v0 4 - la $a0 data_111 - syscall - li $v0 10 - syscall - label_292: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -92($fp) - la $t0 data_112 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_293 - j label_294 - label_293: - li $v0 4 - la $a0 data_113 - syscall - li $v0 10 - syscall - label_294: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -76($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_295 - j label_296 - label_295: - li $v0 4 - la $a0 data_114 - syscall - li $v0 10 - syscall - label_296: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -68($fp) - la $t0 data_115 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_297 - j label_298 - label_297: - li $v0 4 - la $a0 data_116 - syscall - li $v0 10 - syscall - label_298: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - la $t0 data_117 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_299 - j label_300 - label_299: - li $v0 4 - la $a0 data_118 - syscall - li $v0 10 - syscall - label_300: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - la $t0 data_119 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_301 - j label_302 - label_301: - li $v0 4 - la $a0 data_120 - syscall - li $v0 10 - syscall - label_302: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_303 - j label_304 - label_303: - li $v0 4 - la $a0 data_121 - syscall - li $v0 10 - syscall - label_304: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 376 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -376 +la $t0 data_77 +sw $t0 -368($fp) +lw $t0 -368($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -364($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -360($fp) +lw $t0 -360($fp) +bne $t0 $zero label_251 +j label_252 +label_251: +li $v0 4 +la $a0 data_78 +syscall +li $v0 10 +syscall +label_252: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -364($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -356($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -352($fp) +lw $t0 -352($fp) +bne $t0 $zero label_253 +j label_254 +label_253: +li $v0 4 +la $a0 data_79 +syscall +li $v0 10 +syscall +label_254: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -348($fp) +la $t0 data_80 +sw $t0 -344($fp) +lw $t0 -344($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -340($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_255 +j label_256 +label_255: +li $v0 4 +la $a0 data_81 +syscall +li $v0 10 +syscall +label_256: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -340($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -332($fp) +la $t0 data_82 +sw $t0 -328($fp) +lw $t0 -328($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -324($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -320($fp) +lw $t0 -320($fp) +bne $t0 $zero label_257 +j label_258 +label_257: +li $v0 4 +la $a0 data_83 +syscall +li $v0 10 +syscall +label_258: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -324($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -316($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -312($fp) +lw $t0 -312($fp) +bne $t0 $zero label_259 +j label_260 +label_259: +li $v0 4 +la $a0 data_84 +syscall +li $v0 10 +syscall +label_260: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -308($fp) +la $t0 data_85 +sw $t0 -304($fp) +lw $t0 -304($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -300($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -296($fp) +lw $t0 -296($fp) +bne $t0 $zero label_261 +j label_262 +label_261: +li $v0 4 +la $a0 data_86 +syscall +li $v0 10 +syscall +label_262: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -300($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -292($fp) +la $t0 data_87 +sw $t0 -288($fp) +lw $t0 -288($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -284($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -280($fp) +lw $t0 -280($fp) +bne $t0 $zero label_263 +j label_264 +label_263: +li $v0 4 +la $a0 data_88 +syscall +li $v0 10 +syscall +label_264: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -284($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -276($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -272($fp) +lw $t0 -272($fp) +bne $t0 $zero label_265 +j label_266 +label_265: +li $v0 4 +la $a0 data_89 +syscall +li $v0 10 +syscall +label_266: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -268($fp) +la $t0 data_90 +sw $t0 -264($fp) +lw $t0 -264($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -260($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -256($fp) +lw $t0 -256($fp) +bne $t0 $zero label_267 +j label_268 +label_267: +li $v0 4 +la $a0 data_91 +syscall +li $v0 10 +syscall +label_268: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -260($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -252($fp) +la $t0 data_92 +sw $t0 -248($fp) +lw $t0 -248($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -244($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -240($fp) +lw $t0 -240($fp) +bne $t0 $zero label_269 +j label_270 +label_269: +li $v0 4 +la $a0 data_93 +syscall +li $v0 10 +syscall +label_270: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -244($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -236($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_271 +j label_272 +label_271: +li $v0 4 +la $a0 data_94 +syscall +li $v0 10 +syscall +label_272: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -228($fp) +la $t0 data_95 +sw $t0 -224($fp) +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -220($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -216($fp) +lw $t0 -216($fp) +bne $t0 $zero label_273 +j label_274 +label_273: +li $v0 4 +la $a0 data_96 +syscall +li $v0 10 +syscall +label_274: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -220($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -212($fp) +la $t0 data_97 +sw $t0 -208($fp) +lw $t0 -208($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -200($fp) +lw $t0 -200($fp) +bne $t0 $zero label_275 +j label_276 +label_275: +li $v0 4 +la $a0 data_98 +syscall +li $v0 10 +syscall +label_276: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -204($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -196($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -192($fp) +lw $t0 -192($fp) +bne $t0 $zero label_277 +j label_278 +label_277: +li $v0 4 +la $a0 data_99 +syscall +li $v0 10 +syscall +label_278: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -188($fp) +la $t0 data_100 +sw $t0 -184($fp) +lw $t0 -184($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -180($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_279 +j label_280 +label_279: +li $v0 4 +la $a0 data_101 +syscall +li $v0 10 +syscall +label_280: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -180($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -172($fp) +la $t0 data_102 +sw $t0 -168($fp) +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_281 +j label_282 +label_281: +li $v0 4 +la $a0 data_103 +syscall +li $v0 10 +syscall +label_282: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -164($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -156($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -152($fp) +lw $t0 -152($fp) +bne $t0 $zero label_283 +j label_284 +label_283: +li $v0 4 +la $a0 data_104 +syscall +li $v0 10 +syscall +label_284: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -148($fp) +la $t0 data_105 +sw $t0 -144($fp) +lw $t0 -144($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -140($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_285 +j label_286 +label_285: +li $v0 4 +la $a0 data_106 +syscall +li $v0 10 +syscall +label_286: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -140($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -132($fp) +la $t0 data_107 +sw $t0 -128($fp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -124($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_287 +j label_288 +label_287: +li $v0 4 +la $a0 data_108 +syscall +li $v0 10 +syscall +label_288: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -116($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -112($fp) +lw $t0 -112($fp) +bne $t0 $zero label_289 +j label_290 +label_289: +li $v0 4 +la $a0 data_109 +syscall +li $v0 10 +syscall +label_290: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -108($fp) +la $t0 data_110 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_291 +j label_292 +label_291: +li $v0 4 +la $a0 data_111 +syscall +li $v0 10 +syscall +label_292: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -92($fp) +la $t0 data_112 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_293 +j label_294 +label_293: +li $v0 4 +la $a0 data_113 +syscall +li $v0 10 +syscall +label_294: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -76($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_295 +j label_296 +label_295: +li $v0 4 +la $a0 data_114 +syscall +li $v0 10 +syscall +label_296: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -68($fp) +la $t0 data_115 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_297 +j label_298 +label_297: +li $v0 4 +la $a0 data_116 +syscall +li $v0 10 +syscall +label_298: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +la $t0 data_117 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_299 +j label_300 +label_299: +li $v0 4 +la $a0 data_118 +syscall +li $v0 10 +syscall +label_300: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +la $t0 data_119 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_301 +j label_302 +label_301: +li $v0 4 +la $a0 data_120 +syscall +li $v0 10 +syscall +label_302: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_303 +j label_304 +label_303: +li $v0 4 +la $a0 data_121 +syscall +li $v0 10 +syscall +label_304: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 376 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_prompt_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - la $t0 data_122 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_305 - j label_306 - label_305: - li $v0 4 - la $a0 data_123 - syscall - li $v0 10 - syscall - label_306: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - la $t0 data_124 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_307 - j label_308 - label_307: - li $v0 4 - la $a0 data_125 - syscall - li $v0 10 - syscall - label_308: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_309 - j label_310 - label_309: - li $v0 4 - la $a0 data_126 - syscall - li $v0 10 - syscall - label_310: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -56 +la $t0 data_122 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_305 +j label_306 +label_305: +li $v0 4 +la $a0 data_123 +syscall +li $v0 10 +syscall +label_306: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +la $t0 data_124 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_307 +j label_308 +label_307: +li $v0 4 +la $a0 data_125 +syscall +li $v0 10 +syscall +label_308: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_309 +j label_310 +label_309: +li $v0 4 +la $a0 data_126 +syscall +li $v0 10 +syscall +label_310: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 56 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_get_int_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -44 - jal __init_at_A2I - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_311 - j label_312 - label_311: - li $v0 4 - la $a0 data_127 - syscall - li $v0 10 - syscall - label_312: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -28($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_313 - j label_314 - label_313: - li $v0 4 - la $a0 data_128 - syscall - li $v0 10 - syscall - label_314: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 44 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -44 +jal __init_at_A2I +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_311 +j label_312 +label_311: +li $v0 4 +la $a0 data_127 +syscall +li $v0 10 +syscall +label_312: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -28($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_313 +j label_314 +label_313: +li $v0 4 +la $a0 data_128 +syscall +li $v0 10 +syscall +label_314: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 44 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_is_even_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -200 - lw $t0 0($fp) - sw $t0 -192($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -176($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -176($fp) - lw $t1 -172($fp) - slt $t1 $t0 $t1 - sw $t1 -168($fp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -180($fp) - lw $t0 -180($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -184($fp) - bne $t0 $zero label_329 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -140($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -132($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -128($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_315 - lw $t0 -140($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_316 - lw $t0 -140($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_317 - lw $t0 -116($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_318 - label_315: - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_318 - label_316: - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - move $a0 $t0 - lw $t0 -144($fp) - move $a1 $t0 - jal equal_str - sw $v0 -120($fp) - j label_318 - label_317: - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_318 - label_318: - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -156($fp) - bne $t0 $zero label_327 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_319 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_320 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_321 - lw $t0 -68($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_322 - label_319: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_322 - label_320: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_322 - label_321: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_322 - label_322: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_325 - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - sub $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_323 - j label_324 - label_323: - li $v0 4 - la $a0 data_129 - syscall - li $v0 10 - syscall - label_324: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -112($fp) - j label_326 - label_325: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -112($fp) - label_326: - lw $t0 -112($fp) - sw $t0 -160($fp) - j label_328 - label_327: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -160($fp) - label_328: - lw $t0 -160($fp) - sw $t0 -188($fp) - j label_332 - label_329: - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -24($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -20($fp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_330 - j label_331 - label_330: - li $v0 4 - la $a0 data_130 - syscall - li $v0 10 - syscall - label_331: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -188($fp) - label_332: - lw $v0 -188($fp) - addi $sp $sp 200 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -200 +lw $t0 0($fp) +sw $t0 -192($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -172($fp) +lw $t0 -176($fp) +lw $t1 -172($fp) +slt $t1 $t0 $t1 +sw $t1 -168($fp) +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -180($fp) +lw $t0 -180($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -184($fp) +bne $t0 $zero label_329 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -140($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -136($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -128($fp) +lw $t0 -140($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_315 +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_316 +lw $t0 -140($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_317 +lw $t0 -116($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +j label_318 +label_315: +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -148($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +j label_318 +label_316: +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -148($fp) +move $a0 $t0 +lw $t0 -144($fp) +move $a1 $t0 +jal equal_str +sw $v0 -120($fp) +j label_318 +label_317: +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -148($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +j label_318 +label_318: +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -152($fp) +lw $t0 -152($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -156($fp) +bne $t0 $zero label_327 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -92($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -80($fp) +lw $t0 -92($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_319 +lw $t0 -92($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_320 +lw $t0 -92($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_321 +lw $t0 -68($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_322 +label_319: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_322 +label_320: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -96($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_322 +label_321: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_322 +label_322: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_325 +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -60($fp) +lw $t1 -56($fp) +sub $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_323 +j label_324 +label_323: +li $v0 4 +la $a0 data_129 +syscall +li $v0 10 +syscall +label_324: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -112($fp) +j label_326 +label_325: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -112($fp) +label_326: +lw $t0 -112($fp) +sw $t0 -160($fp) +j label_328 +label_327: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -160($fp) +label_328: +lw $t0 -160($fp) +sw $t0 -188($fp) +j label_332 +label_329: +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -24($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -20($fp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_330 +j label_331 +label_330: +li $v0 4 +la $a0 data_130 +syscall +li $v0 10 +syscall +label_331: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -188($fp) +label_332: +lw $v0 -188($fp) +addi $sp $sp 200 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_class_type_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -156 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_333 - j label_334 - label_333: - li $v0 4 - la $a0 data_131 - syscall - li $v0 10 - syscall - label_334: - la $t0 types_table - addi $t0 $t0 36 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_335 - la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_338 - la $t0 types_table - addi $t0 $t0 32 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_341 - la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_344 - la $t0 types_table - addi $t0 $t0 20 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_347 - la $t0 types_table - addi $t0 $t0 0 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - la $t0 types_table - addi $t0 $t0 4 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - la $t0 types_table - addi $t0 $t0 40 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - la $t0 types_table - addi $t0 $t0 44 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - li $v0 4 - la $a0 data_132 - syscall - li $v0 10 - syscall - label_335: - lw $t0 0($fp) - sw $t0 -128($fp) - la $t0 data_133 - sw $t0 -124($fp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_336 - j label_337 - label_336: - li $v0 4 - la $a0 data_134 - syscall - li $v0 10 - syscall - label_337: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -148($fp) - j label_353 - label_338: - lw $t0 0($fp) - sw $t0 -108($fp) - la $t0 data_135 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_339 - j label_340 - label_339: - li $v0 4 - la $a0 data_136 - syscall - li $v0 10 - syscall - label_340: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -148($fp) - j label_353 - label_341: - lw $t0 0($fp) - sw $t0 -88($fp) - la $t0 data_137 - sw $t0 -84($fp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_342 - j label_343 - label_342: - li $v0 4 - la $a0 data_138 - syscall - li $v0 10 - syscall - label_343: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -148($fp) - j label_353 - label_344: - lw $t0 0($fp) - sw $t0 -68($fp) - la $t0 data_139 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_345 - j label_346 - label_345: - li $v0 4 - la $a0 data_140 - syscall - li $v0 10 - syscall - label_346: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -148($fp) - j label_353 - label_347: - lw $t0 0($fp) - sw $t0 -48($fp) - la $t0 data_141 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_348 - j label_349 - label_348: - li $v0 4 - la $a0 data_142 - syscall - li $v0 10 - syscall - label_349: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -148($fp) - j label_353 - label_350: - lw $t0 0($fp) - sw $t0 -28($fp) - la $t0 data_143 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_351 - j label_352 - label_351: - li $v0 4 - la $a0 data_144 - syscall - li $v0 10 - syscall - label_352: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -148($fp) - j label_353 - label_353: - lw $v0 -148($fp) - addi $sp $sp 156 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -156 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_333 +j label_334 +label_333: +li $v0 4 +la $a0 data_131 +syscall +li $v0 10 +syscall +label_334: +la $t0 types_table +addi $t0 $t0 36 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_335 +la $t0 types_table +addi $t0 $t0 28 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_338 +la $t0 types_table +addi $t0 $t0 32 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_341 +la $t0 types_table +addi $t0 $t0 24 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_344 +la $t0 types_table +addi $t0 $t0 20 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_347 +la $t0 types_table +addi $t0 $t0 0 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +la $t0 types_table +addi $t0 $t0 4 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +la $t0 types_table +addi $t0 $t0 40 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +la $t0 types_table +addi $t0 $t0 44 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_350 +li $v0 4 +la $a0 data_132 +syscall +li $v0 10 +syscall +label_335: +lw $t0 0($fp) +sw $t0 -128($fp) +la $t0 data_133 +sw $t0 -124($fp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_336 +j label_337 +label_336: +li $v0 4 +la $a0 data_134 +syscall +li $v0 10 +syscall +label_337: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -112($fp) +lw $t0 -112($fp) +sw $t0 -148($fp) +j label_353 +label_338: +lw $t0 0($fp) +sw $t0 -108($fp) +la $t0 data_135 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_339 +j label_340 +label_339: +li $v0 4 +la $a0 data_136 +syscall +li $v0 10 +syscall +label_340: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -92($fp) +lw $t0 -92($fp) +sw $t0 -148($fp) +j label_353 +label_341: +lw $t0 0($fp) +sw $t0 -88($fp) +la $t0 data_137 +sw $t0 -84($fp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_342 +j label_343 +label_342: +li $v0 4 +la $a0 data_138 +syscall +li $v0 10 +syscall +label_343: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -148($fp) +j label_353 +label_344: +lw $t0 0($fp) +sw $t0 -68($fp) +la $t0 data_139 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_345 +j label_346 +label_345: +li $v0 4 +la $a0 data_140 +syscall +li $v0 10 +syscall +label_346: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -148($fp) +j label_353 +label_347: +lw $t0 0($fp) +sw $t0 -48($fp) +la $t0 data_141 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_348 +j label_349 +label_348: +li $v0 4 +la $a0 data_142 +syscall +li $v0 10 +syscall +label_349: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -148($fp) +j label_353 +label_350: +lw $t0 0($fp) +sw $t0 -28($fp) +la $t0 data_143 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_351 +j label_352 +label_351: +li $v0 4 +la $a0 data_144 +syscall +li $v0 10 +syscall +label_352: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -148($fp) +j label_353 +label_353: +lw $v0 -148($fp) +addi $sp $sp 156 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -64 - jal __init_at_A2I - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -56($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_354 - j label_355 - label_354: - li $v0 4 - la $a0 data_145 - syscall - li $v0 10 - syscall - label_355: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -56($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_356 - j label_357 - label_356: - li $v0 4 - la $a0 data_146 - syscall - li $v0 10 - syscall - label_357: - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_358 - j label_359 - label_358: - li $v0 4 - la $a0 data_147 - syscall - li $v0 10 - syscall - label_359: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - la $t0 data_148 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_360 - j label_361 - label_360: - li $v0 4 - la $a0 data_149 - syscall - li $v0 10 - syscall - label_361: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 64 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -64 +jal __init_at_A2I +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -56($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_354 +j label_355 +label_354: +li $v0 4 +la $a0 data_145 +syscall +li $v0 10 +syscall +label_355: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -56($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_356 +j label_357 +label_356: +li $v0 4 +la $a0 data_146 +syscall +li $v0 10 +syscall +label_357: +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_358 +j label_359 +label_358: +li $v0 4 +la $a0 data_147 +syscall +li $v0 10 +syscall +label_359: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +la $t0 data_148 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_360 +j label_361 +label_360: +li $v0 4 +la $a0 data_149 +syscall +li $v0 10 +syscall +label_361: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 64 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -1208 - jal __init_at_A - sw $v0 -1200($fp) - lw $t0 -1200($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - label_362: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1196($fp) - lw $t0 -1196($fp) - bne $t0 $zero label_363 - j label_538 - label_363: - la $t0 data_150 - sw $t0 -1192($fp) - lw $t0 -1192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1188($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1184($fp) - lw $t0 -1184($fp) - bne $t0 $zero label_364 - j label_365 - label_364: - li $v0 4 - la $a0 data_151 - syscall - li $v0 10 - syscall - label_365: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1188($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1180($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1176($fp) - lw $t0 -1176($fp) - bne $t0 $zero label_366 - j label_367 - label_366: - li $v0 4 - la $a0 data_152 - syscall - li $v0 10 - syscall - label_367: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1172($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1160($fp) - lw $t0 -1160($fp) - bne $t0 $zero label_368 - j label_369 - label_368: - li $v0 4 - la $a0 data_153 - syscall - li $v0 10 - syscall - label_369: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -1156($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1152($fp) - lw $t0 -1152($fp) - bne $t0 $zero label_370 - j label_371 - label_370: - li $v0 4 - la $a0 data_154 - syscall - li $v0 10 - syscall - label_371: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1156($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1148($fp) - lw $t0 -1148($fp) - lw $t1 12($t0) - sw $t1 -1164($fp) - lw $t0 -1164($fp) - bne $t0 $zero label_374 - la $t0 data_155 - sw $t0 -1144($fp) - lw $t0 -1144($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1140($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1136($fp) - lw $t0 -1136($fp) - bne $t0 $zero label_372 - j label_373 - label_372: - li $v0 4 - la $a0 data_156 - syscall - li $v0 10 - syscall - label_373: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1132($fp) - lw $t0 -1132($fp) - sw $t0 -1168($fp) - j label_377 - label_374: - la $t0 data_157 - sw $t0 -1128($fp) - lw $t0 -1128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1124($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1120($fp) - lw $t0 -1120($fp) - bne $t0 $zero label_375 - j label_376 - label_375: - li $v0 4 - la $a0 data_158 - syscall - li $v0 10 - syscall - label_376: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1116($fp) - lw $t0 -1116($fp) - sw $t0 -1168($fp) - label_377: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1112($fp) - lw $t0 -1112($fp) - bne $t0 $zero label_378 - j label_379 - label_378: - li $v0 4 - la $a0 data_159 - syscall - li $v0 10 - syscall - label_379: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1108($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1104($fp) - lw $t0 -1104($fp) - bne $t0 $zero label_380 - j label_381 - label_380: - li $v0 4 - la $a0 data_160 - syscall - li $v0 10 - syscall - label_381: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -1100($fp) - lw $t0 -1100($fp) - lw $t1 0($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - la $t0 data_161 - sw $t0 -1052($fp) - lw $t0 -1052($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1048($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -1076($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -1072($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -1068($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -1064($fp) - lw $t0 -1076($fp) - lw $t1 -1072($fp) - seq $t0 $t0 $t1 - sw $t0 -1060($fp) - lw $t0 -1060($fp) - bne $t0 $zero label_382 - lw $t0 -1076($fp) - lw $t1 -1068($fp) - seq $t0 $t0 $t1 - sw $t0 -1060($fp) - lw $t0 -1060($fp) - bne $t0 $zero label_383 - lw $t0 -1076($fp) - lw $t1 -1064($fp) - seq $t0 $t0 $t1 - sw $t0 -1060($fp) - lw $t0 -1060($fp) - bne $t0 $zero label_384 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -1048($fp) - seq $t0 $t0 $t1 - sw $t0 -1056($fp) - j label_385 - label_382: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1084($fp) - lw $t0 -1048($fp) - lw $t1 12($t0) - sw $t1 -1080($fp) - lw $t0 -1084($fp) - lw $t1 -1080($fp) - seq $t0 $t0 $t1 - sw $t0 -1056($fp) - j label_385 - label_383: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1084($fp) - lw $t0 -1048($fp) - lw $t1 12($t0) - sw $t1 -1080($fp) - lw $t0 -1084($fp) - move $a0 $t0 - lw $t0 -1080($fp) - move $a1 $t0 - jal equal_str - sw $v0 -1056($fp) - j label_385 - label_384: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1084($fp) - lw $t0 -1048($fp) - lw $t1 12($t0) - sw $t1 -1080($fp) - lw $t0 -1084($fp) - lw $t1 -1080($fp) - seq $t0 $t0 $t1 - sw $t0 -1056($fp) - j label_385 - label_385: - lw $t0 -1056($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -1088($fp) - lw $t0 -1088($fp) - lw $t1 12($t0) - sw $t1 -1092($fp) - lw $t0 -1092($fp) - bne $t0 $zero label_526 - la $t0 data_162 - sw $t0 -1000($fp) - lw $t0 -1000($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -996($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -1024($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -1020($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -1016($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -1012($fp) - lw $t0 -1024($fp) - lw $t1 -1020($fp) - seq $t0 $t0 $t1 - sw $t0 -1008($fp) - lw $t0 -1008($fp) - bne $t0 $zero label_386 - lw $t0 -1024($fp) - lw $t1 -1016($fp) - seq $t0 $t0 $t1 - sw $t0 -1008($fp) - lw $t0 -1008($fp) - bne $t0 $zero label_387 - lw $t0 -1024($fp) - lw $t1 -1012($fp) - seq $t0 $t0 $t1 - sw $t0 -1008($fp) - lw $t0 -1008($fp) - bne $t0 $zero label_388 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -996($fp) - seq $t0 $t0 $t1 - sw $t0 -1004($fp) - j label_389 - label_386: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1032($fp) - lw $t0 -996($fp) - lw $t1 12($t0) - sw $t1 -1028($fp) - lw $t0 -1032($fp) - lw $t1 -1028($fp) - seq $t0 $t0 $t1 - sw $t0 -1004($fp) - j label_389 - label_387: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1032($fp) - lw $t0 -996($fp) - lw $t1 12($t0) - sw $t1 -1028($fp) - lw $t0 -1032($fp) - move $a0 $t0 - lw $t0 -1028($fp) - move $a1 $t0 - jal equal_str - sw $v0 -1004($fp) - j label_389 - label_388: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1032($fp) - lw $t0 -996($fp) - lw $t1 12($t0) - sw $t1 -1028($fp) - lw $t0 -1032($fp) - lw $t1 -1028($fp) - seq $t0 $t0 $t1 - sw $t0 -1004($fp) - j label_389 - label_389: - lw $t0 -1004($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -1036($fp) - lw $t0 -1036($fp) - lw $t1 12($t0) - sw $t1 -1040($fp) - lw $t0 -1040($fp) - bne $t0 $zero label_506 - la $t0 data_163 - sw $t0 -948($fp) - lw $t0 -948($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -944($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -972($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -968($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -964($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -960($fp) - lw $t0 -972($fp) - lw $t1 -968($fp) - seq $t0 $t0 $t1 - sw $t0 -956($fp) - lw $t0 -956($fp) - bne $t0 $zero label_390 - lw $t0 -972($fp) - lw $t1 -964($fp) - seq $t0 $t0 $t1 - sw $t0 -956($fp) - lw $t0 -956($fp) - bne $t0 $zero label_391 - lw $t0 -972($fp) - lw $t1 -960($fp) - seq $t0 $t0 $t1 - sw $t0 -956($fp) - lw $t0 -956($fp) - bne $t0 $zero label_392 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -944($fp) - seq $t0 $t0 $t1 - sw $t0 -952($fp) - j label_393 - label_390: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -980($fp) - lw $t0 -944($fp) - lw $t1 12($t0) - sw $t1 -976($fp) - lw $t0 -980($fp) - lw $t1 -976($fp) - seq $t0 $t0 $t1 - sw $t0 -952($fp) - j label_393 - label_391: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -980($fp) - lw $t0 -944($fp) - lw $t1 12($t0) - sw $t1 -976($fp) - lw $t0 -980($fp) - move $a0 $t0 - lw $t0 -976($fp) - move $a1 $t0 - jal equal_str - sw $v0 -952($fp) - j label_393 - label_392: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -980($fp) - lw $t0 -944($fp) - lw $t1 12($t0) - sw $t1 -976($fp) - lw $t0 -980($fp) - lw $t1 -976($fp) - seq $t0 $t0 $t1 - sw $t0 -952($fp) - j label_393 - label_393: - lw $t0 -952($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -984($fp) - lw $t0 -984($fp) - lw $t1 12($t0) - sw $t1 -988($fp) - lw $t0 -988($fp) - bne $t0 $zero label_494 - la $t0 data_164 - sw $t0 -896($fp) - lw $t0 -896($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -892($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -920($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -916($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -912($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -908($fp) - lw $t0 -920($fp) - lw $t1 -916($fp) - seq $t0 $t0 $t1 - sw $t0 -904($fp) - lw $t0 -904($fp) - bne $t0 $zero label_394 - lw $t0 -920($fp) - lw $t1 -912($fp) - seq $t0 $t0 $t1 - sw $t0 -904($fp) - lw $t0 -904($fp) - bne $t0 $zero label_395 - lw $t0 -920($fp) - lw $t1 -908($fp) - seq $t0 $t0 $t1 - sw $t0 -904($fp) - lw $t0 -904($fp) - bne $t0 $zero label_396 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -892($fp) - seq $t0 $t0 $t1 - sw $t0 -900($fp) - j label_397 - label_394: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -928($fp) - lw $t0 -892($fp) - lw $t1 12($t0) - sw $t1 -924($fp) - lw $t0 -928($fp) - lw $t1 -924($fp) - seq $t0 $t0 $t1 - sw $t0 -900($fp) - j label_397 - label_395: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -928($fp) - lw $t0 -892($fp) - lw $t1 12($t0) - sw $t1 -924($fp) - lw $t0 -928($fp) - move $a0 $t0 - lw $t0 -924($fp) - move $a1 $t0 - jal equal_str - sw $v0 -900($fp) - j label_397 - label_396: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -928($fp) - lw $t0 -892($fp) - lw $t1 12($t0) - sw $t1 -924($fp) - lw $t0 -928($fp) - lw $t1 -924($fp) - seq $t0 $t0 $t1 - sw $t0 -900($fp) - j label_397 - label_397: - lw $t0 -900($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -932($fp) - lw $t0 -932($fp) - lw $t1 12($t0) - sw $t1 -936($fp) - lw $t0 -936($fp) - bne $t0 $zero label_488 - la $t0 data_165 - sw $t0 -844($fp) - lw $t0 -844($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -840($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -868($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -864($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -860($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -856($fp) - lw $t0 -868($fp) - lw $t1 -864($fp) - seq $t0 $t0 $t1 - sw $t0 -852($fp) - lw $t0 -852($fp) - bne $t0 $zero label_398 - lw $t0 -868($fp) - lw $t1 -860($fp) - seq $t0 $t0 $t1 - sw $t0 -852($fp) - lw $t0 -852($fp) - bne $t0 $zero label_399 - lw $t0 -868($fp) - lw $t1 -856($fp) - seq $t0 $t0 $t1 - sw $t0 -852($fp) - lw $t0 -852($fp) - bne $t0 $zero label_400 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -840($fp) - seq $t0 $t0 $t1 - sw $t0 -848($fp) - j label_401 - label_398: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -876($fp) - lw $t0 -840($fp) - lw $t1 12($t0) - sw $t1 -872($fp) - lw $t0 -876($fp) - lw $t1 -872($fp) - seq $t0 $t0 $t1 - sw $t0 -848($fp) - j label_401 - label_399: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -876($fp) - lw $t0 -840($fp) - lw $t1 12($t0) - sw $t1 -872($fp) - lw $t0 -876($fp) - move $a0 $t0 - lw $t0 -872($fp) - move $a1 $t0 - jal equal_str - sw $v0 -848($fp) - j label_401 - label_400: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -876($fp) - lw $t0 -840($fp) - lw $t1 12($t0) - sw $t1 -872($fp) - lw $t0 -876($fp) - lw $t1 -872($fp) - seq $t0 $t0 $t1 - sw $t0 -848($fp) - j label_401 - label_401: - lw $t0 -848($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -880($fp) - lw $t0 -880($fp) - lw $t1 12($t0) - sw $t1 -884($fp) - lw $t0 -884($fp) - bne $t0 $zero label_482 - la $t0 data_166 - sw $t0 -792($fp) - lw $t0 -792($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -788($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -816($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -812($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -808($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -804($fp) - lw $t0 -816($fp) - lw $t1 -812($fp) - seq $t0 $t0 $t1 - sw $t0 -800($fp) - lw $t0 -800($fp) - bne $t0 $zero label_402 - lw $t0 -816($fp) - lw $t1 -808($fp) - seq $t0 $t0 $t1 - sw $t0 -800($fp) - lw $t0 -800($fp) - bne $t0 $zero label_403 - lw $t0 -816($fp) - lw $t1 -804($fp) - seq $t0 $t0 $t1 - sw $t0 -800($fp) - lw $t0 -800($fp) - bne $t0 $zero label_404 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -788($fp) - seq $t0 $t0 $t1 - sw $t0 -796($fp) - j label_405 - label_402: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -824($fp) - lw $t0 -788($fp) - lw $t1 12($t0) - sw $t1 -820($fp) - lw $t0 -824($fp) - lw $t1 -820($fp) - seq $t0 $t0 $t1 - sw $t0 -796($fp) - j label_405 - label_403: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -824($fp) - lw $t0 -788($fp) - lw $t1 12($t0) - sw $t1 -820($fp) - lw $t0 -824($fp) - move $a0 $t0 - lw $t0 -820($fp) - move $a1 $t0 - jal equal_str - sw $v0 -796($fp) - j label_405 - label_404: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -824($fp) - lw $t0 -788($fp) - lw $t1 12($t0) - sw $t1 -820($fp) - lw $t0 -824($fp) - lw $t1 -820($fp) - seq $t0 $t0 $t1 - sw $t0 -796($fp) - j label_405 - label_405: - lw $t0 -796($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -828($fp) - lw $t0 -828($fp) - lw $t1 12($t0) - sw $t1 -832($fp) - lw $t0 -832($fp) - bne $t0 $zero label_476 - la $t0 data_167 - sw $t0 -740($fp) - lw $t0 -740($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -736($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -764($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -760($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -756($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -752($fp) - lw $t0 -764($fp) - lw $t1 -760($fp) - seq $t0 $t0 $t1 - sw $t0 -748($fp) - lw $t0 -748($fp) - bne $t0 $zero label_406 - lw $t0 -764($fp) - lw $t1 -756($fp) - seq $t0 $t0 $t1 - sw $t0 -748($fp) - lw $t0 -748($fp) - bne $t0 $zero label_407 - lw $t0 -764($fp) - lw $t1 -752($fp) - seq $t0 $t0 $t1 - sw $t0 -748($fp) - lw $t0 -748($fp) - bne $t0 $zero label_408 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -736($fp) - seq $t0 $t0 $t1 - sw $t0 -744($fp) - j label_409 - label_406: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -772($fp) - lw $t0 -736($fp) - lw $t1 12($t0) - sw $t1 -768($fp) - lw $t0 -772($fp) - lw $t1 -768($fp) - seq $t0 $t0 $t1 - sw $t0 -744($fp) - j label_409 - label_407: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -772($fp) - lw $t0 -736($fp) - lw $t1 12($t0) - sw $t1 -768($fp) - lw $t0 -772($fp) - move $a0 $t0 - lw $t0 -768($fp) - move $a1 $t0 - jal equal_str - sw $v0 -744($fp) - j label_409 - label_408: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -772($fp) - lw $t0 -736($fp) - lw $t1 12($t0) - sw $t1 -768($fp) - lw $t0 -772($fp) - lw $t1 -768($fp) - seq $t0 $t0 $t1 - sw $t0 -744($fp) - j label_409 - label_409: - lw $t0 -744($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -776($fp) - lw $t0 -776($fp) - lw $t1 12($t0) - sw $t1 -780($fp) - lw $t0 -780($fp) - bne $t0 $zero label_456 - la $t0 data_168 - sw $t0 -688($fp) - lw $t0 -688($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -684($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -712($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -708($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -704($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -700($fp) - lw $t0 -712($fp) - lw $t1 -708($fp) - seq $t0 $t0 $t1 - sw $t0 -696($fp) - lw $t0 -696($fp) - bne $t0 $zero label_410 - lw $t0 -712($fp) - lw $t1 -704($fp) - seq $t0 $t0 $t1 - sw $t0 -696($fp) - lw $t0 -696($fp) - bne $t0 $zero label_411 - lw $t0 -712($fp) - lw $t1 -700($fp) - seq $t0 $t0 $t1 - sw $t0 -696($fp) - lw $t0 -696($fp) - bne $t0 $zero label_412 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -684($fp) - seq $t0 $t0 $t1 - sw $t0 -692($fp) - j label_413 - label_410: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -720($fp) - lw $t0 -684($fp) - lw $t1 12($t0) - sw $t1 -716($fp) - lw $t0 -720($fp) - lw $t1 -716($fp) - seq $t0 $t0 $t1 - sw $t0 -692($fp) - j label_413 - label_411: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -720($fp) - lw $t0 -684($fp) - lw $t1 12($t0) - sw $t1 -716($fp) - lw $t0 -720($fp) - move $a0 $t0 - lw $t0 -716($fp) - move $a1 $t0 - jal equal_str - sw $v0 -692($fp) - j label_413 - label_412: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -720($fp) - lw $t0 -684($fp) - lw $t1 12($t0) - sw $t1 -716($fp) - lw $t0 -720($fp) - lw $t1 -716($fp) - seq $t0 $t0 $t1 - sw $t0 -692($fp) - j label_413 - label_413: - lw $t0 -692($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -724($fp) - lw $t0 -724($fp) - lw $t1 12($t0) - sw $t1 -728($fp) - lw $t0 -728($fp) - bne $t0 $zero label_430 - la $t0 data_169 - sw $t0 -636($fp) - lw $t0 -636($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -632($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -660($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -656($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -652($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -648($fp) - lw $t0 -660($fp) - lw $t1 -656($fp) - seq $t0 $t0 $t1 - sw $t0 -644($fp) - lw $t0 -644($fp) - bne $t0 $zero label_414 - lw $t0 -660($fp) - lw $t1 -652($fp) - seq $t0 $t0 $t1 - sw $t0 -644($fp) - lw $t0 -644($fp) - bne $t0 $zero label_415 - lw $t0 -660($fp) - lw $t1 -648($fp) - seq $t0 $t0 $t1 - sw $t0 -644($fp) - lw $t0 -644($fp) - bne $t0 $zero label_416 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -632($fp) - seq $t0 $t0 $t1 - sw $t0 -640($fp) - j label_417 - label_414: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -668($fp) - lw $t0 -632($fp) - lw $t1 12($t0) - sw $t1 -664($fp) - lw $t0 -668($fp) - lw $t1 -664($fp) - seq $t0 $t0 $t1 - sw $t0 -640($fp) - j label_417 - label_415: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -668($fp) - lw $t0 -632($fp) - lw $t1 12($t0) - sw $t1 -664($fp) - lw $t0 -668($fp) - move $a0 $t0 - lw $t0 -664($fp) - move $a1 $t0 - jal equal_str - sw $v0 -640($fp) - j label_417 - label_416: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -668($fp) - lw $t0 -632($fp) - lw $t1 12($t0) - sw $t1 -664($fp) - lw $t0 -668($fp) - lw $t1 -664($fp) - seq $t0 $t0 $t1 - sw $t0 -640($fp) - j label_417 - label_417: - lw $t0 -640($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -672($fp) - lw $t0 -672($fp) - lw $t1 12($t0) - sw $t1 -676($fp) - lw $t0 -676($fp) - bne $t0 $zero label_428 - la $t0 data_170 - sw $t0 -584($fp) - lw $t0 -584($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -580($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -608($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -604($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -600($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -596($fp) - lw $t0 -608($fp) - lw $t1 -604($fp) - seq $t0 $t0 $t1 - sw $t0 -592($fp) - lw $t0 -592($fp) - bne $t0 $zero label_418 - lw $t0 -608($fp) - lw $t1 -600($fp) - seq $t0 $t0 $t1 - sw $t0 -592($fp) - lw $t0 -592($fp) - bne $t0 $zero label_419 - lw $t0 -608($fp) - lw $t1 -596($fp) - seq $t0 $t0 $t1 - sw $t0 -592($fp) - lw $t0 -592($fp) - bne $t0 $zero label_420 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -580($fp) - seq $t0 $t0 $t1 - sw $t0 -588($fp) - j label_421 - label_418: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -616($fp) - lw $t0 -580($fp) - lw $t1 12($t0) - sw $t1 -612($fp) - lw $t0 -616($fp) - lw $t1 -612($fp) - seq $t0 $t0 $t1 - sw $t0 -588($fp) - j label_421 - label_419: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -616($fp) - lw $t0 -580($fp) - lw $t1 12($t0) - sw $t1 -612($fp) - lw $t0 -616($fp) - move $a0 $t0 - lw $t0 -612($fp) - move $a1 $t0 - jal equal_str - sw $v0 -588($fp) - j label_421 - label_420: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -616($fp) - lw $t0 -580($fp) - lw $t1 12($t0) - sw $t1 -612($fp) - lw $t0 -616($fp) - lw $t1 -612($fp) - seq $t0 $t0 $t1 - sw $t0 -588($fp) - j label_421 - label_421: - lw $t0 -588($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -620($fp) - lw $t0 -620($fp) - lw $t1 12($t0) - sw $t1 -624($fp) - lw $t0 -624($fp) - bne $t0 $zero label_426 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -576($fp) - lw $t0 -576($fp) - bne $t0 $zero label_422 - j label_423 - label_422: - li $v0 4 - la $a0 data_171 - syscall - li $v0 10 - syscall - label_423: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -572($fp) - jal __init_at_A - sw $v0 -568($fp) - lw $t0 -568($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -564($fp) - lw $t0 -564($fp) - bne $t0 $zero label_424 - j label_425 - label_424: - li $v0 4 - la $a0 data_172 - syscall - li $v0 10 - syscall - label_425: - lw $t0 -568($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -572($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -568($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -560($fp) - lw $t0 -560($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -628($fp) - j label_427 - label_426: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -556($fp) - lw $t0 -556($fp) - lw $t1 0($fp) - addi $t1 $t1 24 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -628($fp) - label_427: - lw $t0 -628($fp) - sw $t0 -680($fp) - j label_429 - label_428: - jal __init_at_A - sw $v0 -552($fp) - lw $t0 -552($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -680($fp) - label_429: - lw $t0 -680($fp) - sw $t0 -732($fp) - j label_455 - label_430: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_431 - j label_432 - label_431: - li $v0 4 - la $a0 data_173 - syscall - li $v0 10 - syscall - label_432: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -540($fp) - jal __init_at_E - sw $v0 -536($fp) - lw $t0 -536($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -532($fp) - lw $t0 -532($fp) - bne $t0 $zero label_433 - j label_434 - label_433: - li $v0 4 - la $a0 data_174 - syscall - li $v0 10 - syscall - label_434: - lw $t0 -536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -540($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -528($fp) - lw $t0 -528($fp) - sw $t0 -548($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -504($fp) - lw $t0 -504($fp) - bne $t0 $zero label_435 - j label_436 - label_435: - li $v0 4 - la $a0 data_175 - syscall - li $v0 10 - syscall - label_436: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -500($fp) - lw $t0 -500($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -548($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -480($fp) - lw $t0 -480($fp) - bne $t0 $zero label_437 - j label_438 - label_437: - li $v0 4 - la $a0 data_176 - syscall - li $v0 10 - syscall - label_438: - lw $t0 -548($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -548($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -476($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -492($fp) - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -472($fp) - lw $t0 -472($fp) - lw $t1 12($t0) - sw $t1 -488($fp) - lw $t0 -492($fp) - lw $t1 -488($fp) - mul $t0 $t0 $t1 - sw $t0 -484($fp) - lw $t0 -484($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -496($fp) - lw $t0 -496($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - sub $t0 $t0 $t1 - sw $t0 -508($fp) - lw $t0 -508($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -520($fp) - lw $t0 -520($fp) - sw $t0 -524($fp) - la $t0 data_177 - sw $t0 -468($fp) - lw $t0 -468($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -464($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -460($fp) - lw $t0 -460($fp) - bne $t0 $zero label_439 - j label_440 - label_439: - li $v0 4 - la $a0 data_178 - syscall - li $v0 10 - syscall - label_440: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -464($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -456($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_441 - j label_442 - label_441: - li $v0 4 - la $a0 data_179 - syscall - li $v0 10 - syscall - label_442: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -448($fp) - la $t0 data_180 - sw $t0 -444($fp) - lw $t0 -444($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -440($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_443 - j label_444 - label_443: - li $v0 4 - la $a0 data_181 - syscall - li $v0 10 - syscall - label_444: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -440($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -432($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -428($fp) - lw $t0 -428($fp) - bne $t0 $zero label_445 - j label_446 - label_445: - li $v0 4 - la $a0 data_182 - syscall - li $v0 10 - syscall - label_446: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -548($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -424($fp) - la $t0 data_183 - sw $t0 -420($fp) - lw $t0 -420($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -416($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -412($fp) - lw $t0 -412($fp) - bne $t0 $zero label_447 - j label_448 - label_447: - li $v0 4 - la $a0 data_184 - syscall - li $v0 10 - syscall - label_448: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -416($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -408($fp) - jal __init_at_A2I - sw $v0 -400($fp) - lw $t0 -400($fp) - sw $t0 -404($fp) - lw $t0 -404($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -396($fp) - lw $t0 -396($fp) - bne $t0 $zero label_449 - j label_450 - label_449: - li $v0 4 - la $a0 data_185 - syscall - li $v0 10 - syscall - label_450: - lw $t0 -404($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -524($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -404($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -392($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_451 - j label_452 - label_451: - li $v0 4 - la $a0 data_186 - syscall - li $v0 10 - syscall - label_452: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -392($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -384($fp) - la $t0 data_187 - sw $t0 -380($fp) - lw $t0 -380($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -376($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -372($fp) - lw $t0 -372($fp) - bne $t0 $zero label_453 - j label_454 - label_453: - li $v0 4 - la $a0 data_188 - syscall - li $v0 10 - syscall - label_454: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -376($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -368($fp) - lw $t0 -548($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -732($fp) - label_455: - lw $t0 -732($fp) - sw $t0 -784($fp) - j label_475 - label_456: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_457 - j label_458 - label_457: - li $v0 4 - la $a0 data_189 - syscall - li $v0 10 - syscall - label_458: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -352($fp) - jal __init_at_D - sw $v0 -348($fp) - lw $t0 -348($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -344($fp) - lw $t0 -344($fp) - bne $t0 $zero label_459 - j label_460 - label_459: - li $v0 4 - la $a0 data_190 - syscall - li $v0 10 - syscall - label_460: - lw $t0 -348($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -352($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -348($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -340($fp) - lw $t0 -340($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -360($fp) - bne $t0 $zero label_467 - la $t0 data_191 - sw $t0 -336($fp) - lw $t0 -336($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -332($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -328($fp) - lw $t0 -328($fp) - bne $t0 $zero label_461 - j label_462 - label_461: - li $v0 4 - la $a0 data_192 - syscall - li $v0 10 - syscall - label_462: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -332($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -324($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -320($fp) - lw $t0 -320($fp) - bne $t0 $zero label_463 - j label_464 - label_463: - li $v0 4 - la $a0 data_193 - syscall - li $v0 10 - syscall - label_464: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -316($fp) - la $t0 data_194 - sw $t0 -312($fp) - lw $t0 -312($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -308($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_465 - j label_466 - label_465: - li $v0 4 - la $a0 data_195 - syscall - li $v0 10 - syscall - label_466: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -308($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -300($fp) - lw $t0 -300($fp) - sw $t0 -364($fp) - j label_474 - label_467: - la $t0 data_196 - sw $t0 -296($fp) - lw $t0 -296($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -292($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -288($fp) - lw $t0 -288($fp) - bne $t0 $zero label_468 - j label_469 - label_468: - li $v0 4 - la $a0 data_197 - syscall - li $v0 10 - syscall - label_469: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -292($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -284($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_470 - j label_471 - label_470: - li $v0 4 - la $a0 data_198 - syscall - li $v0 10 - syscall - label_471: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -276($fp) - la $t0 data_199 - sw $t0 -272($fp) - lw $t0 -272($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -268($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -264($fp) - lw $t0 -264($fp) - bne $t0 $zero label_472 - j label_473 - label_472: - li $v0 4 - la $a0 data_200 - syscall - li $v0 10 - syscall - label_473: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -268($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -260($fp) - lw $t0 -260($fp) - sw $t0 -364($fp) - label_474: - lw $t0 -364($fp) - sw $t0 -784($fp) - label_475: - lw $t0 -784($fp) - sw $t0 -836($fp) - j label_481 - label_476: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_477 - j label_478 - label_477: - li $v0 4 - la $a0 data_201 - syscall - li $v0 10 - syscall - label_478: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -252($fp) - jal __init_at_C - sw $v0 -248($fp) - lw $t0 -248($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_479 - j label_480 - label_479: - li $v0 4 - la $a0 data_202 - syscall - li $v0 10 - syscall - label_480: - lw $t0 -248($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -252($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_method5_at_C - addi $sp $sp 8 - sw $v0 -240($fp) - lw $t0 -240($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -836($fp) - label_481: - lw $t0 -836($fp) - sw $t0 -888($fp) - j label_487 - label_482: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -236($fp) - lw $t0 -236($fp) - bne $t0 $zero label_483 - j label_484 - label_483: - li $v0 4 - la $a0 data_203 - syscall - li $v0 10 - syscall - label_484: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -232($fp) - jal __init_at_C - sw $v0 -228($fp) - lw $t0 -228($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -224($fp) - lw $t0 -224($fp) - bne $t0 $zero label_485 - j label_486 - label_485: - li $v0 4 - la $a0 data_204 - syscall - li $v0 10 - syscall - label_486: - lw $t0 -228($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -232($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_method5_at_B - addi $sp $sp 8 - sw $v0 -220($fp) - lw $t0 -220($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -888($fp) - label_487: - lw $t0 -888($fp) - sw $t0 -940($fp) - j label_493 - label_488: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_489 - j label_490 - label_489: - li $v0 4 - la $a0 data_205 - syscall - li $v0 10 - syscall - label_490: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -212($fp) - jal __init_at_C - sw $v0 -208($fp) - lw $t0 -208($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -204($fp) - lw $t0 -204($fp) - bne $t0 $zero label_491 - j label_492 - label_491: - li $v0 4 - la $a0 data_206 - syscall - li $v0 10 - syscall - label_492: - lw $t0 -208($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -212($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_method5_at_A - addi $sp $sp 8 - sw $v0 -200($fp) - lw $t0 -200($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -940($fp) - label_493: - lw $t0 -940($fp) - sw $t0 -992($fp) - j label_505 - label_494: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_495 - j label_496 - label_495: - li $v0 4 - la $a0 data_207 - syscall - li $v0 10 - syscall - label_496: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -192($fp) - jal __init_at_A - sw $v0 -188($fp) - lw $t0 -188($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -184($fp) - lw $t0 -184($fp) - bne $t0 $zero label_497 - j label_498 - label_497: - li $v0 4 - la $a0 data_208 - syscall - li $v0 10 - syscall - label_498: - lw $t0 -188($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -188($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -180($fp) - lw $t0 -180($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_499 - j label_500 - label_499: - li $v0 4 - la $a0 data_209 - syscall - li $v0 10 - syscall - label_500: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -172($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_501 - j label_502 - label_501: - li $v0 4 - la $a0 data_210 - syscall - li $v0 10 - syscall - label_502: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -164($fp) - jal __init_at_D - sw $v0 -160($fp) - lw $t0 -160($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -156($fp) - lw $t0 -156($fp) - bne $t0 $zero label_503 - j label_504 - label_503: - li $v0 4 - la $a0 data_211 - syscall - li $v0 10 - syscall - label_504: - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -164($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -992($fp) - label_505: - lw $t0 -992($fp) - sw $t0 -1044($fp) - j label_525 - label_506: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_507 - j label_508 - label_507: - li $v0 4 - la $a0 data_212 - syscall - li $v0 10 - syscall - label_508: - la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_509 - la $t0 types_table - addi $t0 $t0 20 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_514 - la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_514 - la $t0 types_table - addi $t0 $t0 32 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_514 - la $t0 types_table - addi $t0 $t0 36 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_514 - la $t0 types_table - addi $t0 $t0 0 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - la $t0 types_table - addi $t0 $t0 4 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - la $t0 types_table - addi $t0 $t0 40 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - la $t0 types_table - addi $t0 $t0 44 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - li $v0 4 - la $a0 data_213 - syscall - li $v0 10 - syscall - label_509: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -128($fp) - lw $t0 -128($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_510 - j label_511 - label_510: - li $v0 4 - la $a0 data_214 - syscall - li $v0 10 - syscall - label_511: - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -128($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_512 - j label_513 - label_512: - li $v0 4 - la $a0 data_215 - syscall - li $v0 10 - syscall - label_513: - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -112($fp) - lw $t0 -112($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -148($fp) - j label_524 - label_514: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -108($fp) - lw $t0 -108($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_515 - j label_516 - label_515: - li $v0 4 - la $a0 data_216 - syscall - li $v0 10 - syscall - label_516: - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -108($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_517 - j label_518 - label_517: - li $v0 4 - la $a0 data_217 - syscall - li $v0 10 - syscall - label_518: - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -148($fp) - j label_524 - label_519: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -88($fp) - la $t0 data_218 - sw $t0 -84($fp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_520 - j label_521 - label_520: - li $v0 4 - la $a0 data_219 - syscall - li $v0 10 - syscall - label_521: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -72($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_522 - j label_523 - label_522: - li $v0 4 - la $a0 data_220 - syscall - li $v0 10 - syscall - label_523: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -64($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -148($fp) - j label_524 - label_524: - lw $t0 -148($fp) - sw $t0 -1044($fp) - label_525: - lw $t0 -1044($fp) - sw $t0 -1096($fp) - j label_537 - label_526: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_527 - j label_528 - label_527: - li $v0 4 - la $a0 data_221 - syscall - li $v0 10 - syscall - label_528: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - jal __init_at_A - sw $v0 -48($fp) - lw $t0 -48($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_529 - j label_530 - label_529: - li $v0 4 - la $a0 data_222 - syscall - li $v0 10 - syscall - label_530: - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_531 - j label_532 - label_531: - li $v0 4 - la $a0 data_223 - syscall - li $v0 10 - syscall - label_532: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_533 - j label_534 - label_533: - li $v0 4 - la $a0 data_224 - syscall - li $v0 10 - syscall - label_534: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -24($fp) - jal __init_at_B - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_535 - j label_536 - label_535: - li $v0 4 - la $a0 data_225 - syscall - li $v0 10 - syscall - label_536: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -1096($fp) - label_537: - j label_362 - label_538: - li $v0 0 - addi $sp $sp 1208 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -1208 +jal __init_at_A +sw $v0 -1200($fp) +lw $t0 -1200($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +label_362: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1196($fp) +lw $t0 -1196($fp) +bne $t0 $zero label_363 +j label_538 +label_363: +la $t0 data_150 +sw $t0 -1192($fp) +lw $t0 -1192($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1188($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1184($fp) +lw $t0 -1184($fp) +bne $t0 $zero label_364 +j label_365 +label_364: +li $v0 4 +la $a0 data_151 +syscall +li $v0 10 +syscall +label_365: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1188($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1180($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1176($fp) +lw $t0 -1176($fp) +bne $t0 $zero label_366 +j label_367 +label_366: +li $v0 4 +la $a0 data_152 +syscall +li $v0 10 +syscall +label_367: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1172($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1160($fp) +lw $t0 -1160($fp) +bne $t0 $zero label_368 +j label_369 +label_368: +li $v0 4 +la $a0 data_153 +syscall +li $v0 10 +syscall +label_369: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -1156($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1152($fp) +lw $t0 -1152($fp) +bne $t0 $zero label_370 +j label_371 +label_370: +li $v0 4 +la $a0 data_154 +syscall +li $v0 10 +syscall +label_371: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1156($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1148($fp) +lw $t0 -1148($fp) +lw $t1 12($t0) +sw $t1 -1164($fp) +lw $t0 -1164($fp) +bne $t0 $zero label_374 +la $t0 data_155 +sw $t0 -1144($fp) +lw $t0 -1144($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1140($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1136($fp) +lw $t0 -1136($fp) +bne $t0 $zero label_372 +j label_373 +label_372: +li $v0 4 +la $a0 data_156 +syscall +li $v0 10 +syscall +label_373: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1140($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1132($fp) +lw $t0 -1132($fp) +sw $t0 -1168($fp) +j label_377 +label_374: +la $t0 data_157 +sw $t0 -1128($fp) +lw $t0 -1128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1124($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1120($fp) +lw $t0 -1120($fp) +bne $t0 $zero label_375 +j label_376 +label_375: +li $v0 4 +la $a0 data_158 +syscall +li $v0 10 +syscall +label_376: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1116($fp) +lw $t0 -1116($fp) +sw $t0 -1168($fp) +label_377: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1112($fp) +lw $t0 -1112($fp) +bne $t0 $zero label_378 +j label_379 +label_378: +li $v0 4 +la $a0 data_159 +syscall +li $v0 10 +syscall +label_379: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1108($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1104($fp) +lw $t0 -1104($fp) +bne $t0 $zero label_380 +j label_381 +label_380: +li $v0 4 +la $a0 data_160 +syscall +li $v0 10 +syscall +label_381: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -1100($fp) +lw $t0 -1100($fp) +lw $t1 0($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +la $t0 data_161 +sw $t0 -1052($fp) +lw $t0 -1052($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1048($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -1076($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -1072($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -1068($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -1064($fp) +lw $t0 -1076($fp) +lw $t1 -1072($fp) +seq $t0 $t0 $t1 +sw $t0 -1060($fp) +lw $t0 -1060($fp) +bne $t0 $zero label_382 +lw $t0 -1076($fp) +lw $t1 -1068($fp) +seq $t0 $t0 $t1 +sw $t0 -1060($fp) +lw $t0 -1060($fp) +bne $t0 $zero label_383 +lw $t0 -1076($fp) +lw $t1 -1064($fp) +seq $t0 $t0 $t1 +sw $t0 -1060($fp) +lw $t0 -1060($fp) +bne $t0 $zero label_384 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -1048($fp) +seq $t0 $t0 $t1 +sw $t0 -1056($fp) +j label_385 +label_382: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1084($fp) +lw $t0 -1048($fp) +lw $t1 12($t0) +sw $t1 -1080($fp) +lw $t0 -1084($fp) +lw $t1 -1080($fp) +seq $t0 $t0 $t1 +sw $t0 -1056($fp) +j label_385 +label_383: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1084($fp) +lw $t0 -1048($fp) +lw $t1 12($t0) +sw $t1 -1080($fp) +lw $t0 -1084($fp) +move $a0 $t0 +lw $t0 -1080($fp) +move $a1 $t0 +jal equal_str +sw $v0 -1056($fp) +j label_385 +label_384: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1084($fp) +lw $t0 -1048($fp) +lw $t1 12($t0) +sw $t1 -1080($fp) +lw $t0 -1084($fp) +lw $t1 -1080($fp) +seq $t0 $t0 $t1 +sw $t0 -1056($fp) +j label_385 +label_385: +lw $t0 -1056($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -1088($fp) +lw $t0 -1088($fp) +lw $t1 12($t0) +sw $t1 -1092($fp) +lw $t0 -1092($fp) +bne $t0 $zero label_526 +la $t0 data_162 +sw $t0 -1000($fp) +lw $t0 -1000($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -996($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -1024($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -1020($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -1016($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -1012($fp) +lw $t0 -1024($fp) +lw $t1 -1020($fp) +seq $t0 $t0 $t1 +sw $t0 -1008($fp) +lw $t0 -1008($fp) +bne $t0 $zero label_386 +lw $t0 -1024($fp) +lw $t1 -1016($fp) +seq $t0 $t0 $t1 +sw $t0 -1008($fp) +lw $t0 -1008($fp) +bne $t0 $zero label_387 +lw $t0 -1024($fp) +lw $t1 -1012($fp) +seq $t0 $t0 $t1 +sw $t0 -1008($fp) +lw $t0 -1008($fp) +bne $t0 $zero label_388 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -996($fp) +seq $t0 $t0 $t1 +sw $t0 -1004($fp) +j label_389 +label_386: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1032($fp) +lw $t0 -996($fp) +lw $t1 12($t0) +sw $t1 -1028($fp) +lw $t0 -1032($fp) +lw $t1 -1028($fp) +seq $t0 $t0 $t1 +sw $t0 -1004($fp) +j label_389 +label_387: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1032($fp) +lw $t0 -996($fp) +lw $t1 12($t0) +sw $t1 -1028($fp) +lw $t0 -1032($fp) +move $a0 $t0 +lw $t0 -1028($fp) +move $a1 $t0 +jal equal_str +sw $v0 -1004($fp) +j label_389 +label_388: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -1032($fp) +lw $t0 -996($fp) +lw $t1 12($t0) +sw $t1 -1028($fp) +lw $t0 -1032($fp) +lw $t1 -1028($fp) +seq $t0 $t0 $t1 +sw $t0 -1004($fp) +j label_389 +label_389: +lw $t0 -1004($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -1036($fp) +lw $t0 -1036($fp) +lw $t1 12($t0) +sw $t1 -1040($fp) +lw $t0 -1040($fp) +bne $t0 $zero label_506 +la $t0 data_163 +sw $t0 -948($fp) +lw $t0 -948($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -944($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -972($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -968($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -964($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -960($fp) +lw $t0 -972($fp) +lw $t1 -968($fp) +seq $t0 $t0 $t1 +sw $t0 -956($fp) +lw $t0 -956($fp) +bne $t0 $zero label_390 +lw $t0 -972($fp) +lw $t1 -964($fp) +seq $t0 $t0 $t1 +sw $t0 -956($fp) +lw $t0 -956($fp) +bne $t0 $zero label_391 +lw $t0 -972($fp) +lw $t1 -960($fp) +seq $t0 $t0 $t1 +sw $t0 -956($fp) +lw $t0 -956($fp) +bne $t0 $zero label_392 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -944($fp) +seq $t0 $t0 $t1 +sw $t0 -952($fp) +j label_393 +label_390: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -980($fp) +lw $t0 -944($fp) +lw $t1 12($t0) +sw $t1 -976($fp) +lw $t0 -980($fp) +lw $t1 -976($fp) +seq $t0 $t0 $t1 +sw $t0 -952($fp) +j label_393 +label_391: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -980($fp) +lw $t0 -944($fp) +lw $t1 12($t0) +sw $t1 -976($fp) +lw $t0 -980($fp) +move $a0 $t0 +lw $t0 -976($fp) +move $a1 $t0 +jal equal_str +sw $v0 -952($fp) +j label_393 +label_392: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -980($fp) +lw $t0 -944($fp) +lw $t1 12($t0) +sw $t1 -976($fp) +lw $t0 -980($fp) +lw $t1 -976($fp) +seq $t0 $t0 $t1 +sw $t0 -952($fp) +j label_393 +label_393: +lw $t0 -952($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -984($fp) +lw $t0 -984($fp) +lw $t1 12($t0) +sw $t1 -988($fp) +lw $t0 -988($fp) +bne $t0 $zero label_494 +la $t0 data_164 +sw $t0 -896($fp) +lw $t0 -896($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -892($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -920($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -916($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -912($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -908($fp) +lw $t0 -920($fp) +lw $t1 -916($fp) +seq $t0 $t0 $t1 +sw $t0 -904($fp) +lw $t0 -904($fp) +bne $t0 $zero label_394 +lw $t0 -920($fp) +lw $t1 -912($fp) +seq $t0 $t0 $t1 +sw $t0 -904($fp) +lw $t0 -904($fp) +bne $t0 $zero label_395 +lw $t0 -920($fp) +lw $t1 -908($fp) +seq $t0 $t0 $t1 +sw $t0 -904($fp) +lw $t0 -904($fp) +bne $t0 $zero label_396 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -892($fp) +seq $t0 $t0 $t1 +sw $t0 -900($fp) +j label_397 +label_394: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -928($fp) +lw $t0 -892($fp) +lw $t1 12($t0) +sw $t1 -924($fp) +lw $t0 -928($fp) +lw $t1 -924($fp) +seq $t0 $t0 $t1 +sw $t0 -900($fp) +j label_397 +label_395: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -928($fp) +lw $t0 -892($fp) +lw $t1 12($t0) +sw $t1 -924($fp) +lw $t0 -928($fp) +move $a0 $t0 +lw $t0 -924($fp) +move $a1 $t0 +jal equal_str +sw $v0 -900($fp) +j label_397 +label_396: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -928($fp) +lw $t0 -892($fp) +lw $t1 12($t0) +sw $t1 -924($fp) +lw $t0 -928($fp) +lw $t1 -924($fp) +seq $t0 $t0 $t1 +sw $t0 -900($fp) +j label_397 +label_397: +lw $t0 -900($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -932($fp) +lw $t0 -932($fp) +lw $t1 12($t0) +sw $t1 -936($fp) +lw $t0 -936($fp) +bne $t0 $zero label_488 +la $t0 data_165 +sw $t0 -844($fp) +lw $t0 -844($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -840($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -868($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -864($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -860($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -856($fp) +lw $t0 -868($fp) +lw $t1 -864($fp) +seq $t0 $t0 $t1 +sw $t0 -852($fp) +lw $t0 -852($fp) +bne $t0 $zero label_398 +lw $t0 -868($fp) +lw $t1 -860($fp) +seq $t0 $t0 $t1 +sw $t0 -852($fp) +lw $t0 -852($fp) +bne $t0 $zero label_399 +lw $t0 -868($fp) +lw $t1 -856($fp) +seq $t0 $t0 $t1 +sw $t0 -852($fp) +lw $t0 -852($fp) +bne $t0 $zero label_400 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -840($fp) +seq $t0 $t0 $t1 +sw $t0 -848($fp) +j label_401 +label_398: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -876($fp) +lw $t0 -840($fp) +lw $t1 12($t0) +sw $t1 -872($fp) +lw $t0 -876($fp) +lw $t1 -872($fp) +seq $t0 $t0 $t1 +sw $t0 -848($fp) +j label_401 +label_399: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -876($fp) +lw $t0 -840($fp) +lw $t1 12($t0) +sw $t1 -872($fp) +lw $t0 -876($fp) +move $a0 $t0 +lw $t0 -872($fp) +move $a1 $t0 +jal equal_str +sw $v0 -848($fp) +j label_401 +label_400: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -876($fp) +lw $t0 -840($fp) +lw $t1 12($t0) +sw $t1 -872($fp) +lw $t0 -876($fp) +lw $t1 -872($fp) +seq $t0 $t0 $t1 +sw $t0 -848($fp) +j label_401 +label_401: +lw $t0 -848($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -880($fp) +lw $t0 -880($fp) +lw $t1 12($t0) +sw $t1 -884($fp) +lw $t0 -884($fp) +bne $t0 $zero label_482 +la $t0 data_166 +sw $t0 -792($fp) +lw $t0 -792($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -788($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -816($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -812($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -808($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -804($fp) +lw $t0 -816($fp) +lw $t1 -812($fp) +seq $t0 $t0 $t1 +sw $t0 -800($fp) +lw $t0 -800($fp) +bne $t0 $zero label_402 +lw $t0 -816($fp) +lw $t1 -808($fp) +seq $t0 $t0 $t1 +sw $t0 -800($fp) +lw $t0 -800($fp) +bne $t0 $zero label_403 +lw $t0 -816($fp) +lw $t1 -804($fp) +seq $t0 $t0 $t1 +sw $t0 -800($fp) +lw $t0 -800($fp) +bne $t0 $zero label_404 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -788($fp) +seq $t0 $t0 $t1 +sw $t0 -796($fp) +j label_405 +label_402: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -824($fp) +lw $t0 -788($fp) +lw $t1 12($t0) +sw $t1 -820($fp) +lw $t0 -824($fp) +lw $t1 -820($fp) +seq $t0 $t0 $t1 +sw $t0 -796($fp) +j label_405 +label_403: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -824($fp) +lw $t0 -788($fp) +lw $t1 12($t0) +sw $t1 -820($fp) +lw $t0 -824($fp) +move $a0 $t0 +lw $t0 -820($fp) +move $a1 $t0 +jal equal_str +sw $v0 -796($fp) +j label_405 +label_404: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -824($fp) +lw $t0 -788($fp) +lw $t1 12($t0) +sw $t1 -820($fp) +lw $t0 -824($fp) +lw $t1 -820($fp) +seq $t0 $t0 $t1 +sw $t0 -796($fp) +j label_405 +label_405: +lw $t0 -796($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -828($fp) +lw $t0 -828($fp) +lw $t1 12($t0) +sw $t1 -832($fp) +lw $t0 -832($fp) +bne $t0 $zero label_476 +la $t0 data_167 +sw $t0 -740($fp) +lw $t0 -740($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -736($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -764($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -760($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -756($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -752($fp) +lw $t0 -764($fp) +lw $t1 -760($fp) +seq $t0 $t0 $t1 +sw $t0 -748($fp) +lw $t0 -748($fp) +bne $t0 $zero label_406 +lw $t0 -764($fp) +lw $t1 -756($fp) +seq $t0 $t0 $t1 +sw $t0 -748($fp) +lw $t0 -748($fp) +bne $t0 $zero label_407 +lw $t0 -764($fp) +lw $t1 -752($fp) +seq $t0 $t0 $t1 +sw $t0 -748($fp) +lw $t0 -748($fp) +bne $t0 $zero label_408 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -736($fp) +seq $t0 $t0 $t1 +sw $t0 -744($fp) +j label_409 +label_406: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -772($fp) +lw $t0 -736($fp) +lw $t1 12($t0) +sw $t1 -768($fp) +lw $t0 -772($fp) +lw $t1 -768($fp) +seq $t0 $t0 $t1 +sw $t0 -744($fp) +j label_409 +label_407: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -772($fp) +lw $t0 -736($fp) +lw $t1 12($t0) +sw $t1 -768($fp) +lw $t0 -772($fp) +move $a0 $t0 +lw $t0 -768($fp) +move $a1 $t0 +jal equal_str +sw $v0 -744($fp) +j label_409 +label_408: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -772($fp) +lw $t0 -736($fp) +lw $t1 12($t0) +sw $t1 -768($fp) +lw $t0 -772($fp) +lw $t1 -768($fp) +seq $t0 $t0 $t1 +sw $t0 -744($fp) +j label_409 +label_409: +lw $t0 -744($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -776($fp) +lw $t0 -776($fp) +lw $t1 12($t0) +sw $t1 -780($fp) +lw $t0 -780($fp) +bne $t0 $zero label_456 +la $t0 data_168 +sw $t0 -688($fp) +lw $t0 -688($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -684($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -712($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -708($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -704($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -700($fp) +lw $t0 -712($fp) +lw $t1 -708($fp) +seq $t0 $t0 $t1 +sw $t0 -696($fp) +lw $t0 -696($fp) +bne $t0 $zero label_410 +lw $t0 -712($fp) +lw $t1 -704($fp) +seq $t0 $t0 $t1 +sw $t0 -696($fp) +lw $t0 -696($fp) +bne $t0 $zero label_411 +lw $t0 -712($fp) +lw $t1 -700($fp) +seq $t0 $t0 $t1 +sw $t0 -696($fp) +lw $t0 -696($fp) +bne $t0 $zero label_412 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -684($fp) +seq $t0 $t0 $t1 +sw $t0 -692($fp) +j label_413 +label_410: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -720($fp) +lw $t0 -684($fp) +lw $t1 12($t0) +sw $t1 -716($fp) +lw $t0 -720($fp) +lw $t1 -716($fp) +seq $t0 $t0 $t1 +sw $t0 -692($fp) +j label_413 +label_411: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -720($fp) +lw $t0 -684($fp) +lw $t1 12($t0) +sw $t1 -716($fp) +lw $t0 -720($fp) +move $a0 $t0 +lw $t0 -716($fp) +move $a1 $t0 +jal equal_str +sw $v0 -692($fp) +j label_413 +label_412: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -720($fp) +lw $t0 -684($fp) +lw $t1 12($t0) +sw $t1 -716($fp) +lw $t0 -720($fp) +lw $t1 -716($fp) +seq $t0 $t0 $t1 +sw $t0 -692($fp) +j label_413 +label_413: +lw $t0 -692($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -724($fp) +lw $t0 -724($fp) +lw $t1 12($t0) +sw $t1 -728($fp) +lw $t0 -728($fp) +bne $t0 $zero label_430 +la $t0 data_169 +sw $t0 -636($fp) +lw $t0 -636($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -632($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -660($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -656($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -652($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -648($fp) +lw $t0 -660($fp) +lw $t1 -656($fp) +seq $t0 $t0 $t1 +sw $t0 -644($fp) +lw $t0 -644($fp) +bne $t0 $zero label_414 +lw $t0 -660($fp) +lw $t1 -652($fp) +seq $t0 $t0 $t1 +sw $t0 -644($fp) +lw $t0 -644($fp) +bne $t0 $zero label_415 +lw $t0 -660($fp) +lw $t1 -648($fp) +seq $t0 $t0 $t1 +sw $t0 -644($fp) +lw $t0 -644($fp) +bne $t0 $zero label_416 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -632($fp) +seq $t0 $t0 $t1 +sw $t0 -640($fp) +j label_417 +label_414: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -668($fp) +lw $t0 -632($fp) +lw $t1 12($t0) +sw $t1 -664($fp) +lw $t0 -668($fp) +lw $t1 -664($fp) +seq $t0 $t0 $t1 +sw $t0 -640($fp) +j label_417 +label_415: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -668($fp) +lw $t0 -632($fp) +lw $t1 12($t0) +sw $t1 -664($fp) +lw $t0 -668($fp) +move $a0 $t0 +lw $t0 -664($fp) +move $a1 $t0 +jal equal_str +sw $v0 -640($fp) +j label_417 +label_416: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -668($fp) +lw $t0 -632($fp) +lw $t1 12($t0) +sw $t1 -664($fp) +lw $t0 -668($fp) +lw $t1 -664($fp) +seq $t0 $t0 $t1 +sw $t0 -640($fp) +j label_417 +label_417: +lw $t0 -640($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -672($fp) +lw $t0 -672($fp) +lw $t1 12($t0) +sw $t1 -676($fp) +lw $t0 -676($fp) +bne $t0 $zero label_428 +la $t0 data_170 +sw $t0 -584($fp) +lw $t0 -584($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -580($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -608($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -604($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -600($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -596($fp) +lw $t0 -608($fp) +lw $t1 -604($fp) +seq $t0 $t0 $t1 +sw $t0 -592($fp) +lw $t0 -592($fp) +bne $t0 $zero label_418 +lw $t0 -608($fp) +lw $t1 -600($fp) +seq $t0 $t0 $t1 +sw $t0 -592($fp) +lw $t0 -592($fp) +bne $t0 $zero label_419 +lw $t0 -608($fp) +lw $t1 -596($fp) +seq $t0 $t0 $t1 +sw $t0 -592($fp) +lw $t0 -592($fp) +bne $t0 $zero label_420 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -580($fp) +seq $t0 $t0 $t1 +sw $t0 -588($fp) +j label_421 +label_418: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -616($fp) +lw $t0 -580($fp) +lw $t1 12($t0) +sw $t1 -612($fp) +lw $t0 -616($fp) +lw $t1 -612($fp) +seq $t0 $t0 $t1 +sw $t0 -588($fp) +j label_421 +label_419: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -616($fp) +lw $t0 -580($fp) +lw $t1 12($t0) +sw $t1 -612($fp) +lw $t0 -616($fp) +move $a0 $t0 +lw $t0 -612($fp) +move $a1 $t0 +jal equal_str +sw $v0 -588($fp) +j label_421 +label_420: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -616($fp) +lw $t0 -580($fp) +lw $t1 12($t0) +sw $t1 -612($fp) +lw $t0 -616($fp) +lw $t1 -612($fp) +seq $t0 $t0 $t1 +sw $t0 -588($fp) +j label_421 +label_421: +lw $t0 -588($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -620($fp) +lw $t0 -620($fp) +lw $t1 12($t0) +sw $t1 -624($fp) +lw $t0 -624($fp) +bne $t0 $zero label_426 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -576($fp) +lw $t0 -576($fp) +bne $t0 $zero label_422 +j label_423 +label_422: +li $v0 4 +la $a0 data_171 +syscall +li $v0 10 +syscall +label_423: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -572($fp) +jal __init_at_A +sw $v0 -568($fp) +lw $t0 -568($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -564($fp) +lw $t0 -564($fp) +bne $t0 $zero label_424 +j label_425 +label_424: +li $v0 4 +la $a0 data_172 +syscall +li $v0 10 +syscall +label_425: +lw $t0 -568($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -572($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -568($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -560($fp) +lw $t0 -560($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -628($fp) +j label_427 +label_426: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -556($fp) +lw $t0 -556($fp) +lw $t1 0($fp) +addi $t1 $t1 24 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -628($fp) +label_427: +lw $t0 -628($fp) +sw $t0 -680($fp) +j label_429 +label_428: +jal __init_at_A +sw $v0 -552($fp) +lw $t0 -552($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -680($fp) +label_429: +lw $t0 -680($fp) +sw $t0 -732($fp) +j label_455 +label_430: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_431 +j label_432 +label_431: +li $v0 4 +la $a0 data_173 +syscall +li $v0 10 +syscall +label_432: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -540($fp) +jal __init_at_E +sw $v0 -536($fp) +lw $t0 -536($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -532($fp) +lw $t0 -532($fp) +bne $t0 $zero label_433 +j label_434 +label_433: +li $v0 4 +la $a0 data_174 +syscall +li $v0 10 +syscall +label_434: +lw $t0 -536($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -540($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -536($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -528($fp) +lw $t0 -528($fp) +sw $t0 -548($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -504($fp) +lw $t0 -504($fp) +bne $t0 $zero label_435 +j label_436 +label_435: +li $v0 4 +la $a0 data_175 +syscall +li $v0 10 +syscall +label_436: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -500($fp) +lw $t0 -500($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -548($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -480($fp) +lw $t0 -480($fp) +bne $t0 $zero label_437 +j label_438 +label_437: +li $v0 4 +la $a0 data_176 +syscall +li $v0 10 +syscall +label_438: +lw $t0 -548($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -548($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -476($fp) +lw $t0 -476($fp) +lw $t1 12($t0) +sw $t1 -492($fp) +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -472($fp) +lw $t0 -472($fp) +lw $t1 12($t0) +sw $t1 -488($fp) +lw $t0 -492($fp) +lw $t1 -488($fp) +mul $t0 $t0 $t1 +sw $t0 -484($fp) +lw $t0 -484($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -496($fp) +lw $t0 -496($fp) +lw $t1 12($t0) +sw $t1 -512($fp) +lw $t0 -516($fp) +lw $t1 -512($fp) +sub $t0 $t0 $t1 +sw $t0 -508($fp) +lw $t0 -508($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -520($fp) +lw $t0 -520($fp) +sw $t0 -524($fp) +la $t0 data_177 +sw $t0 -468($fp) +lw $t0 -468($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -464($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -460($fp) +lw $t0 -460($fp) +bne $t0 $zero label_439 +j label_440 +label_439: +li $v0 4 +la $a0 data_178 +syscall +li $v0 10 +syscall +label_440: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -464($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -456($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_441 +j label_442 +label_441: +li $v0 4 +la $a0 data_179 +syscall +li $v0 10 +syscall +label_442: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -448($fp) +la $t0 data_180 +sw $t0 -444($fp) +lw $t0 -444($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -440($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -436($fp) +lw $t0 -436($fp) +bne $t0 $zero label_443 +j label_444 +label_443: +li $v0 4 +la $a0 data_181 +syscall +li $v0 10 +syscall +label_444: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -440($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -432($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -428($fp) +lw $t0 -428($fp) +bne $t0 $zero label_445 +j label_446 +label_445: +li $v0 4 +la $a0 data_182 +syscall +li $v0 10 +syscall +label_446: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -548($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -424($fp) +la $t0 data_183 +sw $t0 -420($fp) +lw $t0 -420($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -416($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -412($fp) +lw $t0 -412($fp) +bne $t0 $zero label_447 +j label_448 +label_447: +li $v0 4 +la $a0 data_184 +syscall +li $v0 10 +syscall +label_448: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -416($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -408($fp) +jal __init_at_A2I +sw $v0 -400($fp) +lw $t0 -400($fp) +sw $t0 -404($fp) +lw $t0 -404($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -396($fp) +lw $t0 -396($fp) +bne $t0 $zero label_449 +j label_450 +label_449: +li $v0 4 +la $a0 data_185 +syscall +li $v0 10 +syscall +label_450: +lw $t0 -404($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -524($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -404($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -392($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_451 +j label_452 +label_451: +li $v0 4 +la $a0 data_186 +syscall +li $v0 10 +syscall +label_452: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -392($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -384($fp) +la $t0 data_187 +sw $t0 -380($fp) +lw $t0 -380($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -376($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -372($fp) +lw $t0 -372($fp) +bne $t0 $zero label_453 +j label_454 +label_453: +li $v0 4 +la $a0 data_188 +syscall +li $v0 10 +syscall +label_454: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -376($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -368($fp) +lw $t0 -548($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -732($fp) +label_455: +lw $t0 -732($fp) +sw $t0 -784($fp) +j label_475 +label_456: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_457 +j label_458 +label_457: +li $v0 4 +la $a0 data_189 +syscall +li $v0 10 +syscall +label_458: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -352($fp) +jal __init_at_D +sw $v0 -348($fp) +lw $t0 -348($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -344($fp) +lw $t0 -344($fp) +bne $t0 $zero label_459 +j label_460 +label_459: +li $v0 4 +la $a0 data_190 +syscall +li $v0 10 +syscall +label_460: +lw $t0 -348($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -352($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -348($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -340($fp) +lw $t0 -340($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -360($fp) +bne $t0 $zero label_467 +la $t0 data_191 +sw $t0 -336($fp) +lw $t0 -336($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -332($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -328($fp) +lw $t0 -328($fp) +bne $t0 $zero label_461 +j label_462 +label_461: +li $v0 4 +la $a0 data_192 +syscall +li $v0 10 +syscall +label_462: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -332($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -324($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -320($fp) +lw $t0 -320($fp) +bne $t0 $zero label_463 +j label_464 +label_463: +li $v0 4 +la $a0 data_193 +syscall +li $v0 10 +syscall +label_464: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -316($fp) +la $t0 data_194 +sw $t0 -312($fp) +lw $t0 -312($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -308($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -304($fp) +lw $t0 -304($fp) +bne $t0 $zero label_465 +j label_466 +label_465: +li $v0 4 +la $a0 data_195 +syscall +li $v0 10 +syscall +label_466: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -308($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -300($fp) +lw $t0 -300($fp) +sw $t0 -364($fp) +j label_474 +label_467: +la $t0 data_196 +sw $t0 -296($fp) +lw $t0 -296($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -292($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -288($fp) +lw $t0 -288($fp) +bne $t0 $zero label_468 +j label_469 +label_468: +li $v0 4 +la $a0 data_197 +syscall +li $v0 10 +syscall +label_469: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -292($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -284($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -280($fp) +lw $t0 -280($fp) +bne $t0 $zero label_470 +j label_471 +label_470: +li $v0 4 +la $a0 data_198 +syscall +li $v0 10 +syscall +label_471: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -276($fp) +la $t0 data_199 +sw $t0 -272($fp) +lw $t0 -272($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -268($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -264($fp) +lw $t0 -264($fp) +bne $t0 $zero label_472 +j label_473 +label_472: +li $v0 4 +la $a0 data_200 +syscall +li $v0 10 +syscall +label_473: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -268($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -260($fp) +lw $t0 -260($fp) +sw $t0 -364($fp) +label_474: +lw $t0 -364($fp) +sw $t0 -784($fp) +label_475: +lw $t0 -784($fp) +sw $t0 -836($fp) +j label_481 +label_476: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -256($fp) +lw $t0 -256($fp) +bne $t0 $zero label_477 +j label_478 +label_477: +li $v0 4 +la $a0 data_201 +syscall +li $v0 10 +syscall +label_478: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -252($fp) +jal __init_at_C +sw $v0 -248($fp) +lw $t0 -248($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_479 +j label_480 +label_479: +li $v0 4 +la $a0 data_202 +syscall +li $v0 10 +syscall +label_480: +lw $t0 -248($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -252($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_method5_at_C +addi $sp $sp 8 +sw $v0 -240($fp) +lw $t0 -240($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -836($fp) +label_481: +lw $t0 -836($fp) +sw $t0 -888($fp) +j label_487 +label_482: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -236($fp) +lw $t0 -236($fp) +bne $t0 $zero label_483 +j label_484 +label_483: +li $v0 4 +la $a0 data_203 +syscall +li $v0 10 +syscall +label_484: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -232($fp) +jal __init_at_C +sw $v0 -228($fp) +lw $t0 -228($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -224($fp) +lw $t0 -224($fp) +bne $t0 $zero label_485 +j label_486 +label_485: +li $v0 4 +la $a0 data_204 +syscall +li $v0 10 +syscall +label_486: +lw $t0 -228($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -232($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_method5_at_B +addi $sp $sp 8 +sw $v0 -220($fp) +lw $t0 -220($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -888($fp) +label_487: +lw $t0 -888($fp) +sw $t0 -940($fp) +j label_493 +label_488: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -216($fp) +lw $t0 -216($fp) +bne $t0 $zero label_489 +j label_490 +label_489: +li $v0 4 +la $a0 data_205 +syscall +li $v0 10 +syscall +label_490: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -212($fp) +jal __init_at_C +sw $v0 -208($fp) +lw $t0 -208($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -204($fp) +lw $t0 -204($fp) +bne $t0 $zero label_491 +j label_492 +label_491: +li $v0 4 +la $a0 data_206 +syscall +li $v0 10 +syscall +label_492: +lw $t0 -208($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -212($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_method5_at_A +addi $sp $sp 8 +sw $v0 -200($fp) +lw $t0 -200($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -940($fp) +label_493: +lw $t0 -940($fp) +sw $t0 -992($fp) +j label_505 +label_494: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_495 +j label_496 +label_495: +li $v0 4 +la $a0 data_207 +syscall +li $v0 10 +syscall +label_496: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -192($fp) +jal __init_at_A +sw $v0 -188($fp) +lw $t0 -188($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -184($fp) +lw $t0 -184($fp) +bne $t0 $zero label_497 +j label_498 +label_497: +li $v0 4 +la $a0 data_208 +syscall +li $v0 10 +syscall +label_498: +lw $t0 -188($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -192($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -188($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -180($fp) +lw $t0 -180($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_499 +j label_500 +label_499: +li $v0 4 +la $a0 data_209 +syscall +li $v0 10 +syscall +label_500: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -172($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_501 +j label_502 +label_501: +li $v0 4 +la $a0 data_210 +syscall +li $v0 10 +syscall +label_502: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -164($fp) +jal __init_at_D +sw $v0 -160($fp) +lw $t0 -160($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -156($fp) +lw $t0 -156($fp) +bne $t0 $zero label_503 +j label_504 +label_503: +li $v0 4 +la $a0 data_211 +syscall +li $v0 10 +syscall +label_504: +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -164($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -152($fp) +lw $t0 -152($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -992($fp) +label_505: +lw $t0 -992($fp) +sw $t0 -1044($fp) +j label_525 +label_506: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_507 +j label_508 +label_507: +li $v0 4 +la $a0 data_212 +syscall +li $v0 10 +syscall +label_508: +la $t0 types_table +addi $t0 $t0 28 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_509 +la $t0 types_table +addi $t0 $t0 20 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_514 +la $t0 types_table +addi $t0 $t0 24 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_514 +la $t0 types_table +addi $t0 $t0 32 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_514 +la $t0 types_table +addi $t0 $t0 36 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_514 +la $t0 types_table +addi $t0 $t0 0 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +la $t0 types_table +addi $t0 $t0 4 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +la $t0 types_table +addi $t0 $t0 40 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +la $t0 types_table +addi $t0 $t0 44 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_519 +li $v0 4 +la $a0 data_213 +syscall +li $v0 10 +syscall +label_509: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -128($fp) +lw $t0 -128($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_510 +j label_511 +label_510: +li $v0 4 +la $a0 data_214 +syscall +li $v0 10 +syscall +label_511: +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 -128($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_512 +j label_513 +label_512: +li $v0 4 +la $a0 data_215 +syscall +li $v0 10 +syscall +label_513: +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -112($fp) +lw $t0 -112($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -148($fp) +j label_524 +label_514: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -108($fp) +lw $t0 -108($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_515 +j label_516 +label_515: +li $v0 4 +la $a0 data_216 +syscall +li $v0 10 +syscall +label_516: +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -108($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_517 +j label_518 +label_517: +li $v0 4 +la $a0 data_217 +syscall +li $v0 10 +syscall +label_518: +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -148($fp) +j label_524 +label_519: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -88($fp) +la $t0 data_218 +sw $t0 -84($fp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_520 +j label_521 +label_520: +li $v0 4 +la $a0 data_219 +syscall +li $v0 10 +syscall +label_521: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -72($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -68($fp) +lw $t0 -68($fp) +bne $t0 $zero label_522 +j label_523 +label_522: +li $v0 4 +la $a0 data_220 +syscall +li $v0 10 +syscall +label_523: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -64($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +sw $t0 -148($fp) +j label_524 +label_524: +lw $t0 -148($fp) +sw $t0 -1044($fp) +label_525: +lw $t0 -1044($fp) +sw $t0 -1096($fp) +j label_537 +label_526: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_527 +j label_528 +label_527: +li $v0 4 +la $a0 data_221 +syscall +li $v0 10 +syscall +label_528: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +jal __init_at_A +sw $v0 -48($fp) +lw $t0 -48($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_529 +j label_530 +label_529: +li $v0 4 +la $a0 data_222 +syscall +li $v0 10 +syscall +label_530: +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -40($fp) +lw $t0 -40($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_531 +j label_532 +label_531: +li $v0 4 +la $a0 data_223 +syscall +li $v0 10 +syscall +label_532: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_533 +j label_534 +label_533: +li $v0 4 +la $a0 data_224 +syscall +li $v0 10 +syscall +label_534: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -24($fp) +jal __init_at_B +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_535 +j label_536 +label_535: +li $v0 4 +la $a0 data_225 +syscall +li $v0 10 +syscall +label_536: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -1096($fp) +label_537: +j label_362 +label_538: +li $v0 0 +addi $sp $sp 1208 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 11 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +li $t0 11 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra - - -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra - jr $ra - \ No newline at end of file +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index fdee09672..d045d76ec 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -140,5249 +140,5142 @@ data_68: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_a2i_at_A2I - .word function_a2i_aux_at_A2I - .word function_c2i_at_A2I - .word function_i2a_at_A2I - .word function_i2a_aux_at_A2I - .word function_i2c_at_A2I - .word __init_attr_at_A2I - .word __init_at_A2I +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_a2i_at_A2I +.word function_a2i_aux_at_A2I +.word function_c2i_at_A2I +.word function_i2a_at_A2I +.word function_i2a_aux_at_A2I +.word function_i2c_at_A2I +.word __init_attr_at_A2I +.word __init_at_A2I type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 +.word 5 +.word 4 +.word type_6_dispatch +.word -1 type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_7_prototype: - .word 6 - .word 4 - .word type_7_dispatch - .word -1 +.word 6 +.word 4 +.word type_7_dispatch +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_10 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_8 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_10 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_8 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_11 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_11 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_c2i_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -572 - la $t0 data_12 - sw $t0 -536($fp) - lw $t0 -536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -532($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -560($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -556($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -552($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -548($fp) - lw $t0 -560($fp) - lw $t1 -556($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_3 - lw $t0 -560($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_4 - lw $t0 -560($fp) - lw $t1 -548($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_5 - lw $t0 0($fp) - lw $t1 -532($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_6 - label_3: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_6 - label_4: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - move $a0 $t0 - lw $t0 -564($fp) - move $a1 $t0 - jal equal_str - sw $v0 -540($fp) - j label_6 - label_5: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_6 - label_6: - lw $t0 -540($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -572($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -576($fp) - lw $t0 -576($fp) - bne $t0 $zero label_63 - la $t0 data_13 - sw $t0 -484($fp) - lw $t0 -484($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -480($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -508($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -504($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -500($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -496($fp) - lw $t0 -508($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_7 - lw $t0 -508($fp) - lw $t1 -500($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_8 - lw $t0 -508($fp) - lw $t1 -496($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_9 - lw $t0 0($fp) - lw $t1 -480($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_10 - label_7: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_10 - label_8: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - move $a0 $t0 - lw $t0 -512($fp) - move $a1 $t0 - jal equal_str - sw $v0 -488($fp) - j label_10 - label_9: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_10 - label_10: - lw $t0 -488($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -520($fp) - lw $t0 -520($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -524($fp) - bne $t0 $zero label_61 - la $t0 data_14 - sw $t0 -432($fp) - lw $t0 -432($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -456($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -452($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -448($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -444($fp) - lw $t0 -456($fp) - lw $t1 -452($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_11 - lw $t0 -456($fp) - lw $t1 -448($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_12 - lw $t0 -456($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_13 - lw $t0 0($fp) - lw $t1 -428($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_14 - label_11: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_14 - label_12: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - move $a0 $t0 - lw $t0 -460($fp) - move $a1 $t0 - jal equal_str - sw $v0 -436($fp) - j label_14 - label_13: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_14 - label_14: - lw $t0 -436($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -468($fp) - lw $t0 -468($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -472($fp) - bne $t0 $zero label_59 - la $t0 data_15 - sw $t0 -380($fp) - lw $t0 -380($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -376($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -404($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -400($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -396($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -392($fp) - lw $t0 -404($fp) - lw $t1 -400($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_15 - lw $t0 -404($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_16 - lw $t0 -404($fp) - lw $t1 -392($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_17 - lw $t0 0($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_18 - label_15: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_18 - label_16: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - move $a0 $t0 - lw $t0 -408($fp) - move $a1 $t0 - jal equal_str - sw $v0 -384($fp) - j label_18 - label_17: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_18 - label_18: - lw $t0 -384($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -416($fp) - lw $t0 -416($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -420($fp) - bne $t0 $zero label_57 - la $t0 data_16 - sw $t0 -328($fp) - lw $t0 -328($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -324($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -352($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -348($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -344($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -340($fp) - lw $t0 -352($fp) - lw $t1 -348($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_19 - lw $t0 -352($fp) - lw $t1 -344($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_20 - lw $t0 -352($fp) - lw $t1 -340($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_21 - lw $t0 0($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_22 - label_19: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_22 - label_20: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - move $a0 $t0 - lw $t0 -356($fp) - move $a1 $t0 - jal equal_str - sw $v0 -332($fp) - j label_22 - label_21: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_22 - label_22: - lw $t0 -332($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -364($fp) - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -368($fp) - lw $t0 -368($fp) - bne $t0 $zero label_55 - la $t0 data_17 - sw $t0 -276($fp) - lw $t0 -276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -300($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -296($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -292($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -288($fp) - lw $t0 -300($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_23 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_24 - lw $t0 -300($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_25 - lw $t0 0($fp) - lw $t1 -272($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_26 - label_23: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_26 - label_24: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - move $a0 $t0 - lw $t0 -304($fp) - move $a1 $t0 - jal equal_str - sw $v0 -280($fp) - j label_26 - label_25: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_26 - label_26: - lw $t0 -280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -312($fp) - lw $t0 -312($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_53 - la $t0 data_18 - sw $t0 -224($fp) - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -220($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -248($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -244($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -240($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -236($fp) - lw $t0 -248($fp) - lw $t1 -244($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_27 - lw $t0 -248($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_28 - lw $t0 -248($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_29 - lw $t0 0($fp) - lw $t1 -220($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_30 - label_27: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_30 - label_28: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - move $a0 $t0 - lw $t0 -252($fp) - move $a1 $t0 - jal equal_str - sw $v0 -228($fp) - j label_30 - label_29: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_30 - label_30: - lw $t0 -228($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -260($fp) - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -264($fp) - bne $t0 $zero label_51 - la $t0 data_19 - sw $t0 -172($fp) - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -196($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -192($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -184($fp) - lw $t0 -196($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_31 - lw $t0 -196($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_32 - lw $t0 -196($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_33 - lw $t0 0($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_34 - label_31: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_34 - label_32: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - move $a0 $t0 - lw $t0 -200($fp) - move $a1 $t0 - jal equal_str - sw $v0 -176($fp) - j label_34 - label_33: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_34 - label_34: - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -208($fp) - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_49 - la $t0 data_20 - sw $t0 -120($fp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_35 - lw $t0 -144($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_36 - lw $t0 -144($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_37 - lw $t0 0($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_38 - label_35: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_38 - label_36: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - move $a0 $t0 - lw $t0 -148($fp) - move $a1 $t0 - jal equal_str - sw $v0 -124($fp) - j label_38 - label_37: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_38 - label_38: - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_47 - la $t0 data_21 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_39 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_40 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_41 - lw $t0 0($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_42 - label_39: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_42 - label_40: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_42 - label_41: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_42 - label_42: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_45 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_44: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -56($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -112($fp) - j label_46 - label_45: - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -112($fp) - label_46: - lw $t0 -112($fp) - sw $t0 -164($fp) - j label_48 - label_47: - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -164($fp) - label_48: - lw $t0 -164($fp) - sw $t0 -216($fp) - j label_50 - label_49: - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -216($fp) - label_50: - lw $t0 -216($fp) - sw $t0 -268($fp) - j label_52 - label_51: - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -268($fp) - label_52: - lw $t0 -268($fp) - sw $t0 -320($fp) - j label_54 - label_53: - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -320($fp) - label_54: - lw $t0 -320($fp) - sw $t0 -372($fp) - j label_56 - label_55: - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -372($fp) - label_56: - lw $t0 -372($fp) - sw $t0 -424($fp) - j label_58 - label_57: - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -424($fp) - label_58: - lw $t0 -424($fp) - sw $t0 -476($fp) - j label_60 - label_59: - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -476($fp) - label_60: - lw $t0 -476($fp) - sw $t0 -528($fp) - j label_62 - label_61: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -528($fp) - label_62: - lw $t0 -528($fp) - sw $t0 -580($fp) - j label_64 - label_63: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -580($fp) - label_64: - lw $v0 -580($fp) - addi $sp $sp 572 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -572 +la $t0 data_12 +sw $t0 -536($fp) +lw $t0 -536($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -532($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -560($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -556($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -552($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -548($fp) +lw $t0 -560($fp) +lw $t1 -556($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_3 +lw $t0 -560($fp) +lw $t1 -552($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_4 +lw $t0 -560($fp) +lw $t1 -548($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_5 +lw $t0 0($fp) +lw $t1 -532($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_6 +label_3: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -568($fp) +lw $t1 -564($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_6 +label_4: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -568($fp) +move $a0 $t0 +lw $t0 -564($fp) +move $a1 $t0 +jal equal_str +sw $v0 -540($fp) +j label_6 +label_5: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -568($fp) +lw $t1 -564($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_6 +label_6: +lw $t0 -540($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -572($fp) +lw $t0 -572($fp) +lw $t1 12($t0) +sw $t1 -576($fp) +lw $t0 -576($fp) +bne $t0 $zero label_63 +la $t0 data_13 +sw $t0 -484($fp) +lw $t0 -484($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -480($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -508($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -504($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -500($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -496($fp) +lw $t0 -508($fp) +lw $t1 -504($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_7 +lw $t0 -508($fp) +lw $t1 -500($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_8 +lw $t0 -508($fp) +lw $t1 -496($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_9 +lw $t0 0($fp) +lw $t1 -480($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_10 +label_7: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -512($fp) +lw $t0 -516($fp) +lw $t1 -512($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_10 +label_8: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -512($fp) +lw $t0 -516($fp) +move $a0 $t0 +lw $t0 -512($fp) +move $a1 $t0 +jal equal_str +sw $v0 -488($fp) +j label_10 +label_9: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -512($fp) +lw $t0 -516($fp) +lw $t1 -512($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_10 +label_10: +lw $t0 -488($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -520($fp) +lw $t0 -520($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -524($fp) +bne $t0 $zero label_61 +la $t0 data_14 +sw $t0 -432($fp) +lw $t0 -432($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -428($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -456($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -452($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -448($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -444($fp) +lw $t0 -456($fp) +lw $t1 -452($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_11 +lw $t0 -456($fp) +lw $t1 -448($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_12 +lw $t0 -456($fp) +lw $t1 -444($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_13 +lw $t0 0($fp) +lw $t1 -428($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_14 +label_11: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -464($fp) +lw $t1 -460($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_14 +label_12: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -464($fp) +move $a0 $t0 +lw $t0 -460($fp) +move $a1 $t0 +jal equal_str +sw $v0 -436($fp) +j label_14 +label_13: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -464($fp) +lw $t1 -460($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_14 +label_14: +lw $t0 -436($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -468($fp) +lw $t0 -468($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -472($fp) +bne $t0 $zero label_59 +la $t0 data_15 +sw $t0 -380($fp) +lw $t0 -380($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -376($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -404($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -400($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -396($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -392($fp) +lw $t0 -404($fp) +lw $t1 -400($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_15 +lw $t0 -404($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_16 +lw $t0 -404($fp) +lw $t1 -392($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_17 +lw $t0 0($fp) +lw $t1 -376($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_18 +label_15: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -408($fp) +lw $t0 -412($fp) +lw $t1 -408($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_18 +label_16: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -408($fp) +lw $t0 -412($fp) +move $a0 $t0 +lw $t0 -408($fp) +move $a1 $t0 +jal equal_str +sw $v0 -384($fp) +j label_18 +label_17: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -408($fp) +lw $t0 -412($fp) +lw $t1 -408($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_18 +label_18: +lw $t0 -384($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -416($fp) +lw $t0 -416($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -420($fp) +bne $t0 $zero label_57 +la $t0 data_16 +sw $t0 -328($fp) +lw $t0 -328($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -324($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -352($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -348($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -344($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -340($fp) +lw $t0 -352($fp) +lw $t1 -348($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_19 +lw $t0 -352($fp) +lw $t1 -344($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_20 +lw $t0 -352($fp) +lw $t1 -340($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_21 +lw $t0 0($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_22 +label_19: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -356($fp) +lw $t0 -360($fp) +lw $t1 -356($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_22 +label_20: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -356($fp) +lw $t0 -360($fp) +move $a0 $t0 +lw $t0 -356($fp) +move $a1 $t0 +jal equal_str +sw $v0 -332($fp) +j label_22 +label_21: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -356($fp) +lw $t0 -360($fp) +lw $t1 -356($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_22 +label_22: +lw $t0 -332($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -364($fp) +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -368($fp) +lw $t0 -368($fp) +bne $t0 $zero label_55 +la $t0 data_17 +sw $t0 -276($fp) +lw $t0 -276($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -300($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -292($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -288($fp) +lw $t0 -300($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_23 +lw $t0 -300($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_24 +lw $t0 -300($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_25 +lw $t0 0($fp) +lw $t1 -272($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_26 +label_23: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_26 +label_24: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +move $a0 $t0 +lw $t0 -304($fp) +move $a1 $t0 +jal equal_str +sw $v0 -280($fp) +j label_26 +label_25: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_26 +label_26: +lw $t0 -280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -312($fp) +lw $t0 -312($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_53 +la $t0 data_18 +sw $t0 -224($fp) +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -220($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -248($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -244($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -240($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -236($fp) +lw $t0 -248($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_27 +lw $t0 -248($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_28 +lw $t0 -248($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_29 +lw $t0 0($fp) +lw $t1 -220($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_30 +label_27: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -256($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_30 +label_28: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -256($fp) +move $a0 $t0 +lw $t0 -252($fp) +move $a1 $t0 +jal equal_str +sw $v0 -228($fp) +j label_30 +label_29: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -256($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_30 +label_30: +lw $t0 -228($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -260($fp) +lw $t0 -260($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -264($fp) +bne $t0 $zero label_51 +la $t0 data_19 +sw $t0 -172($fp) +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -168($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -196($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -192($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -188($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -184($fp) +lw $t0 -196($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_31 +lw $t0 -196($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_32 +lw $t0 -196($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_33 +lw $t0 0($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_34 +label_31: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -204($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_34 +label_32: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -204($fp) +move $a0 $t0 +lw $t0 -200($fp) +move $a1 $t0 +jal equal_str +sw $v0 -176($fp) +j label_34 +label_33: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -204($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_34 +label_34: +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -208($fp) +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_49 +la $t0 data_20 +sw $t0 -120($fp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -136($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_35 +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_36 +lw $t0 -144($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_37 +lw $t0 0($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_38 +label_35: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_38 +label_36: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +move $a0 $t0 +lw $t0 -148($fp) +move $a1 $t0 +jal equal_str +sw $v0 -124($fp) +j label_38 +label_37: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_38 +label_38: +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_47 +la $t0 data_21 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -92($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -80($fp) +lw $t0 -92($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_39 +lw $t0 -92($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_40 +lw $t0 -92($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_41 +lw $t0 0($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_42 +label_39: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_42 +label_40: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -96($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_42 +label_41: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_42 +label_42: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_45 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_44: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -56($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -112($fp) +j label_46 +label_45: +li $t0 9 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +sw $t0 -112($fp) +label_46: +lw $t0 -112($fp) +sw $t0 -164($fp) +j label_48 +label_47: +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -164($fp) +label_48: +lw $t0 -164($fp) +sw $t0 -216($fp) +j label_50 +label_49: +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -216($fp) +label_50: +lw $t0 -216($fp) +sw $t0 -268($fp) +j label_52 +label_51: +li $t0 6 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -268($fp) +label_52: +lw $t0 -268($fp) +sw $t0 -320($fp) +j label_54 +label_53: +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -320($fp) +label_54: +lw $t0 -320($fp) +sw $t0 -372($fp) +j label_56 +label_55: +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -372($fp) +label_56: +lw $t0 -372($fp) +sw $t0 -424($fp) +j label_58 +label_57: +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -424($fp) +label_58: +lw $t0 -424($fp) +sw $t0 -476($fp) +j label_60 +label_59: +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -476($fp) +label_60: +lw $t0 -476($fp) +sw $t0 -528($fp) +j label_62 +label_61: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -528($fp) +label_62: +lw $t0 -528($fp) +sw $t0 -580($fp) +j label_64 +label_63: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -580($fp) +label_64: +lw $v0 -580($fp) +addi $sp $sp 572 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_i2c_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -576 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -540($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -564($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -560($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -556($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -552($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) - seq $t0 $t0 $t1 - sw $t0 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_65 - lw $t0 -564($fp) - lw $t1 -556($fp) - seq $t0 $t0 $t1 - sw $t0 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_66 - lw $t0 -564($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_67 - lw $t0 0($fp) - lw $t1 -540($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - j label_68 - label_65: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -540($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -572($fp) - lw $t1 -568($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - j label_68 - label_66: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -540($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -572($fp) - move $a0 $t0 - lw $t0 -568($fp) - move $a1 $t0 - jal equal_str - sw $v0 -544($fp) - j label_68 - label_67: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -540($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -572($fp) - lw $t1 -568($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - j label_68 - label_68: - lw $t0 -544($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -576($fp) - lw $t0 -576($fp) - lw $t1 12($t0) - sw $t1 -580($fp) - lw $t0 -580($fp) - bne $t0 $zero label_125 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -492($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -516($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -512($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -508($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -504($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -500($fp) - lw $t0 -500($fp) - bne $t0 $zero label_69 - lw $t0 -516($fp) - lw $t1 -508($fp) - seq $t0 $t0 $t1 - sw $t0 -500($fp) - lw $t0 -500($fp) - bne $t0 $zero label_70 - lw $t0 -516($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -500($fp) - lw $t0 -500($fp) - bne $t0 $zero label_71 - lw $t0 0($fp) - lw $t1 -492($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - j label_72 - label_69: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -492($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -524($fp) - lw $t1 -520($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - j label_72 - label_70: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -492($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -524($fp) - move $a0 $t0 - lw $t0 -520($fp) - move $a1 $t0 - jal equal_str - sw $v0 -496($fp) - j label_72 - label_71: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -492($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -524($fp) - lw $t1 -520($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - j label_72 - label_72: - lw $t0 -496($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -528($fp) - lw $t0 -528($fp) - lw $t1 12($t0) - sw $t1 -532($fp) - lw $t0 -532($fp) - bne $t0 $zero label_123 - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -444($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -468($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -464($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -460($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -456($fp) - lw $t0 -468($fp) - lw $t1 -464($fp) - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_73 - lw $t0 -468($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_74 - lw $t0 -468($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_75 - lw $t0 0($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - j label_76 - label_73: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -476($fp) - lw $t0 -444($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -476($fp) - lw $t1 -472($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - j label_76 - label_74: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -476($fp) - lw $t0 -444($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -476($fp) - move $a0 $t0 - lw $t0 -472($fp) - move $a1 $t0 - jal equal_str - sw $v0 -448($fp) - j label_76 - label_75: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -476($fp) - lw $t0 -444($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -476($fp) - lw $t1 -472($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - j label_76 - label_76: - lw $t0 -448($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -480($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_121 - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -396($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -420($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -416($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -412($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -408($fp) - lw $t0 -420($fp) - lw $t1 -416($fp) - seq $t0 $t0 $t1 - sw $t0 -404($fp) - lw $t0 -404($fp) - bne $t0 $zero label_77 - lw $t0 -420($fp) - lw $t1 -412($fp) - seq $t0 $t0 $t1 - sw $t0 -404($fp) - lw $t0 -404($fp) - bne $t0 $zero label_78 - lw $t0 -420($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -404($fp) - lw $t0 -404($fp) - bne $t0 $zero label_79 - lw $t0 0($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - j label_80 - label_77: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -396($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -428($fp) - lw $t1 -424($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - j label_80 - label_78: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -396($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -428($fp) - move $a0 $t0 - lw $t0 -424($fp) - move $a1 $t0 - jal equal_str - sw $v0 -400($fp) - j label_80 - label_79: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -396($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -428($fp) - lw $t1 -424($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - j label_80 - label_80: - lw $t0 -400($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -432($fp) - lw $t0 -432($fp) - lw $t1 12($t0) - sw $t1 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_119 - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -348($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -372($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -368($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -364($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -360($fp) - lw $t0 -372($fp) - lw $t1 -368($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_81 - lw $t0 -372($fp) - lw $t1 -364($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_82 - lw $t0 -372($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_83 - lw $t0 0($fp) - lw $t1 -348($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_84 - label_81: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_84 - label_82: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - move $a0 $t0 - lw $t0 -376($fp) - move $a1 $t0 - jal equal_str - sw $v0 -352($fp) - j label_84 - label_83: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_84 - label_84: - lw $t0 -352($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -384($fp) - lw $t0 -384($fp) - lw $t1 12($t0) - sw $t1 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_117 - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -324($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -320($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -316($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -312($fp) - lw $t0 -324($fp) - lw $t1 -320($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - lw $t0 -308($fp) - bne $t0 $zero label_85 - lw $t0 -324($fp) - lw $t1 -316($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - lw $t0 -308($fp) - bne $t0 $zero label_86 - lw $t0 -324($fp) - lw $t1 -312($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - lw $t0 -308($fp) - bne $t0 $zero label_87 - lw $t0 0($fp) - lw $t1 -300($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - j label_88 - label_85: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -332($fp) - lw $t1 -328($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - j label_88 - label_86: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -332($fp) - move $a0 $t0 - lw $t0 -328($fp) - move $a1 $t0 - jal equal_str - sw $v0 -304($fp) - j label_88 - label_87: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -332($fp) - lw $t1 -328($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - j label_88 - label_88: - lw $t0 -304($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -336($fp) - lw $t0 -336($fp) - lw $t1 12($t0) - sw $t1 -340($fp) - lw $t0 -340($fp) - bne $t0 $zero label_115 - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -252($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -276($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -272($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -268($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -264($fp) - lw $t0 -276($fp) - lw $t1 -272($fp) - seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_89 - lw $t0 -276($fp) - lw $t1 -268($fp) - seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_90 - lw $t0 -276($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_91 - lw $t0 0($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_92 - label_89: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -252($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_92 - label_90: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -252($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - move $a0 $t0 - lw $t0 -280($fp) - move $a1 $t0 - jal equal_str - sw $v0 -256($fp) - j label_92 - label_91: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -252($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_92 - label_92: - lw $t0 -256($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -288($fp) - lw $t0 -288($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_113 - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -228($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -224($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -220($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -216($fp) - lw $t0 -228($fp) - lw $t1 -224($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_93 - lw $t0 -228($fp) - lw $t1 -220($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_94 - lw $t0 -228($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_95 - lw $t0 0($fp) - lw $t1 -204($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_96 - label_93: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_96 - label_94: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - move $a0 $t0 - lw $t0 -232($fp) - move $a1 $t0 - jal equal_str - sw $v0 -208($fp) - j label_96 - label_95: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_96 - label_96: - lw $t0 -208($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -240($fp) - lw $t0 -240($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_111 - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -180($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -176($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -172($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -168($fp) - lw $t0 -180($fp) - lw $t1 -176($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_97 - lw $t0 -180($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_98 - lw $t0 -180($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_99 - lw $t0 0($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_100 - label_97: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_100 - label_98: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - move $a0 $t0 - lw $t0 -184($fp) - move $a1 $t0 - jal equal_str - sw $v0 -160($fp) - j label_100 - label_99: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_100 - label_100: - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -192($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_109 - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -132($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -124($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_101 - lw $t0 -132($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_102 - lw $t0 -132($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_103 - lw $t0 0($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_104 - label_101: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_104 - label_102: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - move $a0 $t0 - lw $t0 -136($fp) - move $a1 $t0 - jal equal_str - sw $v0 -112($fp) - j label_104 - label_103: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_104 - label_104: - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_107 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_105 - j label_106 - label_105: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_106: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -100($fp) - la $t0 data_24 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -152($fp) - j label_108 - label_107: - la $t0 data_25 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -152($fp) - label_108: - lw $t0 -152($fp) - sw $t0 -200($fp) - j label_110 - label_109: - la $t0 data_26 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -200($fp) - label_110: - lw $t0 -200($fp) - sw $t0 -248($fp) - j label_112 - label_111: - la $t0 data_27 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -248($fp) - label_112: - lw $t0 -248($fp) - sw $t0 -296($fp) - j label_114 - label_113: - la $t0 data_28 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -296($fp) - label_114: - lw $t0 -296($fp) - sw $t0 -344($fp) - j label_116 - label_115: - la $t0 data_29 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -344($fp) - label_116: - lw $t0 -344($fp) - sw $t0 -392($fp) - j label_118 - label_117: - la $t0 data_30 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -392($fp) - label_118: - lw $t0 -392($fp) - sw $t0 -440($fp) - j label_120 - label_119: - la $t0 data_31 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -440($fp) - label_120: - lw $t0 -440($fp) - sw $t0 -488($fp) - j label_122 - label_121: - la $t0 data_32 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -488($fp) - label_122: - lw $t0 -488($fp) - sw $t0 -536($fp) - j label_124 - label_123: - la $t0 data_33 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -536($fp) - label_124: - lw $t0 -536($fp) - sw $t0 -584($fp) - j label_126 - label_125: - la $t0 data_34 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -584($fp) - label_126: - lw $v0 -584($fp) - addi $sp $sp 576 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -576 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -540($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -564($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -560($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -556($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -552($fp) +lw $t0 -564($fp) +lw $t1 -560($fp) +seq $t0 $t0 $t1 +sw $t0 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_65 +lw $t0 -564($fp) +lw $t1 -556($fp) +seq $t0 $t0 $t1 +sw $t0 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_66 +lw $t0 -564($fp) +lw $t1 -552($fp) +seq $t0 $t0 $t1 +sw $t0 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_67 +lw $t0 0($fp) +lw $t1 -540($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +j label_68 +label_65: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -572($fp) +lw $t0 -540($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -572($fp) +lw $t1 -568($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +j label_68 +label_66: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -572($fp) +lw $t0 -540($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -572($fp) +move $a0 $t0 +lw $t0 -568($fp) +move $a1 $t0 +jal equal_str +sw $v0 -544($fp) +j label_68 +label_67: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -572($fp) +lw $t0 -540($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -572($fp) +lw $t1 -568($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +j label_68 +label_68: +lw $t0 -544($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -576($fp) +lw $t0 -576($fp) +lw $t1 12($t0) +sw $t1 -580($fp) +lw $t0 -580($fp) +bne $t0 $zero label_125 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -492($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -516($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -512($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -508($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -504($fp) +lw $t0 -516($fp) +lw $t1 -512($fp) +seq $t0 $t0 $t1 +sw $t0 -500($fp) +lw $t0 -500($fp) +bne $t0 $zero label_69 +lw $t0 -516($fp) +lw $t1 -508($fp) +seq $t0 $t0 $t1 +sw $t0 -500($fp) +lw $t0 -500($fp) +bne $t0 $zero label_70 +lw $t0 -516($fp) +lw $t1 -504($fp) +seq $t0 $t0 $t1 +sw $t0 -500($fp) +lw $t0 -500($fp) +bne $t0 $zero label_71 +lw $t0 0($fp) +lw $t1 -492($fp) +seq $t0 $t0 $t1 +sw $t0 -496($fp) +j label_72 +label_69: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -492($fp) +lw $t1 12($t0) +sw $t1 -520($fp) +lw $t0 -524($fp) +lw $t1 -520($fp) +seq $t0 $t0 $t1 +sw $t0 -496($fp) +j label_72 +label_70: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -492($fp) +lw $t1 12($t0) +sw $t1 -520($fp) +lw $t0 -524($fp) +move $a0 $t0 +lw $t0 -520($fp) +move $a1 $t0 +jal equal_str +sw $v0 -496($fp) +j label_72 +label_71: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -492($fp) +lw $t1 12($t0) +sw $t1 -520($fp) +lw $t0 -524($fp) +lw $t1 -520($fp) +seq $t0 $t0 $t1 +sw $t0 -496($fp) +j label_72 +label_72: +lw $t0 -496($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -528($fp) +lw $t0 -528($fp) +lw $t1 12($t0) +sw $t1 -532($fp) +lw $t0 -532($fp) +bne $t0 $zero label_123 +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -444($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -468($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -464($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -460($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -456($fp) +lw $t0 -468($fp) +lw $t1 -464($fp) +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_73 +lw $t0 -468($fp) +lw $t1 -460($fp) +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_74 +lw $t0 -468($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -452($fp) +lw $t0 -452($fp) +bne $t0 $zero label_75 +lw $t0 0($fp) +lw $t1 -444($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +j label_76 +label_73: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -476($fp) +lw $t0 -444($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -476($fp) +lw $t1 -472($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +j label_76 +label_74: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -476($fp) +lw $t0 -444($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -476($fp) +move $a0 $t0 +lw $t0 -472($fp) +move $a1 $t0 +jal equal_str +sw $v0 -448($fp) +j label_76 +label_75: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -476($fp) +lw $t0 -444($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -476($fp) +lw $t1 -472($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +j label_76 +label_76: +lw $t0 -448($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -480($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -484($fp) +lw $t0 -484($fp) +bne $t0 $zero label_121 +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -396($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -420($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -416($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -412($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -408($fp) +lw $t0 -420($fp) +lw $t1 -416($fp) +seq $t0 $t0 $t1 +sw $t0 -404($fp) +lw $t0 -404($fp) +bne $t0 $zero label_77 +lw $t0 -420($fp) +lw $t1 -412($fp) +seq $t0 $t0 $t1 +sw $t0 -404($fp) +lw $t0 -404($fp) +bne $t0 $zero label_78 +lw $t0 -420($fp) +lw $t1 -408($fp) +seq $t0 $t0 $t1 +sw $t0 -404($fp) +lw $t0 -404($fp) +bne $t0 $zero label_79 +lw $t0 0($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -400($fp) +j label_80 +label_77: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -396($fp) +lw $t1 12($t0) +sw $t1 -424($fp) +lw $t0 -428($fp) +lw $t1 -424($fp) +seq $t0 $t0 $t1 +sw $t0 -400($fp) +j label_80 +label_78: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -396($fp) +lw $t1 12($t0) +sw $t1 -424($fp) +lw $t0 -428($fp) +move $a0 $t0 +lw $t0 -424($fp) +move $a1 $t0 +jal equal_str +sw $v0 -400($fp) +j label_80 +label_79: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -396($fp) +lw $t1 12($t0) +sw $t1 -424($fp) +lw $t0 -428($fp) +lw $t1 -424($fp) +seq $t0 $t0 $t1 +sw $t0 -400($fp) +j label_80 +label_80: +lw $t0 -400($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -432($fp) +lw $t0 -432($fp) +lw $t1 12($t0) +sw $t1 -436($fp) +lw $t0 -436($fp) +bne $t0 $zero label_119 +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -348($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -372($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -368($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -364($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -360($fp) +lw $t0 -372($fp) +lw $t1 -368($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_81 +lw $t0 -372($fp) +lw $t1 -364($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_82 +lw $t0 -372($fp) +lw $t1 -360($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_83 +lw $t0 0($fp) +lw $t1 -348($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_84 +label_81: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -376($fp) +lw $t0 -380($fp) +lw $t1 -376($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_84 +label_82: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -376($fp) +lw $t0 -380($fp) +move $a0 $t0 +lw $t0 -376($fp) +move $a1 $t0 +jal equal_str +sw $v0 -352($fp) +j label_84 +label_83: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -376($fp) +lw $t0 -380($fp) +lw $t1 -376($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_84 +label_84: +lw $t0 -352($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -384($fp) +lw $t0 -384($fp) +lw $t1 12($t0) +sw $t1 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_117 +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -300($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -324($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -320($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -316($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -312($fp) +lw $t0 -324($fp) +lw $t1 -320($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +lw $t0 -308($fp) +bne $t0 $zero label_85 +lw $t0 -324($fp) +lw $t1 -316($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +lw $t0 -308($fp) +bne $t0 $zero label_86 +lw $t0 -324($fp) +lw $t1 -312($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +lw $t0 -308($fp) +bne $t0 $zero label_87 +lw $t0 0($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +j label_88 +label_85: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -332($fp) +lw $t1 -328($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +j label_88 +label_86: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -332($fp) +move $a0 $t0 +lw $t0 -328($fp) +move $a1 $t0 +jal equal_str +sw $v0 -304($fp) +j label_88 +label_87: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -332($fp) +lw $t1 -328($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +j label_88 +label_88: +lw $t0 -304($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -336($fp) +lw $t0 -336($fp) +lw $t1 12($t0) +sw $t1 -340($fp) +lw $t0 -340($fp) +bne $t0 $zero label_115 +li $t0 6 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -252($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -276($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -272($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -268($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -264($fp) +lw $t0 -276($fp) +lw $t1 -272($fp) +seq $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_89 +lw $t0 -276($fp) +lw $t1 -268($fp) +seq $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_90 +lw $t0 -276($fp) +lw $t1 -264($fp) +seq $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_91 +lw $t0 0($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -256($fp) +j label_92 +label_89: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -252($fp) +lw $t1 12($t0) +sw $t1 -280($fp) +lw $t0 -284($fp) +lw $t1 -280($fp) +seq $t0 $t0 $t1 +sw $t0 -256($fp) +j label_92 +label_90: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -252($fp) +lw $t1 12($t0) +sw $t1 -280($fp) +lw $t0 -284($fp) +move $a0 $t0 +lw $t0 -280($fp) +move $a1 $t0 +jal equal_str +sw $v0 -256($fp) +j label_92 +label_91: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t0 -252($fp) +lw $t1 12($t0) +sw $t1 -280($fp) +lw $t0 -284($fp) +lw $t1 -280($fp) +seq $t0 $t0 $t1 +sw $t0 -256($fp) +j label_92 +label_92: +lw $t0 -256($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -288($fp) +lw $t0 -288($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -292($fp) +bne $t0 $zero label_113 +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -228($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -224($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -220($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -216($fp) +lw $t0 -228($fp) +lw $t1 -224($fp) +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_93 +lw $t0 -228($fp) +lw $t1 -220($fp) +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_94 +lw $t0 -228($fp) +lw $t1 -216($fp) +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_95 +lw $t0 0($fp) +lw $t1 -204($fp) +seq $t0 $t0 $t1 +sw $t0 -208($fp) +j label_96 +label_93: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -232($fp) +lw $t0 -236($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -208($fp) +j label_96 +label_94: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -232($fp) +lw $t0 -236($fp) +move $a0 $t0 +lw $t0 -232($fp) +move $a1 $t0 +jal equal_str +sw $v0 -208($fp) +j label_96 +label_95: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -236($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -232($fp) +lw $t0 -236($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -208($fp) +j label_96 +label_96: +lw $t0 -208($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -240($fp) +lw $t0 -240($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_111 +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -180($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -176($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -172($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -168($fp) +lw $t0 -180($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_97 +lw $t0 -180($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_98 +lw $t0 -180($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_99 +lw $t0 0($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +j label_100 +label_97: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -188($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +j label_100 +label_98: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -188($fp) +move $a0 $t0 +lw $t0 -184($fp) +move $a1 $t0 +jal equal_str +sw $v0 -160($fp) +j label_100 +label_99: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -188($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +j label_100 +label_100: +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -192($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_109 +li $t0 9 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -132($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -124($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -120($fp) +lw $t0 -132($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_101 +lw $t0 -132($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_102 +lw $t0 -132($fp) +lw $t1 -120($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_103 +lw $t0 0($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_104 +label_101: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_104 +label_102: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +move $a0 $t0 +lw $t0 -136($fp) +move $a1 $t0 +jal equal_str +sw $v0 -112($fp) +j label_104 +label_103: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_104 +label_104: +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -144($fp) +lw $t0 -144($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -148($fp) +bne $t0 $zero label_107 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_105 +j label_106 +label_105: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_106: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -100($fp) +la $t0 data_24 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +sw $t0 -152($fp) +j label_108 +label_107: +la $t0 data_25 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -152($fp) +label_108: +lw $t0 -152($fp) +sw $t0 -200($fp) +j label_110 +label_109: +la $t0 data_26 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -200($fp) +label_110: +lw $t0 -200($fp) +sw $t0 -248($fp) +j label_112 +label_111: +la $t0 data_27 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +sw $t0 -248($fp) +label_112: +lw $t0 -248($fp) +sw $t0 -296($fp) +j label_114 +label_113: +la $t0 data_28 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +sw $t0 -296($fp) +label_114: +lw $t0 -296($fp) +sw $t0 -344($fp) +j label_116 +label_115: +la $t0 data_29 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -344($fp) +label_116: +lw $t0 -344($fp) +sw $t0 -392($fp) +j label_118 +label_117: +la $t0 data_30 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -392($fp) +label_118: +lw $t0 -392($fp) +sw $t0 -440($fp) +j label_120 +label_119: +la $t0 data_31 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -440($fp) +label_120: +lw $t0 -440($fp) +sw $t0 -488($fp) +j label_122 +label_121: +la $t0 data_32 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -488($fp) +label_122: +lw $t0 -488($fp) +sw $t0 -536($fp) +j label_124 +label_123: +la $t0 data_33 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -536($fp) +label_124: +lw $t0 -536($fp) +sw $t0 -584($fp) +j label_126 +label_125: +la $t0 data_34 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -584($fp) +label_126: +lw $v0 -584($fp) +addi $sp $sp 576 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_a2i_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -312 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -276($fp) - lw $t0 -276($fp) - bne $t0 $zero label_127 - j label_128 - label_127: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_128: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -272($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -268($fp) - lw $t0 -272($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -300($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -296($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -292($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -288($fp) - lw $t0 -300($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_129 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_130 - lw $t0 -300($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_131 - lw $t0 -272($fp) - lw $t1 -268($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_132 - label_129: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_132 - label_130: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - move $a0 $t0 - lw $t0 -304($fp) - move $a1 $t0 - jal equal_str - sw $v0 -280($fp) - j label_132 - label_131: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_132 - label_132: - lw $t0 -280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -312($fp) - lw $t0 -312($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_163 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -220($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_133 - j label_134 - label_133: - li $v0 4 - la $a0 data_36 - syscall - li $v0 10 - syscall - label_134: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -216($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -208($fp) - la $t0 data_37 - sw $t0 -204($fp) - lw $t0 -204($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -200($fp) - lw $t0 -208($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -244($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -240($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -236($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -232($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_135 - lw $t0 -244($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_136 - lw $t0 -244($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_137 - lw $t0 -208($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_138 - label_135: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_138 - label_136: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - move $a0 $t0 - lw $t0 -248($fp) - move $a1 $t0 - jal equal_str - sw $v0 -224($fp) - j label_138 - label_137: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_138 - label_138: - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_155 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_139 - j label_140 - label_139: - li $v0 4 - la $a0 data_38 - syscall - li $v0 10 - syscall - label_140: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -140($fp) - la $t0 data_39 - sw $t0 -136($fp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 -140($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -176($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -172($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -168($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -164($fp) - lw $t0 -176($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_141 - lw $t0 -176($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_142 - lw $t0 -176($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_143 - lw $t0 -140($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_144 - label_141: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_144 - label_142: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - move $a0 $t0 - lw $t0 -180($fp) - move $a1 $t0 - jal equal_str - sw $v0 -156($fp) - j label_144 - label_143: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_144 - label_144: - lw $t0 -156($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -192($fp) - bne $t0 $zero label_147 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_145 - j label_146 - label_145: - li $v0 4 - la $a0 data_40 - syscall - li $v0 10 - syscall - label_146: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -124($fp) - lw $t0 -124($fp) - sw $t0 -196($fp) - j label_154 - label_147: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_148 - j label_149 - label_148: - li $v0 4 - la $a0 data_41 - syscall - li $v0 10 - syscall - label_149: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -112($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - sub $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_150 - j label_151 - label_150: - li $v0 4 - la $a0 data_42 - syscall - li $v0 10 - syscall - label_151: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -84($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_152 - j label_153 - label_152: - li $v0 4 - la $a0 data_43 - syscall - li $v0 10 - syscall - label_153: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -196($fp) - label_154: - lw $t0 -196($fp) - sw $t0 -264($fp) - j label_162 - label_155: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_156 - j label_157 - label_156: - li $v0 4 - la $a0 data_44 - syscall - li $v0 10 - syscall - label_157: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - sub $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_158 - j label_159 - label_158: - li $v0 4 - la $a0 data_45 - syscall - li $v0 10 - syscall - label_159: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -24($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_160 - j label_161 - label_160: - li $v0 4 - la $a0 data_46 - syscall - li $v0 10 - syscall - label_161: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -16($fp) - lw $t0 -16($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -68($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -264($fp) - label_162: - lw $t0 -264($fp) - sw $t0 -320($fp) - j label_164 - label_163: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -320($fp) - label_164: - lw $v0 -320($fp) - addi $sp $sp 312 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -312 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -276($fp) +lw $t0 -276($fp) +bne $t0 $zero label_127 +j label_128 +label_127: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_128: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -272($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -268($fp) +lw $t0 -272($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -300($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -292($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -288($fp) +lw $t0 -300($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_129 +lw $t0 -300($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_130 +lw $t0 -300($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_131 +lw $t0 -272($fp) +lw $t1 -268($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_132 +label_129: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_132 +label_130: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +move $a0 $t0 +lw $t0 -304($fp) +move $a1 $t0 +jal equal_str +sw $v0 -280($fp) +j label_132 +label_131: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_132 +label_132: +lw $t0 -280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -312($fp) +lw $t0 -312($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_163 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -220($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_133 +j label_134 +label_133: +li $v0 4 +la $a0 data_36 +syscall +li $v0 10 +syscall +label_134: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -220($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -216($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -208($fp) +la $t0 data_37 +sw $t0 -204($fp) +lw $t0 -204($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -200($fp) +lw $t0 -208($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -244($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -240($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -236($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -232($fp) +lw $t0 -244($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_135 +lw $t0 -244($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_136 +lw $t0 -244($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_137 +lw $t0 -208($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_138 +label_135: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -252($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_138 +label_136: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -252($fp) +move $a0 $t0 +lw $t0 -248($fp) +move $a1 $t0 +jal equal_str +sw $v0 -224($fp) +j label_138 +label_137: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -252($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_138 +label_138: +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -256($fp) +lw $t0 -256($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_155 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -152($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_139 +j label_140 +label_139: +li $v0 4 +la $a0 data_38 +syscall +li $v0 10 +syscall +label_140: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -140($fp) +la $t0 data_39 +sw $t0 -136($fp) +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -132($fp) +lw $t0 -140($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -176($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -172($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -168($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -164($fp) +lw $t0 -176($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_141 +lw $t0 -176($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_142 +lw $t0 -176($fp) +lw $t1 -164($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_143 +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_144 +label_141: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -184($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_144 +label_142: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -184($fp) +move $a0 $t0 +lw $t0 -180($fp) +move $a1 $t0 +jal equal_str +sw $v0 -156($fp) +j label_144 +label_143: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -184($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_144 +label_144: +lw $t0 -156($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -188($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -192($fp) +bne $t0 $zero label_147 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_145 +j label_146 +label_145: +li $v0 4 +la $a0 data_40 +syscall +li $v0 10 +syscall +label_146: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -124($fp) +lw $t0 -124($fp) +sw $t0 -196($fp) +j label_154 +label_147: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_148 +j label_149 +label_148: +li $v0 4 +la $a0 data_41 +syscall +li $v0 10 +syscall +label_149: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +sub $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_150 +j label_151 +label_150: +li $v0 4 +la $a0 data_42 +syscall +li $v0 10 +syscall +label_151: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -84($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_152 +j label_153 +label_152: +li $v0 4 +la $a0 data_43 +syscall +li $v0 10 +syscall +label_153: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -196($fp) +label_154: +lw $t0 -196($fp) +sw $t0 -264($fp) +j label_162 +label_155: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_156 +j label_157 +label_156: +li $v0 4 +la $a0 data_44 +syscall +li $v0 10 +syscall +label_157: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +sub $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_158 +j label_159 +label_158: +li $v0 4 +la $a0 data_45 +syscall +li $v0 10 +syscall +label_159: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -24($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_160 +j label_161 +label_160: +li $v0 4 +la $a0 data_46 +syscall +li $v0 10 +syscall +label_161: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -16($fp) +lw $t0 -16($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -68($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -264($fp) +label_162: +lw $t0 -264($fp) +sw $t0 -320($fp) +j label_164 +label_163: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -320($fp) +label_164: +lw $v0 -320($fp) +addi $sp $sp 312 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_a2i_aux_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -124 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -128($fp) - lw $t0 -128($fp) - sw $t0 -132($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_165 - j label_166 - label_165: - li $v0 4 - la $a0 data_47 - syscall - li $v0 10 - syscall - label_166: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - sw $t0 -124($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) - sw $t0 -112($fp) - label_167: - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - slt $t1 $t0 $t1 - sw $t1 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_168 - j label_173 - label_168: - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - mul $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_169 - j label_170 - label_169: - li $v0 4 - la $a0 data_48 - syscall - li $v0 10 - syscall - label_170: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -40($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_171 - j label_172 - label_171: - li $v0 4 - la $a0 data_49 - syscall - li $v0 10 - syscall - label_172: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - add $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -132($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -112($fp) - j label_167 - label_173: - lw $v0 -132($fp) - addi $sp $sp 124 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -124 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -128($fp) +lw $t0 -128($fp) +sw $t0 -132($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_165 +j label_166 +label_165: +li $v0 4 +la $a0 data_47 +syscall +li $v0 10 +syscall +label_166: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +sw $t0 -124($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 -108($fp) +sw $t0 -112($fp) +label_167: +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +slt $t1 $t0 $t1 +sw $t1 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_168 +j label_173 +label_168: +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -64($fp) +lw $t1 -60($fp) +mul $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_169 +j label_170 +label_169: +li $v0 4 +la $a0 data_48 +syscall +li $v0 10 +syscall +label_170: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -40($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_171 +j label_172 +label_171: +li $v0 4 +la $a0 data_49 +syscall +li $v0 10 +syscall +label_172: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +lw $t1 -76($fp) +add $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -132($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -112($fp) +j label_167 +label_173: +lw $v0 -132($fp) +addi $sp $sp 124 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_i2a_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -148 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -136($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -132($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -124($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_174 - lw $t0 -136($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_175 - lw $t0 -136($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_176 - lw $t0 0($fp) - lw $t1 -112($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_177 - label_174: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_177 - label_175: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - move $a0 $t0 - lw $t0 -140($fp) - move $a1 $t0 - jal equal_str - sw $v0 -116($fp) - j label_177 - label_176: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_177 - label_177: - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -152($fp) - bne $t0 $zero label_186 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - slt $t1 $t0 $t1 - sw $t1 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_182 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -60($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - mul $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_178 - j label_179 - label_178: - li $v0 4 - la $a0 data_50 - syscall - li $v0 10 - syscall - label_179: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - la $t0 data_51 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_180 - j label_181 - label_180: - li $v0 4 - la $a0 data_52 - syscall - li $v0 10 - syscall - label_181: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -108($fp) - j label_185 - label_182: - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_183 - j label_184 - label_183: - li $v0 4 - la $a0 data_53 - syscall - li $v0 10 - syscall - label_184: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -108($fp) - label_185: - lw $t0 -108($fp) - sw $t0 -156($fp) - j label_187 - label_186: - la $t0 data_54 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -156($fp) - label_187: - lw $v0 -156($fp) - addi $sp $sp 148 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -148 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -136($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -124($fp) +lw $t0 -136($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_174 +lw $t0 -136($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_175 +lw $t0 -136($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_176 +lw $t0 0($fp) +lw $t1 -112($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_177 +label_174: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_177 +label_175: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -144($fp) +move $a0 $t0 +lw $t0 -140($fp) +move $a1 $t0 +jal equal_str +sw $v0 -116($fp) +j label_177 +label_176: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_177 +label_177: +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -152($fp) +bne $t0 $zero label_186 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +slt $t1 $t0 $t1 +sw $t1 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_182 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -60($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +mul $t0 $t0 $t1 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_178 +j label_179 +label_178: +li $v0 4 +la $a0 data_50 +syscall +li $v0 10 +syscall +label_179: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +la $t0 data_51 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_180 +j label_181 +label_180: +li $v0 4 +la $a0 data_52 +syscall +li $v0 10 +syscall +label_181: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -108($fp) +j label_185 +label_182: +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_183 +j label_184 +label_183: +li $v0 4 +la $a0 data_53 +syscall +li $v0 10 +syscall +label_184: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -108($fp) +label_185: +lw $t0 -108($fp) +sw $t0 -156($fp) +j label_187 +label_186: +la $t0 data_54 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -156($fp) +label_187: +lw $v0 -156($fp) +addi $sp $sp 148 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_i2a_aux_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -144 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -132($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -124($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_188 - lw $t0 -132($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_189 - lw $t0 -132($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_190 - lw $t0 0($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_191 - label_188: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_191 - label_189: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - move $a0 $t0 - lw $t0 -136($fp) - move $a1 $t0 - jal equal_str - sw $v0 -112($fp) - j label_191 - label_190: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_191 - label_191: - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_200 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -80($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -84($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_192 - j label_193 - label_192: - li $v0 4 - la $a0 data_55 - syscall - li $v0 10 - syscall - label_193: - lw $t0 -96($fp) - lw $t1 -92($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -104($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - mul $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - sub $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_194 - j label_195 - label_194: - li $v0 4 - la $a0 data_56 - syscall - li $v0 10 - syscall - label_195: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_196 - j label_197 - label_196: - li $v0 4 - la $a0 data_57 - syscall - li $v0 10 - syscall - label_197: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_198 - j label_199 - label_198: - li $v0 4 - la $a0 data_58 - syscall - li $v0 10 - syscall - label_199: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -152($fp) - j label_201 - label_200: - la $t0 data_59 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -152($fp) - label_201: - lw $v0 -152($fp) - addi $sp $sp 144 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -144 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -132($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -124($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -120($fp) +lw $t0 -132($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_188 +lw $t0 -132($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_189 +lw $t0 -132($fp) +lw $t1 -120($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_190 +lw $t0 0($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_191 +label_188: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_191 +label_189: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +move $a0 $t0 +lw $t0 -136($fp) +move $a1 $t0 +jal equal_str +sw $v0 -112($fp) +j label_191 +label_190: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +j label_191 +label_191: +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -144($fp) +lw $t0 -144($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -148($fp) +bne $t0 $zero label_200 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -80($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -80($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -84($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_192 +j label_193 +label_192: +li $v0 4 +la $a0 data_55 +syscall +li $v0 10 +syscall +label_193: +lw $t0 -96($fp) +lw $t1 -92($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +sw $t0 -104($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +mul $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -72($fp) +lw $t1 -68($fp) +sub $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_194 +j label_195 +label_194: +li $v0 4 +la $a0 data_56 +syscall +li $v0 10 +syscall +label_195: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_196 +j label_197 +label_196: +li $v0 4 +la $a0 data_57 +syscall +li $v0 10 +syscall +label_197: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_198 +j label_199 +label_198: +li $v0 4 +la $a0 data_58 +syscall +li $v0 10 +syscall +label_199: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -152($fp) +j label_201 +label_200: +la $t0 data_59 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -152($fp) +label_201: +lw $v0 -152($fp) +addi $sp $sp 144 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A2I - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_A2I +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -92 - la $t0 data_60 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - jal __init_at_A2I - sw $v0 -88($fp) - lw $t0 -88($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_202 - j label_203 - label_202: - li $v0 4 - la $a0 data_61 - syscall - li $v0 10 - syscall - label_203: - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -100($fp) - li $t0 678987 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - jal __init_at_A2I - sw $v0 -68($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_204 - j label_205 - label_204: - li $v0 4 - la $a0 data_62 - syscall - li $v0 10 - syscall - label_205: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -76($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_206 - j label_207 - label_206: - li $v0 4 - la $a0 data_63 - syscall - li $v0 10 - syscall - label_207: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - la $t0 data_64 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_208 - j label_209 - label_208: - li $v0 4 - la $a0 data_65 - syscall - li $v0 10 - syscall - label_209: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_210 - j label_211 - label_210: - li $v0 4 - la $a0 data_66 - syscall - li $v0 10 - syscall - label_211: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - la $t0 data_67 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_212 - j label_213 - label_212: - li $v0 4 - la $a0 data_68 - syscall - li $v0 10 - syscall - label_213: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 92 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -92 +la $t0 data_60 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -92($fp) +jal __init_at_A2I +sw $v0 -88($fp) +lw $t0 -88($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_202 +j label_203 +label_202: +li $v0 4 +la $a0 data_61 +syscall +li $v0 10 +syscall +label_203: +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -80($fp) +lw $t0 -80($fp) +sw $t0 -100($fp) +li $t0 678987 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +jal __init_at_A2I +sw $v0 -68($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_204 +j label_205 +label_204: +li $v0 4 +la $a0 data_62 +syscall +li $v0 10 +syscall +label_205: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +lw $t0 -60($fp) +sw $t0 -76($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_206 +j label_207 +label_206: +li $v0 4 +la $a0 data_63 +syscall +li $v0 10 +syscall +label_207: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +la $t0 data_64 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_208 +j label_209 +label_208: +li $v0 4 +la $a0 data_65 +syscall +li $v0 10 +syscall +label_209: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_210 +j label_211 +label_210: +li $v0 4 +la $a0 data_66 +syscall +li $v0 10 +syscall +label_211: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +la $t0 data_67 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_212 +j label_213 +label_212: +li $v0 4 +la $a0 data_68 +syscall +li $v0 10 +syscall +label_213: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 92 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra - jr $ra - \ No newline at end of file +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/basic.cl b/tests/codegen/basic.cl deleted file mode 100755 index bfbc7a179..000000000 --- a/tests/codegen/basic.cl +++ /dev/null @@ -1,6 +0,0 @@ -class Main inherits IO { - a : String <- "Hello, World.\n"; - main(): IO { - out_string(a) - }; -}; \ No newline at end of file diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index 10b56bf55..fc3b90489 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -114,2751 +114,2644 @@ data_55: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 - .word data_10 - .word data_11 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 +.word data_9 +.word data_10 +.word data_11 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype - .word type_10_prototype - .word type_11_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + .word type_11_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_initBook_at_Book - .word function_print_at_Book - .word __init_attr_at_Book - .word __init_at_Book +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_initBook_at_Book +.word function_print_at_Book +.word __init_attr_at_Book +.word __init_at_Book type_6_prototype: - .word 5 - .word 6 - .word type_6_dispatch - .word 0 - .word 0 - .word -1 +.word 5 +.word 6 +.word type_6_dispatch +.word 0 +.word 0 +.word -1 type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_initBook_at_Book - .word function_print_at_Article - .word function_initArticle_at_Article - .word __init_attr_at_Article - .word __init_at_Article +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_initBook_at_Book +.word function_print_at_Article +.word function_initArticle_at_Article +.word __init_attr_at_Article +.word __init_at_Article type_7_prototype: - .word 6 - .word 7 - .word type_7_dispatch - .word 0 - .word 0 - .word 0 - .word -1 +.word 6 +.word 7 +.word type_7_dispatch +.word 0 +.word 0 +.word 0 +.word -1 type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_BookList - .word function_cdr_at_BookList - .word function_cons_at_BookList - .word function_isNil_at_BookList - .word function_print_list_at_BookList - .word __init_attr_at_BookList - .word __init_at_BookList +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_car_at_BookList +.word function_cdr_at_BookList +.word function_cons_at_BookList +.word function_isNil_at_BookList +.word function_print_list_at_BookList +.word __init_attr_at_BookList +.word __init_at_BookList type_8_prototype: - .word 7 - .word 4 - .word type_8_dispatch - .word -1 +.word 7 +.word 4 +.word type_8_dispatch +.word -1 type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_Cons - .word function_cdr_at_Cons - .word function_cons_at_BookList - .word function_isNil_at_Cons - .word function_print_list_at_Cons - .word function_init_at_Cons - .word __init_attr_at_Cons - .word __init_at_Cons +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_car_at_Cons +.word function_cdr_at_Cons +.word function_cons_at_BookList +.word function_isNil_at_Cons +.word function_print_list_at_Cons +.word function_init_at_Cons +.word __init_attr_at_Cons +.word __init_at_Cons type_9_prototype: - .word 8 - .word 6 - .word type_9_dispatch - .word 0 - .word 0 - .word -1 +.word 8 +.word 6 +.word type_9_dispatch +.word 0 +.word 0 +.word -1 type_10_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_BookList - .word function_cdr_at_BookList - .word function_cons_at_BookList - .word function_isNil_at_Nil - .word function_print_list_at_Nil - .word __init_attr_at_Nil - .word __init_at_Nil +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_car_at_BookList +.word function_cdr_at_BookList +.word function_cons_at_BookList +.word function_isNil_at_Nil +.word function_print_list_at_Nil +.word __init_attr_at_Nil +.word __init_at_Nil type_10_prototype: - .word 9 - .word 4 - .word type_10_dispatch - .word -1 +.word 9 +.word 4 +.word type_10_dispatch +.word -1 type_11_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_11_prototype: - .word 10 - .word 5 - .word type_11_dispatch - .word 0 - .word -1 +.word 10 +.word 5 +.word type_11_dispatch +.word 0 +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_14 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_12 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_14 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_12 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Book: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - la $t0 data_13 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 16($t0) - la $t0 data_13 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +la $t0 data_13 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 16($t0) +la $t0 data_13 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_initBook_at_Book: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 4($fp) +lw $t1 8($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 8($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $v0 8($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_Book: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -88 - la $t0 data_16 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -84($fp) - la $t0 data_17 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -68($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - la $t0 data_21 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - la $t0 data_22 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_10: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_12: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_14: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 88 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -88 +la $t0 data_16 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -84($fp) +la $t0 data_17 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -68($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +lw $t0 -60($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_8: +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +la $t0 data_21 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -44($fp) +la $t0 data_22 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_10: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_12: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_14: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 88 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Book: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Book - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Book +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Article: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Book - addi $sp $sp 4 - sw $v0 -16($fp) - la $t0 data_13 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 20($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Book +addi $sp $sp 4 +sw $v0 -16($fp) +la $t0 data_13 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 20($t0) +lw $v0 0($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_initArticle_at_Article: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 12($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_16: - lw $t0 12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 8($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 12($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - lw $v0 12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +lw $t0 12($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_16: +lw $t0 12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 8($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 12($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +lw $v0 12($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_Article: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -60 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_18: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_print_at_Book - addi $sp $sp 4 - sw $v0 -52($fp) - la $t0 data_28 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - la $t0 data_29 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_20: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_22: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_24: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 60 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -60 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_18: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_print_at_Book +addi $sp $sp 4 +sw $v0 -52($fp) +la $t0 data_28 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -44($fp) +la $t0 data_29 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_30 +syscall +li $v0 10 +syscall +label_20: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_21 +j label_22 +label_21: +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_22: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_23 +j label_24 +label_23: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_24: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 60 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Article: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Article - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Article +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_isNil_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_25 - j label_26 - label_25: - li $v0 4 - la $a0 data_33 - syscall - li $v0 10 - syscall - label_26: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_25 +j label_26 +label_25: +li $v0 4 +la $a0 data_33 +syscall +li $v0 10 +syscall +label_26: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cons_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -24($fp) - lw $t0 -24($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_34 - syscall - li $v0 10 - syscall - label_28: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +jal __init_at_Cons +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -24($fp) +lw $t0 -24($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_27 +j label_28 +label_27: +li $v0 4 +la $a0 data_34 +syscall +li $v0 10 +syscall +label_28: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_car_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_29 - j label_30 - label_29: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_30: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - jal __init_at_Book - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_29 +j label_30 +label_29: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_30: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +jal __init_at_Book +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cdr_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_31 - j label_32 - label_31: - li $v0 4 - la $a0 data_36 - syscall - li $v0 10 - syscall - label_32: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - jal __init_at_BookList - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_31 +j label_32 +label_31: +li $v0 4 +la $a0 data_36 +syscall +li $v0 10 +syscall +label_32: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +jal __init_at_BookList +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_list_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_33 - j label_34 - label_33: - li $v0 4 - la $a0 data_37 - syscall - li $v0 10 - syscall - label_34: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_33 +j label_34 +label_33: +li $v0 4 +la $a0 data_37 +syscall +li $v0 10 +syscall +label_34: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_BookList - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_BookList +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_BookList - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_BookList +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_isNil_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 4($fp) +lw $t1 8($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 8($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 8($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_car_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cdr_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_list_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -84 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_35 - j label_36 - label_35: - li $v0 4 - la $a0 data_38 - syscall - li $v0 10 - syscall - label_36: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -80($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_37 - j label_38 - label_37: - li $v0 4 - la $a0 data_39 - syscall - li $v0 10 - syscall - label_38: - la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -60($fp) - lw $t0 -60($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_39 - la $t0 types_table - addi $t0 $t0 20 - lw $t0 0($t0) - sw $t0 -60($fp) - lw $t0 -60($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_42 - li $v0 4 - la $a0 data_40 - syscall - li $v0 10 - syscall - label_39: - lw $t0 -68($fp) - sw $t0 -56($fp) - la $t0 data_41 - sw $t0 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_40 - j label_41 - label_40: - li $v0 4 - la $a0 data_42 - syscall - li $v0 10 - syscall - label_41: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -84($fp) - j label_45 - label_42: - lw $t0 -68($fp) - sw $t0 -36($fp) - la $t0 data_43 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_44 - syscall - li $v0 10 - syscall - label_44: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -84($fp) - j label_45 - label_45: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_46 - j label_47 - label_46: - li $v0 4 - la $a0 data_45 - syscall - li $v0 10 - syscall - label_47: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 84 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -84 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_35 +j label_36 +label_35: +li $v0 4 +la $a0 data_38 +syscall +li $v0 10 +syscall +label_36: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -80($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_37 +j label_38 +label_37: +li $v0 4 +la $a0 data_39 +syscall +li $v0 10 +syscall +label_38: +la $t0 types_table +addi $t0 $t0 24 +lw $t0 0($t0) +sw $t0 -60($fp) +lw $t0 -60($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_39 +la $t0 types_table +addi $t0 $t0 20 +lw $t0 0($t0) +sw $t0 -60($fp) +lw $t0 -60($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_42 +li $v0 4 +la $a0 data_40 +syscall +li $v0 10 +syscall +label_39: +lw $t0 -68($fp) +sw $t0 -56($fp) +la $t0 data_41 +sw $t0 -52($fp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_40 +j label_41 +label_40: +li $v0 4 +la $a0 data_42 +syscall +li $v0 10 +syscall +label_41: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -84($fp) +j label_45 +label_42: +lw $t0 -68($fp) +sw $t0 -36($fp) +la $t0 data_43 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_44 +syscall +li $v0 10 +syscall +label_44: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -84($fp) +j label_45 +label_45: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_46 +j label_47 +label_46: +li $v0 4 +la $a0 data_45 +syscall +li $v0 10 +syscall +label_47: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 84 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Cons - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 8 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Cons +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_BookList - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_BookList +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_isNil_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_list_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 9 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Nil - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 9 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Nil +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -104 - la $t0 data_46 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -100($fp) - la $t0 data_47 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - jal __init_at_Book - sw $v0 -88($fp) - lw $t0 -88($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_48 - j label_49 - label_48: - li $v0 4 - la $a0 data_48 - syscall - li $v0 10 - syscall - label_49: - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -108($fp) - la $t0 data_49 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - la $t0 data_50 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - la $t0 data_51 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - jal __init_at_Article - sw $v0 -48($fp) - lw $t0 -48($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_50 - j label_51 - label_50: - li $v0 4 - la $a0 data_52 - syscall - li $v0 10 - syscall - label_51: - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 16 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -76($fp) - jal __init_at_Nil - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_52 - j label_53 - label_52: - li $v0 4 - la $a0 data_53 - syscall - li $v0 10 - syscall - label_53: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_54 - j label_55 - label_54: - li $v0 4 - la $a0 data_54 - syscall - li $v0 10 - syscall - label_55: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_56 - j label_57 - label_56: - li $v0 4 - la $a0 data_55 - syscall - li $v0 10 - syscall - label_57: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 104 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -104 +la $t0 data_46 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -100($fp) +la $t0 data_47 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -92($fp) +jal __init_at_Book +sw $v0 -88($fp) +lw $t0 -88($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_48 +j label_49 +label_48: +li $v0 4 +la $a0 data_48 +syscall +li $v0 10 +syscall +label_49: +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -80($fp) +lw $t0 -80($fp) +sw $t0 -108($fp) +la $t0 data_49 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -68($fp) +la $t0 data_50 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -60($fp) +la $t0 data_51 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -52($fp) +jal __init_at_Article +sw $v0 -48($fp) +lw $t0 -48($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_50 +j label_51 +label_50: +li $v0 4 +la $a0 data_52 +syscall +li $v0 10 +syscall +label_51: +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 16 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -76($fp) +jal __init_at_Nil +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_52 +j label_53 +label_52: +li $v0 4 +la $a0 data_53 +syscall +li $v0 10 +syscall +label_53: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_54 +j label_55 +label_54: +li $v0 4 +la $a0 data_54 +syscall +li $v0 10 +syscall +label_55: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_56 +j label_57 +label_56: +li $v0 4 +la $a0 data_55 +syscall +li $v0 10 +syscall +label_57: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 104 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 10 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 10 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra - -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index e10bcfdf6..9f4554c0f 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -80,2905 +80,2798 @@ data_38: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_cell_at_CellularAutomaton - .word function_cell_at_next_evolution_at_CellularAutomaton - .word function_cell_left_neighbor_at_CellularAutomaton - .word function_cell_right_neighbor_at_CellularAutomaton - .word function_evolve_at_CellularAutomaton - .word function_init_at_CellularAutomaton - .word function_num_cells_at_CellularAutomaton - .word function_print_at_CellularAutomaton - .word __init_attr_at_CellularAutomaton - .word __init_at_CellularAutomaton +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_cell_at_CellularAutomaton +.word function_cell_at_next_evolution_at_CellularAutomaton +.word function_cell_left_neighbor_at_CellularAutomaton +.word function_cell_right_neighbor_at_CellularAutomaton +.word function_evolve_at_CellularAutomaton +.word function_init_at_CellularAutomaton +.word function_num_cells_at_CellularAutomaton +.word function_print_at_CellularAutomaton +.word __init_attr_at_CellularAutomaton +.word __init_at_CellularAutomaton type_6_prototype: - .word 5 - .word 5 - .word type_6_dispatch - .word 0 - .word -1 +.word 5 +.word 5 +.word type_6_dispatch +.word 0 +.word -1 type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_7_prototype: - .word 6 - .word 5 - .word type_7_dispatch - .word 0 - .word -1 +.word 6 +.word 5 +.word type_7_dispatch +.word 0 +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_10 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_8 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_10 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_8 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_11 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_11 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - la $t0 data_9 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +la $t0 data_9 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_init_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - la $t0 data_12 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_4: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_6: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -28 +la $t0 data_12 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_4: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_6: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 28 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_num_cells_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_8: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_8: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cell_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_10: - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_10: +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cell_left_neighbor_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -116 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -100($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -96($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -92($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -88($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_11 - lw $t0 -100($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_12 - lw $t0 -100($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_13 - lw $t0 0($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - j label_14 - label_11: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - j label_14 - label_12: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - move $a0 $t0 - lw $t0 -104($fp) - move $a1 $t0 - jal equal_str - sw $v0 -80($fp) - j label_14 - label_13: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - j label_14 - label_14: - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_17 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - sub $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_16: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -120($fp) - j label_22 - label_17: - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_18 - j label_19 - label_18: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_19: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - sub $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_20 - j label_21 - label_20: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_21: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -120($fp) - label_22: - lw $v0 -120($fp) - addi $sp $sp 116 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -116 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -100($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -96($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -92($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -88($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_11 +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_12 +lw $t0 -100($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_13 +lw $t0 0($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +j label_14 +label_11: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -108($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +j label_14 +label_12: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -108($fp) +move $a0 $t0 +lw $t0 -104($fp) +move $a1 $t0 +jal equal_str +sw $v0 -80($fp) +j label_14 +label_13: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -108($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +j label_14 +label_14: +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_17 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +sub $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_16: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -48($fp) +lw $t0 -48($fp) +sw $t0 -120($fp) +j label_22 +label_17: +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_18 +j label_19 +label_18: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_19: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +lw $t1 -36($fp) +sub $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_20 +j label_21 +label_20: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_21: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -120($fp) +label_22: +lw $v0 -120($fp) +addi $sp $sp 116 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cell_right_neighbor_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -116 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_24: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - sub $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -100($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -96($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -92($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -88($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_25 - lw $t0 -100($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_26 - lw $t0 -100($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_27 - lw $t0 0($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - j label_28 - label_25: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - j label_28 - label_26: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - move $a0 $t0 - lw $t0 -104($fp) - move $a1 $t0 - jal equal_str - sw $v0 -80($fp) - j label_28 - label_27: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - j label_28 - label_28: - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_31 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_29 - j label_30 - label_29: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_30: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -120($fp) - j label_34 - label_31: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_32 - j label_33 - label_32: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_33: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -120($fp) - label_34: - lw $v0 -120($fp) - addi $sp $sp 116 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -116 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_23 +j label_24 +label_23: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_24: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -72($fp) +lw $t1 -68($fp) +sub $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -100($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -96($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -92($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -88($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_25 +lw $t0 -100($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_26 +lw $t0 -100($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_27 +lw $t0 0($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +j label_28 +label_25: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -108($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +j label_28 +label_26: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -108($fp) +move $a0 $t0 +lw $t0 -104($fp) +move $a1 $t0 +jal equal_str +sw $v0 -80($fp) +j label_28 +label_27: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -108($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +j label_28 +label_28: +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_31 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -44($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_29 +j label_30 +label_29: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_30: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -120($fp) +j label_34 +label_31: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_32 +j label_33 +label_32: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_33: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -120($fp) +label_34: +lw $v0 -120($fp) +addi $sp $sp 116 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cell_at_next_evolution_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -304 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -188($fp) - lw $t0 -188($fp) - bne $t0 $zero label_35 - j label_36 - label_35: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_36: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -184($fp) - la $t0 data_24 - sw $t0 -180($fp) - lw $t0 -180($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -176($fp) - lw $t0 -184($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -212($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -208($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -204($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -200($fp) - lw $t0 -212($fp) - lw $t1 -208($fp) - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_37 - lw $t0 -212($fp) - lw $t1 -204($fp) - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_38 - lw $t0 -212($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_39 - lw $t0 -184($fp) - lw $t1 -176($fp) - seq $t0 $t0 $t1 - sw $t0 -192($fp) - j label_40 - label_37: - lw $t0 -184($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -192($fp) - j label_40 - label_38: - lw $t0 -184($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - move $a0 $t0 - lw $t0 -216($fp) - move $a1 $t0 - jal equal_str - sw $v0 -192($fp) - j label_40 - label_39: - lw $t0 -184($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -192($fp) - j label_40 - label_40: - lw $t0 -192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -224($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_41 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -172($fp) - lw $t0 -172($fp) - sw $t0 -232($fp) - j label_42 - label_41: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 -168($fp) - sw $t0 -232($fp) - label_42: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_44: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -116($fp) - la $t0 data_26 - sw $t0 -112($fp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -116($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_45 - lw $t0 -144($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_46 - lw $t0 -144($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_47 - lw $t0 -116($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_48 - label_45: - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_48 - label_46: - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - move $a0 $t0 - lw $t0 -148($fp) - move $a1 $t0 - jal equal_str - sw $v0 -124($fp) - j label_48 - label_47: - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_48 - label_48: - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_49 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - sw $t0 -164($fp) - j label_50 - label_49: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -164($fp) - label_50: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - add $t0 $t0 $t1 - sw $t0 -236($fp) - lw $t0 -236($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -248($fp) - lw $t0 -248($fp) - lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_51 - j label_52 - label_51: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_52: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -48($fp) - la $t0 data_28 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -48($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -76($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -72($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -68($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -64($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_53 - lw $t0 -76($fp) - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_54 - lw $t0 -76($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_55 - lw $t0 -48($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - j label_56 - label_53: - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -40($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - j label_56 - label_54: - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -40($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - move $a0 $t0 - lw $t0 -80($fp) - move $a1 $t0 - jal equal_str - sw $v0 -56($fp) - j label_56 - label_55: - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -40($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - j label_56 - label_56: - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_57 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -96($fp) - j label_58 - label_57: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -96($fp) - label_58: - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -260($fp) - lw $t1 -256($fp) - add $t0 $t0 $t1 - sw $t0 -252($fp) - lw $t0 -252($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -264($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -264($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -288($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -284($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -280($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -276($fp) - lw $t0 -288($fp) - lw $t1 -284($fp) - seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_59 - lw $t0 -288($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_60 - lw $t0 -288($fp) - lw $t1 -276($fp) - seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_61 - lw $t0 -264($fp) - lw $t1 -28($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_62 - label_59: - lw $t0 -264($fp) - lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_62 - label_60: - lw $t0 -264($fp) - lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - move $a0 $t0 - lw $t0 -292($fp) - move $a1 $t0 - jal equal_str - sw $v0 -268($fp) - j label_62 - label_61: - lw $t0 -264($fp) - lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_62 - label_62: - lw $t0 -268($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_63 - la $t0 data_29 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -308($fp) - j label_64 - label_63: - la $t0 data_30 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -308($fp) - label_64: - lw $v0 -308($fp) - addi $sp $sp 304 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -304 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -188($fp) +lw $t0 -188($fp) +bne $t0 $zero label_35 +j label_36 +label_35: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_36: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -184($fp) +la $t0 data_24 +sw $t0 -180($fp) +lw $t0 -180($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -176($fp) +lw $t0 -184($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -212($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -208($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -204($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -200($fp) +lw $t0 -212($fp) +lw $t1 -208($fp) +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_37 +lw $t0 -212($fp) +lw $t1 -204($fp) +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_38 +lw $t0 -212($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_39 +lw $t0 -184($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -192($fp) +j label_40 +label_37: +lw $t0 -184($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -216($fp) +lw $t0 -220($fp) +lw $t1 -216($fp) +seq $t0 $t0 $t1 +sw $t0 -192($fp) +j label_40 +label_38: +lw $t0 -184($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -216($fp) +lw $t0 -220($fp) +move $a0 $t0 +lw $t0 -216($fp) +move $a1 $t0 +jal equal_str +sw $v0 -192($fp) +j label_40 +label_39: +lw $t0 -184($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -216($fp) +lw $t0 -220($fp) +lw $t1 -216($fp) +seq $t0 $t0 $t1 +sw $t0 -192($fp) +j label_40 +label_40: +lw $t0 -192($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -224($fp) +lw $t0 -224($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_41 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -172($fp) +lw $t0 -172($fp) +sw $t0 -232($fp) +j label_42 +label_41: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -168($fp) +lw $t0 -168($fp) +sw $t0 -232($fp) +label_42: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_44: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -116($fp) +la $t0 data_26 +sw $t0 -112($fp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 -116($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -136($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_45 +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_46 +lw $t0 -144($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_47 +lw $t0 -116($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_48 +label_45: +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_48 +label_46: +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +move $a0 $t0 +lw $t0 -148($fp) +move $a1 $t0 +jal equal_str +sw $v0 -124($fp) +j label_48 +label_47: +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_48 +label_48: +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_49 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +sw $t0 -164($fp) +j label_50 +label_49: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +sw $t0 -164($fp) +label_50: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -240($fp) +lw $t0 -244($fp) +lw $t1 -240($fp) +add $t0 $t0 $t1 +sw $t0 -236($fp) +lw $t0 -236($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -248($fp) +lw $t0 -248($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_51 +j label_52 +label_51: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_52: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -48($fp) +la $t0 data_28 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -48($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -76($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -72($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -68($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -64($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_53 +lw $t0 -76($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_54 +lw $t0 -76($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_55 +lw $t0 -48($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +j label_56 +label_53: +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -40($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +j label_56 +label_54: +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -40($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +move $a0 $t0 +lw $t0 -80($fp) +move $a1 $t0 +jal equal_str +sw $v0 -56($fp) +j label_56 +label_55: +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -40($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +j label_56 +label_56: +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_57 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -96($fp) +j label_58 +label_57: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -96($fp) +label_58: +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -260($fp) +lw $t1 -256($fp) +add $t0 $t0 $t1 +sw $t0 -252($fp) +lw $t0 -252($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -264($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -264($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -288($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -284($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -280($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -276($fp) +lw $t0 -288($fp) +lw $t1 -284($fp) +seq $t0 $t0 $t1 +sw $t0 -272($fp) +lw $t0 -272($fp) +bne $t0 $zero label_59 +lw $t0 -288($fp) +lw $t1 -280($fp) +seq $t0 $t0 $t1 +sw $t0 -272($fp) +lw $t0 -272($fp) +bne $t0 $zero label_60 +lw $t0 -288($fp) +lw $t1 -276($fp) +seq $t0 $t0 $t1 +sw $t0 -272($fp) +lw $t0 -272($fp) +bne $t0 $zero label_61 +lw $t0 -264($fp) +lw $t1 -28($fp) +seq $t0 $t0 $t1 +sw $t0 -268($fp) +j label_62 +label_59: +lw $t0 -264($fp) +lw $t1 12($t0) +sw $t1 -296($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -296($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -268($fp) +j label_62 +label_60: +lw $t0 -264($fp) +lw $t1 12($t0) +sw $t1 -296($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -296($fp) +move $a0 $t0 +lw $t0 -292($fp) +move $a1 $t0 +jal equal_str +sw $v0 -268($fp) +j label_62 +label_61: +lw $t0 -264($fp) +lw $t1 12($t0) +sw $t1 -296($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -296($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -268($fp) +j label_62 +label_62: +lw $t0 -268($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -300($fp) +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -304($fp) +bne $t0 $zero label_63 +la $t0 data_29 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -308($fp) +j label_64 +label_63: +la $t0 data_30 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -308($fp) +label_64: +lw $v0 -308($fp) +addi $sp $sp 304 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_evolve_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -80 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_65 - j label_66 - label_65: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_66: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -80($fp) - la $t0 data_9 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - label_67: - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -80($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - slt $t1 $t0 $t1 - sw $t1 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_68 - j label_73 - label_68: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_69 - j label_70 - label_69: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_70: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_71 - j label_72 - label_71: - li $v0 4 - la $a0 data_33 - syscall - li $v0 10 - syscall - label_72: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -68($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -84($fp) - j label_67 - label_73: - lw $t0 -68($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $v0 0($fp) - addi $sp $sp 80 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -80 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_65 +j label_66 +label_65: +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_66: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -80($fp) +la $t0 data_9 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -68($fp) +label_67: +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -80($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +slt $t1 $t0 $t1 +sw $t1 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_68 +j label_73 +label_68: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_69 +j label_70 +label_69: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_70: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -40($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_71 +j label_72 +label_71: +li $v0 4 +la $a0 data_33 +syscall +li $v0 10 +syscall +label_72: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -68($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -84($fp) +j label_67 +label_73: +lw $t0 -68($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $v0 0($fp) +addi $sp $sp 80 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_CellularAutomaton - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_CellularAutomaton +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -100 - la $t0 data_34 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -100($fp) - jal __init_at_CellularAutomaton - sw $v0 -96($fp) - lw $t0 -96($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_74 - j label_75 - label_74: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_75: - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_76 - j label_77 - label_76: - li $v0 4 - la $a0 data_36 - syscall - li $v0 10 - syscall - label_77: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -80($fp) - li $t0 20 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -76($fp) - label_78: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - slt $t1 $t0 $t1 - sw $t1 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_79 - j label_84 - label_79: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_80 - j label_81 - label_80: - li $v0 4 - la $a0 data_37 - syscall - li $v0 10 - syscall - label_81: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_82 - j label_83 - label_82: - li $v0 4 - la $a0 data_38 - syscall - li $v0 10 - syscall - label_83: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - sub $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -76($fp) - j label_78 - label_84: - lw $v0 0($fp) - addi $sp $sp 100 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -100 +la $t0 data_34 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -100($fp) +jal __init_at_CellularAutomaton +sw $v0 -96($fp) +lw $t0 -96($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_74 +j label_75 +label_74: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_75: +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_76 +j label_77 +label_76: +li $v0 4 +la $a0 data_36 +syscall +li $v0 10 +syscall +label_77: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -80($fp) +li $t0 20 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -76($fp) +label_78: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -60($fp) +lw $t1 -56($fp) +slt $t1 $t0 $t1 +sw $t1 -52($fp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -68($fp) +bne $t0 $zero label_79 +j label_84 +label_79: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_80 +j label_81 +label_80: +li $v0 4 +la $a0 data_37 +syscall +li $v0 10 +syscall +label_81: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_82 +j label_83 +label_82: +li $v0 4 +la $a0 data_38 +syscall +li $v0 10 +syscall +label_83: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +sub $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -76($fp) +j label_78 +label_84: +lw $v0 0($fp) +addi $sp $sp 100 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra - jr $ra - \ No newline at end of file +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index e513494e6..0b0b9de6b 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -56,2577 +56,2470 @@ data_26: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 +.word 5 +.word 4 +.word type_6_dispatch +.word -1 type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_init_at_Complex - .word function_print_at_Complex - .word function_reflect_0_at_Complex - .word function_reflect_X_at_Complex - .word function_reflect_Y_at_Complex - .word __init_attr_at_Complex - .word __init_at_Complex +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_init_at_Complex +.word function_print_at_Complex +.word function_reflect_0_at_Complex +.word function_reflect_X_at_Complex +.word function_reflect_Y_at_Complex +.word __init_attr_at_Complex +.word __init_at_Complex type_7_prototype: - .word 6 - .word 6 - .word type_7_dispatch - .word 0 - .word 0 - .word -1 +.word 6 +.word 6 +.word type_7_dispatch +.word 0 +.word 0 +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_10 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_8 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_10 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_8 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_11 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_11 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -124 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -128($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -124($fp) - jal __init_at_Complex - sw $v0 -120($fp) - lw $t0 -120($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_4: - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -132($fp) - lw $t0 -132($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -132($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_10: - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -52($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -88($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -80($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -76($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_11 - lw $t0 -88($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_12 - lw $t0 -88($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_13 - lw $t0 -52($fp) - lw $t1 -44($fp) - seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_14 - label_11: - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_14 - label_12: - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - move $a0 $t0 - lw $t0 -92($fp) - move $a1 $t0 - jal equal_str - sw $v0 -68($fp) - j label_14 - label_13: - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_14 - label_14: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_17 - la $t0 data_16 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_16: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -108($fp) - j label_20 - label_17: - la $t0 data_18 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_18 - j label_19 - label_18: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_19: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -108($fp) - label_20: - lw $v0 -108($fp) - addi $sp $sp 124 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -124 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -128($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -124($fp) +jal __init_at_Complex +sw $v0 -120($fp) +lw $t0 -120($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_4: +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -112($fp) +lw $t0 -112($fp) +sw $t0 -132($fp) +lw $t0 -132($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_8: +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -132($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_10: +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -52($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -88($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -80($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -76($fp) +lw $t0 -88($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_11 +lw $t0 -88($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_12 +lw $t0 -88($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_13 +lw $t0 -52($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -68($fp) +j label_14 +label_11: +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -68($fp) +j label_14 +label_12: +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +move $a0 $t0 +lw $t0 -92($fp) +move $a1 $t0 +jal equal_str +sw $v0 -68($fp) +j label_14 +label_13: +lw $t0 -52($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -68($fp) +j label_14 +label_14: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_17 +la $t0 data_16 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_16: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -108($fp) +j label_20 +label_17: +la $t0 data_18 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_18 +j label_19 +label_18: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_19: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -108($fp) +label_20: +lw $v0 -108($fp) +addi $sp $sp 124 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_init_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -80 - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -68($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -64($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -60($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -56($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_21 - lw $t0 -68($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_22 - lw $t0 -68($fp) - lw $t1 -56($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_23 - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 4($fp) - seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_24 - label_21: - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_24 - label_22: - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - move $a0 $t0 - lw $t0 -72($fp) - move $a1 $t0 - jal equal_str - sw $v0 -48($fp) - j label_24 - label_23: - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_24 - label_24: - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -32($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -28($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -24($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -20($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_25 - lw $t0 -32($fp) - lw $t1 -24($fp) - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_26 - lw $t0 -32($fp) - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_27 - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($fp) - seq $t0 $t0 $t1 - sw $t0 -12($fp) - j label_28 - label_25: - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -12($fp) - j label_28 - label_26: - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - move $a0 $t0 - lw $t0 -36($fp) - move $a1 $t0 - jal equal_str - sw $v0 -12($fp) - j label_28 - label_27: - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -12($fp) - j label_28 - label_28: - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -44($fp) - lw $v0 8($fp) - addi $sp $sp 80 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -80 +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -68($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -64($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -60($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -56($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_21 +lw $t0 -68($fp) +lw $t1 -60($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_22 +lw $t0 -68($fp) +lw $t1 -56($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_23 +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 4($fp) +seq $t0 $t0 $t1 +sw $t0 -48($fp) +j label_24 +label_21: +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -48($fp) +j label_24 +label_22: +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +move $a0 $t0 +lw $t0 -72($fp) +move $a1 $t0 +jal equal_str +sw $v0 -48($fp) +j label_24 +label_23: +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -48($fp) +j label_24 +label_24: +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -32($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -28($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -24($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -20($fp) +lw $t0 -32($fp) +lw $t1 -28($fp) +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_25 +lw $t0 -32($fp) +lw $t1 -24($fp) +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_26 +lw $t0 -32($fp) +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_27 +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($fp) +seq $t0 $t0 $t1 +sw $t0 -12($fp) +j label_28 +label_25: +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -12($fp) +j label_28 +label_26: +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +move $a0 $t0 +lw $t0 -36($fp) +move $a1 $t0 +jal equal_str +sw $v0 -12($fp) +j label_28 +label_27: +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -12($fp) +j label_28 +label_28: +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -44($fp) +lw $v0 8($fp) +addi $sp $sp 80 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -112 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_29 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_30 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_31 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_32 - label_29: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_32 - label_30: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_32 - label_31: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_32 - label_32: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_41 - la $t0 data_20 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - la $t0 data_21 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_33 - j label_34 - label_33: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_34: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_35 - j label_36 - label_35: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_36: - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_37 - j label_38 - label_37: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_38: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_39 - j label_40 - label_39: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_40: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -112($fp) - j label_44 - label_41: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_42 - j label_43 - label_42: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_43: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -112($fp) - label_44: - lw $v0 -112($fp) - addi $sp $sp 112 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -112 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -92($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -80($fp) +lw $t0 -92($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_29 +lw $t0 -92($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_30 +lw $t0 -92($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_31 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_32 +label_29: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_32 +label_30: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -96($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_32 +label_31: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_32 +label_32: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_41 +la $t0 data_20 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -60($fp) +la $t0 data_21 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_33 +j label_34 +label_33: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_34: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -44($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_35 +j label_36 +label_35: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_36: +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_37 +j label_38 +label_37: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_38: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_39 +j label_40 +label_39: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_40: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -112($fp) +j label_44 +label_41: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_42 +j label_43 +label_42: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_43: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -112($fp) +label_44: +lw $v0 -112($fp) +addi $sp $sp 112 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_reflect_0_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -104 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_45 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_46 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_47 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_48 - label_45: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_48 - label_46: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_48 - label_47: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_48 - label_48: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -44($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -36($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -32($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_49 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_50 - lw $t0 -44($fp) - lw $t1 -32($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_51 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_52 - label_49: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_52 - label_50: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - move $a0 $t0 - lw $t0 -48($fp) - move $a1 $t0 - jal equal_str - sw $v0 -24($fp) - j label_52 - label_51: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_52 - label_52: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $v0 0($fp) - addi $sp $sp 104 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -104 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -92($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -80($fp) +lw $t0 -92($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_45 +lw $t0 -92($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_46 +lw $t0 -92($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_47 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_48 +label_45: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_48 +label_46: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -96($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_48 +label_47: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_48 +label_48: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -44($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -36($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -32($fp) +lw $t0 -44($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_49 +lw $t0 -44($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_50 +lw $t0 -44($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_51 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_52 +label_49: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_52 +label_50: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +move $a0 $t0 +lw $t0 -48($fp) +move $a1 $t0 +jal equal_str +sw $v0 -24($fp) +j label_52 +label_51: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_52 +label_52: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $v0 0($fp) +addi $sp $sp 104 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_reflect_X_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -44($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -36($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -32($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_53 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_54 - lw $t0 -44($fp) - lw $t1 -32($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_55 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_56 - label_53: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_56 - label_54: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - move $a0 $t0 - lw $t0 -48($fp) - move $a1 $t0 - jal equal_str - sw $v0 -24($fp) - j label_56 - label_55: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_56 - label_56: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $v0 0($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -56 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -44($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -36($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -32($fp) +lw $t0 -44($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_53 +lw $t0 -44($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_54 +lw $t0 -44($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_55 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_56 +label_53: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_56 +label_54: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +move $a0 $t0 +lw $t0 -48($fp) +move $a1 $t0 +jal equal_str +sw $v0 -24($fp) +j label_56 +label_55: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_56 +label_56: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $v0 0($fp) +addi $sp $sp 56 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_reflect_Y_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -44($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -36($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -32($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_57 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_58 - lw $t0 -44($fp) - lw $t1 -32($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_59 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_60 - label_57: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_60 - label_58: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - move $a0 $t0 - lw $t0 -48($fp) - move $a1 $t0 - jal equal_str - sw $v0 -24($fp) - j label_60 - label_59: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_60 - label_60: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $v0 0($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -56 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -44($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -36($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -32($fp) +lw $t0 -44($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_57 +lw $t0 -44($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_58 +lw $t0 -44($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_59 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_60 +label_57: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_60 +label_58: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +move $a0 $t0 +lw $t0 -48($fp) +move $a1 $t0 +jal equal_str +sw $v0 -24($fp) +j label_60 +label_59: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_60 +label_60: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $v0 0($fp) +addi $sp $sp 56 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Complex - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Complex +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra - jr $ra - \ No newline at end of file +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index ce5371718..14eef63b1 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -38,1412 +38,1305 @@ data_17: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_fib_at_Main - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_fib_at_Main +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 +.word 5 +.word 4 +.word type_6_dispatch +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_7 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_7 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_10 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_10 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - la $t0 data_11 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_6: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_8: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_10: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - la $t0 data_16 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_12: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -56 +la $t0 data_11 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_6: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_8: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_10: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +la $t0 data_16 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_12: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 56 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_fib_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -116 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -120($fp) - sw $t0 -124($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -116($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - sw $t0 -108($fp) - label_13: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -72($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -68($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -64($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -60($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_14 - lw $t0 -72($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_15 - lw $t0 -72($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_16 - lw $t0 0($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_17 - label_14: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_17 - label_15: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - move $a0 $t0 - lw $t0 -76($fp) - move $a1 $t0 - jal equal_str - sw $v0 -52($fp) - j label_17 - label_16: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_17 - label_17: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - xori $t0 $t0 1 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_18 - j label_19 - label_18: - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - add $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -108($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - sub $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 0($fp) - lw $t0 -124($fp) - sw $t0 -116($fp) - lw $t0 -108($fp) - sw $t0 -124($fp) - j label_13 - label_19: - lw $v0 -108($fp) - addi $sp $sp 116 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -116 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 -120($fp) +sw $t0 -124($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 -112($fp) +sw $t0 -116($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +sw $t0 -108($fp) +label_13: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -72($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -68($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -64($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -60($fp) +lw $t0 -72($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_14 +lw $t0 -72($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_15 +lw $t0 -72($fp) +lw $t1 -60($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_16 +lw $t0 0($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_17 +label_14: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_17 +label_15: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +move $a0 $t0 +lw $t0 -76($fp) +move $a1 $t0 +jal equal_str +sw $v0 -52($fp) +j label_17 +label_16: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_17 +label_17: +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +xori $t0 $t0 1 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_18 +j label_19 +label_18: +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +lw $t1 -36($fp) +add $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -108($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +sub $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 0($fp) +lw $t0 -124($fp) +sw $t0 -116($fp) +lw $t0 -108($fp) +sw $t0 -124($fp) +j label_13 +label_19: +lw $v0 -108($fp) +addi $sp $sp 116 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra - jr $ra - \ No newline at end of file +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index 68e4d3c63..aef5113f6 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -220,7275 +220,7168 @@ data_108: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 - .word data_10 - .word data_11 - .word data_12 - .word data_13 - .word data_14 - .word data_15 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 +.word data_9 +.word data_10 +.word data_11 +.word data_12 +.word data_13 +.word data_14 +.word data_15 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype - .word type_10_prototype - .word type_11_prototype - .word type_12_prototype - .word type_13_prototype - .word type_14_prototype - .word type_15_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype + .word type_11_prototype + .word type_12_prototype + .word type_13_prototype + .word type_14_prototype + .word type_15_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_add_vertice_at_Graph - .word function_print_E_at_Graph - .word function_print_V_at_Graph - .word __init_attr_at_Graph - .word __init_at_Graph +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_add_vertice_at_Graph +.word function_print_E_at_Graph +.word function_print_V_at_Graph +.word __init_attr_at_Graph +.word __init_at_Graph type_6_prototype: - .word 5 - .word 6 - .word type_6_dispatch - .word 0 - .word 0 - .word -1 +.word 5 +.word 6 +.word type_6_dispatch +.word 0 +.word 0 +.word -1 type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_add_out_at_Vertice - .word function_init_at_Vertice - .word function_number_at_Vertice - .word function_outgoing_at_Vertice - .word function_print_at_Vertice - .word __init_attr_at_Vertice - .word __init_at_Vertice +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_add_out_at_Vertice +.word function_init_at_Vertice +.word function_number_at_Vertice +.word function_outgoing_at_Vertice +.word function_print_at_Vertice +.word __init_attr_at_Vertice +.word __init_at_Vertice type_7_prototype: - .word 6 - .word 6 - .word type_7_dispatch - .word 0 - .word 0 - .word -1 +.word 6 +.word 6 +.word type_7_dispatch +.word 0 +.word 0 +.word -1 type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_init_at_Edge - .word function_print_at_Edge - .word __init_attr_at_Edge - .word __init_at_Edge +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_init_at_Edge +.word function_print_at_Edge +.word __init_attr_at_Edge +.word __init_at_Edge type_8_prototype: - .word 7 - .word 7 - .word type_8_dispatch - .word 0 - .word 0 - .word 0 - .word -1 +.word 7 +.word 7 +.word type_8_dispatch +.word 0 +.word 0 +.word 0 +.word -1 type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_append_at_EList - .word function_cons_at_EList - .word function_head_at_EList - .word function_isNil_at_EList - .word function_print_at_EList - .word function_tail_at_EList - .word __init_attr_at_EList - .word __init_at_EList +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_append_at_EList +.word function_cons_at_EList +.word function_head_at_EList +.word function_isNil_at_EList +.word function_print_at_EList +.word function_tail_at_EList +.word __init_attr_at_EList +.word __init_at_EList type_9_prototype: - .word 8 - .word 5 - .word type_9_dispatch - .word 0 - .word -1 +.word 8 +.word 5 +.word type_9_dispatch +.word 0 +.word -1 type_10_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_append_at_EList - .word function_cons_at_EList - .word function_head_at_ECons - .word function_isNil_at_ECons - .word function_print_at_ECons - .word function_tail_at_ECons - .word function_init_at_ECons - .word __init_attr_at_ECons - .word __init_at_ECons +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_append_at_EList +.word function_cons_at_EList +.word function_head_at_ECons +.word function_isNil_at_ECons +.word function_print_at_ECons +.word function_tail_at_ECons +.word function_init_at_ECons +.word __init_attr_at_ECons +.word __init_at_ECons type_10_prototype: - .word 9 - .word 6 - .word type_10_dispatch - .word 0 - .word 0 - .word -1 +.word 9 +.word 6 +.word type_10_dispatch +.word 0 +.word 0 +.word -1 type_11_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_cons_at_VList - .word function_head_at_VList - .word function_isNil_at_VList - .word function_print_at_VList - .word function_tail_at_VList - .word __init_attr_at_VList - .word __init_at_VList +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_cons_at_VList +.word function_head_at_VList +.word function_isNil_at_VList +.word function_print_at_VList +.word function_tail_at_VList +.word __init_attr_at_VList +.word __init_at_VList type_11_prototype: - .word 10 - .word 5 - .word type_11_dispatch - .word 0 - .word -1 +.word 10 +.word 5 +.word type_11_dispatch +.word 0 +.word -1 type_12_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_cons_at_VList - .word function_head_at_VCons - .word function_isNil_at_VCons - .word function_print_at_VCons - .word function_tail_at_VCons - .word function_init_at_VCons - .word __init_attr_at_VCons - .word __init_at_VCons +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_cons_at_VList +.word function_head_at_VCons +.word function_isNil_at_VCons +.word function_print_at_VCons +.word function_tail_at_VCons +.word function_init_at_VCons +.word __init_attr_at_VCons +.word __init_at_VCons type_12_prototype: - .word 11 - .word 6 - .word type_12_dispatch - .word 0 - .word 0 - .word -1 +.word 11 +.word 6 +.word type_12_dispatch +.word 0 +.word 0 +.word -1 type_13_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_a2i_at_Parse - .word function_a2i_aux_at_Parse - .word function_c2i_at_Parse - .word function_parse_line_at_Parse - .word function_read_input_at_Parse - .word __init_attr_at_Parse - .word __init_at_Parse +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_a2i_at_Parse +.word function_a2i_aux_at_Parse +.word function_c2i_at_Parse +.word function_parse_line_at_Parse +.word function_read_input_at_Parse +.word __init_attr_at_Parse +.word __init_at_Parse type_13_prototype: - .word 12 - .word 6 - .word type_13_dispatch - .word 0 - .word 0 - .word -1 +.word 12 +.word 6 +.word type_13_dispatch +.word 0 +.word 0 +.word -1 type_14_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_a2i_at_Parse - .word function_a2i_aux_at_Parse - .word function_c2i_at_Parse - .word function_parse_line_at_Parse - .word function_read_input_at_Parse - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_a2i_at_Parse +.word function_a2i_aux_at_Parse +.word function_c2i_at_Parse +.word function_parse_line_at_Parse +.word function_read_input_at_Parse +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_14_prototype: - .word 13 - .word 7 - .word type_14_dispatch - .word 0 - .word 0 - .word 0 - .word -1 +.word 13 +.word 7 +.word type_14_dispatch +.word 0 +.word 0 +.word 0 +.word -1 type_15_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_and_at_BoolOp - .word function_or_at_BoolOp - .word __init_attr_at_BoolOp - .word __init_at_BoolOp +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_and_at_BoolOp +.word function_or_at_BoolOp +.word __init_attr_at_BoolOp +.word __init_at_BoolOp type_15_prototype: - .word 14 - .word 4 - .word type_15_dispatch - .word -1 +.word 14 +.word 4 +.word type_15_dispatch +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_18 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_16 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_18 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_16 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Graph: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - jal __init_at_VList - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -24($fp) - lw $t0 0($fp) - lw $t1 -24($fp) - sw $t1 16($t0) - jal __init_at_EList - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +jal __init_at_VList +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -24($fp) +lw $t0 0($fp) +lw $t1 -24($fp) +sw $t1 16($t0) +jal __init_at_EList +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_add_vertice_at_Graph: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -32 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_8: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 32 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -32 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_8: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 32 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_E_at_Graph: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_10: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_10: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_V_at_Graph: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_12: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_12: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Graph: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Graph - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Graph +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 12($t0) - jal __init_at_EList - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 12($t0) +jal __init_at_EList +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_outgoing_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_number_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_init_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $v0 4($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $v0 4($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_add_out_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_14: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 4($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_14: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 4($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_16: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_18: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_16: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_18: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Vertice - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Vertice +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Edge: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 12($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 16($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 20($t0) - lw $v0 0($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 12($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 16($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 20($t0) +lw $v0 0($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_init_at_Edge: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 8($fp) - lw $t1 12($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 4($fp) - lw $t1 12($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 12($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - lw $v0 12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 8($fp) +lw $t1 12($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 4($fp) +lw $t1 12($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 12($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +lw $v0 12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_Edge: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -84 - la $t0 data_28 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_20: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -68($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_22: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - la $t0 data_31 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_24: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_25 - j label_26 - label_25: - li $v0 4 - la $a0 data_33 - syscall - li $v0 10 - syscall - label_26: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - la $t0 data_34 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_28: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_29 - j label_30 - label_29: - li $v0 4 - la $a0 data_36 - syscall - li $v0 10 - syscall - label_30: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 84 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -84 +la $t0 data_28 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_29 +syscall +li $v0 10 +syscall +label_20: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -68($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_21 +j label_22 +label_21: +li $v0 4 +la $a0 data_30 +syscall +li $v0 10 +syscall +label_22: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +la $t0 data_31 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_23 +j label_24 +label_23: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_24: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_25 +j label_26 +label_25: +li $v0 4 +la $a0 data_33 +syscall +li $v0 10 +syscall +label_26: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +la $t0 data_34 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_27 +j label_28 +label_27: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_28: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_29 +j label_30 +label_29: +li $v0 4 +la $a0 data_36 +syscall +li $v0 10 +syscall +label_30: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 84 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Edge: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Edge - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Edge +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_isNil_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_head_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_31 - j label_32 - label_31: - li $v0 4 - la $a0 data_37 - syscall - li $v0 10 - syscall - label_32: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_31 +j label_32 +label_31: +li $v0 4 +la $a0 data_37 +syscall +li $v0 10 +syscall +label_32: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_tail_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_33 - j label_34 - label_33: - li $v0 4 - la $a0 data_38 - syscall - li $v0 10 - syscall - label_34: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_33 +j label_34 +label_33: +li $v0 4 +la $a0 data_38 +syscall +li $v0 10 +syscall +label_34: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cons_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - jal __init_at_ECons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_35 - j label_36 - label_35: - li $v0 4 - la $a0 data_39 - syscall - li $v0 10 - syscall - label_36: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +jal __init_at_ECons +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_35 +j label_36 +label_35: +li $v0 4 +la $a0 data_39 +syscall +li $v0 10 +syscall +label_36: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_append_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -52 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_37 - j label_38 - label_37: - li $v0 4 - la $a0 data_40 - syscall - li $v0 10 - syscall - label_38: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_47 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_39 - j label_40 - label_39: - li $v0 4 - la $a0 data_41 - syscall - li $v0 10 - syscall - label_40: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_41 - j label_42 - label_41: - li $v0 4 - la $a0 data_42 - syscall - li $v0 10 - syscall - label_42: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_43 - syscall - li $v0 10 - syscall - label_44: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_45 - j label_46 - label_45: - li $v0 4 - la $a0 data_44 - syscall - li $v0 10 - syscall - label_46: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -56($fp) - j label_48 - label_47: - lw $t0 0($fp) - sw $t0 -56($fp) - label_48: - lw $v0 -56($fp) - addi $sp $sp 52 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -52 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_37 +j label_38 +label_37: +li $v0 4 +la $a0 data_40 +syscall +li $v0 10 +syscall +label_38: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_47 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_39 +j label_40 +label_39: +li $v0 4 +la $a0 data_41 +syscall +li $v0 10 +syscall +label_40: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_41 +j label_42 +label_41: +li $v0 4 +la $a0 data_42 +syscall +li $v0 10 +syscall +label_42: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_43 +syscall +li $v0 10 +syscall +label_44: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_45 +j label_46 +label_45: +li $v0 4 +la $a0 data_44 +syscall +li $v0 10 +syscall +label_46: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -56($fp) +j label_48 +label_47: +lw $t0 0($fp) +sw $t0 -56($fp) +label_48: +lw $v0 -56($fp) +addi $sp $sp 52 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - la $t0 data_45 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_49 - j label_50 - label_49: - li $v0 4 - la $a0 data_46 - syscall - li $v0 10 - syscall - label_50: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +la $t0 data_45 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_49 +j label_50 +label_49: +li $v0 4 +la $a0 data_46 +syscall +li $v0 10 +syscall +label_50: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_EList - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 8 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_EList +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_EList - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_EList +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_isNil_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_head_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_tail_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_init_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 4($fp) +lw $t1 8($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 8($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 8($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_51 - j label_52 - label_51: - li $v0 4 - la $a0 data_47 - syscall - li $v0 10 - syscall - label_52: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_53 - j label_54 - label_53: - li $v0 4 - la $a0 data_48 - syscall - li $v0 10 - syscall - label_54: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_51 +j label_52 +label_51: +li $v0 4 +la $a0 data_47 +syscall +li $v0 10 +syscall +label_52: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_53 +j label_54 +label_53: +li $v0 4 +la $a0 data_48 +syscall +li $v0 10 +syscall +label_54: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 9 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_ECons - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 9 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_ECons +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_isNil_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_head_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_55 - j label_56 - label_55: - li $v0 4 - la $a0 data_49 - syscall - li $v0 10 - syscall - label_56: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_55 +j label_56 +label_55: +li $v0 4 +la $a0 data_49 +syscall +li $v0 10 +syscall +label_56: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_tail_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_57 - j label_58 - label_57: - li $v0 4 - la $a0 data_50 - syscall - li $v0 10 - syscall - label_58: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_57 +j label_58 +label_57: +li $v0 4 +la $a0 data_50 +syscall +li $v0 10 +syscall +label_58: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cons_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - jal __init_at_VCons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_59 - j label_60 - label_59: - li $v0 4 - la $a0 data_51 - syscall - li $v0 10 - syscall - label_60: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +jal __init_at_VCons +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_59 +j label_60 +label_59: +li $v0 4 +la $a0 data_51 +syscall +li $v0 10 +syscall +label_60: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - la $t0 data_52 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_61 - j label_62 - label_61: - li $v0 4 - la $a0 data_53 - syscall - li $v0 10 - syscall - label_62: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +la $t0 data_52 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_61 +j label_62 +label_61: +li $v0 4 +la $a0 data_53 +syscall +li $v0 10 +syscall +label_62: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 10 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_VList - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 10 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_VList +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_VList - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_VList +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_isNil_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_head_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_tail_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_init_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 4($fp) +lw $t1 8($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 8($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 8($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_63 - j label_64 - label_63: - li $v0 4 - la $a0 data_54 - syscall - li $v0 10 - syscall - label_64: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_65 - j label_66 - label_65: - li $v0 4 - la $a0 data_55 - syscall - li $v0 10 - syscall - label_66: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_63 +j label_64 +label_63: +li $v0 4 +la $a0 data_54 +syscall +li $v0 10 +syscall +label_64: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_65 +j label_66 +label_65: +li $v0 4 +la $a0 data_55 +syscall +li $v0 10 +syscall +label_66: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 11 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_VCons - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 11 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_VCons +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - jal __init_at_BoolOp - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 12($t0) - la $t0 data_17 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +jal __init_at_BoolOp +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 12($t0) +la $t0 data_17 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_read_input_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -176 - jal __init_at_Graph - sw $v0 -172($fp) - lw $t0 -172($fp) - sw $t0 -176($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_67 - j label_68 - label_67: - li $v0 4 - la $a0 data_56 - syscall - li $v0 10 - syscall - label_68: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -160($fp) - sw $t0 -168($fp) - label_69: - la $t0 data_57 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -168($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -128($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -124($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -120($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -128($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_70 - lw $t0 -128($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_71 - lw $t0 -128($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_72 - lw $t0 -168($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_73 - label_70: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_73 - label_71: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - move $a0 $t0 - lw $t0 -132($fp) - move $a1 $t0 - jal equal_str - sw $v0 -108($fp) - j label_73 - label_72: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_73 - label_73: - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -148($fp) - xori $t0 $t0 1 - sw $t0 -144($fp) - lw $t0 -144($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -152($fp) - la $t0 data_58 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -168($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -72($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -68($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -64($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -60($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_74 - lw $t0 -72($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_75 - lw $t0 -72($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_76 - lw $t0 -168($fp) - lw $t1 -44($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_77 - label_74: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_77 - label_75: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - move $a0 $t0 - lw $t0 -76($fp) - move $a1 $t0 - jal equal_str - sw $v0 -52($fp) - j label_77 - label_76: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_77 - label_77: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - xori $t0 $t0 1 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_78 - j label_79 - label_78: - li $v0 4 - la $a0 data_59 - syscall - li $v0 10 - syscall - label_79: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -156($fp) - bne $t0 $zero label_80 - j label_87 - label_80: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_81 - j label_82 - label_81: - li $v0 4 - la $a0 data_60 - syscall - li $v0 10 - syscall - label_82: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -176($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_83 - j label_84 - label_83: - li $v0 4 - la $a0 data_61 - syscall - li $v0 10 - syscall - label_84: - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_85 - j label_86 - label_85: - li $v0 4 - la $a0 data_62 - syscall - li $v0 10 - syscall - label_86: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -168($fp) - j label_69 - label_87: - lw $v0 -176($fp) - addi $sp $sp 176 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -176 +jal __init_at_Graph +sw $v0 -172($fp) +lw $t0 -172($fp) +sw $t0 -176($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_67 +j label_68 +label_67: +li $v0 4 +la $a0 data_56 +syscall +li $v0 10 +syscall +label_68: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -160($fp) +lw $t0 -160($fp) +sw $t0 -168($fp) +label_69: +la $t0 data_57 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -168($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -128($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -124($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -120($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -116($fp) +lw $t0 -128($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +lw $t0 -112($fp) +bne $t0 $zero label_70 +lw $t0 -128($fp) +lw $t1 -120($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +lw $t0 -112($fp) +bne $t0 $zero label_71 +lw $t0 -128($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -112($fp) +lw $t0 -112($fp) +bne $t0 $zero label_72 +lw $t0 -168($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -108($fp) +j label_73 +label_70: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -136($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -108($fp) +j label_73 +label_71: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -136($fp) +move $a0 $t0 +lw $t0 -132($fp) +move $a1 $t0 +jal equal_str +sw $v0 -108($fp) +j label_73 +label_72: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -136($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -108($fp) +j label_73 +label_73: +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -140($fp) +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -148($fp) +xori $t0 $t0 1 +sw $t0 -144($fp) +lw $t0 -144($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -152($fp) +la $t0 data_58 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -168($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -72($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -68($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -64($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -60($fp) +lw $t0 -72($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_74 +lw $t0 -72($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_75 +lw $t0 -72($fp) +lw $t1 -60($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_76 +lw $t0 -168($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_77 +label_74: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_77 +label_75: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +move $a0 $t0 +lw $t0 -76($fp) +move $a1 $t0 +jal equal_str +sw $v0 -52($fp) +j label_77 +label_76: +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_77 +label_77: +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +xori $t0 $t0 1 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_78 +j label_79 +label_78: +li $v0 4 +la $a0 data_59 +syscall +li $v0 10 +syscall +label_79: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -156($fp) +bne $t0 $zero label_80 +j label_87 +label_80: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_81 +j label_82 +label_81: +li $v0 4 +la $a0 data_60 +syscall +li $v0 10 +syscall +label_82: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -176($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_83 +j label_84 +label_83: +li $v0 4 +la $a0 data_61 +syscall +li $v0 10 +syscall +label_84: +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_85 +j label_86 +label_85: +li $v0 4 +la $a0 data_62 +syscall +li $v0 10 +syscall +label_86: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -168($fp) +j label_69 +label_87: +lw $v0 -176($fp) +addi $sp $sp 176 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_parse_line_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -148 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_88 - j label_89 - label_88: - li $v0 4 - la $a0 data_63 - syscall - li $v0 10 - syscall - label_89: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -140($fp) - jal __init_at_Vertice - sw $v0 -136($fp) - lw $t0 -136($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_90 - j label_91 - label_90: - li $v0 4 - la $a0 data_64 - syscall - li $v0 10 - syscall - label_91: - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -128($fp) - lw $t0 -128($fp) - sw $t0 -148($fp) - label_92: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_93 - j label_94 - label_93: - li $v0 4 - la $a0 data_65 - syscall - li $v0 10 - syscall - label_94: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -68($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -68($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -96($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -92($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -84($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_95 - lw $t0 -96($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_96 - lw $t0 -96($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_97 - lw $t0 -68($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - j label_98 - label_95: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - j label_98 - label_96: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - move $a0 $t0 - lw $t0 -100($fp) - move $a1 $t0 - jal equal_str - sw $v0 -76($fp) - j label_98 - label_97: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - j label_98 - label_98: - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -116($fp) - xori $t0 $t0 1 - sw $t0 -112($fp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_99 - j label_110 - label_99: - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_100 - j label_101 - label_100: - li $v0 4 - la $a0 data_66 - syscall - li $v0 10 - syscall - label_101: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -60($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_102 - j label_103 - label_102: - li $v0 4 - la $a0 data_67 - syscall - li $v0 10 - syscall - label_103: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -48($fp) - lw $t0 -148($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_104 - j label_105 - label_104: - li $v0 4 - la $a0 data_68 - syscall - li $v0 10 - syscall - label_105: - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -32($fp) - jal __init_at_Edge - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_106 - j label_107 - label_106: - li $v0 4 - la $a0 data_69 - syscall - li $v0 10 - syscall - label_107: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 16 - sw $v0 -20($fp) - lw $t0 -148($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_108 - j label_109 - label_108: - li $v0 4 - la $a0 data_70 - syscall - li $v0 10 - syscall - label_109: - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - j label_92 - label_110: - lw $v0 -148($fp) - addi $sp $sp 148 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -148 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_88 +j label_89 +label_88: +li $v0 4 +la $a0 data_63 +syscall +li $v0 10 +syscall +label_89: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -140($fp) +jal __init_at_Vertice +sw $v0 -136($fp) +lw $t0 -136($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -132($fp) +lw $t0 -132($fp) +bne $t0 $zero label_90 +j label_91 +label_90: +li $v0 4 +la $a0 data_64 +syscall +li $v0 10 +syscall +label_91: +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -140($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -128($fp) +lw $t0 -128($fp) +sw $t0 -148($fp) +label_92: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_93 +j label_94 +label_93: +li $v0 4 +la $a0 data_65 +syscall +li $v0 10 +syscall +label_94: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -68($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -68($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -96($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -92($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -84($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_95 +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_96 +lw $t0 -96($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_97 +lw $t0 -68($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +j label_98 +label_95: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -104($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +j label_98 +label_96: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -104($fp) +move $a0 $t0 +lw $t0 -100($fp) +move $a1 $t0 +jal equal_str +sw $v0 -76($fp) +j label_98 +label_97: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -104($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +j label_98 +label_98: +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -116($fp) +xori $t0 $t0 1 +sw $t0 -112($fp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_99 +j label_110 +label_99: +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_100 +j label_101 +label_100: +li $v0 4 +la $a0 data_66 +syscall +li $v0 10 +syscall +label_101: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -60($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_102 +j label_103 +label_102: +li $v0 4 +la $a0 data_67 +syscall +li $v0 10 +syscall +label_103: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -48($fp) +lw $t0 -148($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_104 +j label_105 +label_104: +li $v0 4 +la $a0 data_68 +syscall +li $v0 10 +syscall +label_105: +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -32($fp) +jal __init_at_Edge +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_106 +j label_107 +label_106: +li $v0 4 +la $a0 data_69 +syscall +li $v0 10 +syscall +label_107: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 16 +sw $v0 -20($fp) +lw $t0 -148($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_108 +j label_109 +label_108: +li $v0 4 +la $a0 data_70 +syscall +li $v0 10 +syscall +label_109: +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +j label_92 +label_110: +lw $v0 -148($fp) +addi $sp $sp 148 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_c2i_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -580 - la $t0 data_71 - sw $t0 -536($fp) - lw $t0 -536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -532($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -560($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -556($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -552($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -548($fp) - lw $t0 -560($fp) - lw $t1 -556($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_111 - lw $t0 -560($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_112 - lw $t0 -560($fp) - lw $t1 -548($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_113 - lw $t0 0($fp) - lw $t1 -532($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_114 - label_111: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_114 - label_112: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - move $a0 $t0 - lw $t0 -564($fp) - move $a1 $t0 - jal equal_str - sw $v0 -540($fp) - j label_114 - label_113: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_114 - label_114: - lw $t0 -540($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -572($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -576($fp) - lw $t0 -576($fp) - bne $t0 $zero label_171 - la $t0 data_72 - sw $t0 -484($fp) - lw $t0 -484($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -480($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -508($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -504($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -500($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -496($fp) - lw $t0 -508($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_115 - lw $t0 -508($fp) - lw $t1 -500($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_116 - lw $t0 -508($fp) - lw $t1 -496($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_117 - lw $t0 0($fp) - lw $t1 -480($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_118 - label_115: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_118 - label_116: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - move $a0 $t0 - lw $t0 -512($fp) - move $a1 $t0 - jal equal_str - sw $v0 -488($fp) - j label_118 - label_117: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_118 - label_118: - lw $t0 -488($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -520($fp) - lw $t0 -520($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -524($fp) - bne $t0 $zero label_169 - la $t0 data_73 - sw $t0 -432($fp) - lw $t0 -432($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -456($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -452($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -448($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -444($fp) - lw $t0 -456($fp) - lw $t1 -452($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_119 - lw $t0 -456($fp) - lw $t1 -448($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_120 - lw $t0 -456($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_121 - lw $t0 0($fp) - lw $t1 -428($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_122 - label_119: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_122 - label_120: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - move $a0 $t0 - lw $t0 -460($fp) - move $a1 $t0 - jal equal_str - sw $v0 -436($fp) - j label_122 - label_121: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_122 - label_122: - lw $t0 -436($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -468($fp) - lw $t0 -468($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -472($fp) - bne $t0 $zero label_167 - la $t0 data_74 - sw $t0 -380($fp) - lw $t0 -380($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -376($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -404($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -400($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -396($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -392($fp) - lw $t0 -404($fp) - lw $t1 -400($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_123 - lw $t0 -404($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_124 - lw $t0 -404($fp) - lw $t1 -392($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_125 - lw $t0 0($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_126 - label_123: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_126 - label_124: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - move $a0 $t0 - lw $t0 -408($fp) - move $a1 $t0 - jal equal_str - sw $v0 -384($fp) - j label_126 - label_125: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_126 - label_126: - lw $t0 -384($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -416($fp) - lw $t0 -416($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -420($fp) - bne $t0 $zero label_165 - la $t0 data_75 - sw $t0 -328($fp) - lw $t0 -328($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -324($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -352($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -348($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -344($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -340($fp) - lw $t0 -352($fp) - lw $t1 -348($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_127 - lw $t0 -352($fp) - lw $t1 -344($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_128 - lw $t0 -352($fp) - lw $t1 -340($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_129 - lw $t0 0($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_130 - label_127: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_130 - label_128: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - move $a0 $t0 - lw $t0 -356($fp) - move $a1 $t0 - jal equal_str - sw $v0 -332($fp) - j label_130 - label_129: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_130 - label_130: - lw $t0 -332($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -364($fp) - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -368($fp) - lw $t0 -368($fp) - bne $t0 $zero label_163 - la $t0 data_76 - sw $t0 -276($fp) - lw $t0 -276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -300($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -296($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -292($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -288($fp) - lw $t0 -300($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_131 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_132 - lw $t0 -300($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_133 - lw $t0 0($fp) - lw $t1 -272($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_134 - label_131: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_134 - label_132: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - move $a0 $t0 - lw $t0 -304($fp) - move $a1 $t0 - jal equal_str - sw $v0 -280($fp) - j label_134 - label_133: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_134 - label_134: - lw $t0 -280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -312($fp) - lw $t0 -312($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_161 - la $t0 data_77 - sw $t0 -224($fp) - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -220($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -248($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -244($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -240($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -236($fp) - lw $t0 -248($fp) - lw $t1 -244($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_135 - lw $t0 -248($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_136 - lw $t0 -248($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_137 - lw $t0 0($fp) - lw $t1 -220($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_138 - label_135: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_138 - label_136: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - move $a0 $t0 - lw $t0 -252($fp) - move $a1 $t0 - jal equal_str - sw $v0 -228($fp) - j label_138 - label_137: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_138 - label_138: - lw $t0 -228($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -260($fp) - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -264($fp) - bne $t0 $zero label_159 - la $t0 data_78 - sw $t0 -172($fp) - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -196($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -192($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -184($fp) - lw $t0 -196($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_139 - lw $t0 -196($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_140 - lw $t0 -196($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_141 - lw $t0 0($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_142 - label_139: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_142 - label_140: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - move $a0 $t0 - lw $t0 -200($fp) - move $a1 $t0 - jal equal_str - sw $v0 -176($fp) - j label_142 - label_141: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_142 - label_142: - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -208($fp) - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_157 - la $t0 data_79 - sw $t0 -120($fp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_143 - lw $t0 -144($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_144 - lw $t0 -144($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_145 - lw $t0 0($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_146 - label_143: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_146 - label_144: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - move $a0 $t0 - lw $t0 -148($fp) - move $a1 $t0 - jal equal_str - sw $v0 -124($fp) - j label_146 - label_145: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_146 - label_146: - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_155 - la $t0 data_80 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_147 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_148 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_149 - lw $t0 0($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_150 - label_147: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_150 - label_148: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_150 - label_149: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_150 - label_150: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_153 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_151 - j label_152 - label_151: - li $v0 4 - la $a0 data_81 - syscall - li $v0 10 - syscall - label_152: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -56($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -112($fp) - j label_154 - label_153: - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -112($fp) - label_154: - lw $t0 -112($fp) - sw $t0 -164($fp) - j label_156 - label_155: - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -164($fp) - label_156: - lw $t0 -164($fp) - sw $t0 -216($fp) - j label_158 - label_157: - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -216($fp) - label_158: - lw $t0 -216($fp) - sw $t0 -268($fp) - j label_160 - label_159: - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -268($fp) - label_160: - lw $t0 -268($fp) - sw $t0 -320($fp) - j label_162 - label_161: - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -320($fp) - label_162: - lw $t0 -320($fp) - sw $t0 -372($fp) - j label_164 - label_163: - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -372($fp) - label_164: - lw $t0 -372($fp) - sw $t0 -424($fp) - j label_166 - label_165: - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -424($fp) - label_166: - lw $t0 -424($fp) - sw $t0 -476($fp) - j label_168 - label_167: - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -476($fp) - label_168: - lw $t0 -476($fp) - sw $t0 -528($fp) - j label_170 - label_169: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -528($fp) - label_170: - lw $t0 -528($fp) - sw $t0 -580($fp) - j label_172 - label_171: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -580($fp) - label_172: - lw $v0 -580($fp) - addi $sp $sp 580 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -580 +la $t0 data_71 +sw $t0 -536($fp) +lw $t0 -536($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -532($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -560($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -556($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -552($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -548($fp) +lw $t0 -560($fp) +lw $t1 -556($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_111 +lw $t0 -560($fp) +lw $t1 -552($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_112 +lw $t0 -560($fp) +lw $t1 -548($fp) +seq $t0 $t0 $t1 +sw $t0 -544($fp) +lw $t0 -544($fp) +bne $t0 $zero label_113 +lw $t0 0($fp) +lw $t1 -532($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_114 +label_111: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -568($fp) +lw $t1 -564($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_114 +label_112: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -568($fp) +move $a0 $t0 +lw $t0 -564($fp) +move $a1 $t0 +jal equal_str +sw $v0 -540($fp) +j label_114 +label_113: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -568($fp) +lw $t0 -532($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -568($fp) +lw $t1 -564($fp) +seq $t0 $t0 $t1 +sw $t0 -540($fp) +j label_114 +label_114: +lw $t0 -540($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -572($fp) +lw $t0 -572($fp) +lw $t1 12($t0) +sw $t1 -576($fp) +lw $t0 -576($fp) +bne $t0 $zero label_171 +la $t0 data_72 +sw $t0 -484($fp) +lw $t0 -484($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -480($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -508($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -504($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -500($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -496($fp) +lw $t0 -508($fp) +lw $t1 -504($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_115 +lw $t0 -508($fp) +lw $t1 -500($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_116 +lw $t0 -508($fp) +lw $t1 -496($fp) +seq $t0 $t0 $t1 +sw $t0 -492($fp) +lw $t0 -492($fp) +bne $t0 $zero label_117 +lw $t0 0($fp) +lw $t1 -480($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_118 +label_115: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -512($fp) +lw $t0 -516($fp) +lw $t1 -512($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_118 +label_116: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -512($fp) +lw $t0 -516($fp) +move $a0 $t0 +lw $t0 -512($fp) +move $a1 $t0 +jal equal_str +sw $v0 -488($fp) +j label_118 +label_117: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -480($fp) +lw $t1 12($t0) +sw $t1 -512($fp) +lw $t0 -516($fp) +lw $t1 -512($fp) +seq $t0 $t0 $t1 +sw $t0 -488($fp) +j label_118 +label_118: +lw $t0 -488($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -520($fp) +lw $t0 -520($fp) +lw $t1 12($t0) +sw $t1 -524($fp) +lw $t0 -524($fp) +bne $t0 $zero label_169 +la $t0 data_73 +sw $t0 -432($fp) +lw $t0 -432($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -428($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -456($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -452($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -448($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -444($fp) +lw $t0 -456($fp) +lw $t1 -452($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_119 +lw $t0 -456($fp) +lw $t1 -448($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_120 +lw $t0 -456($fp) +lw $t1 -444($fp) +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_121 +lw $t0 0($fp) +lw $t1 -428($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_122 +label_119: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -464($fp) +lw $t1 -460($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_122 +label_120: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -464($fp) +move $a0 $t0 +lw $t0 -460($fp) +move $a1 $t0 +jal equal_str +sw $v0 -436($fp) +j label_122 +label_121: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -464($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -464($fp) +lw $t1 -460($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +j label_122 +label_122: +lw $t0 -436($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -468($fp) +lw $t0 -468($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -472($fp) +bne $t0 $zero label_167 +la $t0 data_74 +sw $t0 -380($fp) +lw $t0 -380($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -376($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -404($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -400($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -396($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -392($fp) +lw $t0 -404($fp) +lw $t1 -400($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_123 +lw $t0 -404($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_124 +lw $t0 -404($fp) +lw $t1 -392($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_125 +lw $t0 0($fp) +lw $t1 -376($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_126 +label_123: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -408($fp) +lw $t0 -412($fp) +lw $t1 -408($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_126 +label_124: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -408($fp) +lw $t0 -412($fp) +move $a0 $t0 +lw $t0 -408($fp) +move $a1 $t0 +jal equal_str +sw $v0 -384($fp) +j label_126 +label_125: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -376($fp) +lw $t1 12($t0) +sw $t1 -408($fp) +lw $t0 -412($fp) +lw $t1 -408($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_126 +label_126: +lw $t0 -384($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -416($fp) +lw $t0 -416($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -420($fp) +bne $t0 $zero label_165 +la $t0 data_75 +sw $t0 -328($fp) +lw $t0 -328($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -324($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -352($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -348($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -344($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -340($fp) +lw $t0 -352($fp) +lw $t1 -348($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_127 +lw $t0 -352($fp) +lw $t1 -344($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_128 +lw $t0 -352($fp) +lw $t1 -340($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_129 +lw $t0 0($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_130 +label_127: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -356($fp) +lw $t0 -360($fp) +lw $t1 -356($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_130 +label_128: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -356($fp) +lw $t0 -360($fp) +move $a0 $t0 +lw $t0 -356($fp) +move $a1 $t0 +jal equal_str +sw $v0 -332($fp) +j label_130 +label_129: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -324($fp) +lw $t1 12($t0) +sw $t1 -356($fp) +lw $t0 -360($fp) +lw $t1 -356($fp) +seq $t0 $t0 $t1 +sw $t0 -332($fp) +j label_130 +label_130: +lw $t0 -332($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -364($fp) +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -368($fp) +lw $t0 -368($fp) +bne $t0 $zero label_163 +la $t0 data_76 +sw $t0 -276($fp) +lw $t0 -276($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -300($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -292($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -288($fp) +lw $t0 -300($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_131 +lw $t0 -300($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_132 +lw $t0 -300($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_133 +lw $t0 0($fp) +lw $t1 -272($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_134 +label_131: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_134 +label_132: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +move $a0 $t0 +lw $t0 -304($fp) +move $a1 $t0 +jal equal_str +sw $v0 -280($fp) +j label_134 +label_133: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_134 +label_134: +lw $t0 -280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -312($fp) +lw $t0 -312($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_161 +la $t0 data_77 +sw $t0 -224($fp) +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -220($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -248($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -244($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -240($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -236($fp) +lw $t0 -248($fp) +lw $t1 -244($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_135 +lw $t0 -248($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_136 +lw $t0 -248($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -232($fp) +lw $t0 -232($fp) +bne $t0 $zero label_137 +lw $t0 0($fp) +lw $t1 -220($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_138 +label_135: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -256($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_138 +label_136: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -256($fp) +move $a0 $t0 +lw $t0 -252($fp) +move $a1 $t0 +jal equal_str +sw $v0 -228($fp) +j label_138 +label_137: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -256($fp) +lw $t0 -220($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -256($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +j label_138 +label_138: +lw $t0 -228($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -260($fp) +lw $t0 -260($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -264($fp) +bne $t0 $zero label_159 +la $t0 data_78 +sw $t0 -172($fp) +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -168($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -196($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -192($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -188($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -184($fp) +lw $t0 -196($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_139 +lw $t0 -196($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_140 +lw $t0 -196($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_141 +lw $t0 0($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_142 +label_139: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -204($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_142 +label_140: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -204($fp) +move $a0 $t0 +lw $t0 -200($fp) +move $a1 $t0 +jal equal_str +sw $v0 -176($fp) +j label_142 +label_141: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -204($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +j label_142 +label_142: +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -208($fp) +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_157 +la $t0 data_79 +sw $t0 -120($fp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -136($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_143 +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_144 +lw $t0 -144($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_145 +lw $t0 0($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_146 +label_143: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_146 +label_144: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +move $a0 $t0 +lw $t0 -148($fp) +move $a1 $t0 +jal equal_str +sw $v0 -124($fp) +j label_146 +label_145: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_146 +label_146: +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_155 +la $t0 data_80 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -92($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -80($fp) +lw $t0 -92($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_147 +lw $t0 -92($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_148 +lw $t0 -92($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_149 +lw $t0 0($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_150 +label_147: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_150 +label_148: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -96($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_150 +label_149: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_150 +label_150: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_153 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_151 +j label_152 +label_151: +li $v0 4 +la $a0 data_81 +syscall +li $v0 10 +syscall +label_152: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -56($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -112($fp) +j label_154 +label_153: +li $t0 9 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +sw $t0 -112($fp) +label_154: +lw $t0 -112($fp) +sw $t0 -164($fp) +j label_156 +label_155: +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -164($fp) +label_156: +lw $t0 -164($fp) +sw $t0 -216($fp) +j label_158 +label_157: +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -216($fp) +label_158: +lw $t0 -216($fp) +sw $t0 -268($fp) +j label_160 +label_159: +li $t0 6 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -268($fp) +label_160: +lw $t0 -268($fp) +sw $t0 -320($fp) +j label_162 +label_161: +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -320($fp) +label_162: +lw $t0 -320($fp) +sw $t0 -372($fp) +j label_164 +label_163: +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -372($fp) +label_164: +lw $t0 -372($fp) +sw $t0 -424($fp) +j label_166 +label_165: +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -424($fp) +label_166: +lw $t0 -424($fp) +sw $t0 -476($fp) +j label_168 +label_167: +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -476($fp) +label_168: +lw $t0 -476($fp) +sw $t0 -528($fp) +j label_170 +label_169: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -528($fp) +label_170: +lw $t0 -528($fp) +sw $t0 -580($fp) +j label_172 +label_171: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -580($fp) +label_172: +lw $v0 -580($fp) +addi $sp $sp 580 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_a2i_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -320 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -276($fp) - lw $t0 -276($fp) - bne $t0 $zero label_173 - j label_174 - label_173: - li $v0 4 - la $a0 data_82 - syscall - li $v0 10 - syscall - label_174: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -272($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -268($fp) - lw $t0 -272($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -300($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -296($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -292($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -288($fp) - lw $t0 -300($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_175 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_176 - lw $t0 -300($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_177 - lw $t0 -272($fp) - lw $t1 -268($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_178 - label_175: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_178 - label_176: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - move $a0 $t0 - lw $t0 -304($fp) - move $a1 $t0 - jal equal_str - sw $v0 -280($fp) - j label_178 - label_177: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_178 - label_178: - lw $t0 -280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -312($fp) - lw $t0 -312($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_209 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -220($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_179 - j label_180 - label_179: - li $v0 4 - la $a0 data_83 - syscall - li $v0 10 - syscall - label_180: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -216($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -208($fp) - la $t0 data_84 - sw $t0 -204($fp) - lw $t0 -204($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -200($fp) - lw $t0 -208($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -244($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -240($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -236($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -232($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_181 - lw $t0 -244($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_182 - lw $t0 -244($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_183 - lw $t0 -208($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_184 - label_181: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_184 - label_182: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - move $a0 $t0 - lw $t0 -248($fp) - move $a1 $t0 - jal equal_str - sw $v0 -224($fp) - j label_184 - label_183: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_184 - label_184: - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_201 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_185 - j label_186 - label_185: - li $v0 4 - la $a0 data_85 - syscall - li $v0 10 - syscall - label_186: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -140($fp) - la $t0 data_86 - sw $t0 -136($fp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 -140($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -176($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -172($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -168($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -164($fp) - lw $t0 -176($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_187 - lw $t0 -176($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_188 - lw $t0 -176($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_189 - lw $t0 -140($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_190 - label_187: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_190 - label_188: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - move $a0 $t0 - lw $t0 -180($fp) - move $a1 $t0 - jal equal_str - sw $v0 -156($fp) - j label_190 - label_189: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_190 - label_190: - lw $t0 -156($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -192($fp) - bne $t0 $zero label_193 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_191 - j label_192 - label_191: - li $v0 4 - la $a0 data_87 - syscall - li $v0 10 - syscall - label_192: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -124($fp) - lw $t0 -124($fp) - sw $t0 -196($fp) - j label_200 - label_193: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_194 - j label_195 - label_194: - li $v0 4 - la $a0 data_88 - syscall - li $v0 10 - syscall - label_195: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -112($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - sub $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_196 - j label_197 - label_196: - li $v0 4 - la $a0 data_89 - syscall - li $v0 10 - syscall - label_197: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -84($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_198 - j label_199 - label_198: - li $v0 4 - la $a0 data_90 - syscall - li $v0 10 - syscall - label_199: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -196($fp) - label_200: - lw $t0 -196($fp) - sw $t0 -264($fp) - j label_208 - label_201: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_202 - j label_203 - label_202: - li $v0 4 - la $a0 data_91 - syscall - li $v0 10 - syscall - label_203: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - sub $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_204 - j label_205 - label_204: - li $v0 4 - la $a0 data_92 - syscall - li $v0 10 - syscall - label_205: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -24($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_206 - j label_207 - label_206: - li $v0 4 - la $a0 data_93 - syscall - li $v0 10 - syscall - label_207: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -16($fp) - lw $t0 -16($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -68($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -264($fp) - label_208: - lw $t0 -264($fp) - sw $t0 -320($fp) - j label_210 - label_209: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -320($fp) - label_210: - lw $v0 -320($fp) - addi $sp $sp 320 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -320 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -276($fp) +lw $t0 -276($fp) +bne $t0 $zero label_173 +j label_174 +label_173: +li $v0 4 +la $a0 data_82 +syscall +li $v0 10 +syscall +label_174: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -272($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -268($fp) +lw $t0 -272($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -300($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -296($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -292($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -288($fp) +lw $t0 -300($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_175 +lw $t0 -300($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_176 +lw $t0 -300($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -284($fp) +lw $t0 -284($fp) +bne $t0 $zero label_177 +lw $t0 -272($fp) +lw $t1 -268($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_178 +label_175: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_178 +label_176: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +move $a0 $t0 +lw $t0 -304($fp) +move $a1 $t0 +jal equal_str +sw $v0 -280($fp) +j label_178 +label_177: +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -308($fp) +lw $t0 -268($fp) +lw $t1 12($t0) +sw $t1 -304($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -280($fp) +j label_178 +label_178: +lw $t0 -280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -312($fp) +lw $t0 -312($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_209 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -220($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_179 +j label_180 +label_179: +li $v0 4 +la $a0 data_83 +syscall +li $v0 10 +syscall +label_180: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -220($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -216($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -208($fp) +la $t0 data_84 +sw $t0 -204($fp) +lw $t0 -204($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -200($fp) +lw $t0 -208($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -244($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -240($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -236($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -232($fp) +lw $t0 -244($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_181 +lw $t0 -244($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_182 +lw $t0 -244($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_183 +lw $t0 -208($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_184 +label_181: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -252($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_184 +label_182: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -252($fp) +move $a0 $t0 +lw $t0 -248($fp) +move $a1 $t0 +jal equal_str +sw $v0 -224($fp) +j label_184 +label_183: +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -248($fp) +lw $t0 -252($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -224($fp) +j label_184 +label_184: +lw $t0 -224($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -256($fp) +lw $t0 -256($fp) +lw $t1 12($t0) +sw $t1 -260($fp) +lw $t0 -260($fp) +bne $t0 $zero label_201 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -152($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_185 +j label_186 +label_185: +li $v0 4 +la $a0 data_85 +syscall +li $v0 10 +syscall +label_186: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -148($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -140($fp) +la $t0 data_86 +sw $t0 -136($fp) +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -132($fp) +lw $t0 -140($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -176($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -172($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -168($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -164($fp) +lw $t0 -176($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_187 +lw $t0 -176($fp) +lw $t1 -168($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_188 +lw $t0 -176($fp) +lw $t1 -164($fp) +seq $t0 $t0 $t1 +sw $t0 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_189 +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_190 +label_187: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -184($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_190 +label_188: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -184($fp) +move $a0 $t0 +lw $t0 -180($fp) +move $a1 $t0 +jal equal_str +sw $v0 -156($fp) +j label_190 +label_189: +lw $t0 -140($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -184($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -156($fp) +j label_190 +label_190: +lw $t0 -156($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -188($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -192($fp) +bne $t0 $zero label_193 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_191 +j label_192 +label_191: +li $v0 4 +la $a0 data_87 +syscall +li $v0 10 +syscall +label_192: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -124($fp) +lw $t0 -124($fp) +sw $t0 -196($fp) +j label_200 +label_193: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_194 +j label_195 +label_194: +li $v0 4 +la $a0 data_88 +syscall +li $v0 10 +syscall +label_195: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +sub $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_196 +j label_197 +label_196: +li $v0 4 +la $a0 data_89 +syscall +li $v0 10 +syscall +label_197: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -84($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_198 +j label_199 +label_198: +li $v0 4 +la $a0 data_90 +syscall +li $v0 10 +syscall +label_199: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -196($fp) +label_200: +lw $t0 -196($fp) +sw $t0 -264($fp) +j label_208 +label_201: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_202 +j label_203 +label_202: +li $v0 4 +la $a0 data_91 +syscall +li $v0 10 +syscall +label_203: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +sub $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_204 +j label_205 +label_204: +li $v0 4 +la $a0 data_92 +syscall +li $v0 10 +syscall +label_205: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -24($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_206 +j label_207 +label_206: +li $v0 4 +la $a0 data_93 +syscall +li $v0 10 +syscall +label_207: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -16($fp) +lw $t0 -16($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -68($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -264($fp) +label_208: +lw $t0 -264($fp) +sw $t0 -320($fp) +j label_210 +label_209: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -320($fp) +label_210: +lw $v0 -320($fp) +addi $sp $sp 320 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_a2i_aux_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -456 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -452($fp) - lw $t0 -452($fp) - sw $t0 -456($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -444($fp) - lw $t0 -444($fp) - bne $t0 $zero label_211 - j label_212 - label_211: - li $v0 4 - la $a0 data_94 - syscall - li $v0 10 - syscall - label_212: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -440($fp) - lw $t0 -440($fp) - sw $t0 -448($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -432($fp) - lw $t0 -432($fp) - sw $t0 -436($fp) - label_213: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -448($fp) - lw $t1 12($t0) - sw $t1 -416($fp) - lw $t0 -420($fp) - lw $t1 -416($fp) - slt $t1 $t0 $t1 - sw $t1 -412($fp) - lw $t0 -412($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -424($fp) - lw $t0 -424($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -428($fp) - bne $t0 $zero label_214 - j label_247 - label_214: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -404($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -400($fp) - lw $t0 -400($fp) - bne $t0 $zero label_215 - j label_216 - label_215: - li $v0 4 - la $a0 data_95 - syscall - li $v0 10 - syscall - label_216: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -436($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -404($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -396($fp) - lw $t0 -396($fp) - sw $t0 -408($fp) - la $t0 data_96 - sw $t0 -348($fp) - lw $t0 -348($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -344($fp) - lw $t0 -408($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -372($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -368($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -364($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -360($fp) - lw $t0 -372($fp) - lw $t1 -368($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_217 - lw $t0 -372($fp) - lw $t1 -364($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_218 - lw $t0 -372($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_219 - lw $t0 -408($fp) - lw $t1 -344($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_220 - label_217: - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -344($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_220 - label_218: - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -344($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - move $a0 $t0 - lw $t0 -376($fp) - move $a1 $t0 - jal equal_str - sw $v0 -352($fp) - j label_220 - label_219: - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -344($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_220 - label_220: - lw $t0 -352($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -384($fp) - lw $t0 -384($fp) - lw $t1 12($t0) - sw $t1 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_241 - la $t0 data_97 - sw $t0 -296($fp) - lw $t0 -296($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -292($fp) - lw $t0 -408($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -320($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -316($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -312($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -308($fp) - lw $t0 -320($fp) - lw $t1 -316($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_221 - lw $t0 -320($fp) - lw $t1 -312($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_222 - lw $t0 -320($fp) - lw $t1 -308($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_223 - lw $t0 -408($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_224 - label_221: - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -292($fp) - lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_224 - label_222: - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -292($fp) - lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - move $a0 $t0 - lw $t0 -324($fp) - move $a1 $t0 - jal equal_str - sw $v0 -300($fp) - j label_224 - label_223: - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -292($fp) - lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_224 - label_224: - lw $t0 -300($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -332($fp) - lw $t0 -332($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_235 - lw $t0 -456($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - mul $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -252($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -248($fp) - lw $t0 -248($fp) - bne $t0 $zero label_225 - j label_226 - label_225: - li $v0 4 - la $a0 data_98 - syscall - li $v0 10 - syscall - label_226: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -436($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -252($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -244($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -240($fp) - lw $t0 -240($fp) - bne $t0 $zero label_227 - j label_228 - label_227: - li $v0 4 - la $a0 data_99 - syscall - li $v0 10 - syscall - label_228: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -244($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -236($fp) - lw $t0 -236($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - add $t0 $t0 $t1 - sw $t0 -276($fp) - lw $t0 -276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -288($fp) - lw $t0 -288($fp) - sw $t0 -456($fp) - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -228($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 -216($fp) - lw $t1 12($t0) - sw $t1 -224($fp) - lw $t0 -228($fp) - lw $t1 -224($fp) - add $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -232($fp) - lw $t0 -232($fp) - sw $t0 -436($fp) - lw $t0 -436($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -192($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -184($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -180($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_229 - lw $t0 -192($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_230 - lw $t0 -192($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_231 - lw $t0 -436($fp) - lw $t1 -448($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_232 - label_229: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -448($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_232 - label_230: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -448($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - move $a0 $t0 - lw $t0 -196($fp) - move $a1 $t0 - jal equal_str - sw $v0 -172($fp) - j label_232 - label_231: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -448($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_232 - label_232: - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_233 - la $t0 data_100 - sw $t0 -168($fp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - sw $t0 -212($fp) - j label_234 - label_233: - la $t0 data_101 - sw $t0 -160($fp) - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -212($fp) - label_234: - lw $t0 -212($fp) - sw $t0 -340($fp) - j label_240 - label_235: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - add $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_236 - j label_237 - label_236: - li $v0 4 - la $a0 data_102 - syscall - li $v0 10 - syscall - label_237: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - sub $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -124($fp) - lw $t0 -128($fp) - lw $t1 -124($fp) - sub $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_238 - j label_239 - label_238: - li $v0 4 - la $a0 data_103 - syscall - li $v0 10 - syscall - label_239: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -448($fp) - sw $t0 -436($fp) - lw $t0 -436($fp) - sw $t0 -340($fp) - label_240: - lw $t0 -340($fp) - sw $t0 -392($fp) - j label_246 - label_241: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - add $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_242 - j label_243 - label_242: - li $v0 4 - la $a0 data_104 - syscall - li $v0 10 - syscall - label_243: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - sub $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - sub $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_244 - j label_245 - label_244: - li $v0 4 - la $a0 data_105 - syscall - li $v0 10 - syscall - label_245: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -448($fp) - sw $t0 -436($fp) - lw $t0 -436($fp) - sw $t0 -392($fp) - label_246: - j label_213 - label_247: - lw $v0 -456($fp) - addi $sp $sp 456 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -456 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -452($fp) +lw $t0 -452($fp) +sw $t0 -456($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -444($fp) +lw $t0 -444($fp) +bne $t0 $zero label_211 +j label_212 +label_211: +li $v0 4 +la $a0 data_94 +syscall +li $v0 10 +syscall +label_212: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -440($fp) +lw $t0 -440($fp) +sw $t0 -448($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -432($fp) +lw $t0 -432($fp) +sw $t0 -436($fp) +label_213: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -448($fp) +lw $t1 12($t0) +sw $t1 -416($fp) +lw $t0 -420($fp) +lw $t1 -416($fp) +slt $t1 $t0 $t1 +sw $t1 -412($fp) +lw $t0 -412($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -424($fp) +lw $t0 -424($fp) +lw $t1 12($t0) +sw $t1 -428($fp) +lw $t0 -428($fp) +bne $t0 $zero label_214 +j label_247 +label_214: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -404($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -400($fp) +lw $t0 -400($fp) +bne $t0 $zero label_215 +j label_216 +label_215: +li $v0 4 +la $a0 data_95 +syscall +li $v0 10 +syscall +label_216: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -436($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -404($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -396($fp) +lw $t0 -396($fp) +sw $t0 -408($fp) +la $t0 data_96 +sw $t0 -348($fp) +lw $t0 -348($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -344($fp) +lw $t0 -408($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -372($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -368($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -364($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -360($fp) +lw $t0 -372($fp) +lw $t1 -368($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_217 +lw $t0 -372($fp) +lw $t1 -364($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_218 +lw $t0 -372($fp) +lw $t1 -360($fp) +seq $t0 $t0 $t1 +sw $t0 -356($fp) +lw $t0 -356($fp) +bne $t0 $zero label_219 +lw $t0 -408($fp) +lw $t1 -344($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_220 +label_217: +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -344($fp) +lw $t1 12($t0) +sw $t1 -376($fp) +lw $t0 -380($fp) +lw $t1 -376($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_220 +label_218: +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -344($fp) +lw $t1 12($t0) +sw $t1 -376($fp) +lw $t0 -380($fp) +move $a0 $t0 +lw $t0 -376($fp) +move $a1 $t0 +jal equal_str +sw $v0 -352($fp) +j label_220 +label_219: +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -380($fp) +lw $t0 -344($fp) +lw $t1 12($t0) +sw $t1 -376($fp) +lw $t0 -380($fp) +lw $t1 -376($fp) +seq $t0 $t0 $t1 +sw $t0 -352($fp) +j label_220 +label_220: +lw $t0 -352($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -384($fp) +lw $t0 -384($fp) +lw $t1 12($t0) +sw $t1 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_241 +la $t0 data_97 +sw $t0 -296($fp) +lw $t0 -296($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -292($fp) +lw $t0 -408($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -320($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -316($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -312($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -308($fp) +lw $t0 -320($fp) +lw $t1 -316($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +lw $t0 -304($fp) +bne $t0 $zero label_221 +lw $t0 -320($fp) +lw $t1 -312($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +lw $t0 -304($fp) +bne $t0 $zero label_222 +lw $t0 -320($fp) +lw $t1 -308($fp) +seq $t0 $t0 $t1 +sw $t0 -304($fp) +lw $t0 -304($fp) +bne $t0 $zero label_223 +lw $t0 -408($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -300($fp) +j label_224 +label_221: +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -292($fp) +lw $t1 12($t0) +sw $t1 -324($fp) +lw $t0 -328($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -300($fp) +j label_224 +label_222: +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -292($fp) +lw $t1 12($t0) +sw $t1 -324($fp) +lw $t0 -328($fp) +move $a0 $t0 +lw $t0 -324($fp) +move $a1 $t0 +jal equal_str +sw $v0 -300($fp) +j label_224 +label_223: +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -328($fp) +lw $t0 -292($fp) +lw $t1 12($t0) +sw $t1 -324($fp) +lw $t0 -328($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -300($fp) +j label_224 +label_224: +lw $t0 -300($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -332($fp) +lw $t0 -332($fp) +lw $t1 12($t0) +sw $t1 -336($fp) +lw $t0 -336($fp) +bne $t0 $zero label_235 +lw $t0 -456($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -256($fp) +lw $t0 -256($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +lw $t1 -264($fp) +mul $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -284($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -252($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -248($fp) +lw $t0 -248($fp) +bne $t0 $zero label_225 +j label_226 +label_225: +li $v0 4 +la $a0 data_98 +syscall +li $v0 10 +syscall +label_226: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -436($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -252($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -244($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -240($fp) +lw $t0 -240($fp) +bne $t0 $zero label_227 +j label_228 +label_227: +li $v0 4 +la $a0 data_99 +syscall +li $v0 10 +syscall +label_228: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -244($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -236($fp) +lw $t0 -236($fp) +lw $t1 12($t0) +sw $t1 -280($fp) +lw $t0 -284($fp) +lw $t1 -280($fp) +add $t0 $t0 $t1 +sw $t0 -276($fp) +lw $t0 -276($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -288($fp) +lw $t0 -288($fp) +sw $t0 -456($fp) +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 -216($fp) +lw $t1 12($t0) +sw $t1 -224($fp) +lw $t0 -228($fp) +lw $t1 -224($fp) +add $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -232($fp) +lw $t0 -232($fp) +sw $t0 -436($fp) +lw $t0 -436($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -192($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -188($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -184($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -180($fp) +lw $t0 -192($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_229 +lw $t0 -192($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_230 +lw $t0 -192($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_231 +lw $t0 -436($fp) +lw $t1 -448($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_232 +label_229: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -448($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_232 +label_230: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -448($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +move $a0 $t0 +lw $t0 -196($fp) +move $a1 $t0 +jal equal_str +sw $v0 -172($fp) +j label_232 +label_231: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -448($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_232 +label_232: +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -208($fp) +bne $t0 $zero label_233 +la $t0 data_100 +sw $t0 -168($fp) +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +sw $t0 -212($fp) +j label_234 +label_233: +la $t0 data_101 +sw $t0 -160($fp) +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -212($fp) +label_234: +lw $t0 -212($fp) +sw $t0 -340($fp) +j label_240 +label_235: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -136($fp) +lw $t0 -136($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -148($fp) +lw $t1 -144($fp) +add $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -152($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_236 +j label_237 +label_236: +li $v0 4 +la $a0 data_102 +syscall +li $v0 10 +syscall +label_237: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +sub $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -124($fp) +lw $t0 -128($fp) +lw $t1 -124($fp) +sub $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -132($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_238 +j label_239 +label_238: +li $v0 4 +la $a0 data_103 +syscall +li $v0 10 +syscall +label_239: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -448($fp) +sw $t0 -436($fp) +lw $t0 -436($fp) +sw $t0 -340($fp) +label_240: +lw $t0 -340($fp) +sw $t0 -392($fp) +j label_246 +label_241: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +add $t0 $t0 $t1 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_242 +j label_243 +label_242: +li $v0 4 +la $a0 data_104 +syscall +li $v0 10 +syscall +label_243: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +lw $t1 -36($fp) +sub $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +sub $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_244 +j label_245 +label_244: +li $v0 4 +la $a0 data_105 +syscall +li $v0 10 +syscall +label_245: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -448($fp) +sw $t0 -436($fp) +lw $t0 -436($fp) +sw $t0 -392($fp) +label_246: +j label_213 +label_247: +lw $v0 -456($fp) +addi $sp $sp 456 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 12 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Parse - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 12 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Parse +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Parse - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_248 - j label_249 - label_248: - li $v0 4 - la $a0 data_106 - syscall - li $v0 10 - syscall - label_249: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 20($t0) - lw $v0 0($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -28 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Parse +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_248 +j label_249 +label_248: +li $v0 4 +la $a0 data_106 +syscall +li $v0 10 +syscall +label_249: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 20($t0) +lw $v0 0($fp) +addi $sp $sp 28 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_250 - j label_251 - label_250: - li $v0 4 - la $a0 data_107 - syscall - li $v0 10 - syscall - label_251: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_252 - j label_253 - label_252: - li $v0 4 - la $a0 data_108 - syscall - li $v0 10 - syscall - label_253: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -28 +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_250 +j label_251 +label_250: +li $v0 4 +la $a0 data_107 +syscall +li $v0 10 +syscall +label_251: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_252 +j label_253 +label_252: +li $v0 4 +la $a0 data_108 +syscall +li $v0 10 +syscall +label_253: +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 28 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 13 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +li $t0 13 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_BoolOp: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_and_at_BoolOp: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_254 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -20($fp) - j label_255 - label_254: - lw $t0 0($fp) - sw $t0 -20($fp) - label_255: - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_254 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -20($fp) +j label_255 +label_254: +lw $t0 0($fp) +sw $t0 -20($fp) +label_255: +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_or_at_BoolOp: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_256 - lw $t0 0($fp) - sw $t0 -20($fp) - j label_257 - label_256: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -20($fp) - label_257: - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_256 +lw $t0 0($fp) +sw $t0 -20($fp) +j label_257 +label_256: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -20($fp) +label_257: +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_BoolOp: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 14 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_BoolOp - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 14 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_BoolOp +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index 722b83cb3..e90efe172 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -72,2359 +72,2252 @@ data_34: .asciiz "do nothing" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 - .word data_10 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 +.word data_9 +.word data_10 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype - .word type_10_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_doh_at_Foo - .word function_printh_at_Bazz - .word __init_attr_at_Foo - .word __init_at_Foo +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_doh_at_Foo +.word function_printh_at_Bazz +.word __init_attr_at_Foo +.word __init_at_Foo type_6_prototype: - .word 5 - .word 9 - .word type_6_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 +.word 5 +.word 9 +.word type_6_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_doh_at_Foo - .word function_printh_at_Bazz - .word __init_attr_at_Bar - .word __init_at_Bar +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_doh_at_Foo +.word function_printh_at_Bazz +.word __init_attr_at_Bar +.word __init_at_Bar type_7_prototype: - .word 6 - .word 13 - .word type_7_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 +.word 6 +.word 13 +.word type_7_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_doh_at_Foo - .word function_printh_at_Bazz - .word __init_attr_at_Razz - .word __init_at_Razz +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_doh_at_Foo +.word function_printh_at_Bazz +.word __init_attr_at_Razz +.word __init_at_Razz type_8_prototype: - .word 7 - .word 11 - .word type_8_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 +.word 7 +.word 11 +.word type_8_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_doh_at_Bazz - .word function_printh_at_Bazz - .word __init_attr_at_Bazz - .word __init_at_Bazz +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_doh_at_Bazz +.word function_printh_at_Bazz +.word __init_attr_at_Bazz +.word __init_at_Bazz type_9_prototype: - .word 8 - .word 7 - .word type_9_dispatch - .word 0 - .word 0 - .word 0 - .word -1 +.word 8 +.word 7 +.word type_9_dispatch +.word 0 +.word 0 +.word 0 +.word -1 type_10_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_10_prototype: - .word 9 - .word 8 - .word type_10_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 +.word 9 +.word 8 +.word type_10_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_13 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_11 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_13 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_11 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Foo: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -152 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Bazz - addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -128($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_4: - la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -116($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_5 - la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -116($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_6 - la $t0 types_table - addi $t0 $t0 20 - lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -116($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_7 - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_5: - lw $t0 0($fp) - sw $t0 -112($fp) - lw $t0 -112($fp) - sw $t0 -132($fp) - j label_8 - label_6: - lw $t0 0($fp) - sw $t0 -108($fp) - jal __init_at_Bar - sw $v0 -104($fp) - lw $t0 -104($fp) - sw $t0 -132($fp) - j label_8 - label_7: - lw $t0 0($fp) - sw $t0 -100($fp) - jal __init_at_Razz - sw $v0 -96($fp) - lw $t0 -96($fp) - sw $t0 -132($fp) - j label_8 - label_8: - lw $t0 -132($fp) - sw $t0 -136($fp) - lw $t0 0($fp) - lw $t1 -136($fp) - sw $t1 24($t0) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_10: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_12: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - add $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_14: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - add $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_16: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - add $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - sw $t0 -92($fp) - lw $t0 0($fp) - lw $t1 -92($fp) - sw $t1 28($t0) - lw $v0 0($fp) - addi $sp $sp 152 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -152 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Bazz +addi $sp $sp 4 +sw $v0 -140($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -128($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_4: +la $t0 types_table +addi $t0 $t0 24 +lw $t0 0($t0) +sw $t0 -116($fp) +lw $t0 -116($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_5 +la $t0 types_table +addi $t0 $t0 28 +lw $t0 0($t0) +sw $t0 -116($fp) +lw $t0 -116($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_6 +la $t0 types_table +addi $t0 $t0 20 +lw $t0 0($t0) +sw $t0 -116($fp) +lw $t0 -116($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_7 +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_5: +lw $t0 0($fp) +sw $t0 -112($fp) +lw $t0 -112($fp) +sw $t0 -132($fp) +j label_8 +label_6: +lw $t0 0($fp) +sw $t0 -108($fp) +jal __init_at_Bar +sw $v0 -104($fp) +lw $t0 -104($fp) +sw $t0 -132($fp) +j label_8 +label_7: +lw $t0 0($fp) +sw $t0 -100($fp) +jal __init_at_Razz +sw $v0 -96($fp) +lw $t0 -96($fp) +sw $t0 -132($fp) +j label_8 +label_8: +lw $t0 -132($fp) +sw $t0 -136($fp) +lw $t0 0($fp) +lw $t1 -136($fp) +sw $t1 24($t0) +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_10: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_12: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +add $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_14: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +add $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_16: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +add $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +sw $t0 -92($fp) +lw $t0 0($fp) +lw $t1 -92($fp) +sw $t1 28($t0) +lw $v0 0($fp) +addi $sp $sp 152 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_doh_at_Foo: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -44 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -32($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 -32($fp) - addi $sp $sp 44 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -44 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -32($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 -32($fp) +addi $sp $sp 44 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Foo: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Foo - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -28 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Foo +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 28 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Bar: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -64 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Razz - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_18: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -32($fp) - lw $t0 0($fp) - lw $t1 -32($fp) - sw $t1 40($t0) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_20: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 44($t0) - lw $v0 0($fp) - addi $sp $sp 64 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -64 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Razz +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_18: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -32($fp) +lw $t0 0($fp) +lw $t1 -32($fp) +sw $t1 40($t0) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_20: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 44($t0) +lw $v0 0($fp) +addi $sp $sp 64 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bar: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -44 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Bar - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 44 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -44 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Bar +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 44 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Razz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -176 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Foo - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_22: - la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_23 - la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_24 - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_23: - lw $t0 0($fp) - sw $t0 -128($fp) - lw $t0 -128($fp) - sw $t0 -148($fp) - j label_25 - label_24: - lw $t0 0($fp) - sw $t0 -124($fp) - jal __init_at_Bar - sw $v0 -120($fp) - lw $t0 -120($fp) - sw $t0 -148($fp) - j label_25 - label_25: - lw $t0 -148($fp) - sw $t0 -152($fp) - lw $t0 0($fp) - lw $t1 -152($fp) - sw $t1 32($t0) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_26 - j label_27 - label_26: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_27: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal function_doh_at_Bazz - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_28 - j label_29 - label_28: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_29: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - add $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t4 0($fp) - lw $t4 32($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_30 - j label_31 - label_30: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_31: - lw $t4 0($fp) - lw $t4 32($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 32($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - add $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_32 - j label_33 - label_32: - li $v0 4 - la $a0 data_28 - syscall - li $v0 10 - syscall - label_33: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - add $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_34 - j label_35 - label_34: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_35: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - lw $t1 -104($fp) - add $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -116($fp) - lw $t0 0($fp) - lw $t1 -116($fp) - sw $t1 36($t0) - lw $v0 0($fp) - addi $sp $sp 176 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -176 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Foo +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_21 +j label_22 +label_21: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_22: +la $t0 types_table +addi $t0 $t0 24 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_23 +la $t0 types_table +addi $t0 $t0 28 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -132($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_24 +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_23: +lw $t0 0($fp) +sw $t0 -128($fp) +lw $t0 -128($fp) +sw $t0 -148($fp) +j label_25 +label_24: +lw $t0 0($fp) +sw $t0 -124($fp) +jal __init_at_Bar +sw $v0 -120($fp) +lw $t0 -120($fp) +sw $t0 -148($fp) +j label_25 +label_25: +lw $t0 -148($fp) +sw $t0 -152($fp) +lw $t0 0($fp) +lw $t1 -152($fp) +sw $t1 32($t0) +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_26 +j label_27 +label_26: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_27: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal function_doh_at_Bazz +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_28 +j label_29 +label_28: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_29: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -60($fp) +lw $t1 -56($fp) +add $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t4 0($fp) +lw $t4 32($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_30 +j label_31 +label_30: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_31: +lw $t4 0($fp) +lw $t4 32($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 32($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +add $t0 $t0 $t1 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 -80($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_32 +j label_33 +label_32: +li $v0 4 +la $a0 data_28 +syscall +li $v0 10 +syscall +label_33: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +lw $t0 -92($fp) +lw $t1 -88($fp) +add $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_34 +j label_35 +label_34: +li $v0 4 +la $a0 data_29 +syscall +li $v0 10 +syscall +label_35: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -108($fp) +lw $t1 -104($fp) +add $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 -112($fp) +sw $t0 -116($fp) +lw $t0 0($fp) +lw $t1 -116($fp) +sw $t1 36($t0) +lw $v0 0($fp) +addi $sp $sp 176 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Razz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Razz - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Razz +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Bazz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -84 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -80($fp) - lw $t0 0($fp) - lw $t1 -80($fp) - sw $t1 16($t0) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -64($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_36 - j label_37 - label_36: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_37: - la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -52($fp) - lw $t0 -52($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_38 - la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -52($fp) - lw $t0 -52($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_39 - la $t0 types_table - addi $t0 $t0 20 - lw $t0 0($t0) - sw $t0 -52($fp) - lw $t0 -52($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_40 - la $t0 types_table - addi $t0 $t0 32 - lw $t0 0($t0) - sw $t0 -52($fp) - lw $t0 -52($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_41 - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_38: - lw $t0 0($fp) - sw $t0 -48($fp) - lw $t0 -48($fp) - sw $t0 -68($fp) - j label_42 - label_39: - lw $t0 0($fp) - sw $t0 -44($fp) - jal __init_at_Bar - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -68($fp) - j label_42 - label_40: - lw $t0 0($fp) - sw $t0 -36($fp) - jal __init_at_Razz - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -68($fp) - j label_42 - label_41: - lw $t0 0($fp) - sw $t0 -28($fp) - jal __init_at_Foo - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -68($fp) - j label_42 - label_42: - lw $t0 -68($fp) - sw $t0 -72($fp) - lw $t0 0($fp) - lw $t1 -72($fp) - sw $t1 12($t0) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_44: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 20($t0) - lw $v0 0($fp) - addi $sp $sp 84 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -84 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -80($fp) +lw $t0 0($fp) +lw $t1 -80($fp) +sw $t1 16($t0) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -64($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_36 +j label_37 +label_36: +li $v0 4 +la $a0 data_30 +syscall +li $v0 10 +syscall +label_37: +la $t0 types_table +addi $t0 $t0 24 +lw $t0 0($t0) +sw $t0 -52($fp) +lw $t0 -52($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_38 +la $t0 types_table +addi $t0 $t0 28 +lw $t0 0($t0) +sw $t0 -52($fp) +lw $t0 -52($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_39 +la $t0 types_table +addi $t0 $t0 20 +lw $t0 0($t0) +sw $t0 -52($fp) +lw $t0 -52($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_40 +la $t0 types_table +addi $t0 $t0 32 +lw $t0 0($t0) +sw $t0 -52($fp) +lw $t0 -52($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_41 +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_38: +lw $t0 0($fp) +sw $t0 -48($fp) +lw $t0 -48($fp) +sw $t0 -68($fp) +j label_42 +label_39: +lw $t0 0($fp) +sw $t0 -44($fp) +jal __init_at_Bar +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -68($fp) +j label_42 +label_40: +lw $t0 0($fp) +sw $t0 -36($fp) +jal __init_at_Razz +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -68($fp) +j label_42 +label_41: +lw $t0 0($fp) +sw $t0 -28($fp) +jal __init_at_Foo +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -68($fp) +j label_42 +label_42: +lw $t0 -68($fp) +sw $t0 -72($fp) +lw $t0 0($fp) +lw $t1 -72($fp) +sw $t1 12($t0) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_44: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 20($t0) +lw $v0 0($fp) +addi $sp $sp 84 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_printh_at_Bazz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_45 - j label_46 - label_45: - li $v0 4 - la $a0 data_33 - syscall - li $v0 10 - syscall - label_46: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -16($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_45 +j label_46 +label_45: +li $v0 4 +la $a0 data_33 +syscall +li $v0 10 +syscall +label_46: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -16($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_doh_at_Bazz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -32($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 -32($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -32($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 0($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 -32($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bazz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Bazz - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +li $t0 8 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Bazz +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -48 - jal __init_at_Bazz - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -40($fp) - lw $t0 0($fp) - lw $t1 -40($fp) - sw $t1 12($t0) - jal __init_at_Foo - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -32($fp) - lw $t0 0($fp) - lw $t1 -32($fp) - sw $t1 16($t0) - jal __init_at_Razz - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -24($fp) - lw $t0 0($fp) - lw $t1 -24($fp) - sw $t1 20($t0) - jal __init_at_Bar - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 24($t0) - lw $v0 0($fp) - addi $sp $sp 48 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -48 +jal __init_at_Bazz +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -40($fp) +lw $t0 0($fp) +lw $t1 -40($fp) +sw $t1 12($t0) +jal __init_at_Foo +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -32($fp) +lw $t0 0($fp) +lw $t1 -32($fp) +sw $t1 16($t0) +jal __init_at_Razz +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -24($fp) +lw $t0 0($fp) +lw $t1 -24($fp) +sw $t1 20($t0) +jal __init_at_Bar +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 24($t0) +lw $v0 0($fp) +addi $sp $sp 48 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - la $t0 data_34 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +la $t0 data_34 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 9 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +li $t0 9 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra - - -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index e54f8ffc9..16dc3457d 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -28,1086 +28,979 @@ data_12: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 +.word 5 +.word 4 +.word type_6_dispatch +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_7 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_7 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_10 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_10 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - la $t0 data_11 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +la $t0 data_11 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra - jr $ra - \ No newline at end of file +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index 477159a11..05a2362ad 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -60,1739 +60,1632 @@ data_28: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 - .word data_10 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 +.word data_9 +.word data_10 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype - .word type_10_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype + .word type_10_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_out_a_at_A - .word __init_attr_at_A - .word __init_at_A +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_out_a_at_A +.word __init_attr_at_A +.word __init_at_A type_6_prototype: - .word 5 - .word 5 - .word type_6_dispatch - .word 0 - .word -1 +.word 5 +.word 5 +.word type_6_dispatch +.word 0 +.word -1 type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_out_a_at_A - .word function_out_b_at_B - .word __init_attr_at_B - .word __init_at_B +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_out_a_at_A +.word function_out_b_at_B +.word __init_attr_at_B +.word __init_at_B type_7_prototype: - .word 6 - .word 5 - .word type_7_dispatch - .word 0 - .word -1 +.word 6 +.word 5 +.word type_7_dispatch +.word 0 +.word -1 type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_out_c_at_C - .word __init_attr_at_C - .word __init_at_C +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_out_c_at_C +.word __init_attr_at_C +.word __init_at_C type_8_prototype: - .word 7 - .word 4 - .word type_8_dispatch - .word -1 +.word 7 +.word 4 +.word type_8_dispatch +.word -1 type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_out_c_at_C - .word function_out_d_at_D - .word __init_attr_at_D - .word __init_at_D +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_out_c_at_C +.word function_out_d_at_D +.word __init_attr_at_D +.word __init_at_D type_9_prototype: - .word 8 - .word 4 - .word type_9_dispatch - .word -1 +.word 8 +.word 4 +.word type_9_dispatch +.word -1 type_10_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_10_prototype: - .word 9 - .word 4 - .word type_10_dispatch - .word -1 +.word 9 +.word 4 +.word type_10_dispatch +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_13 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_11 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_13 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_11 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - jal __init_at_IO - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +jal __init_at_IO +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_a_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - la $t0 data_15 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_4: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +la $t0 data_15 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_4: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_A +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_B: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_A +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_b_at_B: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - la $t0 data_17 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_6: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +la $t0 data_17 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_6: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_B: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_B - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_B +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_c_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - la $t0 data_19 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_8: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +la $t0 data_19 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_8: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_C - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_C +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_D: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_C - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_C +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_d_at_D: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - la $t0 data_21 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_10: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +la $t0 data_21 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_10: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_D: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_D - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 8 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_D +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -64 - jal __init_at_A - sw $v0 -72($fp) - lw $t0 -72($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_12: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -64($fp) - jal __init_at_B - sw $v0 -60($fp) - lw $t0 -60($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_14: - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - jal __init_at_C - sw $v0 -48($fp) - lw $t0 -48($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_16: - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -40($fp) - jal __init_at_D - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_18: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - la $t0 data_27 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_28 - syscall - li $v0 10 - syscall - label_20: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 64 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -64 +jal __init_at_A +sw $v0 -72($fp) +lw $t0 -72($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -68($fp) +lw $t0 -68($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_12: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -64($fp) +jal __init_at_B +sw $v0 -60($fp) +lw $t0 -60($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_14: +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +jal __init_at_C +sw $v0 -48($fp) +lw $t0 -48($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_16: +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -40($fp) +jal __init_at_D +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_18: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +la $t0 data_27 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_28 +syscall +li $v0 10 +syscall +label_20: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 64 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 9 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 9 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 828bcd748..756895e64 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -360,11166 +360,11059 @@ data_178: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_board_init_at_Board - .word function_size_of_board_at_Board - .word __init_attr_at_Board - .word __init_at_Board +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_board_init_at_Board +.word function_size_of_board_at_Board +.word __init_attr_at_Board +.word __init_at_Board type_6_prototype: - .word 5 - .word 7 - .word type_6_dispatch - .word 0 - .word 0 - .word 0 - .word -1 +.word 5 +.word 7 +.word type_6_dispatch +.word 0 +.word 0 +.word 0 +.word -1 type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_board_init_at_Board - .word function_size_of_board_at_Board - .word function_cell_at_CellularAutomaton - .word function_cell_at_next_evolution_at_CellularAutomaton - .word function_east_at_CellularAutomaton - .word function_evolve_at_CellularAutomaton - .word function_init_at_CellularAutomaton - .word function_neighbors_at_CellularAutomaton - .word function_north_at_CellularAutomaton - .word function_northeast_at_CellularAutomaton - .word function_northwest_at_CellularAutomaton - .word function_num_cells_at_CellularAutomaton - .word function_option_at_CellularAutomaton - .word function_print_at_CellularAutomaton - .word function_prompt_at_CellularAutomaton - .word function_prompt2_at_CellularAutomaton - .word function_south_at_CellularAutomaton - .word function_southeast_at_CellularAutomaton - .word function_southwest_at_CellularAutomaton - .word function_west_at_CellularAutomaton - .word __init_attr_at_CellularAutomaton - .word __init_at_CellularAutomaton +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_board_init_at_Board +.word function_size_of_board_at_Board +.word function_cell_at_CellularAutomaton +.word function_cell_at_next_evolution_at_CellularAutomaton +.word function_east_at_CellularAutomaton +.word function_evolve_at_CellularAutomaton +.word function_init_at_CellularAutomaton +.word function_neighbors_at_CellularAutomaton +.word function_north_at_CellularAutomaton +.word function_northeast_at_CellularAutomaton +.word function_northwest_at_CellularAutomaton +.word function_num_cells_at_CellularAutomaton +.word function_option_at_CellularAutomaton +.word function_print_at_CellularAutomaton +.word function_prompt_at_CellularAutomaton +.word function_prompt2_at_CellularAutomaton +.word function_south_at_CellularAutomaton +.word function_southeast_at_CellularAutomaton +.word function_southwest_at_CellularAutomaton +.word function_west_at_CellularAutomaton +.word __init_attr_at_CellularAutomaton +.word __init_at_CellularAutomaton type_7_prototype: - .word 6 - .word 8 - .word type_7_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 +.word 6 +.word 8 +.word type_7_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_board_init_at_Board - .word function_size_of_board_at_Board - .word function_cell_at_CellularAutomaton - .word function_cell_at_next_evolution_at_CellularAutomaton - .word function_east_at_CellularAutomaton - .word function_evolve_at_CellularAutomaton - .word function_init_at_CellularAutomaton - .word function_neighbors_at_CellularAutomaton - .word function_north_at_CellularAutomaton - .word function_northeast_at_CellularAutomaton - .word function_northwest_at_CellularAutomaton - .word function_num_cells_at_CellularAutomaton - .word function_option_at_CellularAutomaton - .word function_print_at_CellularAutomaton - .word function_prompt_at_CellularAutomaton - .word function_prompt2_at_CellularAutomaton - .word function_south_at_CellularAutomaton - .word function_southeast_at_CellularAutomaton - .word function_southwest_at_CellularAutomaton - .word function_west_at_CellularAutomaton - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_board_init_at_Board +.word function_size_of_board_at_Board +.word function_cell_at_CellularAutomaton +.word function_cell_at_next_evolution_at_CellularAutomaton +.word function_east_at_CellularAutomaton +.word function_evolve_at_CellularAutomaton +.word function_init_at_CellularAutomaton +.word function_neighbors_at_CellularAutomaton +.word function_north_at_CellularAutomaton +.word function_northeast_at_CellularAutomaton +.word function_northwest_at_CellularAutomaton +.word function_num_cells_at_CellularAutomaton +.word function_option_at_CellularAutomaton +.word function_print_at_CellularAutomaton +.word function_prompt_at_CellularAutomaton +.word function_prompt2_at_CellularAutomaton +.word function_south_at_CellularAutomaton +.word function_southeast_at_CellularAutomaton +.word function_southwest_at_CellularAutomaton +.word function_west_at_CellularAutomaton +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_8_prototype: - .word 7 - .word 9 - .word type_8_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 +.word 7 +.word 9 +.word type_8_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_11 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_11 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Board: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 20($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 16($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +lw $t1 -20($fp) +sw $t1 20($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 16($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_size_of_board_at_Board: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_board_init_at_Board: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -368 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -360($fp) - lw $t0 -360($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_6: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -356($fp) - lw $t0 -356($fp) - sw $t0 -364($fp) - li $t0 15 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -308($fp) - lw $t0 -364($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -332($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -328($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -324($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -320($fp) - lw $t0 -332($fp) - lw $t1 -328($fp) - seq $t0 $t0 $t1 - sw $t0 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_7 - lw $t0 -332($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_8 - lw $t0 -332($fp) - lw $t1 -320($fp) - seq $t0 $t0 $t1 - sw $t0 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_9 - lw $t0 -364($fp) - lw $t1 -308($fp) - seq $t0 $t0 $t1 - sw $t0 -312($fp) - j label_10 - label_7: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -340($fp) - lw $t0 -308($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -340($fp) - lw $t1 -336($fp) - seq $t0 $t0 $t1 - sw $t0 -312($fp) - j label_10 - label_8: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -340($fp) - lw $t0 -308($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -340($fp) - move $a0 $t0 - lw $t0 -336($fp) - move $a1 $t0 - jal equal_str - sw $v0 -312($fp) - j label_10 - label_9: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -340($fp) - lw $t0 -308($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -340($fp) - lw $t1 -336($fp) - seq $t0 $t0 $t1 - sw $t0 -312($fp) - j label_10 - label_10: - lw $t0 -312($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -344($fp) - lw $t0 -344($fp) - lw $t1 12($t0) - sw $t1 -348($fp) - lw $t0 -348($fp) - bne $t0 $zero label_41 - li $t0 16 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -260($fp) - lw $t0 -364($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -284($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -280($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -276($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -272($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - lw $t0 -268($fp) - bne $t0 $zero label_11 - lw $t0 -284($fp) - lw $t1 -276($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - lw $t0 -268($fp) - bne $t0 $zero label_12 - lw $t0 -284($fp) - lw $t1 -272($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - lw $t0 -268($fp) - bne $t0 $zero label_13 - lw $t0 -364($fp) - lw $t1 -260($fp) - seq $t0 $t0 $t1 - sw $t0 -264($fp) - j label_14 - label_11: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -288($fp) - lw $t0 -292($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -264($fp) - j label_14 - label_12: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -288($fp) - lw $t0 -292($fp) - move $a0 $t0 - lw $t0 -288($fp) - move $a1 $t0 - jal equal_str - sw $v0 -264($fp) - j label_14 - label_13: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -288($fp) - lw $t0 -292($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -264($fp) - j label_14 - label_14: - lw $t0 -264($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -296($fp) - lw $t0 -296($fp) - lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -300($fp) - bne $t0 $zero label_39 - li $t0 20 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -212($fp) - lw $t0 -364($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -236($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -232($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -228($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -224($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_15 - lw $t0 -236($fp) - lw $t1 -228($fp) - seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_16 - lw $t0 -236($fp) - lw $t1 -224($fp) - seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_17 - lw $t0 -364($fp) - lw $t1 -212($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - j label_18 - label_15: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - j label_18 - label_16: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - move $a0 $t0 - lw $t0 -240($fp) - move $a1 $t0 - jal equal_str - sw $v0 -216($fp) - j label_18 - label_17: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - j label_18 - label_18: - lw $t0 -216($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -248($fp) - lw $t0 -248($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -252($fp) - bne $t0 $zero label_37 - li $t0 21 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -364($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -188($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -184($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -180($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -176($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - lw $t0 -172($fp) - bne $t0 $zero label_19 - lw $t0 -188($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - lw $t0 -172($fp) - bne $t0 $zero label_20 - lw $t0 -188($fp) - lw $t1 -176($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - lw $t0 -172($fp) - bne $t0 $zero label_21 - lw $t0 -364($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -168($fp) - j label_22 - label_19: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -196($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -168($fp) - j label_22 - label_20: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -196($fp) - move $a0 $t0 - lw $t0 -192($fp) - move $a1 $t0 - jal equal_str - sw $v0 -168($fp) - j label_22 - label_21: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -196($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -168($fp) - j label_22 - label_22: - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -200($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -204($fp) - bne $t0 $zero label_35 - li $t0 25 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -364($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -140($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -132($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -128($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_23 - lw $t0 -140($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_24 - lw $t0 -140($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_25 - lw $t0 -364($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_26 - label_23: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_26 - label_24: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - move $a0 $t0 - lw $t0 -144($fp) - move $a1 $t0 - jal equal_str - sw $v0 -120($fp) - j label_26 - label_25: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_26 - label_26: - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -156($fp) - bne $t0 $zero label_33 - li $t0 28 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -364($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_27 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_28 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_29 - lw $t0 -364($fp) - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_30 - label_27: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_30 - label_28: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_30 - label_29: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_30 - label_30: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_31 - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -112($fp) - j label_32 - label_31: - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -112($fp) - label_32: - lw $t0 -112($fp) - sw $t0 -160($fp) - j label_34 - label_33: - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -160($fp) - label_34: - lw $t0 -160($fp) - sw $t0 -208($fp) - j label_36 - label_35: - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -208($fp) - label_36: - lw $t0 -208($fp) - sw $t0 -256($fp) - j label_38 - label_37: - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -256($fp) - label_38: - lw $t0 -256($fp) - sw $t0 -304($fp) - j label_40 - label_39: - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -304($fp) - label_40: - lw $t0 -304($fp) - sw $t0 -352($fp) - j label_42 - label_41: - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -352($fp) - label_42: - lw $v0 4($fp) - addi $sp $sp 368 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -368 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -360($fp) +lw $t0 -360($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_6: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -356($fp) +lw $t0 -356($fp) +sw $t0 -364($fp) +li $t0 15 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -308($fp) +lw $t0 -364($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -332($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -328($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -324($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -320($fp) +lw $t0 -332($fp) +lw $t1 -328($fp) +seq $t0 $t0 $t1 +sw $t0 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_7 +lw $t0 -332($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_8 +lw $t0 -332($fp) +lw $t1 -320($fp) +seq $t0 $t0 $t1 +sw $t0 -316($fp) +lw $t0 -316($fp) +bne $t0 $zero label_9 +lw $t0 -364($fp) +lw $t1 -308($fp) +seq $t0 $t0 $t1 +sw $t0 -312($fp) +j label_10 +label_7: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -340($fp) +lw $t0 -308($fp) +lw $t1 12($t0) +sw $t1 -336($fp) +lw $t0 -340($fp) +lw $t1 -336($fp) +seq $t0 $t0 $t1 +sw $t0 -312($fp) +j label_10 +label_8: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -340($fp) +lw $t0 -308($fp) +lw $t1 12($t0) +sw $t1 -336($fp) +lw $t0 -340($fp) +move $a0 $t0 +lw $t0 -336($fp) +move $a1 $t0 +jal equal_str +sw $v0 -312($fp) +j label_10 +label_9: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -340($fp) +lw $t0 -308($fp) +lw $t1 12($t0) +sw $t1 -336($fp) +lw $t0 -340($fp) +lw $t1 -336($fp) +seq $t0 $t0 $t1 +sw $t0 -312($fp) +j label_10 +label_10: +lw $t0 -312($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -344($fp) +lw $t0 -344($fp) +lw $t1 12($t0) +sw $t1 -348($fp) +lw $t0 -348($fp) +bne $t0 $zero label_41 +li $t0 16 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -260($fp) +lw $t0 -364($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -284($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -280($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -276($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -272($fp) +lw $t0 -284($fp) +lw $t1 -280($fp) +seq $t0 $t0 $t1 +sw $t0 -268($fp) +lw $t0 -268($fp) +bne $t0 $zero label_11 +lw $t0 -284($fp) +lw $t1 -276($fp) +seq $t0 $t0 $t1 +sw $t0 -268($fp) +lw $t0 -268($fp) +bne $t0 $zero label_12 +lw $t0 -284($fp) +lw $t1 -272($fp) +seq $t0 $t0 $t1 +sw $t0 -268($fp) +lw $t0 -268($fp) +bne $t0 $zero label_13 +lw $t0 -364($fp) +lw $t1 -260($fp) +seq $t0 $t0 $t1 +sw $t0 -264($fp) +j label_14 +label_11: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -260($fp) +lw $t1 12($t0) +sw $t1 -288($fp) +lw $t0 -292($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -264($fp) +j label_14 +label_12: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -260($fp) +lw $t1 12($t0) +sw $t1 -288($fp) +lw $t0 -292($fp) +move $a0 $t0 +lw $t0 -288($fp) +move $a1 $t0 +jal equal_str +sw $v0 -264($fp) +j label_14 +label_13: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -260($fp) +lw $t1 12($t0) +sw $t1 -288($fp) +lw $t0 -292($fp) +lw $t1 -288($fp) +seq $t0 $t0 $t1 +sw $t0 -264($fp) +j label_14 +label_14: +lw $t0 -264($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -296($fp) +lw $t0 -296($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -300($fp) +bne $t0 $zero label_39 +li $t0 20 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -212($fp) +lw $t0 -364($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -236($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -232($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -228($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -224($fp) +lw $t0 -236($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_15 +lw $t0 -236($fp) +lw $t1 -228($fp) +seq $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_16 +lw $t0 -236($fp) +lw $t1 -224($fp) +seq $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_17 +lw $t0 -364($fp) +lw $t1 -212($fp) +seq $t0 $t0 $t1 +sw $t0 -216($fp) +j label_18 +label_15: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -240($fp) +lw $t0 -244($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -216($fp) +j label_18 +label_16: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -240($fp) +lw $t0 -244($fp) +move $a0 $t0 +lw $t0 -240($fp) +move $a1 $t0 +jal equal_str +sw $v0 -216($fp) +j label_18 +label_17: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -240($fp) +lw $t0 -244($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -216($fp) +j label_18 +label_18: +lw $t0 -216($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -248($fp) +lw $t0 -248($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -252($fp) +bne $t0 $zero label_37 +li $t0 21 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -364($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -188($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -184($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -180($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -176($fp) +lw $t0 -188($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +lw $t0 -172($fp) +bne $t0 $zero label_19 +lw $t0 -188($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +lw $t0 -172($fp) +bne $t0 $zero label_20 +lw $t0 -188($fp) +lw $t1 -176($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +lw $t0 -172($fp) +bne $t0 $zero label_21 +lw $t0 -364($fp) +lw $t1 -164($fp) +seq $t0 $t0 $t1 +sw $t0 -168($fp) +j label_22 +label_19: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -196($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -168($fp) +j label_22 +label_20: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -196($fp) +move $a0 $t0 +lw $t0 -192($fp) +move $a1 $t0 +jal equal_str +sw $v0 -168($fp) +j label_22 +label_21: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t0 -196($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -168($fp) +j label_22 +label_22: +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -200($fp) +lw $t0 -200($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -204($fp) +bne $t0 $zero label_35 +li $t0 25 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -364($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -140($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -136($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -128($fp) +lw $t0 -140($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_23 +lw $t0 -140($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_24 +lw $t0 -140($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +lw $t0 -124($fp) +bne $t0 $zero label_25 +lw $t0 -364($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +j label_26 +label_23: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -148($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +j label_26 +label_24: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -148($fp) +move $a0 $t0 +lw $t0 -144($fp) +move $a1 $t0 +jal equal_str +sw $v0 -120($fp) +j label_26 +label_25: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -148($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +j label_26 +label_26: +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -152($fp) +lw $t0 -152($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -156($fp) +bne $t0 $zero label_33 +li $t0 28 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -364($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -92($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -80($fp) +lw $t0 -92($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_27 +lw $t0 -92($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_28 +lw $t0 -92($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_29 +lw $t0 -364($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_30 +label_27: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_30 +label_28: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -96($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_30 +label_29: +lw $t0 -364($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_30 +label_30: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_31 +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -112($fp) +j label_32 +label_31: +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -112($fp) +label_32: +lw $t0 -112($fp) +sw $t0 -160($fp) +j label_34 +label_33: +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -160($fp) +label_34: +lw $t0 -160($fp) +sw $t0 -208($fp) +j label_36 +label_35: +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -208($fp) +label_36: +lw $t0 -208($fp) +sw $t0 -256($fp) +j label_38 +label_37: +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -256($fp) +label_38: +lw $t0 -256($fp) +sw $t0 -304($fp) +j label_40 +label_39: +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -24($fp) +lw $t0 -24($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -304($fp) +label_40: +lw $t0 -304($fp) +sw $t0 -352($fp) +j label_42 +label_41: +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +lw $t1 4($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 4($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $t0 -364($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -352($fp) +label_42: +lw $v0 4($fp) +addi $sp $sp 368 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Board: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Board - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Board +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Board - addi $sp $sp 4 - sw $v0 -16($fp) - la $t0 data_10 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 24($t0) - lw $v0 0($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Board +addi $sp $sp 4 +sw $v0 -16($fp) +la $t0 data_10 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 24($t0) +lw $v0 0($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_init_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 0($fp) - lw $t1 4($fp) - addi $t1 $t1 24 - sw $t0 0($t1) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_44: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 4($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 0($fp) +lw $t1 4($fp) +addi $t1 $t1 24 +sw $t0 0($t1) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_44: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 4($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -128 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - sw $t0 -120($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -112($fp) - la $t0 data_16 - sw $t0 -108($fp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_45 - j label_46 - label_45: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_46: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -96($fp) - label_47: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - slt $t1 $t0 $t1 - sw $t1 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_48 - j label_55 - label_48: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_49 - j label_50 - label_49: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_50: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -68($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_51 - j label_52 - label_51: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_52: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - la $t0 data_20 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_53 - j label_54 - label_53: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_54: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 -36($fp) - lw $t1 -32($fp) - add $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -120($fp) - j label_47 - label_55: - la $t0 data_22 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_56 - j label_57 - label_56: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_57: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 128 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -128 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +sw $t0 -120($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -112($fp) +la $t0 data_16 +sw $t0 -108($fp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_45 +j label_46 +label_45: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_46: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -96($fp) +label_47: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +slt $t1 $t0 $t1 +sw $t1 -76($fp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_48 +j label_55 +label_48: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_49 +j label_50 +label_49: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_50: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -68($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_51 +j label_52 +label_51: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_52: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +la $t0 data_20 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_53 +j label_54 +label_53: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_54: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -36($fp) +lw $t1 -32($fp) +add $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +sw $t0 -120($fp) +j label_47 +label_55: +la $t0 data_22 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_56 +j label_57 +label_56: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_57: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 128 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_num_cells_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_58 - j label_59 - label_58: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_59: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_58 +j label_59 +label_58: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_59: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cell_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -80 - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -44($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - sub $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - slt $t1 $t0 $t1 - sw $t1 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_62 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t4 4($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_60 - j label_61 - label_60: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_61: - lw $t4 4($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -72($fp) - j label_63 - label_62: - la $t0 data_26 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -72($fp) - label_63: - lw $v0 -72($fp) - addi $sp $sp 80 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -80 +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -44($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -44($fp) +lw $t1 -40($fp) +sub $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -60($fp) +lw $t1 -56($fp) +slt $t1 $t0 $t1 +sw $t1 -52($fp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -68($fp) +bne $t0 $zero label_62 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t4 4($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_60 +j label_61 +label_60: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_61: +lw $t4 4($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -72($fp) +j label_63 +label_62: +la $t0 data_26 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -72($fp) +label_63: +lw $v0 -72($fp) +addi $sp $sp 80 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_north_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -92 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - sub $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - slt $t1 $t0 $t1 - sw $t1 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_66 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 -36($fp) - lw $t1 -32($fp) - sub $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_64 - j label_65 - label_64: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_65: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -84($fp) - j label_67 - label_66: - la $t0 data_28 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -84($fp) - label_67: - lw $v0 -84($fp) - addi $sp $sp 92 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -92 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +sub $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 -72($fp) +lw $t1 -68($fp) +slt $t1 $t0 $t1 +sw $t1 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_66 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -36($fp) +lw $t1 -32($fp) +sub $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_64 +j label_65 +label_64: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_65: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -84($fp) +j label_67 +label_66: +la $t0 data_28 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -84($fp) +label_67: +lw $v0 -84($fp) +addi $sp $sp 92 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_south_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -88 - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - add $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - slt $t1 $t0 $t1 - sw $t1 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_70 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 -36($fp) - lw $t1 -32($fp) - add $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_68 - j label_69 - label_68: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_69: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -80($fp) - j label_71 - label_70: - la $t0 data_30 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -80($fp) - label_71: - lw $v0 -80($fp) - addi $sp $sp 88 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -88 +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -68($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +add $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +slt $t1 $t0 $t1 +sw $t1 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_70 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 -36($fp) +lw $t1 -32($fp) +add $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_68 +j label_69 +label_68: +li $v0 4 +la $a0 data_29 +syscall +li $v0 10 +syscall +label_69: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -80($fp) +j label_71 +label_70: +la $t0 data_30 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -80($fp) +label_71: +lw $v0 -80($fp) +addi $sp $sp 88 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_east_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -172 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - add $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -88($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_72 - j label_73 - label_72: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_73: - lw $t0 -100($fp) - lw $t1 -96($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -92($fp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -116($fp) - lw $t1 -112($fp) - mul $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - add $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -120($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_74 - lw $t0 -144($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_75 - lw $t0 -144($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_76 - lw $t0 -120($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_77 - label_74: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_77 - label_75: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - move $a0 $t0 - lw $t0 -148($fp) - move $a1 $t0 - jal equal_str - sw $v0 -124($fp) - j label_77 - label_76: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_77 - label_77: - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_80 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - add $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_78 - j label_79 - label_78: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_79: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -164($fp) - j label_81 - label_80: - la $t0 data_33 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -164($fp) - label_81: - lw $v0 -164($fp) - addi $sp $sp 172 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -172 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +lw $t1 -76($fp) +add $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -88($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_72 +j label_73 +label_72: +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_73: +lw $t0 -100($fp) +lw $t1 -96($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -92($fp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -116($fp) +lw $t1 -112($fp) +mul $t0 $t0 $t1 +sw $t0 -108($fp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -60($fp) +lw $t1 -56($fp) +add $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -120($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -144($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -136($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -132($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_74 +lw $t0 -144($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_75 +lw $t0 -144($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_76 +lw $t0 -120($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_77 +label_74: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_77 +label_75: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +move $a0 $t0 +lw $t0 -148($fp) +move $a1 $t0 +jal equal_str +sw $v0 -124($fp) +j label_77 +label_76: +lw $t0 -120($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -64($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -124($fp) +j label_77 +label_77: +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -160($fp) +bne $t0 $zero label_80 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +lw $t1 -36($fp) +add $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_78 +j label_79 +label_78: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_79: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -164($fp) +j label_81 +label_80: +la $t0 data_33 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -164($fp) +label_81: +lw $v0 -164($fp) +addi $sp $sp 172 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_west_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -188 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -160($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -156($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -152($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -148($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_82 - lw $t0 -160($fp) - lw $t1 -152($fp) - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_83 - lw $t0 -160($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_84 - lw $t0 0($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - j label_85 - label_82: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -168($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - j label_85 - label_83: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -168($fp) - move $a0 $t0 - lw $t0 -164($fp) - move $a1 $t0 - jal equal_str - sw $v0 -140($fp) - j label_85 - label_84: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -168($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - j label_85 - label_85: - lw $t0 -140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -172($fp) - lw $t0 -172($fp) - lw $t1 12($t0) - sw $t1 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_96 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -56($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_86 - j label_87 - label_86: - li $v0 4 - la $a0 data_34 - syscall - li $v0 10 - syscall - label_87: - lw $t0 -68($fp) - lw $t1 -64($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - mul $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -112($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -108($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -104($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -100($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_88 - lw $t0 -112($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_89 - lw $t0 -112($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_90 - lw $t0 -88($fp) - lw $t1 0($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_91 - label_88: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_91 - label_89: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - move $a0 $t0 - lw $t0 -116($fp) - move $a1 $t0 - jal equal_str - sw $v0 -92($fp) - j label_91 - label_90: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_91 - label_91: - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_94 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - sub $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_92 - j label_93 - label_92: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_93: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -132($fp) - j label_95 - label_94: - la $t0 data_36 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -132($fp) - label_95: - lw $t0 -132($fp) - sw $t0 -180($fp) - j label_97 - label_96: - la $t0 data_37 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -180($fp) - label_97: - lw $v0 -180($fp) - addi $sp $sp 188 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -188 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -136($fp) +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -160($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -156($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -152($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -148($fp) +lw $t0 -160($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_82 +lw $t0 -160($fp) +lw $t1 -152($fp) +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_83 +lw $t0 -160($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -144($fp) +lw $t0 -144($fp) +bne $t0 $zero label_84 +lw $t0 0($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +j label_85 +label_82: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -136($fp) +lw $t1 12($t0) +sw $t1 -164($fp) +lw $t0 -168($fp) +lw $t1 -164($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +j label_85 +label_83: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -136($fp) +lw $t1 12($t0) +sw $t1 -164($fp) +lw $t0 -168($fp) +move $a0 $t0 +lw $t0 -164($fp) +move $a1 $t0 +jal equal_str +sw $v0 -140($fp) +j label_85 +label_84: +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -136($fp) +lw $t1 12($t0) +sw $t1 -164($fp) +lw $t0 -168($fp) +lw $t1 -164($fp) +seq $t0 $t0 $t1 +sw $t0 -140($fp) +j label_85 +label_85: +lw $t0 -140($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -172($fp) +lw $t0 -172($fp) +lw $t1 12($t0) +sw $t1 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_96 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -56($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_86 +j label_87 +label_86: +li $v0 4 +la $a0 data_34 +syscall +li $v0 10 +syscall +label_87: +lw $t0 -68($fp) +lw $t1 -64($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +mul $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -112($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -108($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -104($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -100($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_88 +lw $t0 -112($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_89 +lw $t0 -112($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_90 +lw $t0 -88($fp) +lw $t1 0($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_91 +label_88: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -120($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_91 +label_89: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -120($fp) +move $a0 $t0 +lw $t0 -116($fp) +move $a1 $t0 +jal equal_str +sw $v0 -92($fp) +j label_91 +label_90: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -120($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_91 +label_91: +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -124($fp) +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_94 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +sub $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_92 +j label_93 +label_92: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_93: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -132($fp) +j label_95 +label_94: +la $t0 data_36 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -132($fp) +label_95: +lw $t0 -132($fp) +sw $t0 -180($fp) +j label_97 +label_96: +la $t0 data_37 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -180($fp) +label_97: +lw $v0 -180($fp) +addi $sp $sp 188 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_northwest_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -184 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - sub $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -164($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -164($fp) - lw $t1 -160($fp) - slt $t1 $t0 $t1 - sw $t1 -156($fp) - lw $t0 -156($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -172($fp) - bne $t0 $zero label_108 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -56($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_98 - j label_99 - label_98: - li $v0 4 - la $a0 data_38 - syscall - li $v0 10 - syscall - label_99: - lw $t0 -68($fp) - lw $t1 -64($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - mul $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -112($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -108($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -104($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -100($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_100 - lw $t0 -112($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_101 - lw $t0 -112($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_102 - lw $t0 -88($fp) - lw $t1 0($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_103 - label_100: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_103 - label_101: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - move $a0 $t0 - lw $t0 -116($fp) - move $a1 $t0 - jal equal_str - sw $v0 -92($fp) - j label_103 - label_102: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_103 - label_103: - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_106 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - sub $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_104 - j label_105 - label_104: - li $v0 4 - la $a0 data_39 - syscall - li $v0 10 - syscall - label_105: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 60($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -132($fp) - j label_107 - label_106: - la $t0 data_40 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -132($fp) - label_107: - lw $t0 -132($fp) - sw $t0 -176($fp) - j label_109 - label_108: - la $t0 data_41 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -176($fp) - label_109: - lw $v0 -176($fp) - addi $sp $sp 184 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -184 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -148($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -148($fp) +lw $t1 -144($fp) +sub $t0 $t0 $t1 +sw $t0 -140($fp) +lw $t0 -140($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -152($fp) +lw $t0 -152($fp) +lw $t1 12($t0) +sw $t1 -164($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -136($fp) +lw $t0 -136($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -164($fp) +lw $t1 -160($fp) +slt $t1 $t0 $t1 +sw $t1 -156($fp) +lw $t0 -156($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -168($fp) +lw $t0 -168($fp) +lw $t1 12($t0) +sw $t1 -172($fp) +lw $t0 -172($fp) +bne $t0 $zero label_108 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -56($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_98 +j label_99 +label_98: +li $v0 4 +la $a0 data_38 +syscall +li $v0 10 +syscall +label_99: +lw $t0 -68($fp) +lw $t1 -64($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +mul $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -112($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -108($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -104($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -100($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_100 +lw $t0 -112($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_101 +lw $t0 -112($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_102 +lw $t0 -88($fp) +lw $t1 0($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_103 +label_100: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -120($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_103 +label_101: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -120($fp) +move $a0 $t0 +lw $t0 -116($fp) +move $a1 $t0 +jal equal_str +sw $v0 -92($fp) +j label_103 +label_102: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -120($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_103 +label_103: +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -124($fp) +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_106 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +sub $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_104 +j label_105 +label_104: +li $v0 4 +la $a0 data_39 +syscall +li $v0 10 +syscall +label_105: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 60($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -132($fp) +j label_107 +label_106: +la $t0 data_40 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -132($fp) +label_107: +lw $t0 -132($fp) +sw $t0 -176($fp) +j label_109 +label_108: +la $t0 data_41 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -176($fp) +label_109: +lw $v0 -176($fp) +addi $sp $sp 184 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_northeast_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -224 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) - sub $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -192($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -176($fp) - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - slt $t1 $t0 $t1 - sw $t1 -196($fp) - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -208($fp) - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_120 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) - add $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -96($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_110 - j label_111 - label_110: - li $v0 4 - la $a0 data_42 - syscall - li $v0 10 - syscall - label_111: - lw $t0 -108($fp) - lw $t1 -104($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -100($fp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -124($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -124($fp) - lw $t1 -120($fp) - mul $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -128($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - add $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -128($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -152($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -148($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -144($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -140($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_112 - lw $t0 -152($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_113 - lw $t0 -152($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_114 - lw $t0 -128($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_115 - label_112: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_115 - label_113: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - move $a0 $t0 - lw $t0 -156($fp) - move $a1 $t0 - jal equal_str - sw $v0 -132($fp) - j label_115 - label_114: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_115 - label_115: - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_118 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - add $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_116 - j label_117 - label_116: - li $v0 4 - la $a0 data_43 - syscall - li $v0 10 - syscall - label_117: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 60($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -172($fp) - j label_119 - label_118: - la $t0 data_44 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -172($fp) - label_119: - lw $t0 -172($fp) - sw $t0 -216($fp) - j label_121 - label_120: - la $t0 data_45 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -216($fp) - label_121: - lw $v0 -216($fp) - addi $sp $sp 224 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -224 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t0 -188($fp) +lw $t1 -184($fp) +sub $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -192($fp) +lw $t0 -192($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -176($fp) +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -204($fp) +lw $t1 -200($fp) +slt $t1 $t0 $t1 +sw $t1 -196($fp) +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -208($fp) +lw $t0 -208($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -212($fp) +bne $t0 $zero label_120 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -88($fp) +lw $t1 -84($fp) +add $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -96($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_110 +j label_111 +label_110: +li $v0 4 +la $a0 data_42 +syscall +li $v0 10 +syscall +label_111: +lw $t0 -108($fp) +lw $t1 -104($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -100($fp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -124($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 -124($fp) +lw $t1 -120($fp) +mul $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -128($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +add $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -128($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -152($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -148($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -144($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -140($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_112 +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_113 +lw $t0 -152($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_114 +lw $t0 -128($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_115 +label_112: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -160($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_115 +label_113: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -160($fp) +move $a0 $t0 +lw $t0 -156($fp) +move $a1 $t0 +jal equal_str +sw $v0 -132($fp) +j label_115 +label_114: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -160($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_115 +label_115: +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_118 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +add $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_116 +j label_117 +label_116: +li $v0 4 +la $a0 data_43 +syscall +li $v0 10 +syscall +label_117: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 60($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -172($fp) +j label_119 +label_118: +la $t0 data_44 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -172($fp) +label_119: +lw $t0 -172($fp) +sw $t0 -216($fp) +j label_121 +label_120: +la $t0 data_45 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -216($fp) +label_121: +lw $v0 -216($fp) +addi $sp $sp 224 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_southeast_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -220 - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - add $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - slt $t1 $t0 $t1 - sw $t1 -192($fp) - lw $t0 -192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_132 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) - add $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -96($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_122 - j label_123 - label_122: - li $v0 4 - la $a0 data_46 - syscall - li $v0 10 - syscall - label_123: - lw $t0 -108($fp) - lw $t1 -104($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -100($fp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -124($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -124($fp) - lw $t1 -120($fp) - mul $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -128($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - add $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -128($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -152($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -148($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -144($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -140($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_124 - lw $t0 -152($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_125 - lw $t0 -152($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_126 - lw $t0 -128($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_127 - label_124: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_127 - label_125: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - move $a0 $t0 - lw $t0 -156($fp) - move $a1 $t0 - jal equal_str - sw $v0 -132($fp) - j label_127 - label_126: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_127 - label_127: - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_130 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - add $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_128 - j label_129 - label_128: - li $v0 4 - la $a0 data_47 - syscall - li $v0 10 - syscall - label_129: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 92($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -172($fp) - j label_131 - label_130: - la $t0 data_48 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -172($fp) - label_131: - lw $t0 -172($fp) - sw $t0 -212($fp) - j label_133 - label_132: - la $t0 data_49 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -212($fp) - label_133: - lw $v0 -212($fp) - addi $sp $sp 220 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -220 +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -184($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -180($fp) +lw $t0 -184($fp) +lw $t1 -180($fp) +add $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -188($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +lw $t1 -196($fp) +slt $t1 $t0 $t1 +sw $t1 -192($fp) +lw $t0 -192($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -208($fp) +bne $t0 $zero label_132 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -88($fp) +lw $t1 -84($fp) +add $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -104($fp) +lw $t0 -96($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_122 +j label_123 +label_122: +li $v0 4 +la $a0 data_46 +syscall +li $v0 10 +syscall +label_123: +lw $t0 -108($fp) +lw $t1 -104($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -100($fp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -112($fp) +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -124($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 -124($fp) +lw $t1 -120($fp) +mul $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -128($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +add $t0 $t0 $t1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -128($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -152($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -148($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -144($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -140($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_124 +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_125 +lw $t0 -152($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_126 +lw $t0 -128($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_127 +label_124: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -160($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_127 +label_125: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -160($fp) +move $a0 $t0 +lw $t0 -156($fp) +move $a1 $t0 +jal equal_str +sw $v0 -132($fp) +j label_127 +label_126: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -160($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_127 +label_127: +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_130 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +add $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_128 +j label_129 +label_128: +li $v0 4 +la $a0 data_47 +syscall +li $v0 10 +syscall +label_129: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 92($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -172($fp) +j label_131 +label_130: +la $t0 data_48 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -172($fp) +label_131: +lw $t0 -172($fp) +sw $t0 -212($fp) +j label_133 +label_132: +la $t0 data_49 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -212($fp) +label_133: +lw $v0 -212($fp) +addi $sp $sp 220 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_southwest_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -180 - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - add $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - slt $t1 $t0 $t1 - sw $t1 -152($fp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_144 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -56($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_134 - j label_135 - label_134: - li $v0 4 - la $a0 data_50 - syscall - li $v0 10 - syscall - label_135: - lw $t0 -68($fp) - lw $t1 -64($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - mul $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -112($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -108($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -104($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -100($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_136 - lw $t0 -112($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_137 - lw $t0 -112($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_138 - lw $t0 -88($fp) - lw $t1 0($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_139 - label_136: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_139 - label_137: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - move $a0 $t0 - lw $t0 -116($fp) - move $a1 $t0 - jal equal_str - sw $v0 -92($fp) - j label_139 - label_138: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_139 - label_139: - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_142 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - sub $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_140 - j label_141 - label_140: - li $v0 4 - la $a0 data_51 - syscall - li $v0 10 - syscall - label_141: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 92($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -132($fp) - j label_143 - label_142: - la $t0 data_52 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -132($fp) - label_143: - lw $t0 -132($fp) - sw $t0 -172($fp) - j label_145 - label_144: - la $t0 data_53 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -172($fp) - label_145: - lw $v0 -172($fp) - addi $sp $sp 180 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -180 +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +add $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -160($fp) +lw $t1 -156($fp) +slt $t1 $t0 $t1 +sw $t1 -152($fp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_144 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -68($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -56($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_134 +j label_135 +label_134: +li $v0 4 +la $a0 data_50 +syscall +li $v0 10 +syscall +label_135: +lw $t0 -68($fp) +lw $t1 -64($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -84($fp) +lw $t1 -80($fp) +mul $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -112($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -108($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -104($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -100($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_136 +lw $t0 -112($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_137 +lw $t0 -112($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +bne $t0 $zero label_138 +lw $t0 -88($fp) +lw $t1 0($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_139 +label_136: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -120($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_139 +label_137: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -120($fp) +move $a0 $t0 +lw $t0 -116($fp) +move $a1 $t0 +jal equal_str +sw $v0 -92($fp) +j label_139 +label_138: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -116($fp) +lw $t0 -120($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -92($fp) +j label_139 +label_139: +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -124($fp) +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_142 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +sub $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_140 +j label_141 +label_140: +li $v0 4 +la $a0 data_51 +syscall +li $v0 10 +syscall +label_141: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 92($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -132($fp) +j label_143 +label_142: +la $t0 data_52 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -132($fp) +label_143: +lw $t0 -132($fp) +sw $t0 -172($fp) +j label_145 +label_144: +la $t0 data_53 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -172($fp) +label_145: +lw $v0 -172($fp) +addi $sp $sp 180 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_neighbors_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -672 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -508($fp) - lw $t0 -508($fp) - bne $t0 $zero label_146 - j label_147 - label_146: - li $v0 4 - la $a0 data_54 - syscall - li $v0 10 - syscall - label_147: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 60($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -504($fp) - la $t0 data_55 - sw $t0 -500($fp) - lw $t0 -500($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -496($fp) - lw $t0 -504($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -532($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -528($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -524($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -520($fp) - lw $t0 -532($fp) - lw $t1 -528($fp) - seq $t0 $t0 $t1 - sw $t0 -516($fp) - lw $t0 -516($fp) - bne $t0 $zero label_148 - lw $t0 -532($fp) - lw $t1 -524($fp) - seq $t0 $t0 $t1 - sw $t0 -516($fp) - lw $t0 -516($fp) - bne $t0 $zero label_149 - lw $t0 -532($fp) - lw $t1 -520($fp) - seq $t0 $t0 $t1 - sw $t0 -516($fp) - lw $t0 -516($fp) - bne $t0 $zero label_150 - lw $t0 -504($fp) - lw $t1 -496($fp) - seq $t0 $t0 $t1 - sw $t0 -512($fp) - j label_151 - label_148: - lw $t0 -504($fp) - lw $t1 12($t0) - sw $t1 -540($fp) - lw $t0 -496($fp) - lw $t1 12($t0) - sw $t1 -536($fp) - lw $t0 -540($fp) - lw $t1 -536($fp) - seq $t0 $t0 $t1 - sw $t0 -512($fp) - j label_151 - label_149: - lw $t0 -504($fp) - lw $t1 12($t0) - sw $t1 -540($fp) - lw $t0 -496($fp) - lw $t1 12($t0) - sw $t1 -536($fp) - lw $t0 -540($fp) - move $a0 $t0 - lw $t0 -536($fp) - move $a1 $t0 - jal equal_str - sw $v0 -512($fp) - j label_151 - label_150: - lw $t0 -504($fp) - lw $t1 12($t0) - sw $t1 -540($fp) - lw $t0 -496($fp) - lw $t1 12($t0) - sw $t1 -536($fp) - lw $t0 -540($fp) - lw $t1 -536($fp) - seq $t0 $t0 $t1 - sw $t0 -512($fp) - j label_151 - label_151: - lw $t0 -512($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -544($fp) - lw $t0 -544($fp) - lw $t1 12($t0) - sw $t1 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_152 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -492($fp) - lw $t0 -492($fp) - sw $t0 -552($fp) - j label_153 - label_152: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -488($fp) - lw $t0 -488($fp) - sw $t0 -552($fp) - label_153: - lw $t0 -552($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_154 - j label_155 - label_154: - li $v0 4 - la $a0 data_56 - syscall - li $v0 10 - syscall - label_155: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 92($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -436($fp) - la $t0 data_57 - sw $t0 -432($fp) - lw $t0 -432($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 -436($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -464($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -460($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -456($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -452($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_156 - lw $t0 -464($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_157 - lw $t0 -464($fp) - lw $t1 -452($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_158 - lw $t0 -436($fp) - lw $t1 -428($fp) - seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_159 - label_156: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - lw $t1 -468($fp) - seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_159 - label_157: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - move $a0 $t0 - lw $t0 -468($fp) - move $a1 $t0 - jal equal_str - sw $v0 -444($fp) - j label_159 - label_158: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - lw $t1 -468($fp) - seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_159 - label_159: - lw $t0 -444($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -476($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -480($fp) - lw $t0 -480($fp) - bne $t0 $zero label_160 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -424($fp) - lw $t0 -424($fp) - sw $t0 -484($fp) - j label_161 - label_160: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -420($fp) - lw $t0 -420($fp) - sw $t0 -484($fp) - label_161: - lw $t0 -484($fp) - lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) - add $t0 $t0 $t1 - sw $t0 -556($fp) - lw $t0 -556($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -568($fp) - lw $t0 -568($fp) - lw $t1 12($t0) - sw $t1 -580($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -372($fp) - lw $t0 -372($fp) - bne $t0 $zero label_162 - j label_163 - label_162: - li $v0 4 - la $a0 data_58 - syscall - li $v0 10 - syscall - label_163: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -368($fp) - la $t0 data_59 - sw $t0 -364($fp) - lw $t0 -364($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -360($fp) - lw $t0 -368($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -396($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -392($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -388($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -384($fp) - lw $t0 -396($fp) - lw $t1 -392($fp) - seq $t0 $t0 $t1 - sw $t0 -380($fp) - lw $t0 -380($fp) - bne $t0 $zero label_164 - lw $t0 -396($fp) - lw $t1 -388($fp) - seq $t0 $t0 $t1 - sw $t0 -380($fp) - lw $t0 -380($fp) - bne $t0 $zero label_165 - lw $t0 -396($fp) - lw $t1 -384($fp) - seq $t0 $t0 $t1 - sw $t0 -380($fp) - lw $t0 -380($fp) - bne $t0 $zero label_166 - lw $t0 -368($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -376($fp) - j label_167 - label_164: - lw $t0 -368($fp) - lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -360($fp) - lw $t1 12($t0) - sw $t1 -400($fp) - lw $t0 -404($fp) - lw $t1 -400($fp) - seq $t0 $t0 $t1 - sw $t0 -376($fp) - j label_167 - label_165: - lw $t0 -368($fp) - lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -360($fp) - lw $t1 12($t0) - sw $t1 -400($fp) - lw $t0 -404($fp) - move $a0 $t0 - lw $t0 -400($fp) - move $a1 $t0 - jal equal_str - sw $v0 -376($fp) - j label_167 - label_166: - lw $t0 -368($fp) - lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -360($fp) - lw $t1 12($t0) - sw $t1 -400($fp) - lw $t0 -404($fp) - lw $t1 -400($fp) - seq $t0 $t0 $t1 - sw $t0 -376($fp) - j label_167 - label_167: - lw $t0 -376($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -408($fp) - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -412($fp) - bne $t0 $zero label_168 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -356($fp) - lw $t0 -356($fp) - sw $t0 -416($fp) - j label_169 - label_168: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -352($fp) - lw $t0 -352($fp) - sw $t0 -416($fp) - label_169: - lw $t0 -416($fp) - lw $t1 12($t0) - sw $t1 -576($fp) - lw $t0 -580($fp) - lw $t1 -576($fp) - add $t0 $t0 $t1 - sw $t0 -572($fp) - lw $t0 -572($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -584($fp) - lw $t0 -584($fp) - lw $t1 12($t0) - sw $t1 -596($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_170 - j label_171 - label_170: - li $v0 4 - la $a0 data_60 - syscall - li $v0 10 - syscall - label_171: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 104($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -300($fp) - la $t0 data_61 - sw $t0 -296($fp) - lw $t0 -296($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -292($fp) - lw $t0 -300($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -328($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -324($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -320($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -316($fp) - lw $t0 -328($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -312($fp) - lw $t0 -312($fp) - bne $t0 $zero label_172 - lw $t0 -328($fp) - lw $t1 -320($fp) - seq $t0 $t0 $t1 - sw $t0 -312($fp) - lw $t0 -312($fp) - bne $t0 $zero label_173 - lw $t0 -328($fp) - lw $t1 -316($fp) - seq $t0 $t0 $t1 - sw $t0 -312($fp) - lw $t0 -312($fp) - bne $t0 $zero label_174 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - j label_175 - label_172: - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -292($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -336($fp) - lw $t1 -332($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - j label_175 - label_173: - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -292($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -336($fp) - move $a0 $t0 - lw $t0 -332($fp) - move $a1 $t0 - jal equal_str - sw $v0 -308($fp) - j label_175 - label_174: - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -292($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -336($fp) - lw $t1 -332($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - j label_175 - label_175: - lw $t0 -308($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -340($fp) - lw $t0 -340($fp) - lw $t1 12($t0) - sw $t1 -344($fp) - lw $t0 -344($fp) - bne $t0 $zero label_176 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -288($fp) - lw $t0 -288($fp) - sw $t0 -348($fp) - j label_177 - label_176: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -284($fp) - lw $t0 -284($fp) - sw $t0 -348($fp) - label_177: - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -592($fp) - lw $t0 -596($fp) - lw $t1 -592($fp) - add $t0 $t0 $t1 - sw $t0 -588($fp) - lw $t0 -588($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -600($fp) - lw $t0 -600($fp) - lw $t1 12($t0) - sw $t1 -612($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -236($fp) - lw $t0 -236($fp) - bne $t0 $zero label_178 - j label_179 - label_178: - li $v0 4 - la $a0 data_62 - syscall - li $v0 10 - syscall - label_179: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -232($fp) - la $t0 data_63 - sw $t0 -228($fp) - lw $t0 -228($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -224($fp) - lw $t0 -232($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -260($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -256($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -252($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -248($fp) - lw $t0 -260($fp) - lw $t1 -256($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_180 - lw $t0 -260($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_181 - lw $t0 -260($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_182 - lw $t0 -232($fp) - lw $t1 -224($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_183 - label_180: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_183 - label_181: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - move $a0 $t0 - lw $t0 -264($fp) - move $a1 $t0 - jal equal_str - sw $v0 -240($fp) - j label_183 - label_182: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_183 - label_183: - lw $t0 -240($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -276($fp) - bne $t0 $zero label_184 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -220($fp) - lw $t0 -220($fp) - sw $t0 -280($fp) - j label_185 - label_184: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 -216($fp) - sw $t0 -280($fp) - label_185: - lw $t0 -280($fp) - lw $t1 12($t0) - sw $t1 -608($fp) - lw $t0 -612($fp) - lw $t1 -608($fp) - add $t0 $t0 $t1 - sw $t0 -604($fp) - lw $t0 -604($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -616($fp) - lw $t0 -616($fp) - lw $t1 12($t0) - sw $t1 -628($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_186 - j label_187 - label_186: - li $v0 4 - la $a0 data_64 - syscall - li $v0 10 - syscall - label_187: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 68($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -164($fp) - la $t0 data_65 - sw $t0 -160($fp) - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -164($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -192($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -184($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -180($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_188 - lw $t0 -192($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_189 - lw $t0 -192($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_190 - lw $t0 -164($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_191 - label_188: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_191 - label_189: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - move $a0 $t0 - lw $t0 -196($fp) - move $a1 $t0 - jal equal_str - sw $v0 -172($fp) - j label_191 - label_190: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_191 - label_191: - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_192 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - sw $t0 -212($fp) - j label_193 - label_192: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - sw $t0 -212($fp) - label_193: - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -624($fp) - lw $t0 -628($fp) - lw $t1 -624($fp) - add $t0 $t0 $t1 - sw $t0 -620($fp) - lw $t0 -620($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -632($fp) - lw $t0 -632($fp) - lw $t1 12($t0) - sw $t1 -644($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_194 - j label_195 - label_194: - li $v0 4 - la $a0 data_66 - syscall - li $v0 10 - syscall - label_195: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 96($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -96($fp) - la $t0 data_67 - sw $t0 -92($fp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -96($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -124($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -120($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -116($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -112($fp) - lw $t0 -124($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_196 - lw $t0 -124($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_197 - lw $t0 -124($fp) - lw $t1 -112($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_198 - lw $t0 -96($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_199 - label_196: - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_199 - label_197: - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - move $a0 $t0 - lw $t0 -128($fp) - move $a1 $t0 - jal equal_str - sw $v0 -104($fp) - j label_199 - label_198: - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_199 - label_199: - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_200 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -144($fp) - j label_201 - label_200: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -144($fp) - label_201: - lw $t0 -144($fp) - lw $t1 12($t0) - sw $t1 -640($fp) - lw $t0 -644($fp) - lw $t1 -640($fp) - add $t0 $t0 $t1 - sw $t0 -636($fp) - lw $t0 -636($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -648($fp) - lw $t0 -648($fp) - lw $t1 12($t0) - sw $t1 -660($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_202 - j label_203 - label_202: - li $v0 4 - la $a0 data_68 - syscall - li $v0 10 - syscall - label_203: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 100($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - la $t0 data_69 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -28($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -56($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -52($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -48($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -44($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_204 - lw $t0 -56($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_205 - lw $t0 -56($fp) - lw $t1 -44($fp) - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_206 - lw $t0 -28($fp) - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -36($fp) - j label_207 - label_204: - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -36($fp) - j label_207 - label_205: - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - move $a0 $t0 - lw $t0 -60($fp) - move $a1 $t0 - jal equal_str - sw $v0 -36($fp) - j label_207 - label_206: - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -36($fp) - j label_207 - label_207: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_208 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -76($fp) - j label_209 - label_208: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -76($fp) - label_209: - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -656($fp) - lw $t0 -660($fp) - lw $t1 -656($fp) - add $t0 $t0 $t1 - sw $t0 -652($fp) - lw $t0 -652($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -664($fp) - lw $v0 -664($fp) - addi $sp $sp 672 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -672 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -508($fp) +lw $t0 -508($fp) +bne $t0 $zero label_146 +j label_147 +label_146: +li $v0 4 +la $a0 data_54 +syscall +li $v0 10 +syscall +label_147: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 60($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -504($fp) +la $t0 data_55 +sw $t0 -500($fp) +lw $t0 -500($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -496($fp) +lw $t0 -504($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -532($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -528($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -524($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -520($fp) +lw $t0 -532($fp) +lw $t1 -528($fp) +seq $t0 $t0 $t1 +sw $t0 -516($fp) +lw $t0 -516($fp) +bne $t0 $zero label_148 +lw $t0 -532($fp) +lw $t1 -524($fp) +seq $t0 $t0 $t1 +sw $t0 -516($fp) +lw $t0 -516($fp) +bne $t0 $zero label_149 +lw $t0 -532($fp) +lw $t1 -520($fp) +seq $t0 $t0 $t1 +sw $t0 -516($fp) +lw $t0 -516($fp) +bne $t0 $zero label_150 +lw $t0 -504($fp) +lw $t1 -496($fp) +seq $t0 $t0 $t1 +sw $t0 -512($fp) +j label_151 +label_148: +lw $t0 -504($fp) +lw $t1 12($t0) +sw $t1 -540($fp) +lw $t0 -496($fp) +lw $t1 12($t0) +sw $t1 -536($fp) +lw $t0 -540($fp) +lw $t1 -536($fp) +seq $t0 $t0 $t1 +sw $t0 -512($fp) +j label_151 +label_149: +lw $t0 -504($fp) +lw $t1 12($t0) +sw $t1 -540($fp) +lw $t0 -496($fp) +lw $t1 12($t0) +sw $t1 -536($fp) +lw $t0 -540($fp) +move $a0 $t0 +lw $t0 -536($fp) +move $a1 $t0 +jal equal_str +sw $v0 -512($fp) +j label_151 +label_150: +lw $t0 -504($fp) +lw $t1 12($t0) +sw $t1 -540($fp) +lw $t0 -496($fp) +lw $t1 12($t0) +sw $t1 -536($fp) +lw $t0 -540($fp) +lw $t1 -536($fp) +seq $t0 $t0 $t1 +sw $t0 -512($fp) +j label_151 +label_151: +lw $t0 -512($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -544($fp) +lw $t0 -544($fp) +lw $t1 12($t0) +sw $t1 -548($fp) +lw $t0 -548($fp) +bne $t0 $zero label_152 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -492($fp) +lw $t0 -492($fp) +sw $t0 -552($fp) +j label_153 +label_152: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -488($fp) +lw $t0 -488($fp) +sw $t0 -552($fp) +label_153: +lw $t0 -552($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -440($fp) +lw $t0 -440($fp) +bne $t0 $zero label_154 +j label_155 +label_154: +li $v0 4 +la $a0 data_56 +syscall +li $v0 10 +syscall +label_155: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 92($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -436($fp) +la $t0 data_57 +sw $t0 -432($fp) +lw $t0 -432($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -428($fp) +lw $t0 -436($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -464($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -460($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -456($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -452($fp) +lw $t0 -464($fp) +lw $t1 -460($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +lw $t0 -448($fp) +bne $t0 $zero label_156 +lw $t0 -464($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +lw $t0 -448($fp) +bne $t0 $zero label_157 +lw $t0 -464($fp) +lw $t1 -452($fp) +seq $t0 $t0 $t1 +sw $t0 -448($fp) +lw $t0 -448($fp) +bne $t0 $zero label_158 +lw $t0 -436($fp) +lw $t1 -428($fp) +seq $t0 $t0 $t1 +sw $t0 -444($fp) +j label_159 +label_156: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -468($fp) +lw $t0 -472($fp) +lw $t1 -468($fp) +seq $t0 $t0 $t1 +sw $t0 -444($fp) +j label_159 +label_157: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -468($fp) +lw $t0 -472($fp) +move $a0 $t0 +lw $t0 -468($fp) +move $a1 $t0 +jal equal_str +sw $v0 -444($fp) +j label_159 +label_158: +lw $t0 -436($fp) +lw $t1 12($t0) +sw $t1 -472($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -468($fp) +lw $t0 -472($fp) +lw $t1 -468($fp) +seq $t0 $t0 $t1 +sw $t0 -444($fp) +j label_159 +label_159: +lw $t0 -444($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -476($fp) +lw $t0 -476($fp) +lw $t1 12($t0) +sw $t1 -480($fp) +lw $t0 -480($fp) +bne $t0 $zero label_160 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -424($fp) +lw $t0 -424($fp) +sw $t0 -484($fp) +j label_161 +label_160: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -420($fp) +lw $t0 -420($fp) +sw $t0 -484($fp) +label_161: +lw $t0 -484($fp) +lw $t1 12($t0) +sw $t1 -560($fp) +lw $t0 -564($fp) +lw $t1 -560($fp) +add $t0 $t0 $t1 +sw $t0 -556($fp) +lw $t0 -556($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -568($fp) +lw $t0 -568($fp) +lw $t1 12($t0) +sw $t1 -580($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -372($fp) +lw $t0 -372($fp) +bne $t0 $zero label_162 +j label_163 +label_162: +li $v0 4 +la $a0 data_58 +syscall +li $v0 10 +syscall +label_163: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -368($fp) +la $t0 data_59 +sw $t0 -364($fp) +lw $t0 -364($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -360($fp) +lw $t0 -368($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -396($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -392($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -388($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -384($fp) +lw $t0 -396($fp) +lw $t1 -392($fp) +seq $t0 $t0 $t1 +sw $t0 -380($fp) +lw $t0 -380($fp) +bne $t0 $zero label_164 +lw $t0 -396($fp) +lw $t1 -388($fp) +seq $t0 $t0 $t1 +sw $t0 -380($fp) +lw $t0 -380($fp) +bne $t0 $zero label_165 +lw $t0 -396($fp) +lw $t1 -384($fp) +seq $t0 $t0 $t1 +sw $t0 -380($fp) +lw $t0 -380($fp) +bne $t0 $zero label_166 +lw $t0 -368($fp) +lw $t1 -360($fp) +seq $t0 $t0 $t1 +sw $t0 -376($fp) +j label_167 +label_164: +lw $t0 -368($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -360($fp) +lw $t1 12($t0) +sw $t1 -400($fp) +lw $t0 -404($fp) +lw $t1 -400($fp) +seq $t0 $t0 $t1 +sw $t0 -376($fp) +j label_167 +label_165: +lw $t0 -368($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -360($fp) +lw $t1 12($t0) +sw $t1 -400($fp) +lw $t0 -404($fp) +move $a0 $t0 +lw $t0 -400($fp) +move $a1 $t0 +jal equal_str +sw $v0 -376($fp) +j label_167 +label_166: +lw $t0 -368($fp) +lw $t1 12($t0) +sw $t1 -404($fp) +lw $t0 -360($fp) +lw $t1 12($t0) +sw $t1 -400($fp) +lw $t0 -404($fp) +lw $t1 -400($fp) +seq $t0 $t0 $t1 +sw $t0 -376($fp) +j label_167 +label_167: +lw $t0 -376($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -408($fp) +lw $t0 -408($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -412($fp) +bne $t0 $zero label_168 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -356($fp) +lw $t0 -356($fp) +sw $t0 -416($fp) +j label_169 +label_168: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -352($fp) +lw $t0 -352($fp) +sw $t0 -416($fp) +label_169: +lw $t0 -416($fp) +lw $t1 12($t0) +sw $t1 -576($fp) +lw $t0 -580($fp) +lw $t1 -576($fp) +add $t0 $t0 $t1 +sw $t0 -572($fp) +lw $t0 -572($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -584($fp) +lw $t0 -584($fp) +lw $t1 12($t0) +sw $t1 -596($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -304($fp) +lw $t0 -304($fp) +bne $t0 $zero label_170 +j label_171 +label_170: +li $v0 4 +la $a0 data_60 +syscall +li $v0 10 +syscall +label_171: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 104($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -300($fp) +la $t0 data_61 +sw $t0 -296($fp) +lw $t0 -296($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -292($fp) +lw $t0 -300($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -328($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -324($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -320($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -316($fp) +lw $t0 -328($fp) +lw $t1 -324($fp) +seq $t0 $t0 $t1 +sw $t0 -312($fp) +lw $t0 -312($fp) +bne $t0 $zero label_172 +lw $t0 -328($fp) +lw $t1 -320($fp) +seq $t0 $t0 $t1 +sw $t0 -312($fp) +lw $t0 -312($fp) +bne $t0 $zero label_173 +lw $t0 -328($fp) +lw $t1 -316($fp) +seq $t0 $t0 $t1 +sw $t0 -312($fp) +lw $t0 -312($fp) +bne $t0 $zero label_174 +lw $t0 -300($fp) +lw $t1 -292($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +j label_175 +label_172: +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -336($fp) +lw $t0 -292($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -336($fp) +lw $t1 -332($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +j label_175 +label_173: +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -336($fp) +lw $t0 -292($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -336($fp) +move $a0 $t0 +lw $t0 -332($fp) +move $a1 $t0 +jal equal_str +sw $v0 -308($fp) +j label_175 +label_174: +lw $t0 -300($fp) +lw $t1 12($t0) +sw $t1 -336($fp) +lw $t0 -292($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -336($fp) +lw $t1 -332($fp) +seq $t0 $t0 $t1 +sw $t0 -308($fp) +j label_175 +label_175: +lw $t0 -308($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -340($fp) +lw $t0 -340($fp) +lw $t1 12($t0) +sw $t1 -344($fp) +lw $t0 -344($fp) +bne $t0 $zero label_176 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -288($fp) +lw $t0 -288($fp) +sw $t0 -348($fp) +j label_177 +label_176: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -284($fp) +lw $t0 -284($fp) +sw $t0 -348($fp) +label_177: +lw $t0 -348($fp) +lw $t1 12($t0) +sw $t1 -592($fp) +lw $t0 -596($fp) +lw $t1 -592($fp) +add $t0 $t0 $t1 +sw $t0 -588($fp) +lw $t0 -588($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -600($fp) +lw $t0 -600($fp) +lw $t1 12($t0) +sw $t1 -612($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -236($fp) +lw $t0 -236($fp) +bne $t0 $zero label_178 +j label_179 +label_178: +li $v0 4 +la $a0 data_62 +syscall +li $v0 10 +syscall +label_179: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -232($fp) +la $t0 data_63 +sw $t0 -228($fp) +lw $t0 -228($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -224($fp) +lw $t0 -232($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -260($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -256($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -252($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -248($fp) +lw $t0 -260($fp) +lw $t1 -256($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_180 +lw $t0 -260($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_181 +lw $t0 -260($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_182 +lw $t0 -232($fp) +lw $t1 -224($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_183 +label_180: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -224($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +lw $t1 -264($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_183 +label_181: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -224($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +move $a0 $t0 +lw $t0 -264($fp) +move $a1 $t0 +jal equal_str +sw $v0 -240($fp) +j label_183 +label_182: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -224($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +lw $t1 -264($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_183 +label_183: +lw $t0 -240($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -276($fp) +lw $t0 -276($fp) +bne $t0 $zero label_184 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -220($fp) +lw $t0 -220($fp) +sw $t0 -280($fp) +j label_185 +label_184: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 -216($fp) +sw $t0 -280($fp) +label_185: +lw $t0 -280($fp) +lw $t1 12($t0) +sw $t1 -608($fp) +lw $t0 -612($fp) +lw $t1 -608($fp) +add $t0 $t0 $t1 +sw $t0 -604($fp) +lw $t0 -604($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -616($fp) +lw $t0 -616($fp) +lw $t1 12($t0) +sw $t1 -628($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_186 +j label_187 +label_186: +li $v0 4 +la $a0 data_64 +syscall +li $v0 10 +syscall +label_187: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 68($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -164($fp) +la $t0 data_65 +sw $t0 -160($fp) +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -164($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -192($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -188($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -184($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -180($fp) +lw $t0 -192($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_188 +lw $t0 -192($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_189 +lw $t0 -192($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_190 +lw $t0 -164($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_191 +label_188: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_191 +label_189: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +move $a0 $t0 +lw $t0 -196($fp) +move $a1 $t0 +jal equal_str +sw $v0 -172($fp) +j label_191 +label_190: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -156($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_191 +label_191: +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -208($fp) +bne $t0 $zero label_192 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -152($fp) +lw $t0 -152($fp) +sw $t0 -212($fp) +j label_193 +label_192: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +sw $t0 -212($fp) +label_193: +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -624($fp) +lw $t0 -628($fp) +lw $t1 -624($fp) +add $t0 $t0 $t1 +sw $t0 -620($fp) +lw $t0 -620($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -632($fp) +lw $t0 -632($fp) +lw $t1 12($t0) +sw $t1 -644($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_194 +j label_195 +label_194: +li $v0 4 +la $a0 data_66 +syscall +li $v0 10 +syscall +label_195: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 96($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -96($fp) +la $t0 data_67 +sw $t0 -92($fp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -96($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -124($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -120($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -116($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -112($fp) +lw $t0 -124($fp) +lw $t1 -120($fp) +seq $t0 $t0 $t1 +sw $t0 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_196 +lw $t0 -124($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_197 +lw $t0 -124($fp) +lw $t1 -112($fp) +seq $t0 $t0 $t1 +sw $t0 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_198 +lw $t0 -96($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -104($fp) +j label_199 +label_196: +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +lw $t0 -132($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -104($fp) +j label_199 +label_197: +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +lw $t0 -132($fp) +move $a0 $t0 +lw $t0 -128($fp) +move $a1 $t0 +jal equal_str +sw $v0 -104($fp) +j label_199 +label_198: +lw $t0 -96($fp) +lw $t1 12($t0) +sw $t1 -132($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -128($fp) +lw $t0 -132($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -104($fp) +j label_199 +label_199: +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -136($fp) +lw $t0 -136($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -140($fp) +bne $t0 $zero label_200 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -144($fp) +j label_201 +label_200: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 -80($fp) +sw $t0 -144($fp) +label_201: +lw $t0 -144($fp) +lw $t1 12($t0) +sw $t1 -640($fp) +lw $t0 -644($fp) +lw $t1 -640($fp) +add $t0 $t0 $t1 +sw $t0 -636($fp) +lw $t0 -636($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -648($fp) +lw $t0 -648($fp) +lw $t1 12($t0) +sw $t1 -660($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_202 +j label_203 +label_202: +li $v0 4 +la $a0 data_68 +syscall +li $v0 10 +syscall +label_203: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 100($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +la $t0 data_69 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -28($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -56($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -52($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -48($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -44($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_204 +lw $t0 -56($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_205 +lw $t0 -56($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_206 +lw $t0 -28($fp) +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -36($fp) +j label_207 +label_204: +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -64($fp) +lw $t1 -60($fp) +seq $t0 $t0 $t1 +sw $t0 -36($fp) +j label_207 +label_205: +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -64($fp) +move $a0 $t0 +lw $t0 -60($fp) +move $a1 $t0 +jal equal_str +sw $v0 -36($fp) +j label_207 +label_206: +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -64($fp) +lw $t1 -60($fp) +seq $t0 $t0 $t1 +sw $t0 -36($fp) +j label_207 +label_207: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_208 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -76($fp) +j label_209 +label_208: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -76($fp) +label_209: +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -656($fp) +lw $t0 -660($fp) +lw $t1 -656($fp) +add $t0 $t0 $t1 +sw $t0 -652($fp) +lw $t0 -652($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -664($fp) +lw $v0 -664($fp) +addi $sp $sp 672 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cell_at_next_evolution_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -220 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_210 - j label_211 - label_210: - li $v0 4 - la $a0 data_70 - syscall - li $v0 10 - syscall - label_211: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -164($fp) - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -164($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -192($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -184($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -180($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_212 - lw $t0 -192($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_213 - lw $t0 -192($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_214 - lw $t0 -164($fp) - lw $t1 -160($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_215 - label_212: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_215 - label_213: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - move $a0 $t0 - lw $t0 -196($fp) - move $a1 $t0 - jal equal_str - sw $v0 -172($fp) - j label_215 - label_214: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_215 - label_215: - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_232 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_216 - j label_217 - label_216: - li $v0 4 - la $a0 data_71 - syscall - li $v0 10 - syscall - label_217: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -108($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -108($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -136($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -132($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -124($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_218 - lw $t0 -136($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_219 - lw $t0 -136($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_220 - lw $t0 -108($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_221 - label_218: - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_221 - label_219: - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - move $a0 $t0 - lw $t0 -140($fp) - move $a1 $t0 - jal equal_str - sw $v0 -116($fp) - j label_221 - label_220: - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_221 - label_221: - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -152($fp) - bne $t0 $zero label_222 - la $t0 data_72 - sw $t0 -100($fp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - sw $t0 -156($fp) - j label_231 - label_222: - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_223 - j label_224 - label_223: - li $v0 4 - la $a0 data_73 - syscall - li $v0 10 - syscall - label_224: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - la $t0 data_74 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -44($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -72($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -68($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -64($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -60($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_225 - lw $t0 -72($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_226 - lw $t0 -72($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_227 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_228 - label_225: - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_228 - label_226: - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - move $a0 $t0 - lw $t0 -76($fp) - move $a1 $t0 - jal equal_str - sw $v0 -52($fp) - j label_228 - label_227: - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_228 - label_228: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_229 - la $t0 data_75 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -92($fp) - j label_230 - label_229: - la $t0 data_76 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -92($fp) - label_230: - lw $t0 -92($fp) - sw $t0 -156($fp) - label_231: - lw $t0 -156($fp) - sw $t0 -212($fp) - j label_233 - label_232: - la $t0 data_77 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -212($fp) - label_233: - lw $v0 -212($fp) - addi $sp $sp 220 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -220 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_210 +j label_211 +label_210: +li $v0 4 +la $a0 data_70 +syscall +li $v0 10 +syscall +label_211: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -164($fp) +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -160($fp) +lw $t0 -164($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -192($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -188($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -184($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -180($fp) +lw $t0 -192($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_212 +lw $t0 -192($fp) +lw $t1 -184($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_213 +lw $t0 -192($fp) +lw $t1 -180($fp) +seq $t0 $t0 $t1 +sw $t0 -176($fp) +lw $t0 -176($fp) +bne $t0 $zero label_214 +lw $t0 -164($fp) +lw $t1 -160($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_215 +label_212: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_215 +label_213: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +move $a0 $t0 +lw $t0 -196($fp) +move $a1 $t0 +jal equal_str +sw $v0 -172($fp) +j label_215 +label_214: +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -200($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -196($fp) +lw $t0 -200($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -172($fp) +j label_215 +label_215: +lw $t0 -172($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -204($fp) +lw $t0 -204($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -208($fp) +bne $t0 $zero label_232 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -112($fp) +lw $t0 -112($fp) +bne $t0 $zero label_216 +j label_217 +label_216: +li $v0 4 +la $a0 data_71 +syscall +li $v0 10 +syscall +label_217: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -108($fp) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -108($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -136($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -132($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -128($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -124($fp) +lw $t0 -136($fp) +lw $t1 -132($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_218 +lw $t0 -136($fp) +lw $t1 -128($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_219 +lw $t0 -136($fp) +lw $t1 -124($fp) +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_220 +lw $t0 -108($fp) +lw $t1 -104($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_221 +label_218: +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_221 +label_219: +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -144($fp) +move $a0 $t0 +lw $t0 -140($fp) +move $a1 $t0 +jal equal_str +sw $v0 -116($fp) +j label_221 +label_220: +lw $t0 -108($fp) +lw $t1 12($t0) +sw $t1 -144($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -140($fp) +lw $t0 -144($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -116($fp) +j label_221 +label_221: +lw $t0 -116($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -152($fp) +bne $t0 $zero label_222 +la $t0 data_72 +sw $t0 -100($fp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +sw $t0 -156($fp) +j label_231 +label_222: +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_223 +j label_224 +label_223: +li $v0 4 +la $a0 data_73 +syscall +li $v0 10 +syscall +label_224: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 36($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +la $t0 data_74 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -44($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -72($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -68($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -64($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -60($fp) +lw $t0 -72($fp) +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_225 +lw $t0 -72($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_226 +lw $t0 -72($fp) +lw $t1 -60($fp) +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_227 +lw $t0 -44($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_228 +label_225: +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_228 +label_226: +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +move $a0 $t0 +lw $t0 -76($fp) +move $a1 $t0 +jal equal_str +sw $v0 -52($fp) +j label_228 +label_227: +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -80($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -80($fp) +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +j label_228 +label_228: +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_229 +la $t0 data_75 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -92($fp) +j label_230 +label_229: +la $t0 data_76 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -92($fp) +label_230: +lw $t0 -92($fp) +sw $t0 -156($fp) +label_231: +lw $t0 -156($fp) +sw $t0 -212($fp) +j label_233 +label_232: +la $t0 data_77 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -212($fp) +label_233: +lw $v0 -212($fp) +addi $sp $sp 220 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_evolve_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -96 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -88($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_234 - j label_235 - label_234: - li $v0 4 - la $a0 data_78 - syscall - li $v0 10 - syscall - label_235: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 72($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -80($fp) - la $t0 data_10 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - label_236: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -80($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - slt $t1 $t0 $t1 - sw $t1 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_237 - j label_242 - label_237: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_238 - j label_239 - label_238: - li $v0 4 - la $a0 data_79 - syscall - li $v0 10 - syscall - label_239: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_240 - j label_241 - label_240: - li $v0 4 - la $a0 data_80 - syscall - li $v0 10 - syscall - label_241: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -68($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -88($fp) - j label_236 - label_242: - lw $t0 -68($fp) - lw $t1 0($fp) - addi $t1 $t1 24 - sw $t0 0($t1) - lw $v0 0($fp) - addi $sp $sp 96 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -96 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -88($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_234 +j label_235 +label_234: +li $v0 4 +la $a0 data_78 +syscall +li $v0 10 +syscall +label_235: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 72($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -80($fp) +la $t0 data_10 +sw $t0 -68($fp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -68($fp) +label_236: +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -80($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +slt $t1 $t0 $t1 +sw $t1 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_237 +j label_242 +label_237: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_238 +j label_239 +label_238: +li $v0 4 +la $a0 data_79 +syscall +li $v0 10 +syscall +label_239: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -40($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_240 +j label_241 +label_240: +li $v0 4 +la $a0 data_80 +syscall +li $v0 10 +syscall +label_241: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -32($fp) +lw $t0 -32($fp) +sw $t0 -68($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -88($fp) +j label_236 +label_242: +lw $t0 -68($fp) +lw $t1 0($fp) +addi $t1 $t1 24 +sw $t0 0($t1) +lw $v0 0($fp) +addi $sp $sp 96 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_option_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -1596 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -1588($fp) - la $t0 data_81 - sw $t0 -1584($fp) - lw $t0 -1584($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1580($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1576($fp) - lw $t0 -1576($fp) - bne $t0 $zero label_243 - j label_244 - label_243: - li $v0 4 - la $a0 data_82 - syscall - li $v0 10 - syscall - label_244: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1580($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1572($fp) - la $t0 data_83 - sw $t0 -1568($fp) - lw $t0 -1568($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1564($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1560($fp) - lw $t0 -1560($fp) - bne $t0 $zero label_245 - j label_246 - label_245: - li $v0 4 - la $a0 data_84 - syscall - li $v0 10 - syscall - label_246: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1564($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1556($fp) - la $t0 data_85 - sw $t0 -1552($fp) - lw $t0 -1552($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1548($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1544($fp) - lw $t0 -1544($fp) - bne $t0 $zero label_247 - j label_248 - label_247: - li $v0 4 - la $a0 data_86 - syscall - li $v0 10 - syscall - label_248: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1548($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1540($fp) - la $t0 data_87 - sw $t0 -1536($fp) - lw $t0 -1536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1532($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1528($fp) - lw $t0 -1528($fp) - bne $t0 $zero label_249 - j label_250 - label_249: - li $v0 4 - la $a0 data_88 - syscall - li $v0 10 - syscall - label_250: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1532($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1524($fp) - la $t0 data_89 - sw $t0 -1520($fp) - lw $t0 -1520($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1516($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1512($fp) - lw $t0 -1512($fp) - bne $t0 $zero label_251 - j label_252 - label_251: - li $v0 4 - la $a0 data_90 - syscall - li $v0 10 - syscall - label_252: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1516($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1508($fp) - la $t0 data_91 - sw $t0 -1504($fp) - lw $t0 -1504($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1500($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1496($fp) - lw $t0 -1496($fp) - bne $t0 $zero label_253 - j label_254 - label_253: - li $v0 4 - la $a0 data_92 - syscall - li $v0 10 - syscall - label_254: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1500($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1492($fp) - la $t0 data_93 - sw $t0 -1488($fp) - lw $t0 -1488($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1484($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1480($fp) - lw $t0 -1480($fp) - bne $t0 $zero label_255 - j label_256 - label_255: - li $v0 4 - la $a0 data_94 - syscall - li $v0 10 - syscall - label_256: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1484($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1476($fp) - la $t0 data_95 - sw $t0 -1472($fp) - lw $t0 -1472($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1468($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1464($fp) - lw $t0 -1464($fp) - bne $t0 $zero label_257 - j label_258 - label_257: - li $v0 4 - la $a0 data_96 - syscall - li $v0 10 - syscall - label_258: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1468($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1460($fp) - la $t0 data_97 - sw $t0 -1456($fp) - lw $t0 -1456($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1452($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1448($fp) - lw $t0 -1448($fp) - bne $t0 $zero label_259 - j label_260 - label_259: - li $v0 4 - la $a0 data_98 - syscall - li $v0 10 - syscall - label_260: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1452($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1444($fp) - la $t0 data_99 - sw $t0 -1440($fp) - lw $t0 -1440($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1436($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1432($fp) - lw $t0 -1432($fp) - bne $t0 $zero label_261 - j label_262 - label_261: - li $v0 4 - la $a0 data_100 - syscall - li $v0 10 - syscall - label_262: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1436($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1428($fp) - la $t0 data_101 - sw $t0 -1424($fp) - lw $t0 -1424($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1420($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1416($fp) - lw $t0 -1416($fp) - bne $t0 $zero label_263 - j label_264 - label_263: - li $v0 4 - la $a0 data_102 - syscall - li $v0 10 - syscall - label_264: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1420($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1412($fp) - la $t0 data_103 - sw $t0 -1408($fp) - lw $t0 -1408($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1404($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1400($fp) - lw $t0 -1400($fp) - bne $t0 $zero label_265 - j label_266 - label_265: - li $v0 4 - la $a0 data_104 - syscall - li $v0 10 - syscall - label_266: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1404($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1396($fp) - la $t0 data_105 - sw $t0 -1392($fp) - lw $t0 -1392($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1388($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1384($fp) - lw $t0 -1384($fp) - bne $t0 $zero label_267 - j label_268 - label_267: - li $v0 4 - la $a0 data_106 - syscall - li $v0 10 - syscall - label_268: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1388($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1380($fp) - la $t0 data_107 - sw $t0 -1376($fp) - lw $t0 -1376($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1372($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1368($fp) - lw $t0 -1368($fp) - bne $t0 $zero label_269 - j label_270 - label_269: - li $v0 4 - la $a0 data_108 - syscall - li $v0 10 - syscall - label_270: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1372($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1364($fp) - la $t0 data_109 - sw $t0 -1360($fp) - lw $t0 -1360($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1356($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1352($fp) - lw $t0 -1352($fp) - bne $t0 $zero label_271 - j label_272 - label_271: - li $v0 4 - la $a0 data_110 - syscall - li $v0 10 - syscall - label_272: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1356($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1348($fp) - la $t0 data_111 - sw $t0 -1344($fp) - lw $t0 -1344($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1340($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1336($fp) - lw $t0 -1336($fp) - bne $t0 $zero label_273 - j label_274 - label_273: - li $v0 4 - la $a0 data_112 - syscall - li $v0 10 - syscall - label_274: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1340($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1332($fp) - la $t0 data_113 - sw $t0 -1328($fp) - lw $t0 -1328($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1324($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1320($fp) - lw $t0 -1320($fp) - bne $t0 $zero label_275 - j label_276 - label_275: - li $v0 4 - la $a0 data_114 - syscall - li $v0 10 - syscall - label_276: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1324($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1316($fp) - la $t0 data_115 - sw $t0 -1312($fp) - lw $t0 -1312($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1308($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1304($fp) - lw $t0 -1304($fp) - bne $t0 $zero label_277 - j label_278 - label_277: - li $v0 4 - la $a0 data_116 - syscall - li $v0 10 - syscall - label_278: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1308($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1300($fp) - la $t0 data_117 - sw $t0 -1296($fp) - lw $t0 -1296($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1292($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1288($fp) - lw $t0 -1288($fp) - bne $t0 $zero label_279 - j label_280 - label_279: - li $v0 4 - la $a0 data_118 - syscall - li $v0 10 - syscall - label_280: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1292($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1284($fp) - la $t0 data_119 - sw $t0 -1280($fp) - lw $t0 -1280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1276($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1272($fp) - lw $t0 -1272($fp) - bne $t0 $zero label_281 - j label_282 - label_281: - li $v0 4 - la $a0 data_120 - syscall - li $v0 10 - syscall - label_282: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1268($fp) - la $t0 data_121 - sw $t0 -1264($fp) - lw $t0 -1264($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1260($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1256($fp) - lw $t0 -1256($fp) - bne $t0 $zero label_283 - j label_284 - label_283: - li $v0 4 - la $a0 data_122 - syscall - li $v0 10 - syscall - label_284: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1260($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1252($fp) - la $t0 data_123 - sw $t0 -1248($fp) - lw $t0 -1248($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1244($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1240($fp) - lw $t0 -1240($fp) - bne $t0 $zero label_285 - j label_286 - label_285: - li $v0 4 - la $a0 data_124 - syscall - li $v0 10 - syscall - label_286: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1244($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1236($fp) - la $t0 data_125 - sw $t0 -1232($fp) - lw $t0 -1232($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1228($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1224($fp) - lw $t0 -1224($fp) - bne $t0 $zero label_287 - j label_288 - label_287: - li $v0 4 - la $a0 data_126 - syscall - li $v0 10 - syscall - label_288: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1228($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1220($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1216($fp) - lw $t0 -1216($fp) - bne $t0 $zero label_289 - j label_290 - label_289: - li $v0 4 - la $a0 data_127 - syscall - li $v0 10 - syscall - label_290: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -1212($fp) - lw $t0 -1212($fp) - sw $t0 -1588($fp) - la $t0 data_128 - sw $t0 -1208($fp) - lw $t0 -1208($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1204($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1200($fp) - lw $t0 -1200($fp) - bne $t0 $zero label_291 - j label_292 - label_291: - li $v0 4 - la $a0 data_129 - syscall - li $v0 10 - syscall - label_292: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1204($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1196($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -1148($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -1172($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -1168($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -1164($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -1160($fp) - lw $t0 -1172($fp) - lw $t1 -1168($fp) - seq $t0 $t0 $t1 - sw $t0 -1156($fp) - lw $t0 -1156($fp) - bne $t0 $zero label_293 - lw $t0 -1172($fp) - lw $t1 -1164($fp) - seq $t0 $t0 $t1 - sw $t0 -1156($fp) - lw $t0 -1156($fp) - bne $t0 $zero label_294 - lw $t0 -1172($fp) - lw $t1 -1160($fp) - seq $t0 $t0 $t1 - sw $t0 -1156($fp) - lw $t0 -1156($fp) - bne $t0 $zero label_295 - lw $t0 -1588($fp) - lw $t1 -1148($fp) - seq $t0 $t0 $t1 - sw $t0 -1152($fp) - j label_296 - label_293: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1180($fp) - lw $t0 -1148($fp) - lw $t1 12($t0) - sw $t1 -1176($fp) - lw $t0 -1180($fp) - lw $t1 -1176($fp) - seq $t0 $t0 $t1 - sw $t0 -1152($fp) - j label_296 - label_294: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1180($fp) - lw $t0 -1148($fp) - lw $t1 12($t0) - sw $t1 -1176($fp) - lw $t0 -1180($fp) - move $a0 $t0 - lw $t0 -1176($fp) - move $a1 $t0 - jal equal_str - sw $v0 -1152($fp) - j label_296 - label_295: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1180($fp) - lw $t0 -1148($fp) - lw $t1 12($t0) - sw $t1 -1176($fp) - lw $t0 -1180($fp) - lw $t1 -1176($fp) - seq $t0 $t0 $t1 - sw $t0 -1152($fp) - j label_296 - label_296: - lw $t0 -1152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -1184($fp) - lw $t0 -1184($fp) - lw $t1 12($t0) - sw $t1 -1188($fp) - lw $t0 -1188($fp) - bne $t0 $zero label_417 - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -1100($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -1124($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -1120($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -1116($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -1112($fp) - lw $t0 -1124($fp) - lw $t1 -1120($fp) - seq $t0 $t0 $t1 - sw $t0 -1108($fp) - lw $t0 -1108($fp) - bne $t0 $zero label_297 - lw $t0 -1124($fp) - lw $t1 -1116($fp) - seq $t0 $t0 $t1 - sw $t0 -1108($fp) - lw $t0 -1108($fp) - bne $t0 $zero label_298 - lw $t0 -1124($fp) - lw $t1 -1112($fp) - seq $t0 $t0 $t1 - sw $t0 -1108($fp) - lw $t0 -1108($fp) - bne $t0 $zero label_299 - lw $t0 -1588($fp) - lw $t1 -1100($fp) - seq $t0 $t0 $t1 - sw $t0 -1104($fp) - j label_300 - label_297: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1132($fp) - lw $t0 -1100($fp) - lw $t1 12($t0) - sw $t1 -1128($fp) - lw $t0 -1132($fp) - lw $t1 -1128($fp) - seq $t0 $t0 $t1 - sw $t0 -1104($fp) - j label_300 - label_298: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1132($fp) - lw $t0 -1100($fp) - lw $t1 12($t0) - sw $t1 -1128($fp) - lw $t0 -1132($fp) - move $a0 $t0 - lw $t0 -1128($fp) - move $a1 $t0 - jal equal_str - sw $v0 -1104($fp) - j label_300 - label_299: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1132($fp) - lw $t0 -1100($fp) - lw $t1 12($t0) - sw $t1 -1128($fp) - lw $t0 -1132($fp) - lw $t1 -1128($fp) - seq $t0 $t0 $t1 - sw $t0 -1104($fp) - j label_300 - label_300: - lw $t0 -1104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -1136($fp) - lw $t0 -1136($fp) - lw $t1 12($t0) - sw $t1 -1140($fp) - lw $t0 -1140($fp) - bne $t0 $zero label_415 - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -1052($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -1076($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -1072($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -1068($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -1064($fp) - lw $t0 -1076($fp) - lw $t1 -1072($fp) - seq $t0 $t0 $t1 - sw $t0 -1060($fp) - lw $t0 -1060($fp) - bne $t0 $zero label_301 - lw $t0 -1076($fp) - lw $t1 -1068($fp) - seq $t0 $t0 $t1 - sw $t0 -1060($fp) - lw $t0 -1060($fp) - bne $t0 $zero label_302 - lw $t0 -1076($fp) - lw $t1 -1064($fp) - seq $t0 $t0 $t1 - sw $t0 -1060($fp) - lw $t0 -1060($fp) - bne $t0 $zero label_303 - lw $t0 -1588($fp) - lw $t1 -1052($fp) - seq $t0 $t0 $t1 - sw $t0 -1056($fp) - j label_304 - label_301: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1084($fp) - lw $t0 -1052($fp) - lw $t1 12($t0) - sw $t1 -1080($fp) - lw $t0 -1084($fp) - lw $t1 -1080($fp) - seq $t0 $t0 $t1 - sw $t0 -1056($fp) - j label_304 - label_302: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1084($fp) - lw $t0 -1052($fp) - lw $t1 12($t0) - sw $t1 -1080($fp) - lw $t0 -1084($fp) - move $a0 $t0 - lw $t0 -1080($fp) - move $a1 $t0 - jal equal_str - sw $v0 -1056($fp) - j label_304 - label_303: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1084($fp) - lw $t0 -1052($fp) - lw $t1 12($t0) - sw $t1 -1080($fp) - lw $t0 -1084($fp) - lw $t1 -1080($fp) - seq $t0 $t0 $t1 - sw $t0 -1056($fp) - j label_304 - label_304: - lw $t0 -1056($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -1088($fp) - lw $t0 -1088($fp) - lw $t1 12($t0) - sw $t1 -1092($fp) - lw $t0 -1092($fp) - bne $t0 $zero label_413 - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -1004($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -1028($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -1024($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -1020($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -1016($fp) - lw $t0 -1028($fp) - lw $t1 -1024($fp) - seq $t0 $t0 $t1 - sw $t0 -1012($fp) - lw $t0 -1012($fp) - bne $t0 $zero label_305 - lw $t0 -1028($fp) - lw $t1 -1020($fp) - seq $t0 $t0 $t1 - sw $t0 -1012($fp) - lw $t0 -1012($fp) - bne $t0 $zero label_306 - lw $t0 -1028($fp) - lw $t1 -1016($fp) - seq $t0 $t0 $t1 - sw $t0 -1012($fp) - lw $t0 -1012($fp) - bne $t0 $zero label_307 - lw $t0 -1588($fp) - lw $t1 -1004($fp) - seq $t0 $t0 $t1 - sw $t0 -1008($fp) - j label_308 - label_305: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1036($fp) - lw $t0 -1004($fp) - lw $t1 12($t0) - sw $t1 -1032($fp) - lw $t0 -1036($fp) - lw $t1 -1032($fp) - seq $t0 $t0 $t1 - sw $t0 -1008($fp) - j label_308 - label_306: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1036($fp) - lw $t0 -1004($fp) - lw $t1 12($t0) - sw $t1 -1032($fp) - lw $t0 -1036($fp) - move $a0 $t0 - lw $t0 -1032($fp) - move $a1 $t0 - jal equal_str - sw $v0 -1008($fp) - j label_308 - label_307: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1036($fp) - lw $t0 -1004($fp) - lw $t1 12($t0) - sw $t1 -1032($fp) - lw $t0 -1036($fp) - lw $t1 -1032($fp) - seq $t0 $t0 $t1 - sw $t0 -1008($fp) - j label_308 - label_308: - lw $t0 -1008($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -1040($fp) - lw $t0 -1040($fp) - lw $t1 12($t0) - sw $t1 -1044($fp) - lw $t0 -1044($fp) - bne $t0 $zero label_411 - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -956($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -980($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -976($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -972($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -968($fp) - lw $t0 -980($fp) - lw $t1 -976($fp) - seq $t0 $t0 $t1 - sw $t0 -964($fp) - lw $t0 -964($fp) - bne $t0 $zero label_309 - lw $t0 -980($fp) - lw $t1 -972($fp) - seq $t0 $t0 $t1 - sw $t0 -964($fp) - lw $t0 -964($fp) - bne $t0 $zero label_310 - lw $t0 -980($fp) - lw $t1 -968($fp) - seq $t0 $t0 $t1 - sw $t0 -964($fp) - lw $t0 -964($fp) - bne $t0 $zero label_311 - lw $t0 -1588($fp) - lw $t1 -956($fp) - seq $t0 $t0 $t1 - sw $t0 -960($fp) - j label_312 - label_309: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -988($fp) - lw $t0 -956($fp) - lw $t1 12($t0) - sw $t1 -984($fp) - lw $t0 -988($fp) - lw $t1 -984($fp) - seq $t0 $t0 $t1 - sw $t0 -960($fp) - j label_312 - label_310: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -988($fp) - lw $t0 -956($fp) - lw $t1 12($t0) - sw $t1 -984($fp) - lw $t0 -988($fp) - move $a0 $t0 - lw $t0 -984($fp) - move $a1 $t0 - jal equal_str - sw $v0 -960($fp) - j label_312 - label_311: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -988($fp) - lw $t0 -956($fp) - lw $t1 12($t0) - sw $t1 -984($fp) - lw $t0 -988($fp) - lw $t1 -984($fp) - seq $t0 $t0 $t1 - sw $t0 -960($fp) - j label_312 - label_312: - lw $t0 -960($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -992($fp) - lw $t0 -992($fp) - lw $t1 12($t0) - sw $t1 -996($fp) - lw $t0 -996($fp) - bne $t0 $zero label_409 - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -908($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -932($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -928($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -924($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -920($fp) - lw $t0 -932($fp) - lw $t1 -928($fp) - seq $t0 $t0 $t1 - sw $t0 -916($fp) - lw $t0 -916($fp) - bne $t0 $zero label_313 - lw $t0 -932($fp) - lw $t1 -924($fp) - seq $t0 $t0 $t1 - sw $t0 -916($fp) - lw $t0 -916($fp) - bne $t0 $zero label_314 - lw $t0 -932($fp) - lw $t1 -920($fp) - seq $t0 $t0 $t1 - sw $t0 -916($fp) - lw $t0 -916($fp) - bne $t0 $zero label_315 - lw $t0 -1588($fp) - lw $t1 -908($fp) - seq $t0 $t0 $t1 - sw $t0 -912($fp) - j label_316 - label_313: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -940($fp) - lw $t0 -908($fp) - lw $t1 12($t0) - sw $t1 -936($fp) - lw $t0 -940($fp) - lw $t1 -936($fp) - seq $t0 $t0 $t1 - sw $t0 -912($fp) - j label_316 - label_314: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -940($fp) - lw $t0 -908($fp) - lw $t1 12($t0) - sw $t1 -936($fp) - lw $t0 -940($fp) - move $a0 $t0 - lw $t0 -936($fp) - move $a1 $t0 - jal equal_str - sw $v0 -912($fp) - j label_316 - label_315: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -940($fp) - lw $t0 -908($fp) - lw $t1 12($t0) - sw $t1 -936($fp) - lw $t0 -940($fp) - lw $t1 -936($fp) - seq $t0 $t0 $t1 - sw $t0 -912($fp) - j label_316 - label_316: - lw $t0 -912($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -944($fp) - lw $t0 -944($fp) - lw $t1 12($t0) - sw $t1 -948($fp) - lw $t0 -948($fp) - bne $t0 $zero label_407 - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -860($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -884($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -880($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -876($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -872($fp) - lw $t0 -884($fp) - lw $t1 -880($fp) - seq $t0 $t0 $t1 - sw $t0 -868($fp) - lw $t0 -868($fp) - bne $t0 $zero label_317 - lw $t0 -884($fp) - lw $t1 -876($fp) - seq $t0 $t0 $t1 - sw $t0 -868($fp) - lw $t0 -868($fp) - bne $t0 $zero label_318 - lw $t0 -884($fp) - lw $t1 -872($fp) - seq $t0 $t0 $t1 - sw $t0 -868($fp) - lw $t0 -868($fp) - bne $t0 $zero label_319 - lw $t0 -1588($fp) - lw $t1 -860($fp) - seq $t0 $t0 $t1 - sw $t0 -864($fp) - j label_320 - label_317: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -892($fp) - lw $t0 -860($fp) - lw $t1 12($t0) - sw $t1 -888($fp) - lw $t0 -892($fp) - lw $t1 -888($fp) - seq $t0 $t0 $t1 - sw $t0 -864($fp) - j label_320 - label_318: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -892($fp) - lw $t0 -860($fp) - lw $t1 12($t0) - sw $t1 -888($fp) - lw $t0 -892($fp) - move $a0 $t0 - lw $t0 -888($fp) - move $a1 $t0 - jal equal_str - sw $v0 -864($fp) - j label_320 - label_319: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -892($fp) - lw $t0 -860($fp) - lw $t1 12($t0) - sw $t1 -888($fp) - lw $t0 -892($fp) - lw $t1 -888($fp) - seq $t0 $t0 $t1 - sw $t0 -864($fp) - j label_320 - label_320: - lw $t0 -864($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -896($fp) - lw $t0 -896($fp) - lw $t1 12($t0) - sw $t1 -900($fp) - lw $t0 -900($fp) - bne $t0 $zero label_405 - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -812($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -836($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -832($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -828($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -824($fp) - lw $t0 -836($fp) - lw $t1 -832($fp) - seq $t0 $t0 $t1 - sw $t0 -820($fp) - lw $t0 -820($fp) - bne $t0 $zero label_321 - lw $t0 -836($fp) - lw $t1 -828($fp) - seq $t0 $t0 $t1 - sw $t0 -820($fp) - lw $t0 -820($fp) - bne $t0 $zero label_322 - lw $t0 -836($fp) - lw $t1 -824($fp) - seq $t0 $t0 $t1 - sw $t0 -820($fp) - lw $t0 -820($fp) - bne $t0 $zero label_323 - lw $t0 -1588($fp) - lw $t1 -812($fp) - seq $t0 $t0 $t1 - sw $t0 -816($fp) - j label_324 - label_321: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -844($fp) - lw $t0 -812($fp) - lw $t1 12($t0) - sw $t1 -840($fp) - lw $t0 -844($fp) - lw $t1 -840($fp) - seq $t0 $t0 $t1 - sw $t0 -816($fp) - j label_324 - label_322: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -844($fp) - lw $t0 -812($fp) - lw $t1 12($t0) - sw $t1 -840($fp) - lw $t0 -844($fp) - move $a0 $t0 - lw $t0 -840($fp) - move $a1 $t0 - jal equal_str - sw $v0 -816($fp) - j label_324 - label_323: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -844($fp) - lw $t0 -812($fp) - lw $t1 12($t0) - sw $t1 -840($fp) - lw $t0 -844($fp) - lw $t1 -840($fp) - seq $t0 $t0 $t1 - sw $t0 -816($fp) - j label_324 - label_324: - lw $t0 -816($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -848($fp) - lw $t0 -848($fp) - lw $t1 12($t0) - sw $t1 -852($fp) - lw $t0 -852($fp) - bne $t0 $zero label_403 - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -764($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -788($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -784($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -780($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -776($fp) - lw $t0 -788($fp) - lw $t1 -784($fp) - seq $t0 $t0 $t1 - sw $t0 -772($fp) - lw $t0 -772($fp) - bne $t0 $zero label_325 - lw $t0 -788($fp) - lw $t1 -780($fp) - seq $t0 $t0 $t1 - sw $t0 -772($fp) - lw $t0 -772($fp) - bne $t0 $zero label_326 - lw $t0 -788($fp) - lw $t1 -776($fp) - seq $t0 $t0 $t1 - sw $t0 -772($fp) - lw $t0 -772($fp) - bne $t0 $zero label_327 - lw $t0 -1588($fp) - lw $t1 -764($fp) - seq $t0 $t0 $t1 - sw $t0 -768($fp) - j label_328 - label_325: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -796($fp) - lw $t0 -764($fp) - lw $t1 12($t0) - sw $t1 -792($fp) - lw $t0 -796($fp) - lw $t1 -792($fp) - seq $t0 $t0 $t1 - sw $t0 -768($fp) - j label_328 - label_326: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -796($fp) - lw $t0 -764($fp) - lw $t1 12($t0) - sw $t1 -792($fp) - lw $t0 -796($fp) - move $a0 $t0 - lw $t0 -792($fp) - move $a1 $t0 - jal equal_str - sw $v0 -768($fp) - j label_328 - label_327: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -796($fp) - lw $t0 -764($fp) - lw $t1 12($t0) - sw $t1 -792($fp) - lw $t0 -796($fp) - lw $t1 -792($fp) - seq $t0 $t0 $t1 - sw $t0 -768($fp) - j label_328 - label_328: - lw $t0 -768($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -800($fp) - lw $t0 -800($fp) - lw $t1 12($t0) - sw $t1 -804($fp) - lw $t0 -804($fp) - bne $t0 $zero label_401 - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -716($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -740($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -736($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -732($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -728($fp) - lw $t0 -740($fp) - lw $t1 -736($fp) - seq $t0 $t0 $t1 - sw $t0 -724($fp) - lw $t0 -724($fp) - bne $t0 $zero label_329 - lw $t0 -740($fp) - lw $t1 -732($fp) - seq $t0 $t0 $t1 - sw $t0 -724($fp) - lw $t0 -724($fp) - bne $t0 $zero label_330 - lw $t0 -740($fp) - lw $t1 -728($fp) - seq $t0 $t0 $t1 - sw $t0 -724($fp) - lw $t0 -724($fp) - bne $t0 $zero label_331 - lw $t0 -1588($fp) - lw $t1 -716($fp) - seq $t0 $t0 $t1 - sw $t0 -720($fp) - j label_332 - label_329: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -748($fp) - lw $t0 -716($fp) - lw $t1 12($t0) - sw $t1 -744($fp) - lw $t0 -748($fp) - lw $t1 -744($fp) - seq $t0 $t0 $t1 - sw $t0 -720($fp) - j label_332 - label_330: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -748($fp) - lw $t0 -716($fp) - lw $t1 12($t0) - sw $t1 -744($fp) - lw $t0 -748($fp) - move $a0 $t0 - lw $t0 -744($fp) - move $a1 $t0 - jal equal_str - sw $v0 -720($fp) - j label_332 - label_331: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -748($fp) - lw $t0 -716($fp) - lw $t1 12($t0) - sw $t1 -744($fp) - lw $t0 -748($fp) - lw $t1 -744($fp) - seq $t0 $t0 $t1 - sw $t0 -720($fp) - j label_332 - label_332: - lw $t0 -720($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -752($fp) - lw $t0 -752($fp) - lw $t1 12($t0) - sw $t1 -756($fp) - lw $t0 -756($fp) - bne $t0 $zero label_399 - li $t0 11 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -668($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -692($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -688($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -684($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -680($fp) - lw $t0 -692($fp) - lw $t1 -688($fp) - seq $t0 $t0 $t1 - sw $t0 -676($fp) - lw $t0 -676($fp) - bne $t0 $zero label_333 - lw $t0 -692($fp) - lw $t1 -684($fp) - seq $t0 $t0 $t1 - sw $t0 -676($fp) - lw $t0 -676($fp) - bne $t0 $zero label_334 - lw $t0 -692($fp) - lw $t1 -680($fp) - seq $t0 $t0 $t1 - sw $t0 -676($fp) - lw $t0 -676($fp) - bne $t0 $zero label_335 - lw $t0 -1588($fp) - lw $t1 -668($fp) - seq $t0 $t0 $t1 - sw $t0 -672($fp) - j label_336 - label_333: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -700($fp) - lw $t0 -668($fp) - lw $t1 12($t0) - sw $t1 -696($fp) - lw $t0 -700($fp) - lw $t1 -696($fp) - seq $t0 $t0 $t1 - sw $t0 -672($fp) - j label_336 - label_334: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -700($fp) - lw $t0 -668($fp) - lw $t1 12($t0) - sw $t1 -696($fp) - lw $t0 -700($fp) - move $a0 $t0 - lw $t0 -696($fp) - move $a1 $t0 - jal equal_str - sw $v0 -672($fp) - j label_336 - label_335: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -700($fp) - lw $t0 -668($fp) - lw $t1 12($t0) - sw $t1 -696($fp) - lw $t0 -700($fp) - lw $t1 -696($fp) - seq $t0 $t0 $t1 - sw $t0 -672($fp) - j label_336 - label_336: - lw $t0 -672($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -704($fp) - lw $t0 -704($fp) - lw $t1 12($t0) - sw $t1 -708($fp) - lw $t0 -708($fp) - bne $t0 $zero label_397 - li $t0 12 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -620($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -644($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -640($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -636($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -632($fp) - lw $t0 -644($fp) - lw $t1 -640($fp) - seq $t0 $t0 $t1 - sw $t0 -628($fp) - lw $t0 -628($fp) - bne $t0 $zero label_337 - lw $t0 -644($fp) - lw $t1 -636($fp) - seq $t0 $t0 $t1 - sw $t0 -628($fp) - lw $t0 -628($fp) - bne $t0 $zero label_338 - lw $t0 -644($fp) - lw $t1 -632($fp) - seq $t0 $t0 $t1 - sw $t0 -628($fp) - lw $t0 -628($fp) - bne $t0 $zero label_339 - lw $t0 -1588($fp) - lw $t1 -620($fp) - seq $t0 $t0 $t1 - sw $t0 -624($fp) - j label_340 - label_337: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -652($fp) - lw $t0 -620($fp) - lw $t1 12($t0) - sw $t1 -648($fp) - lw $t0 -652($fp) - lw $t1 -648($fp) - seq $t0 $t0 $t1 - sw $t0 -624($fp) - j label_340 - label_338: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -652($fp) - lw $t0 -620($fp) - lw $t1 12($t0) - sw $t1 -648($fp) - lw $t0 -652($fp) - move $a0 $t0 - lw $t0 -648($fp) - move $a1 $t0 - jal equal_str - sw $v0 -624($fp) - j label_340 - label_339: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -652($fp) - lw $t0 -620($fp) - lw $t1 12($t0) - sw $t1 -648($fp) - lw $t0 -652($fp) - lw $t1 -648($fp) - seq $t0 $t0 $t1 - sw $t0 -624($fp) - j label_340 - label_340: - lw $t0 -624($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -656($fp) - lw $t0 -656($fp) - lw $t1 12($t0) - sw $t1 -660($fp) - lw $t0 -660($fp) - bne $t0 $zero label_395 - li $t0 13 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -572($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -596($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -592($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -588($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -584($fp) - lw $t0 -596($fp) - lw $t1 -592($fp) - seq $t0 $t0 $t1 - sw $t0 -580($fp) - lw $t0 -580($fp) - bne $t0 $zero label_341 - lw $t0 -596($fp) - lw $t1 -588($fp) - seq $t0 $t0 $t1 - sw $t0 -580($fp) - lw $t0 -580($fp) - bne $t0 $zero label_342 - lw $t0 -596($fp) - lw $t1 -584($fp) - seq $t0 $t0 $t1 - sw $t0 -580($fp) - lw $t0 -580($fp) - bne $t0 $zero label_343 - lw $t0 -1588($fp) - lw $t1 -572($fp) - seq $t0 $t0 $t1 - sw $t0 -576($fp) - j label_344 - label_341: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -604($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -600($fp) - lw $t0 -604($fp) - lw $t1 -600($fp) - seq $t0 $t0 $t1 - sw $t0 -576($fp) - j label_344 - label_342: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -604($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -600($fp) - lw $t0 -604($fp) - move $a0 $t0 - lw $t0 -600($fp) - move $a1 $t0 - jal equal_str - sw $v0 -576($fp) - j label_344 - label_343: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -604($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -600($fp) - lw $t0 -604($fp) - lw $t1 -600($fp) - seq $t0 $t0 $t1 - sw $t0 -576($fp) - j label_344 - label_344: - lw $t0 -576($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -608($fp) - lw $t0 -608($fp) - lw $t1 12($t0) - sw $t1 -612($fp) - lw $t0 -612($fp) - bne $t0 $zero label_393 - li $t0 14 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -524($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -548($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -544($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -540($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -536($fp) - lw $t0 -548($fp) - lw $t1 -544($fp) - seq $t0 $t0 $t1 - sw $t0 -532($fp) - lw $t0 -532($fp) - bne $t0 $zero label_345 - lw $t0 -548($fp) - lw $t1 -540($fp) - seq $t0 $t0 $t1 - sw $t0 -532($fp) - lw $t0 -532($fp) - bne $t0 $zero label_346 - lw $t0 -548($fp) - lw $t1 -536($fp) - seq $t0 $t0 $t1 - sw $t0 -532($fp) - lw $t0 -532($fp) - bne $t0 $zero label_347 - lw $t0 -1588($fp) - lw $t1 -524($fp) - seq $t0 $t0 $t1 - sw $t0 -528($fp) - j label_348 - label_345: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -556($fp) - lw $t0 -524($fp) - lw $t1 12($t0) - sw $t1 -552($fp) - lw $t0 -556($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -528($fp) - j label_348 - label_346: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -556($fp) - lw $t0 -524($fp) - lw $t1 12($t0) - sw $t1 -552($fp) - lw $t0 -556($fp) - move $a0 $t0 - lw $t0 -552($fp) - move $a1 $t0 - jal equal_str - sw $v0 -528($fp) - j label_348 - label_347: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -556($fp) - lw $t0 -524($fp) - lw $t1 12($t0) - sw $t1 -552($fp) - lw $t0 -556($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -528($fp) - j label_348 - label_348: - lw $t0 -528($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -560($fp) - lw $t0 -560($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -564($fp) - bne $t0 $zero label_391 - li $t0 15 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -476($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -500($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -496($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -492($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -488($fp) - lw $t0 -500($fp) - lw $t1 -496($fp) - seq $t0 $t0 $t1 - sw $t0 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_349 - lw $t0 -500($fp) - lw $t1 -492($fp) - seq $t0 $t0 $t1 - sw $t0 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_350 - lw $t0 -500($fp) - lw $t1 -488($fp) - seq $t0 $t0 $t1 - sw $t0 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_351 - lw $t0 -1588($fp) - lw $t1 -476($fp) - seq $t0 $t0 $t1 - sw $t0 -480($fp) - j label_352 - label_349: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -504($fp) - lw $t0 -508($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -480($fp) - j label_352 - label_350: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -504($fp) - lw $t0 -508($fp) - move $a0 $t0 - lw $t0 -504($fp) - move $a1 $t0 - jal equal_str - sw $v0 -480($fp) - j label_352 - label_351: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -504($fp) - lw $t0 -508($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -480($fp) - j label_352 - label_352: - lw $t0 -480($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -512($fp) - lw $t0 -512($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -516($fp) - bne $t0 $zero label_389 - li $t0 16 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -452($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -448($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -444($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -440($fp) - lw $t0 -452($fp) - lw $t1 -448($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_353 - lw $t0 -452($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_354 - lw $t0 -452($fp) - lw $t1 -440($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_355 - lw $t0 -1588($fp) - lw $t1 -428($fp) - seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_356 - label_353: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_356 - label_354: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - move $a0 $t0 - lw $t0 -456($fp) - move $a1 $t0 - jal equal_str - sw $v0 -432($fp) - j label_356 - label_355: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_356 - label_356: - lw $t0 -432($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -464($fp) - lw $t0 -464($fp) - lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -468($fp) - bne $t0 $zero label_387 - li $t0 17 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -380($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -404($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -400($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -396($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -392($fp) - lw $t0 -404($fp) - lw $t1 -400($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_357 - lw $t0 -404($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_358 - lw $t0 -404($fp) - lw $t1 -392($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_359 - lw $t0 -1588($fp) - lw $t1 -380($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_360 - label_357: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -380($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_360 - label_358: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -380($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - move $a0 $t0 - lw $t0 -408($fp) - move $a1 $t0 - jal equal_str - sw $v0 -384($fp) - j label_360 - label_359: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -380($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_360 - label_360: - lw $t0 -384($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -416($fp) - lw $t0 -416($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -420($fp) - bne $t0 $zero label_385 - li $t0 18 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -332($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -356($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -352($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -348($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -344($fp) - lw $t0 -356($fp) - lw $t1 -352($fp) - seq $t0 $t0 $t1 - sw $t0 -340($fp) - lw $t0 -340($fp) - bne $t0 $zero label_361 - lw $t0 -356($fp) - lw $t1 -348($fp) - seq $t0 $t0 $t1 - sw $t0 -340($fp) - lw $t0 -340($fp) - bne $t0 $zero label_362 - lw $t0 -356($fp) - lw $t1 -344($fp) - seq $t0 $t0 $t1 - sw $t0 -340($fp) - lw $t0 -340($fp) - bne $t0 $zero label_363 - lw $t0 -1588($fp) - lw $t1 -332($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - j label_364 - label_361: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -364($fp) - lw $t0 -332($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -364($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - j label_364 - label_362: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -364($fp) - lw $t0 -332($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -364($fp) - move $a0 $t0 - lw $t0 -360($fp) - move $a1 $t0 - jal equal_str - sw $v0 -336($fp) - j label_364 - label_363: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -364($fp) - lw $t0 -332($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -364($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - j label_364 - label_364: - lw $t0 -336($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -368($fp) - lw $t0 -368($fp) - lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -372($fp) - bne $t0 $zero label_383 - li $t0 19 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -284($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -308($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -304($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -300($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -296($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_365 - lw $t0 -308($fp) - lw $t1 -300($fp) - seq $t0 $t0 $t1 - sw $t0 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_366 - lw $t0 -308($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_367 - lw $t0 -1588($fp) - lw $t1 -284($fp) - seq $t0 $t0 $t1 - sw $t0 -288($fp) - j label_368 - label_365: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -284($fp) - lw $t1 12($t0) - sw $t1 -312($fp) - lw $t0 -316($fp) - lw $t1 -312($fp) - seq $t0 $t0 $t1 - sw $t0 -288($fp) - j label_368 - label_366: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -284($fp) - lw $t1 12($t0) - sw $t1 -312($fp) - lw $t0 -316($fp) - move $a0 $t0 - lw $t0 -312($fp) - move $a1 $t0 - jal equal_str - sw $v0 -288($fp) - j label_368 - label_367: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -284($fp) - lw $t1 12($t0) - sw $t1 -312($fp) - lw $t0 -316($fp) - lw $t1 -312($fp) - seq $t0 $t0 $t1 - sw $t0 -288($fp) - j label_368 - label_368: - lw $t0 -288($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -320($fp) - lw $t0 -320($fp) - lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -324($fp) - bne $t0 $zero label_381 - li $t0 20 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -236($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -260($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -256($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -252($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -248($fp) - lw $t0 -260($fp) - lw $t1 -256($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_369 - lw $t0 -260($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_370 - lw $t0 -260($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_371 - lw $t0 -1588($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_372 - label_369: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -236($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_372 - label_370: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -236($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - move $a0 $t0 - lw $t0 -264($fp) - move $a1 $t0 - jal equal_str - sw $v0 -240($fp) - j label_372 - label_371: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -236($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_372 - label_372: - lw $t0 -240($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -276($fp) - bne $t0 $zero label_379 - li $t0 21 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -212($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -208($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -204($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -200($fp) - lw $t0 -212($fp) - lw $t1 -208($fp) - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_373 - lw $t0 -212($fp) - lw $t1 -204($fp) - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_374 - lw $t0 -212($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_375 - lw $t0 -1588($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -192($fp) - j label_376 - label_373: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -192($fp) - j label_376 - label_374: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - move $a0 $t0 - lw $t0 -216($fp) - move $a1 $t0 - jal equal_str - sw $v0 -192($fp) - j label_376 - label_375: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -192($fp) - j label_376 - label_376: - lw $t0 -192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -224($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_377 - la $t0 data_130 - sw $t0 -184($fp) - lw $t0 -184($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -180($fp) - lw $t0 -180($fp) - sw $t0 -232($fp) - j label_378 - label_377: - la $t0 data_131 - sw $t0 -176($fp) - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -172($fp) - lw $t0 -172($fp) - sw $t0 -232($fp) - label_378: - lw $t0 -232($fp) - sw $t0 -280($fp) - j label_380 - label_379: - la $t0 data_132 - sw $t0 -168($fp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - sw $t0 -280($fp) - label_380: - lw $t0 -280($fp) - sw $t0 -328($fp) - j label_382 - label_381: - la $t0 data_133 - sw $t0 -160($fp) - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - sw $t0 -328($fp) - label_382: - lw $t0 -328($fp) - sw $t0 -376($fp) - j label_384 - label_383: - la $t0 data_134 - sw $t0 -152($fp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - sw $t0 -376($fp) - label_384: - lw $t0 -376($fp) - sw $t0 -424($fp) - j label_386 - label_385: - la $t0 data_135 - sw $t0 -144($fp) - lw $t0 -144($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) - sw $t0 -424($fp) - label_386: - lw $t0 -424($fp) - sw $t0 -472($fp) - j label_388 - label_387: - la $t0 data_136 - sw $t0 -136($fp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 -132($fp) - sw $t0 -472($fp) - label_388: - lw $t0 -472($fp) - sw $t0 -520($fp) - j label_390 - label_389: - la $t0 data_137 - sw $t0 -128($fp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -124($fp) - sw $t0 -520($fp) - label_390: - lw $t0 -520($fp) - sw $t0 -568($fp) - j label_392 - label_391: - la $t0 data_138 - sw $t0 -120($fp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - sw $t0 -568($fp) - label_392: - lw $t0 -568($fp) - sw $t0 -616($fp) - j label_394 - label_393: - la $t0 data_139 - sw $t0 -112($fp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) - sw $t0 -616($fp) - label_394: - lw $t0 -616($fp) - sw $t0 -664($fp) - j label_396 - label_395: - la $t0 data_140 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -664($fp) - label_396: - lw $t0 -664($fp) - sw $t0 -712($fp) - j label_398 - label_397: - la $t0 data_141 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -712($fp) - label_398: - lw $t0 -712($fp) - sw $t0 -760($fp) - j label_400 - label_399: - la $t0 data_142 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -760($fp) - label_400: - lw $t0 -760($fp) - sw $t0 -808($fp) - j label_402 - label_401: - la $t0 data_143 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -808($fp) - label_402: - lw $t0 -808($fp) - sw $t0 -856($fp) - j label_404 - label_403: - la $t0 data_144 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -856($fp) - label_404: - lw $t0 -856($fp) - sw $t0 -904($fp) - j label_406 - label_405: - la $t0 data_145 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -904($fp) - label_406: - lw $t0 -904($fp) - sw $t0 -952($fp) - j label_408 - label_407: - la $t0 data_146 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -952($fp) - label_408: - lw $t0 -952($fp) - sw $t0 -1000($fp) - j label_410 - label_409: - la $t0 data_147 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -1000($fp) - label_410: - lw $t0 -1000($fp) - sw $t0 -1048($fp) - j label_412 - label_411: - la $t0 data_148 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -1048($fp) - label_412: - lw $t0 -1048($fp) - sw $t0 -1096($fp) - j label_414 - label_413: - la $t0 data_149 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -1096($fp) - label_414: - lw $t0 -1096($fp) - sw $t0 -1144($fp) - j label_416 - label_415: - la $t0 data_150 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -1144($fp) - label_416: - lw $t0 -1144($fp) - sw $t0 -1192($fp) - j label_418 - label_417: - la $t0 data_151 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -1192($fp) - label_418: - lw $v0 -1192($fp) - addi $sp $sp 1596 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -1596 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -1588($fp) +la $t0 data_81 +sw $t0 -1584($fp) +lw $t0 -1584($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1580($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1576($fp) +lw $t0 -1576($fp) +bne $t0 $zero label_243 +j label_244 +label_243: +li $v0 4 +la $a0 data_82 +syscall +li $v0 10 +syscall +label_244: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1580($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1572($fp) +la $t0 data_83 +sw $t0 -1568($fp) +lw $t0 -1568($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1564($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1560($fp) +lw $t0 -1560($fp) +bne $t0 $zero label_245 +j label_246 +label_245: +li $v0 4 +la $a0 data_84 +syscall +li $v0 10 +syscall +label_246: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1564($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1556($fp) +la $t0 data_85 +sw $t0 -1552($fp) +lw $t0 -1552($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1548($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1544($fp) +lw $t0 -1544($fp) +bne $t0 $zero label_247 +j label_248 +label_247: +li $v0 4 +la $a0 data_86 +syscall +li $v0 10 +syscall +label_248: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1548($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1540($fp) +la $t0 data_87 +sw $t0 -1536($fp) +lw $t0 -1536($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1532($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1528($fp) +lw $t0 -1528($fp) +bne $t0 $zero label_249 +j label_250 +label_249: +li $v0 4 +la $a0 data_88 +syscall +li $v0 10 +syscall +label_250: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1532($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1524($fp) +la $t0 data_89 +sw $t0 -1520($fp) +lw $t0 -1520($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1516($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1512($fp) +lw $t0 -1512($fp) +bne $t0 $zero label_251 +j label_252 +label_251: +li $v0 4 +la $a0 data_90 +syscall +li $v0 10 +syscall +label_252: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1516($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1508($fp) +la $t0 data_91 +sw $t0 -1504($fp) +lw $t0 -1504($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1500($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1496($fp) +lw $t0 -1496($fp) +bne $t0 $zero label_253 +j label_254 +label_253: +li $v0 4 +la $a0 data_92 +syscall +li $v0 10 +syscall +label_254: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1500($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1492($fp) +la $t0 data_93 +sw $t0 -1488($fp) +lw $t0 -1488($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1484($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1480($fp) +lw $t0 -1480($fp) +bne $t0 $zero label_255 +j label_256 +label_255: +li $v0 4 +la $a0 data_94 +syscall +li $v0 10 +syscall +label_256: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1484($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1476($fp) +la $t0 data_95 +sw $t0 -1472($fp) +lw $t0 -1472($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1468($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1464($fp) +lw $t0 -1464($fp) +bne $t0 $zero label_257 +j label_258 +label_257: +li $v0 4 +la $a0 data_96 +syscall +li $v0 10 +syscall +label_258: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1468($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1460($fp) +la $t0 data_97 +sw $t0 -1456($fp) +lw $t0 -1456($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1452($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1448($fp) +lw $t0 -1448($fp) +bne $t0 $zero label_259 +j label_260 +label_259: +li $v0 4 +la $a0 data_98 +syscall +li $v0 10 +syscall +label_260: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1452($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1444($fp) +la $t0 data_99 +sw $t0 -1440($fp) +lw $t0 -1440($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1436($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1432($fp) +lw $t0 -1432($fp) +bne $t0 $zero label_261 +j label_262 +label_261: +li $v0 4 +la $a0 data_100 +syscall +li $v0 10 +syscall +label_262: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1436($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1428($fp) +la $t0 data_101 +sw $t0 -1424($fp) +lw $t0 -1424($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1420($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1416($fp) +lw $t0 -1416($fp) +bne $t0 $zero label_263 +j label_264 +label_263: +li $v0 4 +la $a0 data_102 +syscall +li $v0 10 +syscall +label_264: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1420($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1412($fp) +la $t0 data_103 +sw $t0 -1408($fp) +lw $t0 -1408($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1404($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1400($fp) +lw $t0 -1400($fp) +bne $t0 $zero label_265 +j label_266 +label_265: +li $v0 4 +la $a0 data_104 +syscall +li $v0 10 +syscall +label_266: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1404($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1396($fp) +la $t0 data_105 +sw $t0 -1392($fp) +lw $t0 -1392($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1388($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1384($fp) +lw $t0 -1384($fp) +bne $t0 $zero label_267 +j label_268 +label_267: +li $v0 4 +la $a0 data_106 +syscall +li $v0 10 +syscall +label_268: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1388($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1380($fp) +la $t0 data_107 +sw $t0 -1376($fp) +lw $t0 -1376($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1372($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1368($fp) +lw $t0 -1368($fp) +bne $t0 $zero label_269 +j label_270 +label_269: +li $v0 4 +la $a0 data_108 +syscall +li $v0 10 +syscall +label_270: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1372($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1364($fp) +la $t0 data_109 +sw $t0 -1360($fp) +lw $t0 -1360($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1356($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1352($fp) +lw $t0 -1352($fp) +bne $t0 $zero label_271 +j label_272 +label_271: +li $v0 4 +la $a0 data_110 +syscall +li $v0 10 +syscall +label_272: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1356($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1348($fp) +la $t0 data_111 +sw $t0 -1344($fp) +lw $t0 -1344($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1340($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1336($fp) +lw $t0 -1336($fp) +bne $t0 $zero label_273 +j label_274 +label_273: +li $v0 4 +la $a0 data_112 +syscall +li $v0 10 +syscall +label_274: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1340($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1332($fp) +la $t0 data_113 +sw $t0 -1328($fp) +lw $t0 -1328($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1324($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1320($fp) +lw $t0 -1320($fp) +bne $t0 $zero label_275 +j label_276 +label_275: +li $v0 4 +la $a0 data_114 +syscall +li $v0 10 +syscall +label_276: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1324($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1316($fp) +la $t0 data_115 +sw $t0 -1312($fp) +lw $t0 -1312($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1308($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1304($fp) +lw $t0 -1304($fp) +bne $t0 $zero label_277 +j label_278 +label_277: +li $v0 4 +la $a0 data_116 +syscall +li $v0 10 +syscall +label_278: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1308($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1300($fp) +la $t0 data_117 +sw $t0 -1296($fp) +lw $t0 -1296($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1292($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1288($fp) +lw $t0 -1288($fp) +bne $t0 $zero label_279 +j label_280 +label_279: +li $v0 4 +la $a0 data_118 +syscall +li $v0 10 +syscall +label_280: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1292($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1284($fp) +la $t0 data_119 +sw $t0 -1280($fp) +lw $t0 -1280($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1276($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1272($fp) +lw $t0 -1272($fp) +bne $t0 $zero label_281 +j label_282 +label_281: +li $v0 4 +la $a0 data_120 +syscall +li $v0 10 +syscall +label_282: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1276($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1268($fp) +la $t0 data_121 +sw $t0 -1264($fp) +lw $t0 -1264($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1260($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1256($fp) +lw $t0 -1256($fp) +bne $t0 $zero label_283 +j label_284 +label_283: +li $v0 4 +la $a0 data_122 +syscall +li $v0 10 +syscall +label_284: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1260($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1252($fp) +la $t0 data_123 +sw $t0 -1248($fp) +lw $t0 -1248($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1244($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1240($fp) +lw $t0 -1240($fp) +bne $t0 $zero label_285 +j label_286 +label_285: +li $v0 4 +la $a0 data_124 +syscall +li $v0 10 +syscall +label_286: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1244($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1236($fp) +la $t0 data_125 +sw $t0 -1232($fp) +lw $t0 -1232($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1228($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1224($fp) +lw $t0 -1224($fp) +bne $t0 $zero label_287 +j label_288 +label_287: +li $v0 4 +la $a0 data_126 +syscall +li $v0 10 +syscall +label_288: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1228($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1220($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1216($fp) +lw $t0 -1216($fp) +bne $t0 $zero label_289 +j label_290 +label_289: +li $v0 4 +la $a0 data_127 +syscall +li $v0 10 +syscall +label_290: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -1212($fp) +lw $t0 -1212($fp) +sw $t0 -1588($fp) +la $t0 data_128 +sw $t0 -1208($fp) +lw $t0 -1208($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -1204($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -1200($fp) +lw $t0 -1200($fp) +bne $t0 $zero label_291 +j label_292 +label_291: +li $v0 4 +la $a0 data_129 +syscall +li $v0 10 +syscall +label_292: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -1204($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -1196($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -1148($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -1172($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -1168($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -1164($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -1160($fp) +lw $t0 -1172($fp) +lw $t1 -1168($fp) +seq $t0 $t0 $t1 +sw $t0 -1156($fp) +lw $t0 -1156($fp) +bne $t0 $zero label_293 +lw $t0 -1172($fp) +lw $t1 -1164($fp) +seq $t0 $t0 $t1 +sw $t0 -1156($fp) +lw $t0 -1156($fp) +bne $t0 $zero label_294 +lw $t0 -1172($fp) +lw $t1 -1160($fp) +seq $t0 $t0 $t1 +sw $t0 -1156($fp) +lw $t0 -1156($fp) +bne $t0 $zero label_295 +lw $t0 -1588($fp) +lw $t1 -1148($fp) +seq $t0 $t0 $t1 +sw $t0 -1152($fp) +j label_296 +label_293: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1180($fp) +lw $t0 -1148($fp) +lw $t1 12($t0) +sw $t1 -1176($fp) +lw $t0 -1180($fp) +lw $t1 -1176($fp) +seq $t0 $t0 $t1 +sw $t0 -1152($fp) +j label_296 +label_294: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1180($fp) +lw $t0 -1148($fp) +lw $t1 12($t0) +sw $t1 -1176($fp) +lw $t0 -1180($fp) +move $a0 $t0 +lw $t0 -1176($fp) +move $a1 $t0 +jal equal_str +sw $v0 -1152($fp) +j label_296 +label_295: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1180($fp) +lw $t0 -1148($fp) +lw $t1 12($t0) +sw $t1 -1176($fp) +lw $t0 -1180($fp) +lw $t1 -1176($fp) +seq $t0 $t0 $t1 +sw $t0 -1152($fp) +j label_296 +label_296: +lw $t0 -1152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -1184($fp) +lw $t0 -1184($fp) +lw $t1 12($t0) +sw $t1 -1188($fp) +lw $t0 -1188($fp) +bne $t0 $zero label_417 +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -1100($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -1124($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -1120($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -1116($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -1112($fp) +lw $t0 -1124($fp) +lw $t1 -1120($fp) +seq $t0 $t0 $t1 +sw $t0 -1108($fp) +lw $t0 -1108($fp) +bne $t0 $zero label_297 +lw $t0 -1124($fp) +lw $t1 -1116($fp) +seq $t0 $t0 $t1 +sw $t0 -1108($fp) +lw $t0 -1108($fp) +bne $t0 $zero label_298 +lw $t0 -1124($fp) +lw $t1 -1112($fp) +seq $t0 $t0 $t1 +sw $t0 -1108($fp) +lw $t0 -1108($fp) +bne $t0 $zero label_299 +lw $t0 -1588($fp) +lw $t1 -1100($fp) +seq $t0 $t0 $t1 +sw $t0 -1104($fp) +j label_300 +label_297: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1132($fp) +lw $t0 -1100($fp) +lw $t1 12($t0) +sw $t1 -1128($fp) +lw $t0 -1132($fp) +lw $t1 -1128($fp) +seq $t0 $t0 $t1 +sw $t0 -1104($fp) +j label_300 +label_298: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1132($fp) +lw $t0 -1100($fp) +lw $t1 12($t0) +sw $t1 -1128($fp) +lw $t0 -1132($fp) +move $a0 $t0 +lw $t0 -1128($fp) +move $a1 $t0 +jal equal_str +sw $v0 -1104($fp) +j label_300 +label_299: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1132($fp) +lw $t0 -1100($fp) +lw $t1 12($t0) +sw $t1 -1128($fp) +lw $t0 -1132($fp) +lw $t1 -1128($fp) +seq $t0 $t0 $t1 +sw $t0 -1104($fp) +j label_300 +label_300: +lw $t0 -1104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -1136($fp) +lw $t0 -1136($fp) +lw $t1 12($t0) +sw $t1 -1140($fp) +lw $t0 -1140($fp) +bne $t0 $zero label_415 +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -1052($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -1076($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -1072($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -1068($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -1064($fp) +lw $t0 -1076($fp) +lw $t1 -1072($fp) +seq $t0 $t0 $t1 +sw $t0 -1060($fp) +lw $t0 -1060($fp) +bne $t0 $zero label_301 +lw $t0 -1076($fp) +lw $t1 -1068($fp) +seq $t0 $t0 $t1 +sw $t0 -1060($fp) +lw $t0 -1060($fp) +bne $t0 $zero label_302 +lw $t0 -1076($fp) +lw $t1 -1064($fp) +seq $t0 $t0 $t1 +sw $t0 -1060($fp) +lw $t0 -1060($fp) +bne $t0 $zero label_303 +lw $t0 -1588($fp) +lw $t1 -1052($fp) +seq $t0 $t0 $t1 +sw $t0 -1056($fp) +j label_304 +label_301: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1084($fp) +lw $t0 -1052($fp) +lw $t1 12($t0) +sw $t1 -1080($fp) +lw $t0 -1084($fp) +lw $t1 -1080($fp) +seq $t0 $t0 $t1 +sw $t0 -1056($fp) +j label_304 +label_302: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1084($fp) +lw $t0 -1052($fp) +lw $t1 12($t0) +sw $t1 -1080($fp) +lw $t0 -1084($fp) +move $a0 $t0 +lw $t0 -1080($fp) +move $a1 $t0 +jal equal_str +sw $v0 -1056($fp) +j label_304 +label_303: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1084($fp) +lw $t0 -1052($fp) +lw $t1 12($t0) +sw $t1 -1080($fp) +lw $t0 -1084($fp) +lw $t1 -1080($fp) +seq $t0 $t0 $t1 +sw $t0 -1056($fp) +j label_304 +label_304: +lw $t0 -1056($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -1088($fp) +lw $t0 -1088($fp) +lw $t1 12($t0) +sw $t1 -1092($fp) +lw $t0 -1092($fp) +bne $t0 $zero label_413 +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -1004($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -1028($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -1024($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -1020($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -1016($fp) +lw $t0 -1028($fp) +lw $t1 -1024($fp) +seq $t0 $t0 $t1 +sw $t0 -1012($fp) +lw $t0 -1012($fp) +bne $t0 $zero label_305 +lw $t0 -1028($fp) +lw $t1 -1020($fp) +seq $t0 $t0 $t1 +sw $t0 -1012($fp) +lw $t0 -1012($fp) +bne $t0 $zero label_306 +lw $t0 -1028($fp) +lw $t1 -1016($fp) +seq $t0 $t0 $t1 +sw $t0 -1012($fp) +lw $t0 -1012($fp) +bne $t0 $zero label_307 +lw $t0 -1588($fp) +lw $t1 -1004($fp) +seq $t0 $t0 $t1 +sw $t0 -1008($fp) +j label_308 +label_305: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1036($fp) +lw $t0 -1004($fp) +lw $t1 12($t0) +sw $t1 -1032($fp) +lw $t0 -1036($fp) +lw $t1 -1032($fp) +seq $t0 $t0 $t1 +sw $t0 -1008($fp) +j label_308 +label_306: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1036($fp) +lw $t0 -1004($fp) +lw $t1 12($t0) +sw $t1 -1032($fp) +lw $t0 -1036($fp) +move $a0 $t0 +lw $t0 -1032($fp) +move $a1 $t0 +jal equal_str +sw $v0 -1008($fp) +j label_308 +label_307: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -1036($fp) +lw $t0 -1004($fp) +lw $t1 12($t0) +sw $t1 -1032($fp) +lw $t0 -1036($fp) +lw $t1 -1032($fp) +seq $t0 $t0 $t1 +sw $t0 -1008($fp) +j label_308 +label_308: +lw $t0 -1008($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -1040($fp) +lw $t0 -1040($fp) +lw $t1 12($t0) +sw $t1 -1044($fp) +lw $t0 -1044($fp) +bne $t0 $zero label_411 +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -956($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -980($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -976($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -972($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -968($fp) +lw $t0 -980($fp) +lw $t1 -976($fp) +seq $t0 $t0 $t1 +sw $t0 -964($fp) +lw $t0 -964($fp) +bne $t0 $zero label_309 +lw $t0 -980($fp) +lw $t1 -972($fp) +seq $t0 $t0 $t1 +sw $t0 -964($fp) +lw $t0 -964($fp) +bne $t0 $zero label_310 +lw $t0 -980($fp) +lw $t1 -968($fp) +seq $t0 $t0 $t1 +sw $t0 -964($fp) +lw $t0 -964($fp) +bne $t0 $zero label_311 +lw $t0 -1588($fp) +lw $t1 -956($fp) +seq $t0 $t0 $t1 +sw $t0 -960($fp) +j label_312 +label_309: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -988($fp) +lw $t0 -956($fp) +lw $t1 12($t0) +sw $t1 -984($fp) +lw $t0 -988($fp) +lw $t1 -984($fp) +seq $t0 $t0 $t1 +sw $t0 -960($fp) +j label_312 +label_310: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -988($fp) +lw $t0 -956($fp) +lw $t1 12($t0) +sw $t1 -984($fp) +lw $t0 -988($fp) +move $a0 $t0 +lw $t0 -984($fp) +move $a1 $t0 +jal equal_str +sw $v0 -960($fp) +j label_312 +label_311: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -988($fp) +lw $t0 -956($fp) +lw $t1 12($t0) +sw $t1 -984($fp) +lw $t0 -988($fp) +lw $t1 -984($fp) +seq $t0 $t0 $t1 +sw $t0 -960($fp) +j label_312 +label_312: +lw $t0 -960($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -992($fp) +lw $t0 -992($fp) +lw $t1 12($t0) +sw $t1 -996($fp) +lw $t0 -996($fp) +bne $t0 $zero label_409 +li $t0 6 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -908($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -932($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -928($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -924($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -920($fp) +lw $t0 -932($fp) +lw $t1 -928($fp) +seq $t0 $t0 $t1 +sw $t0 -916($fp) +lw $t0 -916($fp) +bne $t0 $zero label_313 +lw $t0 -932($fp) +lw $t1 -924($fp) +seq $t0 $t0 $t1 +sw $t0 -916($fp) +lw $t0 -916($fp) +bne $t0 $zero label_314 +lw $t0 -932($fp) +lw $t1 -920($fp) +seq $t0 $t0 $t1 +sw $t0 -916($fp) +lw $t0 -916($fp) +bne $t0 $zero label_315 +lw $t0 -1588($fp) +lw $t1 -908($fp) +seq $t0 $t0 $t1 +sw $t0 -912($fp) +j label_316 +label_313: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -940($fp) +lw $t0 -908($fp) +lw $t1 12($t0) +sw $t1 -936($fp) +lw $t0 -940($fp) +lw $t1 -936($fp) +seq $t0 $t0 $t1 +sw $t0 -912($fp) +j label_316 +label_314: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -940($fp) +lw $t0 -908($fp) +lw $t1 12($t0) +sw $t1 -936($fp) +lw $t0 -940($fp) +move $a0 $t0 +lw $t0 -936($fp) +move $a1 $t0 +jal equal_str +sw $v0 -912($fp) +j label_316 +label_315: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -940($fp) +lw $t0 -908($fp) +lw $t1 12($t0) +sw $t1 -936($fp) +lw $t0 -940($fp) +lw $t1 -936($fp) +seq $t0 $t0 $t1 +sw $t0 -912($fp) +j label_316 +label_316: +lw $t0 -912($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -944($fp) +lw $t0 -944($fp) +lw $t1 12($t0) +sw $t1 -948($fp) +lw $t0 -948($fp) +bne $t0 $zero label_407 +li $t0 7 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -860($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -884($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -880($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -876($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -872($fp) +lw $t0 -884($fp) +lw $t1 -880($fp) +seq $t0 $t0 $t1 +sw $t0 -868($fp) +lw $t0 -868($fp) +bne $t0 $zero label_317 +lw $t0 -884($fp) +lw $t1 -876($fp) +seq $t0 $t0 $t1 +sw $t0 -868($fp) +lw $t0 -868($fp) +bne $t0 $zero label_318 +lw $t0 -884($fp) +lw $t1 -872($fp) +seq $t0 $t0 $t1 +sw $t0 -868($fp) +lw $t0 -868($fp) +bne $t0 $zero label_319 +lw $t0 -1588($fp) +lw $t1 -860($fp) +seq $t0 $t0 $t1 +sw $t0 -864($fp) +j label_320 +label_317: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -892($fp) +lw $t0 -860($fp) +lw $t1 12($t0) +sw $t1 -888($fp) +lw $t0 -892($fp) +lw $t1 -888($fp) +seq $t0 $t0 $t1 +sw $t0 -864($fp) +j label_320 +label_318: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -892($fp) +lw $t0 -860($fp) +lw $t1 12($t0) +sw $t1 -888($fp) +lw $t0 -892($fp) +move $a0 $t0 +lw $t0 -888($fp) +move $a1 $t0 +jal equal_str +sw $v0 -864($fp) +j label_320 +label_319: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -892($fp) +lw $t0 -860($fp) +lw $t1 12($t0) +sw $t1 -888($fp) +lw $t0 -892($fp) +lw $t1 -888($fp) +seq $t0 $t0 $t1 +sw $t0 -864($fp) +j label_320 +label_320: +lw $t0 -864($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -896($fp) +lw $t0 -896($fp) +lw $t1 12($t0) +sw $t1 -900($fp) +lw $t0 -900($fp) +bne $t0 $zero label_405 +li $t0 8 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -812($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -836($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -832($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -828($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -824($fp) +lw $t0 -836($fp) +lw $t1 -832($fp) +seq $t0 $t0 $t1 +sw $t0 -820($fp) +lw $t0 -820($fp) +bne $t0 $zero label_321 +lw $t0 -836($fp) +lw $t1 -828($fp) +seq $t0 $t0 $t1 +sw $t0 -820($fp) +lw $t0 -820($fp) +bne $t0 $zero label_322 +lw $t0 -836($fp) +lw $t1 -824($fp) +seq $t0 $t0 $t1 +sw $t0 -820($fp) +lw $t0 -820($fp) +bne $t0 $zero label_323 +lw $t0 -1588($fp) +lw $t1 -812($fp) +seq $t0 $t0 $t1 +sw $t0 -816($fp) +j label_324 +label_321: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -844($fp) +lw $t0 -812($fp) +lw $t1 12($t0) +sw $t1 -840($fp) +lw $t0 -844($fp) +lw $t1 -840($fp) +seq $t0 $t0 $t1 +sw $t0 -816($fp) +j label_324 +label_322: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -844($fp) +lw $t0 -812($fp) +lw $t1 12($t0) +sw $t1 -840($fp) +lw $t0 -844($fp) +move $a0 $t0 +lw $t0 -840($fp) +move $a1 $t0 +jal equal_str +sw $v0 -816($fp) +j label_324 +label_323: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -844($fp) +lw $t0 -812($fp) +lw $t1 12($t0) +sw $t1 -840($fp) +lw $t0 -844($fp) +lw $t1 -840($fp) +seq $t0 $t0 $t1 +sw $t0 -816($fp) +j label_324 +label_324: +lw $t0 -816($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -848($fp) +lw $t0 -848($fp) +lw $t1 12($t0) +sw $t1 -852($fp) +lw $t0 -852($fp) +bne $t0 $zero label_403 +li $t0 9 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -764($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -788($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -784($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -780($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -776($fp) +lw $t0 -788($fp) +lw $t1 -784($fp) +seq $t0 $t0 $t1 +sw $t0 -772($fp) +lw $t0 -772($fp) +bne $t0 $zero label_325 +lw $t0 -788($fp) +lw $t1 -780($fp) +seq $t0 $t0 $t1 +sw $t0 -772($fp) +lw $t0 -772($fp) +bne $t0 $zero label_326 +lw $t0 -788($fp) +lw $t1 -776($fp) +seq $t0 $t0 $t1 +sw $t0 -772($fp) +lw $t0 -772($fp) +bne $t0 $zero label_327 +lw $t0 -1588($fp) +lw $t1 -764($fp) +seq $t0 $t0 $t1 +sw $t0 -768($fp) +j label_328 +label_325: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -796($fp) +lw $t0 -764($fp) +lw $t1 12($t0) +sw $t1 -792($fp) +lw $t0 -796($fp) +lw $t1 -792($fp) +seq $t0 $t0 $t1 +sw $t0 -768($fp) +j label_328 +label_326: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -796($fp) +lw $t0 -764($fp) +lw $t1 12($t0) +sw $t1 -792($fp) +lw $t0 -796($fp) +move $a0 $t0 +lw $t0 -792($fp) +move $a1 $t0 +jal equal_str +sw $v0 -768($fp) +j label_328 +label_327: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -796($fp) +lw $t0 -764($fp) +lw $t1 12($t0) +sw $t1 -792($fp) +lw $t0 -796($fp) +lw $t1 -792($fp) +seq $t0 $t0 $t1 +sw $t0 -768($fp) +j label_328 +label_328: +lw $t0 -768($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -800($fp) +lw $t0 -800($fp) +lw $t1 12($t0) +sw $t1 -804($fp) +lw $t0 -804($fp) +bne $t0 $zero label_401 +li $t0 10 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -716($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -740($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -736($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -732($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -728($fp) +lw $t0 -740($fp) +lw $t1 -736($fp) +seq $t0 $t0 $t1 +sw $t0 -724($fp) +lw $t0 -724($fp) +bne $t0 $zero label_329 +lw $t0 -740($fp) +lw $t1 -732($fp) +seq $t0 $t0 $t1 +sw $t0 -724($fp) +lw $t0 -724($fp) +bne $t0 $zero label_330 +lw $t0 -740($fp) +lw $t1 -728($fp) +seq $t0 $t0 $t1 +sw $t0 -724($fp) +lw $t0 -724($fp) +bne $t0 $zero label_331 +lw $t0 -1588($fp) +lw $t1 -716($fp) +seq $t0 $t0 $t1 +sw $t0 -720($fp) +j label_332 +label_329: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -748($fp) +lw $t0 -716($fp) +lw $t1 12($t0) +sw $t1 -744($fp) +lw $t0 -748($fp) +lw $t1 -744($fp) +seq $t0 $t0 $t1 +sw $t0 -720($fp) +j label_332 +label_330: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -748($fp) +lw $t0 -716($fp) +lw $t1 12($t0) +sw $t1 -744($fp) +lw $t0 -748($fp) +move $a0 $t0 +lw $t0 -744($fp) +move $a1 $t0 +jal equal_str +sw $v0 -720($fp) +j label_332 +label_331: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -748($fp) +lw $t0 -716($fp) +lw $t1 12($t0) +sw $t1 -744($fp) +lw $t0 -748($fp) +lw $t1 -744($fp) +seq $t0 $t0 $t1 +sw $t0 -720($fp) +j label_332 +label_332: +lw $t0 -720($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -752($fp) +lw $t0 -752($fp) +lw $t1 12($t0) +sw $t1 -756($fp) +lw $t0 -756($fp) +bne $t0 $zero label_399 +li $t0 11 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -668($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -692($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -688($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -684($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -680($fp) +lw $t0 -692($fp) +lw $t1 -688($fp) +seq $t0 $t0 $t1 +sw $t0 -676($fp) +lw $t0 -676($fp) +bne $t0 $zero label_333 +lw $t0 -692($fp) +lw $t1 -684($fp) +seq $t0 $t0 $t1 +sw $t0 -676($fp) +lw $t0 -676($fp) +bne $t0 $zero label_334 +lw $t0 -692($fp) +lw $t1 -680($fp) +seq $t0 $t0 $t1 +sw $t0 -676($fp) +lw $t0 -676($fp) +bne $t0 $zero label_335 +lw $t0 -1588($fp) +lw $t1 -668($fp) +seq $t0 $t0 $t1 +sw $t0 -672($fp) +j label_336 +label_333: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -700($fp) +lw $t0 -668($fp) +lw $t1 12($t0) +sw $t1 -696($fp) +lw $t0 -700($fp) +lw $t1 -696($fp) +seq $t0 $t0 $t1 +sw $t0 -672($fp) +j label_336 +label_334: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -700($fp) +lw $t0 -668($fp) +lw $t1 12($t0) +sw $t1 -696($fp) +lw $t0 -700($fp) +move $a0 $t0 +lw $t0 -696($fp) +move $a1 $t0 +jal equal_str +sw $v0 -672($fp) +j label_336 +label_335: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -700($fp) +lw $t0 -668($fp) +lw $t1 12($t0) +sw $t1 -696($fp) +lw $t0 -700($fp) +lw $t1 -696($fp) +seq $t0 $t0 $t1 +sw $t0 -672($fp) +j label_336 +label_336: +lw $t0 -672($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -704($fp) +lw $t0 -704($fp) +lw $t1 12($t0) +sw $t1 -708($fp) +lw $t0 -708($fp) +bne $t0 $zero label_397 +li $t0 12 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -620($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -644($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -640($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -636($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -632($fp) +lw $t0 -644($fp) +lw $t1 -640($fp) +seq $t0 $t0 $t1 +sw $t0 -628($fp) +lw $t0 -628($fp) +bne $t0 $zero label_337 +lw $t0 -644($fp) +lw $t1 -636($fp) +seq $t0 $t0 $t1 +sw $t0 -628($fp) +lw $t0 -628($fp) +bne $t0 $zero label_338 +lw $t0 -644($fp) +lw $t1 -632($fp) +seq $t0 $t0 $t1 +sw $t0 -628($fp) +lw $t0 -628($fp) +bne $t0 $zero label_339 +lw $t0 -1588($fp) +lw $t1 -620($fp) +seq $t0 $t0 $t1 +sw $t0 -624($fp) +j label_340 +label_337: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -652($fp) +lw $t0 -620($fp) +lw $t1 12($t0) +sw $t1 -648($fp) +lw $t0 -652($fp) +lw $t1 -648($fp) +seq $t0 $t0 $t1 +sw $t0 -624($fp) +j label_340 +label_338: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -652($fp) +lw $t0 -620($fp) +lw $t1 12($t0) +sw $t1 -648($fp) +lw $t0 -652($fp) +move $a0 $t0 +lw $t0 -648($fp) +move $a1 $t0 +jal equal_str +sw $v0 -624($fp) +j label_340 +label_339: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -652($fp) +lw $t0 -620($fp) +lw $t1 12($t0) +sw $t1 -648($fp) +lw $t0 -652($fp) +lw $t1 -648($fp) +seq $t0 $t0 $t1 +sw $t0 -624($fp) +j label_340 +label_340: +lw $t0 -624($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -656($fp) +lw $t0 -656($fp) +lw $t1 12($t0) +sw $t1 -660($fp) +lw $t0 -660($fp) +bne $t0 $zero label_395 +li $t0 13 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -572($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -596($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -592($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -588($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -584($fp) +lw $t0 -596($fp) +lw $t1 -592($fp) +seq $t0 $t0 $t1 +sw $t0 -580($fp) +lw $t0 -580($fp) +bne $t0 $zero label_341 +lw $t0 -596($fp) +lw $t1 -588($fp) +seq $t0 $t0 $t1 +sw $t0 -580($fp) +lw $t0 -580($fp) +bne $t0 $zero label_342 +lw $t0 -596($fp) +lw $t1 -584($fp) +seq $t0 $t0 $t1 +sw $t0 -580($fp) +lw $t0 -580($fp) +bne $t0 $zero label_343 +lw $t0 -1588($fp) +lw $t1 -572($fp) +seq $t0 $t0 $t1 +sw $t0 -576($fp) +j label_344 +label_341: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -604($fp) +lw $t0 -572($fp) +lw $t1 12($t0) +sw $t1 -600($fp) +lw $t0 -604($fp) +lw $t1 -600($fp) +seq $t0 $t0 $t1 +sw $t0 -576($fp) +j label_344 +label_342: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -604($fp) +lw $t0 -572($fp) +lw $t1 12($t0) +sw $t1 -600($fp) +lw $t0 -604($fp) +move $a0 $t0 +lw $t0 -600($fp) +move $a1 $t0 +jal equal_str +sw $v0 -576($fp) +j label_344 +label_343: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -604($fp) +lw $t0 -572($fp) +lw $t1 12($t0) +sw $t1 -600($fp) +lw $t0 -604($fp) +lw $t1 -600($fp) +seq $t0 $t0 $t1 +sw $t0 -576($fp) +j label_344 +label_344: +lw $t0 -576($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -608($fp) +lw $t0 -608($fp) +lw $t1 12($t0) +sw $t1 -612($fp) +lw $t0 -612($fp) +bne $t0 $zero label_393 +li $t0 14 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -524($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -548($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -544($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -540($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -536($fp) +lw $t0 -548($fp) +lw $t1 -544($fp) +seq $t0 $t0 $t1 +sw $t0 -532($fp) +lw $t0 -532($fp) +bne $t0 $zero label_345 +lw $t0 -548($fp) +lw $t1 -540($fp) +seq $t0 $t0 $t1 +sw $t0 -532($fp) +lw $t0 -532($fp) +bne $t0 $zero label_346 +lw $t0 -548($fp) +lw $t1 -536($fp) +seq $t0 $t0 $t1 +sw $t0 -532($fp) +lw $t0 -532($fp) +bne $t0 $zero label_347 +lw $t0 -1588($fp) +lw $t1 -524($fp) +seq $t0 $t0 $t1 +sw $t0 -528($fp) +j label_348 +label_345: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -556($fp) +lw $t0 -524($fp) +lw $t1 12($t0) +sw $t1 -552($fp) +lw $t0 -556($fp) +lw $t1 -552($fp) +seq $t0 $t0 $t1 +sw $t0 -528($fp) +j label_348 +label_346: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -556($fp) +lw $t0 -524($fp) +lw $t1 12($t0) +sw $t1 -552($fp) +lw $t0 -556($fp) +move $a0 $t0 +lw $t0 -552($fp) +move $a1 $t0 +jal equal_str +sw $v0 -528($fp) +j label_348 +label_347: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -556($fp) +lw $t0 -524($fp) +lw $t1 12($t0) +sw $t1 -552($fp) +lw $t0 -556($fp) +lw $t1 -552($fp) +seq $t0 $t0 $t1 +sw $t0 -528($fp) +j label_348 +label_348: +lw $t0 -528($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -560($fp) +lw $t0 -560($fp) +lw $t1 12($t0) +sw $t1 -564($fp) +lw $t0 -564($fp) +bne $t0 $zero label_391 +li $t0 15 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -476($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -500($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -496($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -492($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -488($fp) +lw $t0 -500($fp) +lw $t1 -496($fp) +seq $t0 $t0 $t1 +sw $t0 -484($fp) +lw $t0 -484($fp) +bne $t0 $zero label_349 +lw $t0 -500($fp) +lw $t1 -492($fp) +seq $t0 $t0 $t1 +sw $t0 -484($fp) +lw $t0 -484($fp) +bne $t0 $zero label_350 +lw $t0 -500($fp) +lw $t1 -488($fp) +seq $t0 $t0 $t1 +sw $t0 -484($fp) +lw $t0 -484($fp) +bne $t0 $zero label_351 +lw $t0 -1588($fp) +lw $t1 -476($fp) +seq $t0 $t0 $t1 +sw $t0 -480($fp) +j label_352 +label_349: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -476($fp) +lw $t1 12($t0) +sw $t1 -504($fp) +lw $t0 -508($fp) +lw $t1 -504($fp) +seq $t0 $t0 $t1 +sw $t0 -480($fp) +j label_352 +label_350: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -476($fp) +lw $t1 12($t0) +sw $t1 -504($fp) +lw $t0 -508($fp) +move $a0 $t0 +lw $t0 -504($fp) +move $a1 $t0 +jal equal_str +sw $v0 -480($fp) +j label_352 +label_351: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -508($fp) +lw $t0 -476($fp) +lw $t1 12($t0) +sw $t1 -504($fp) +lw $t0 -508($fp) +lw $t1 -504($fp) +seq $t0 $t0 $t1 +sw $t0 -480($fp) +j label_352 +label_352: +lw $t0 -480($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -512($fp) +lw $t0 -512($fp) +lw $t1 12($t0) +sw $t1 -516($fp) +lw $t0 -516($fp) +bne $t0 $zero label_389 +li $t0 16 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -428($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -452($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -448($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -444($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -440($fp) +lw $t0 -452($fp) +lw $t1 -448($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +lw $t0 -436($fp) +bne $t0 $zero label_353 +lw $t0 -452($fp) +lw $t1 -444($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +lw $t0 -436($fp) +bne $t0 $zero label_354 +lw $t0 -452($fp) +lw $t1 -440($fp) +seq $t0 $t0 $t1 +sw $t0 -436($fp) +lw $t0 -436($fp) +bne $t0 $zero label_355 +lw $t0 -1588($fp) +lw $t1 -428($fp) +seq $t0 $t0 $t1 +sw $t0 -432($fp) +j label_356 +label_353: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -456($fp) +lw $t0 -460($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -432($fp) +j label_356 +label_354: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -456($fp) +lw $t0 -460($fp) +move $a0 $t0 +lw $t0 -456($fp) +move $a1 $t0 +jal equal_str +sw $v0 -432($fp) +j label_356 +label_355: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -460($fp) +lw $t0 -428($fp) +lw $t1 12($t0) +sw $t1 -456($fp) +lw $t0 -460($fp) +lw $t1 -456($fp) +seq $t0 $t0 $t1 +sw $t0 -432($fp) +j label_356 +label_356: +lw $t0 -432($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -464($fp) +lw $t0 -464($fp) +lw $t1 12($t0) +sw $t1 -468($fp) +lw $t0 -468($fp) +bne $t0 $zero label_387 +li $t0 17 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -380($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -404($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -400($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -396($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -392($fp) +lw $t0 -404($fp) +lw $t1 -400($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_357 +lw $t0 -404($fp) +lw $t1 -396($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_358 +lw $t0 -404($fp) +lw $t1 -392($fp) +seq $t0 $t0 $t1 +sw $t0 -388($fp) +lw $t0 -388($fp) +bne $t0 $zero label_359 +lw $t0 -1588($fp) +lw $t1 -380($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_360 +label_357: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -380($fp) +lw $t1 12($t0) +sw $t1 -408($fp) +lw $t0 -412($fp) +lw $t1 -408($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_360 +label_358: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -380($fp) +lw $t1 12($t0) +sw $t1 -408($fp) +lw $t0 -412($fp) +move $a0 $t0 +lw $t0 -408($fp) +move $a1 $t0 +jal equal_str +sw $v0 -384($fp) +j label_360 +label_359: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -412($fp) +lw $t0 -380($fp) +lw $t1 12($t0) +sw $t1 -408($fp) +lw $t0 -412($fp) +lw $t1 -408($fp) +seq $t0 $t0 $t1 +sw $t0 -384($fp) +j label_360 +label_360: +lw $t0 -384($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -416($fp) +lw $t0 -416($fp) +lw $t1 12($t0) +sw $t1 -420($fp) +lw $t0 -420($fp) +bne $t0 $zero label_385 +li $t0 18 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -332($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -356($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -352($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -348($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -344($fp) +lw $t0 -356($fp) +lw $t1 -352($fp) +seq $t0 $t0 $t1 +sw $t0 -340($fp) +lw $t0 -340($fp) +bne $t0 $zero label_361 +lw $t0 -356($fp) +lw $t1 -348($fp) +seq $t0 $t0 $t1 +sw $t0 -340($fp) +lw $t0 -340($fp) +bne $t0 $zero label_362 +lw $t0 -356($fp) +lw $t1 -344($fp) +seq $t0 $t0 $t1 +sw $t0 -340($fp) +lw $t0 -340($fp) +bne $t0 $zero label_363 +lw $t0 -1588($fp) +lw $t1 -332($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +j label_364 +label_361: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -364($fp) +lw $t0 -332($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -364($fp) +lw $t1 -360($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +j label_364 +label_362: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -364($fp) +lw $t0 -332($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -364($fp) +move $a0 $t0 +lw $t0 -360($fp) +move $a1 $t0 +jal equal_str +sw $v0 -336($fp) +j label_364 +label_363: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -364($fp) +lw $t0 -332($fp) +lw $t1 12($t0) +sw $t1 -360($fp) +lw $t0 -364($fp) +lw $t1 -360($fp) +seq $t0 $t0 $t1 +sw $t0 -336($fp) +j label_364 +label_364: +lw $t0 -336($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -368($fp) +lw $t0 -368($fp) +lw $t1 12($t0) +sw $t1 -372($fp) +lw $t0 -372($fp) +bne $t0 $zero label_383 +li $t0 19 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -284($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -308($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -304($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -300($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -296($fp) +lw $t0 -308($fp) +lw $t1 -304($fp) +seq $t0 $t0 $t1 +sw $t0 -292($fp) +lw $t0 -292($fp) +bne $t0 $zero label_365 +lw $t0 -308($fp) +lw $t1 -300($fp) +seq $t0 $t0 $t1 +sw $t0 -292($fp) +lw $t0 -292($fp) +bne $t0 $zero label_366 +lw $t0 -308($fp) +lw $t1 -296($fp) +seq $t0 $t0 $t1 +sw $t0 -292($fp) +lw $t0 -292($fp) +bne $t0 $zero label_367 +lw $t0 -1588($fp) +lw $t1 -284($fp) +seq $t0 $t0 $t1 +sw $t0 -288($fp) +j label_368 +label_365: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -284($fp) +lw $t1 12($t0) +sw $t1 -312($fp) +lw $t0 -316($fp) +lw $t1 -312($fp) +seq $t0 $t0 $t1 +sw $t0 -288($fp) +j label_368 +label_366: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -284($fp) +lw $t1 12($t0) +sw $t1 -312($fp) +lw $t0 -316($fp) +move $a0 $t0 +lw $t0 -312($fp) +move $a1 $t0 +jal equal_str +sw $v0 -288($fp) +j label_368 +label_367: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -284($fp) +lw $t1 12($t0) +sw $t1 -312($fp) +lw $t0 -316($fp) +lw $t1 -312($fp) +seq $t0 $t0 $t1 +sw $t0 -288($fp) +j label_368 +label_368: +lw $t0 -288($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -320($fp) +lw $t0 -320($fp) +lw $t1 12($t0) +sw $t1 -324($fp) +lw $t0 -324($fp) +bne $t0 $zero label_381 +li $t0 20 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -236($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -260($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -256($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -252($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -248($fp) +lw $t0 -260($fp) +lw $t1 -256($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_369 +lw $t0 -260($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_370 +lw $t0 -260($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_371 +lw $t0 -1588($fp) +lw $t1 -236($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_372 +label_369: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -236($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +lw $t1 -264($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_372 +label_370: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -236($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +move $a0 $t0 +lw $t0 -264($fp) +move $a1 $t0 +jal equal_str +sw $v0 -240($fp) +j label_372 +label_371: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -236($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +lw $t1 -264($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_372 +label_372: +lw $t0 -240($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -276($fp) +lw $t0 -276($fp) +bne $t0 $zero label_379 +li $t0 21 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -188($fp) +lw $t0 -1588($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -212($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -208($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -204($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -200($fp) +lw $t0 -212($fp) +lw $t1 -208($fp) +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_373 +lw $t0 -212($fp) +lw $t1 -204($fp) +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_374 +lw $t0 -212($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -196($fp) +lw $t0 -196($fp) +bne $t0 $zero label_375 +lw $t0 -1588($fp) +lw $t1 -188($fp) +seq $t0 $t0 $t1 +sw $t0 -192($fp) +j label_376 +label_373: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -216($fp) +lw $t0 -220($fp) +lw $t1 -216($fp) +seq $t0 $t0 $t1 +sw $t0 -192($fp) +j label_376 +label_374: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -216($fp) +lw $t0 -220($fp) +move $a0 $t0 +lw $t0 -216($fp) +move $a1 $t0 +jal equal_str +sw $v0 -192($fp) +j label_376 +label_375: +lw $t0 -1588($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -188($fp) +lw $t1 12($t0) +sw $t1 -216($fp) +lw $t0 -220($fp) +lw $t1 -216($fp) +seq $t0 $t0 $t1 +sw $t0 -192($fp) +j label_376 +label_376: +lw $t0 -192($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -224($fp) +lw $t0 -224($fp) +lw $t1 12($t0) +sw $t1 -228($fp) +lw $t0 -228($fp) +bne $t0 $zero label_377 +la $t0 data_130 +sw $t0 -184($fp) +lw $t0 -184($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -180($fp) +lw $t0 -180($fp) +sw $t0 -232($fp) +j label_378 +label_377: +la $t0 data_131 +sw $t0 -176($fp) +lw $t0 -176($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -172($fp) +lw $t0 -172($fp) +sw $t0 -232($fp) +label_378: +lw $t0 -232($fp) +sw $t0 -280($fp) +j label_380 +label_379: +la $t0 data_132 +sw $t0 -168($fp) +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +sw $t0 -280($fp) +label_380: +lw $t0 -280($fp) +sw $t0 -328($fp) +j label_382 +label_381: +la $t0 data_133 +sw $t0 -160($fp) +lw $t0 -160($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +sw $t0 -328($fp) +label_382: +lw $t0 -328($fp) +sw $t0 -376($fp) +j label_384 +label_383: +la $t0 data_134 +sw $t0 -152($fp) +lw $t0 -152($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +sw $t0 -376($fp) +label_384: +lw $t0 -376($fp) +sw $t0 -424($fp) +j label_386 +label_385: +la $t0 data_135 +sw $t0 -144($fp) +lw $t0 -144($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -140($fp) +lw $t0 -140($fp) +sw $t0 -424($fp) +label_386: +lw $t0 -424($fp) +sw $t0 -472($fp) +j label_388 +label_387: +la $t0 data_136 +sw $t0 -136($fp) +lw $t0 -136($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -132($fp) +lw $t0 -132($fp) +sw $t0 -472($fp) +label_388: +lw $t0 -472($fp) +sw $t0 -520($fp) +j label_390 +label_389: +la $t0 data_137 +sw $t0 -128($fp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -124($fp) +lw $t0 -124($fp) +sw $t0 -520($fp) +label_390: +lw $t0 -520($fp) +sw $t0 -568($fp) +j label_392 +label_391: +la $t0 data_138 +sw $t0 -120($fp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +sw $t0 -568($fp) +label_392: +lw $t0 -568($fp) +sw $t0 -616($fp) +j label_394 +label_393: +la $t0 data_139 +sw $t0 -112($fp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 -108($fp) +sw $t0 -616($fp) +label_394: +lw $t0 -616($fp) +sw $t0 -664($fp) +j label_396 +label_395: +la $t0 data_140 +sw $t0 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +sw $t0 -664($fp) +label_396: +lw $t0 -664($fp) +sw $t0 -712($fp) +j label_398 +label_397: +la $t0 data_141 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +sw $t0 -712($fp) +label_398: +lw $t0 -712($fp) +sw $t0 -760($fp) +j label_400 +label_399: +la $t0 data_142 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -760($fp) +label_400: +lw $t0 -760($fp) +sw $t0 -808($fp) +j label_402 +label_401: +la $t0 data_143 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +sw $t0 -808($fp) +label_402: +lw $t0 -808($fp) +sw $t0 -856($fp) +j label_404 +label_403: +la $t0 data_144 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +sw $t0 -856($fp) +label_404: +lw $t0 -856($fp) +sw $t0 -904($fp) +j label_406 +label_405: +la $t0 data_145 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +sw $t0 -904($fp) +label_406: +lw $t0 -904($fp) +sw $t0 -952($fp) +j label_408 +label_407: +la $t0 data_146 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +sw $t0 -952($fp) +label_408: +lw $t0 -952($fp) +sw $t0 -1000($fp) +j label_410 +label_409: +la $t0 data_147 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +sw $t0 -1000($fp) +label_410: +lw $t0 -1000($fp) +sw $t0 -1048($fp) +j label_412 +label_411: +la $t0 data_148 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +sw $t0 -1048($fp) +label_412: +lw $t0 -1048($fp) +sw $t0 -1096($fp) +j label_414 +label_413: +la $t0 data_149 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -1096($fp) +label_414: +lw $t0 -1096($fp) +sw $t0 -1144($fp) +j label_416 +label_415: +la $t0 data_150 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -1144($fp) +label_416: +lw $t0 -1144($fp) +sw $t0 -1192($fp) +j label_418 +label_417: +la $t0 data_151 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -1192($fp) +label_418: +lw $v0 -1192($fp) +addi $sp $sp 1596 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_prompt_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -136 - la $t0 data_10 - sw $t0 -128($fp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -128($fp) - la $t0 data_152 - sw $t0 -124($fp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_419 - j label_420 - label_419: - li $v0 4 - la $a0 data_153 - syscall - li $v0 10 - syscall - label_420: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -112($fp) - la $t0 data_154 - sw $t0 -108($fp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_421 - j label_422 - label_421: - li $v0 4 - la $a0 data_155 - syscall - li $v0 10 - syscall - label_422: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -96($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_423 - j label_424 - label_423: - li $v0 4 - la $a0 data_156 - syscall - li $v0 10 - syscall - label_424: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - sw $t0 -128($fp) - la $t0 data_157 - sw $t0 -84($fp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_425 - j label_426 - label_425: - li $v0 4 - la $a0 data_158 - syscall - li $v0 10 - syscall - label_426: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -72($fp) - la $t0 data_159 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -128($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -48($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -44($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -36($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_427 - lw $t0 -48($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_428 - lw $t0 -48($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_429 - lw $t0 -128($fp) - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_430 - label_427: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_430 - label_428: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - move $a0 $t0 - lw $t0 -52($fp) - move $a1 $t0 - jal equal_str - sw $v0 -28($fp) - j label_430 - label_429: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_430 - label_430: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_431 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -68($fp) - j label_432 - label_431: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -68($fp) - label_432: - lw $v0 -68($fp) - addi $sp $sp 136 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -136 +la $t0 data_10 +sw $t0 -128($fp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -128($fp) +la $t0 data_152 +sw $t0 -124($fp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_419 +j label_420 +label_419: +li $v0 4 +la $a0 data_153 +syscall +li $v0 10 +syscall +label_420: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -112($fp) +la $t0 data_154 +sw $t0 -108($fp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_421 +j label_422 +label_421: +li $v0 4 +la $a0 data_155 +syscall +li $v0 10 +syscall +label_422: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -96($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_423 +j label_424 +label_423: +li $v0 4 +la $a0 data_156 +syscall +li $v0 10 +syscall +label_424: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +sw $t0 -128($fp) +la $t0 data_157 +sw $t0 -84($fp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_425 +j label_426 +label_425: +li $v0 4 +la $a0 data_158 +syscall +li $v0 10 +syscall +label_426: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -72($fp) +la $t0 data_159 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -128($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -48($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -44($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -36($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_427 +lw $t0 -48($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_428 +lw $t0 -48($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_429 +lw $t0 -128($fp) +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_430 +label_427: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_430 +label_428: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +move $a0 $t0 +lw $t0 -52($fp) +move $a1 $t0 +jal equal_str +sw $v0 -28($fp) +j label_430 +label_429: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_430 +label_430: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_431 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -68($fp) +j label_432 +label_431: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -68($fp) +label_432: +lw $v0 -68($fp) +addi $sp $sp 136 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_prompt2_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -136 - la $t0 data_10 - sw $t0 -128($fp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -128($fp) - la $t0 data_160 - sw $t0 -124($fp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_433 - j label_434 - label_433: - li $v0 4 - la $a0 data_161 - syscall - li $v0 10 - syscall - label_434: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -112($fp) - la $t0 data_162 - sw $t0 -108($fp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_435 - j label_436 - label_435: - li $v0 4 - la $a0 data_163 - syscall - li $v0 10 - syscall - label_436: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -96($fp) - la $t0 data_164 - sw $t0 -92($fp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_437 - j label_438 - label_437: - li $v0 4 - la $a0 data_165 - syscall - li $v0 10 - syscall - label_438: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -80($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_439 - j label_440 - label_439: - li $v0 4 - la $a0 data_166 - syscall - li $v0 10 - syscall - label_440: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -128($fp) - la $t0 data_167 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -128($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -48($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -44($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -36($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_441 - lw $t0 -48($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_442 - lw $t0 -48($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_443 - lw $t0 -128($fp) - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_444 - label_441: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_444 - label_442: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - move $a0 $t0 - lw $t0 -52($fp) - move $a1 $t0 - jal equal_str - sw $v0 -28($fp) - j label_444 - label_443: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_444 - label_444: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_445 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -68($fp) - j label_446 - label_445: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -68($fp) - label_446: - lw $v0 -68($fp) - addi $sp $sp 136 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -136 +la $t0 data_10 +sw $t0 -128($fp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -128($fp) +la $t0 data_160 +sw $t0 -124($fp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_433 +j label_434 +label_433: +li $v0 4 +la $a0 data_161 +syscall +li $v0 10 +syscall +label_434: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -112($fp) +la $t0 data_162 +sw $t0 -108($fp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_435 +j label_436 +label_435: +li $v0 4 +la $a0 data_163 +syscall +li $v0 10 +syscall +label_436: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -96($fp) +la $t0 data_164 +sw $t0 -92($fp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_437 +j label_438 +label_437: +li $v0 4 +la $a0 data_165 +syscall +li $v0 10 +syscall +label_438: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -80($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_439 +j label_440 +label_439: +li $v0 4 +la $a0 data_166 +syscall +li $v0 10 +syscall +label_440: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -128($fp) +la $t0 data_167 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -128($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -48($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -44($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -36($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_441 +lw $t0 -48($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_442 +lw $t0 -48($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_443 +lw $t0 -128($fp) +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_444 +label_441: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_444 +label_442: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +move $a0 $t0 +lw $t0 -52($fp) +move $a1 $t0 +jal equal_str +sw $v0 -28($fp) +j label_444 +label_443: +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_444 +label_444: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_445 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -68($fp) +j label_446 +label_445: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -68($fp) +label_446: +lw $v0 -68($fp) +addi $sp $sp 136 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_CellularAutomaton - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_CellularAutomaton +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_CellularAutomaton - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 28($t0) - lw $v0 0($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -28 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_CellularAutomaton +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 28($t0) +lw $v0 0($fp) +addi $sp $sp 28 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -144 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -132($fp) - la $t0 data_10 - sw $t0 -128($fp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -128($fp) - la $t0 data_168 - sw $t0 -124($fp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_447 - j label_448 - label_447: - li $v0 4 - la $a0 data_169 - syscall - li $v0 10 - syscall - label_448: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -112($fp) - la $t0 data_170 - sw $t0 -108($fp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_449 - j label_450 - label_449: - li $v0 4 - la $a0 data_171 - syscall - li $v0 10 - syscall - label_450: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -96($fp) - label_451: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_452 - j label_453 - label_452: - li $v0 4 - la $a0 data_172 - syscall - li $v0 10 - syscall - label_453: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 88($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_454 - j label_472 - label_454: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -132($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_455 - j label_456 - label_455: - li $v0 4 - la $a0 data_173 - syscall - li $v0 10 - syscall - label_456: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 76($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -128($fp) - jal __init_at_CellularAutomaton - sw $v0 -68($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_457 - j label_458 - label_457: - li $v0 4 - la $a0 data_174 - syscall - li $v0 10 - syscall - label_458: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 0($fp) - addi $t1 $t1 28 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_459 - j label_460 - label_459: - li $v0 4 - la $a0 data_175 - syscall - li $v0 10 - syscall - label_460: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 80($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - label_461: - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_462 - j label_471 - label_462: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_463 - j label_464 - label_463: - li $v0 4 - la $a0 data_176 - syscall - li $v0 10 - syscall - label_464: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 84($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_465 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -132($fp) - lw $t0 -132($fp) - sw $t0 -44($fp) - j label_470 - label_465: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_466 - j label_467 - label_466: - li $v0 4 - la $a0 data_177 - syscall - li $v0 10 - syscall - label_467: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_468 - j label_469 - label_468: - li $v0 4 - la $a0 data_178 - syscall - li $v0 10 - syscall - label_469: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 80($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -44($fp) - label_470: - j label_461 - label_471: - j label_451 - label_472: - lw $v0 0($fp) - addi $sp $sp 144 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -144 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -132($fp) +la $t0 data_10 +sw $t0 -128($fp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -128($fp) +la $t0 data_168 +sw $t0 -124($fp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_447 +j label_448 +label_447: +li $v0 4 +la $a0 data_169 +syscall +li $v0 10 +syscall +label_448: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -112($fp) +la $t0 data_170 +sw $t0 -108($fp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -100($fp) +lw $t0 -100($fp) +bne $t0 $zero label_449 +j label_450 +label_449: +li $v0 4 +la $a0 data_171 +syscall +li $v0 10 +syscall +label_450: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -96($fp) +label_451: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_452 +j label_453 +label_452: +li $v0 4 +la $a0 data_172 +syscall +li $v0 10 +syscall +label_453: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 88($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_454 +j label_472 +label_454: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 -80($fp) +sw $t0 -132($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_455 +j label_456 +label_455: +li $v0 4 +la $a0 data_173 +syscall +li $v0 10 +syscall +label_456: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 76($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -128($fp) +jal __init_at_CellularAutomaton +sw $v0 -68($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_457 +j label_458 +label_457: +li $v0 4 +la $a0 data_174 +syscall +li $v0 10 +syscall +label_458: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 0($fp) +addi $t1 $t1 28 +sw $t0 0($t1) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_459 +j label_460 +label_459: +li $v0 4 +la $a0 data_175 +syscall +li $v0 10 +syscall +label_460: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 80($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +label_461: +lw $t0 -132($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_462 +j label_471 +label_462: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_463 +j label_464 +label_463: +li $v0 4 +la $a0 data_176 +syscall +li $v0 10 +syscall +label_464: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 84($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_465 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -132($fp) +lw $t0 -132($fp) +sw $t0 -44($fp) +j label_470 +label_465: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_466 +j label_467 +label_466: +li $v0 4 +la $a0 data_177 +syscall +li $v0 10 +syscall +label_467: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_468 +j label_469 +label_468: +li $v0 4 +la $a0 data_178 +syscall +li $v0 10 +syscall +label_469: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 80($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -44($fp) +label_470: +j label_461 +label_471: +j label_451 +label_472: +lw $v0 0($fp) +addi $sp $sp 144 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -28 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 28 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra - -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra - jr $ra - \ No newline at end of file +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index b88392533..bafe3aef3 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -68,2032 +68,1925 @@ data_32: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_cons_at_List - .word function_head_at_List - .word function_isNil_at_List - .word function_tail_at_List - .word __init_attr_at_List - .word __init_at_List +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_cons_at_List +.word function_head_at_List +.word function_isNil_at_List +.word function_tail_at_List +.word __init_attr_at_List +.word __init_at_List type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 +.word 5 +.word 4 +.word type_6_dispatch +.word -1 type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_cons_at_List - .word function_head_at_Cons - .word function_isNil_at_Cons - .word function_tail_at_Cons - .word function_init_at_Cons - .word __init_attr_at_Cons - .word __init_at_Cons +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_cons_at_List +.word function_head_at_Cons +.word function_isNil_at_Cons +.word function_tail_at_Cons +.word function_init_at_Cons +.word __init_attr_at_Cons +.word __init_at_Cons type_7_prototype: - .word 6 - .word 6 - .word type_7_dispatch - .word 0 - .word 0 - .word -1 +.word 6 +.word 6 +.word type_7_dispatch +.word 0 +.word 0 +.word -1 type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word function_print_list_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word function_print_list_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_8_prototype: - .word 7 - .word 5 - .word type_8_dispatch - .word 0 - .word -1 +.word 7 +.word 5 +.word type_8_dispatch +.word 0 +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_11 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_11 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_isNil_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_head_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_tail_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_6: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_6: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cons_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +jal __init_at_Cons +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_8: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_List +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -20($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_List +addi $sp $sp 4 +sw $v0 -20($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_isNil_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_head_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_tail_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 4($fp) +lw $t1 8($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 8($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 8($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Cons - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Cons +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_list_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -84 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_10: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_21 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_12: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_14: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - la $t0 data_19 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_16: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_18: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_20: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -88($fp) - j label_24 - label_21: - la $t0 data_23 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_22 - j label_23 - label_22: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_23: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -88($fp) - label_24: - lw $v0 -88($fp) - addi $sp $sp 84 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -84 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_10: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_21 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_12: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_14: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +la $t0 data_19 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_16: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_18: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_20: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -88($fp) +j label_24 +label_21: +la $t0 data_23 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_22 +j label_23 +label_22: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_23: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -88($fp) +label_24: +lw $v0 -88($fp) +addi $sp $sp 84 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -108 - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -96($fp) - jal __init_at_List - sw $v0 -92($fp) - lw $t0 -92($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_25 - j label_26 - label_25: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_26: - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -84($fp) - lw $t0 -84($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_28: - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -76($fp) - lw $t0 -76($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_29 - j label_30 - label_29: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_30: - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -68($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_31 - j label_32 - label_31: - li $v0 4 - la $a0 data_28 - syscall - li $v0 10 - syscall - label_32: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_33 - j label_34 - label_33: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_34: - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - label_35: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_36 - j label_37 - label_36: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_37: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -40($fp) - xori $t0 $t0 1 - sw $t0 -36($fp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_38 - j label_43 - label_38: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_39 - j label_40 - label_39: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_40: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_41 - j label_42 - label_41: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_42: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - j label_35 - label_43: - li $v0 0 - addi $sp $sp 108 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -108 +li $t0 5 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -112($fp) +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -108($fp) +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -104($fp) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -100($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -96($fp) +jal __init_at_List +sw $v0 -92($fp) +lw $t0 -92($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_25 +j label_26 +label_25: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_26: +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -84($fp) +lw $t0 -84($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_27 +j label_28 +label_27: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_28: +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -76($fp) +lw $t0 -76($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_29 +j label_30 +label_29: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_30: +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -68($fp) +lw $t0 -68($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_31 +j label_32 +label_31: +li $v0 4 +la $a0 data_28 +syscall +li $v0 10 +syscall +label_32: +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +lw $t0 -60($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_33 +j label_34 +label_33: +li $v0 4 +la $a0 data_29 +syscall +li $v0 10 +syscall +label_34: +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +lw $t0 -52($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +label_35: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_36 +j label_37 +label_36: +li $v0 4 +la $a0 data_30 +syscall +li $v0 10 +syscall +label_37: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -40($fp) +xori $t0 $t0 1 +sw $t0 -36($fp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_38 +j label_43 +label_38: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_39 +j label_40 +label_39: +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_40: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_41 +j label_42 +label_41: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_42: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +j label_35 +label_43: +li $v0 0 +addi $sp $sp 108 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra - -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index 7ff429dcd..97fe248db 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -74,3127 +74,3020 @@ data_35: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 +.word 5 +.word 4 +.word type_6_dispatch +.word -1 type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_equal_at_Complex - .word function_init_at_Complex - .word function_print_at_Complex - .word function_reflect_0_at_Complex - .word function_reflect_X_at_Complex - .word function_reflect_Y_at_Complex - .word function_x_value_at_Complex - .word function_y_value_at_Complex - .word __init_attr_at_Complex - .word __init_at_Complex +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_equal_at_Complex +.word function_init_at_Complex +.word function_print_at_Complex +.word function_reflect_0_at_Complex +.word function_reflect_X_at_Complex +.word function_reflect_Y_at_Complex +.word function_x_value_at_Complex +.word function_y_value_at_Complex +.word __init_attr_at_Complex +.word __init_at_Complex type_7_prototype: - .word 6 - .word 6 - .word type_7_dispatch - .word 0 - .word 0 - .word -1 +.word 6 +.word 6 +.word type_7_dispatch +.word 0 +.word 0 +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_10 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_8 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_10 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_8 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_11 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_11 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -188 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -192($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -188($fp) - jal __init_at_Complex - sw $v0 -184($fp) - lw $t0 -184($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_4: - lw $t0 -184($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -188($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -184($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -176($fp) - lw $t0 -176($fp) - sw $t0 -196($fp) - lw $t0 -196($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -196($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -124($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -152($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -148($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -144($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -140($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_9 - lw $t0 -152($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_10 - lw $t0 -152($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_11 - lw $t0 -124($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_12 - label_9: - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_12 - label_10: - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - move $a0 $t0 - lw $t0 -156($fp) - move $a1 $t0 - jal equal_str - sw $v0 -132($fp) - j label_12 - label_11: - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_12 - label_12: - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_15 - la $t0 data_15 - sw $t0 -112($fp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_14: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -172($fp) - j label_18 - label_15: - la $t0 data_17 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_16 - j label_17 - label_16: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_17: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -172($fp) - label_18: - lw $t0 -196($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_20: - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -196($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_22: - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_24: - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_25 - j label_26 - label_25: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_26: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_29 - la $t0 data_23 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_28: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -80($fp) - j label_32 - label_29: - la $t0 data_25 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_30 - j label_31 - label_30: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_31: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -80($fp) - label_32: - lw $v0 -80($fp) - addi $sp $sp 188 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -188 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -192($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -188($fp) +jal __init_at_Complex +sw $v0 -184($fp) +lw $t0 -184($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_4: +lw $t0 -184($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -192($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -188($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -184($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -176($fp) +lw $t0 -176($fp) +sw $t0 -196($fp) +lw $t0 -196($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -128($fp) +lw $t0 -128($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -124($fp) +lw $t0 -196($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_8: +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -124($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -152($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -148($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -144($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -140($fp) +lw $t0 -152($fp) +lw $t1 -148($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_9 +lw $t0 -152($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_10 +lw $t0 -152($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -136($fp) +lw $t0 -136($fp) +bne $t0 $zero label_11 +lw $t0 -124($fp) +lw $t1 -116($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_12 +label_9: +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -160($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_12 +label_10: +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -160($fp) +move $a0 $t0 +lw $t0 -156($fp) +move $a1 $t0 +jal equal_str +sw $v0 -132($fp) +j label_12 +label_11: +lw $t0 -124($fp) +lw $t1 12($t0) +sw $t1 -160($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -160($fp) +lw $t1 -156($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +j label_12 +label_12: +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -168($fp) +lw $t0 -168($fp) +bne $t0 $zero label_15 +la $t0 data_15 +sw $t0 -112($fp) +lw $t0 -112($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -108($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -104($fp) +lw $t0 -104($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_14: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -100($fp) +lw $t0 -100($fp) +sw $t0 -172($fp) +j label_18 +label_15: +la $t0 data_17 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_16 +j label_17 +label_16: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_17: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -172($fp) +label_18: +lw $t0 -196($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_20: +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -196($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_21 +j label_22 +label_21: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_22: +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -196($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 44($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_23 +j label_24 +label_23: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_24: +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_25 +j label_26 +label_25: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_26: +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_29 +la $t0 data_23 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_27 +j label_28 +label_27: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_28: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -80($fp) +j label_32 +label_29: +la $t0 data_25 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_30 +j label_31 +label_30: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_31: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -80($fp) +label_32: +lw $v0 -80($fp) +addi $sp $sp 188 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_init_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -80 - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -68($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -64($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -60($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -56($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_33 - lw $t0 -68($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_34 - lw $t0 -68($fp) - lw $t1 -56($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_35 - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 4($fp) - seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_36 - label_33: - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_36 - label_34: - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - move $a0 $t0 - lw $t0 -72($fp) - move $a1 $t0 - jal equal_str - sw $v0 -48($fp) - j label_36 - label_35: - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_36 - label_36: - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -32($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -28($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -24($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -20($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_37 - lw $t0 -32($fp) - lw $t1 -24($fp) - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_38 - lw $t0 -32($fp) - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_39 - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($fp) - seq $t0 $t0 $t1 - sw $t0 -12($fp) - j label_40 - label_37: - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -12($fp) - j label_40 - label_38: - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - move $a0 $t0 - lw $t0 -36($fp) - move $a1 $t0 - jal equal_str - sw $v0 -12($fp) - j label_40 - label_39: - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -12($fp) - j label_40 - label_40: - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -44($fp) - lw $v0 8($fp) - addi $sp $sp 80 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -80 +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -68($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -64($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -60($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -56($fp) +lw $t0 -68($fp) +lw $t1 -64($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_33 +lw $t0 -68($fp) +lw $t1 -60($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_34 +lw $t0 -68($fp) +lw $t1 -56($fp) +seq $t0 $t0 $t1 +sw $t0 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_35 +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 4($fp) +seq $t0 $t0 $t1 +sw $t0 -48($fp) +j label_36 +label_33: +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -48($fp) +j label_36 +label_34: +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +move $a0 $t0 +lw $t0 -72($fp) +move $a1 $t0 +jal equal_str +sw $v0 -48($fp) +j label_36 +label_35: +lw $t4 8($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -76($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -72($fp) +lw $t0 -76($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -48($fp) +j label_36 +label_36: +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -32($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -28($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -24($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -20($fp) +lw $t0 -32($fp) +lw $t1 -28($fp) +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_37 +lw $t0 -32($fp) +lw $t1 -24($fp) +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_38 +lw $t0 -32($fp) +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_39 +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($fp) +seq $t0 $t0 $t1 +sw $t0 -12($fp) +j label_40 +label_37: +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -12($fp) +j label_40 +label_38: +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +move $a0 $t0 +lw $t0 -36($fp) +move $a1 $t0 +jal equal_str +sw $v0 -12($fp) +j label_40 +label_39: +lw $t4 8($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 -40($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -12($fp) +j label_40 +label_40: +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -44($fp) +lw $v0 8($fp) +addi $sp $sp 80 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -112 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_41 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_42 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_43 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_44 - label_41: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_44 - label_42: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_44 - label_43: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_44 - label_44: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_53 - la $t0 data_27 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - la $t0 data_28 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_45 - j label_46 - label_45: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_46: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_47 - j label_48 - label_47: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_48: - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_49 - j label_50 - label_49: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_50: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_51 - j label_52 - label_51: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_52: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -112($fp) - j label_56 - label_53: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_54 - j label_55 - label_54: - li $v0 4 - la $a0 data_33 - syscall - li $v0 10 - syscall - label_55: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -112($fp) - label_56: - lw $v0 -112($fp) - addi $sp $sp 112 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -112 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -92($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -80($fp) +lw $t0 -92($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_41 +lw $t0 -92($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_42 +lw $t0 -92($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_43 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_44 +label_41: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_44 +label_42: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -96($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_44 +label_43: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_44 +label_44: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t0 -104($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -108($fp) +bne $t0 $zero label_53 +la $t0 data_27 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -60($fp) +la $t0 data_28 +sw $t0 -56($fp) +lw $t0 -56($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_45 +j label_46 +label_45: +li $v0 4 +la $a0 data_29 +syscall +li $v0 10 +syscall +label_46: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -44($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_47 +j label_48 +label_47: +li $v0 4 +la $a0 data_30 +syscall +li $v0 10 +syscall +label_48: +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_49 +j label_50 +label_49: +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_50: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_51 +j label_52 +label_51: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_52: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -112($fp) +j label_56 +label_53: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_54 +j label_55 +label_54: +li $v0 4 +la $a0 data_33 +syscall +li $v0 10 +syscall +label_55: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -112($fp) +label_56: +lw $v0 -112($fp) +addi $sp $sp 112 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_reflect_0_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -104 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_57 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_58 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_59 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_60 - label_57: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_60 - label_58: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_60 - label_59: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_60 - label_60: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -44($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -36($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -32($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_61 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_62 - lw $t0 -44($fp) - lw $t1 -32($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_63 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_64 - label_61: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_64 - label_62: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - move $a0 $t0 - lw $t0 -48($fp) - move $a1 $t0 - jal equal_str - sw $v0 -24($fp) - j label_64 - label_63: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_64 - label_64: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $v0 0($fp) - addi $sp $sp 104 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -104 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -60($fp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -92($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -88($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -84($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -80($fp) +lw $t0 -92($fp) +lw $t1 -88($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_57 +lw $t0 -92($fp) +lw $t1 -84($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_58 +lw $t0 -92($fp) +lw $t1 -80($fp) +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_59 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -68($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_60 +label_57: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_60 +label_58: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +move $a0 $t0 +lw $t0 -96($fp) +move $a1 $t0 +jal equal_str +sw $v0 -72($fp) +j label_60 +label_59: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t0 -100($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -72($fp) +j label_60 +label_60: +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -104($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -44($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -36($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -32($fp) +lw $t0 -44($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_61 +lw $t0 -44($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_62 +lw $t0 -44($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_63 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_64 +label_61: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_64 +label_62: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +move $a0 $t0 +lw $t0 -48($fp) +move $a1 $t0 +jal equal_str +sw $v0 -24($fp) +j label_64 +label_63: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_64 +label_64: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $v0 0($fp) +addi $sp $sp 104 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_reflect_X_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -44($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -36($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -32($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_65 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_66 - lw $t0 -44($fp) - lw $t1 -32($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_67 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_68 - label_65: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_68 - label_66: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - move $a0 $t0 - lw $t0 -48($fp) - move $a1 $t0 - jal equal_str - sw $v0 -24($fp) - j label_68 - label_67: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_68 - label_68: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $v0 0($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -56 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -44($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -36($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -32($fp) +lw $t0 -44($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_65 +lw $t0 -44($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_66 +lw $t0 -44($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_67 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_68 +label_65: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_68 +label_66: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +move $a0 $t0 +lw $t0 -48($fp) +move $a1 $t0 +jal equal_str +sw $v0 -24($fp) +j label_68 +label_67: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_68 +label_68: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $v0 0($fp) +addi $sp $sp 56 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_reflect_Y_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -44($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -36($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -32($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_69 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_70 - lw $t0 -44($fp) - lw $t1 -32($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_71 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_72 - label_69: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_72 - label_70: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - move $a0 $t0 - lw $t0 -48($fp) - move $a1 $t0 - jal equal_str - sw $v0 -24($fp) - j label_72 - label_71: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_72 - label_72: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $v0 0($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -56 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -44($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -36($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -32($fp) +lw $t0 -44($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_69 +lw $t0 -44($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_70 +lw $t0 -44($fp) +lw $t1 -32($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_71 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_72 +label_69: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_72 +label_70: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +move $a0 $t0 +lw $t0 -48($fp) +move $a1 $t0 +jal equal_str +sw $v0 -24($fp) +j label_72 +label_71: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +seq $t0 $t0 $t1 +sw $t0 -24($fp) +j label_72 +label_72: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $v0 0($fp) +addi $sp $sp 56 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_equal_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -124 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_73 - j label_74 - label_73: - li $v0 4 - la $a0 data_34 - syscall - li $v0 10 - syscall - label_74: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -104($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -100($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -96($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -92($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_75 - lw $t0 -104($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_76 - lw $t0 -104($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_77 - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - j label_78 - label_75: - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - j label_78 - label_76: - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - move $a0 $t0 - lw $t0 -108($fp) - move $a1 $t0 - jal equal_str - sw $v0 -84($fp) - j label_78 - label_77: - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - j label_78 - label_78: - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_79 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -124($fp) - j label_88 - label_79: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_80 - j label_81 - label_80: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_81: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -48($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -44($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -36($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_82 - lw $t0 -48($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_83 - lw $t0 -48($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_84 - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_85 - label_82: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_85 - label_83: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - move $a0 $t0 - lw $t0 -52($fp) - move $a1 $t0 - jal equal_str - sw $v0 -28($fp) - j label_85 - label_84: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_85 - label_85: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_86 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -68($fp) - j label_87 - label_86: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -68($fp) - label_87: - lw $t0 -68($fp) - sw $t0 -124($fp) - label_88: - lw $v0 -124($fp) - addi $sp $sp 124 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -124 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_73 +j label_74 +label_73: +li $v0 4 +la $a0 data_34 +syscall +li $v0 10 +syscall +label_74: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -104($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -100($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -96($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -92($fp) +lw $t0 -104($fp) +lw $t1 -100($fp) +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_75 +lw $t0 -104($fp) +lw $t1 -96($fp) +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_76 +lw $t0 -104($fp) +lw $t1 -92($fp) +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +bne $t0 $zero label_77 +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -76($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +j label_78 +label_75: +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +j label_78 +label_76: +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +move $a0 $t0 +lw $t0 -108($fp) +move $a1 $t0 +jal equal_str +sw $v0 -84($fp) +j label_78 +label_77: +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t0 -76($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +seq $t0 $t0 $t1 +sw $t0 -84($fp) +j label_78 +label_78: +lw $t0 -84($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_79 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -72($fp) +lw $t0 -72($fp) +sw $t0 -124($fp) +j label_88 +label_79: +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_80 +j label_81 +label_80: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_81: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -48($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -44($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -40($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -36($fp) +lw $t0 -48($fp) +lw $t1 -44($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_82 +lw $t0 -48($fp) +lw $t1 -40($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_83 +lw $t0 -48($fp) +lw $t1 -36($fp) +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_84 +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 -20($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_85 +label_82: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_85 +label_83: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +move $a0 $t0 +lw $t0 -52($fp) +move $a1 $t0 +jal equal_str +sw $v0 -28($fp) +j label_85 +label_84: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -56($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +seq $t0 $t0 $t1 +sw $t0 -28($fp) +j label_85 +label_85: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 -60($fp) +lw $t1 12($t0) +sw $t1 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_86 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -68($fp) +j label_87 +label_86: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -68($fp) +label_87: +lw $t0 -68($fp) +sw $t0 -124($fp) +label_88: +lw $v0 -124($fp) +addi $sp $sp 124 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_x_value_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_y_value_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Complex - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Complex +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra - jr $ra - \ No newline at end of file +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index 05e09f86d..482e66de8 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -56,1912 +56,1805 @@ data_26: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word function_pal_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word function_pal_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_6_prototype: - .word 5 - .word 5 - .word type_6_dispatch - .word 0 - .word -1 +.word 5 +.word 5 +.word type_6_dispatch +.word 0 +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_7 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_7 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_10 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_10 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_pal_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -276 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -236($fp) - lw $t0 -236($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_11 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -232($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -228($fp) - lw $t0 -232($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -260($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -256($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -252($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -248($fp) - lw $t0 -260($fp) - lw $t1 -256($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_5 - lw $t0 -260($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_6 - lw $t0 -260($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_7 - lw $t0 -232($fp) - lw $t1 -228($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_8 - label_5: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -228($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_8 - label_6: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -228($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - move $a0 $t0 - lw $t0 -264($fp) - move $a1 $t0 - jal equal_str - sw $v0 -240($fp) - j label_8 - label_7: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -228($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_8 - label_8: - lw $t0 -240($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -276($fp) - bne $t0 $zero label_35 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_10: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -176($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -172($fp) - lw $t0 -176($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -204($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -200($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -196($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -192($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -188($fp) - lw $t0 -188($fp) - bne $t0 $zero label_11 - lw $t0 -204($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -188($fp) - lw $t0 -188($fp) - bne $t0 $zero label_12 - lw $t0 -204($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -188($fp) - lw $t0 -188($fp) - bne $t0 $zero label_13 - lw $t0 -176($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -184($fp) - j label_14 - label_11: - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -172($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -212($fp) - lw $t1 -208($fp) - seq $t0 $t0 $t1 - sw $t0 -184($fp) - j label_14 - label_12: - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -172($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -212($fp) - move $a0 $t0 - lw $t0 -208($fp) - move $a1 $t0 - jal equal_str - sw $v0 -184($fp) - j label_14 - label_13: - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -172($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -212($fp) - lw $t1 -208($fp) - seq $t0 $t0 $t1 - sw $t0 -184($fp) - j label_14 - label_14: - lw $t0 -184($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 -216($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_33 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -124($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_16: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -112($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_18: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) - sub $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_20: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -72($fp) - lw $t0 -112($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -148($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -144($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -136($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_21 - lw $t0 -148($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_22 - lw $t0 -148($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_23 - lw $t0 -112($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - j label_24 - label_21: - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) - lw $t1 -152($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - j label_24 - label_22: - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) - move $a0 $t0 - lw $t0 -152($fp) - move $a1 $t0 - jal equal_str - sw $v0 -128($fp) - j label_24 - label_23: - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) - lw $t1 -152($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - j label_24 - label_24: - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_25 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -168($fp) - j label_32 - label_25: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_26 - j label_27 - label_26: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_27: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - sub $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_28 - j label_29 - label_28: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_29: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -28($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_30 - j label_31 - label_30: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_31: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -168($fp) - label_32: - lw $t0 -168($fp) - sw $t0 -224($fp) - j label_34 - label_33: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -224($fp) - label_34: - lw $t0 -224($fp) - sw $t0 -280($fp) - j label_36 - label_35: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -280($fp) - label_36: - lw $v0 -280($fp) - addi $sp $sp 276 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -276 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -236($fp) +lw $t0 -236($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_11 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -232($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -228($fp) +lw $t0 -232($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -260($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -256($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -252($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -248($fp) +lw $t0 -260($fp) +lw $t1 -256($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_5 +lw $t0 -260($fp) +lw $t1 -252($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_6 +lw $t0 -260($fp) +lw $t1 -248($fp) +seq $t0 $t0 $t1 +sw $t0 -244($fp) +lw $t0 -244($fp) +bne $t0 $zero label_7 +lw $t0 -232($fp) +lw $t1 -228($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_8 +label_5: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -228($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +lw $t1 -264($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_8 +label_6: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -228($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +move $a0 $t0 +lw $t0 -264($fp) +move $a1 $t0 +jal equal_str +sw $v0 -240($fp) +j label_8 +label_7: +lw $t0 -232($fp) +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t0 -228($fp) +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +lw $t1 -264($fp) +seq $t0 $t0 $t1 +sw $t0 -240($fp) +j label_8 +label_8: +lw $t0 -240($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -276($fp) +lw $t0 -276($fp) +bne $t0 $zero label_35 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -180($fp) +lw $t0 -180($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_10: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -176($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -172($fp) +lw $t0 -176($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -204($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -200($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -196($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -192($fp) +lw $t0 -204($fp) +lw $t1 -200($fp) +seq $t0 $t0 $t1 +sw $t0 -188($fp) +lw $t0 -188($fp) +bne $t0 $zero label_11 +lw $t0 -204($fp) +lw $t1 -196($fp) +seq $t0 $t0 $t1 +sw $t0 -188($fp) +lw $t0 -188($fp) +bne $t0 $zero label_12 +lw $t0 -204($fp) +lw $t1 -192($fp) +seq $t0 $t0 $t1 +sw $t0 -188($fp) +lw $t0 -188($fp) +bne $t0 $zero label_13 +lw $t0 -176($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -184($fp) +j label_14 +label_11: +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -172($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -212($fp) +lw $t1 -208($fp) +seq $t0 $t0 $t1 +sw $t0 -184($fp) +j label_14 +label_12: +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -172($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -212($fp) +move $a0 $t0 +lw $t0 -208($fp) +move $a1 $t0 +jal equal_str +sw $v0 -184($fp) +j label_14 +label_13: +lw $t0 -176($fp) +lw $t1 12($t0) +sw $t1 -212($fp) +lw $t0 -172($fp) +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t0 -212($fp) +lw $t1 -208($fp) +seq $t0 $t0 $t1 +sw $t0 -184($fp) +j label_14 +label_14: +lw $t0 -184($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -216($fp) +lw $t0 -216($fp) +lw $t1 12($t0) +sw $t1 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_33 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -124($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -120($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -116($fp) +lw $t0 -116($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_16: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -124($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -120($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -112($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -92($fp) +lw $t0 -92($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_18: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -88($fp) +lw $t0 -88($fp) +lw $t1 12($t0) +sw $t1 -104($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -100($fp) +lw $t0 -104($fp) +lw $t1 -100($fp) +sub $t0 $t0 $t1 +sw $t0 -96($fp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -108($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_20: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -108($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -72($fp) +lw $t0 -112($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -148($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -144($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -140($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -136($fp) +lw $t0 -148($fp) +lw $t1 -144($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +lw $t0 -132($fp) +bne $t0 $zero label_21 +lw $t0 -148($fp) +lw $t1 -140($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +lw $t0 -132($fp) +bne $t0 $zero label_22 +lw $t0 -148($fp) +lw $t1 -136($fp) +seq $t0 $t0 $t1 +sw $t0 -132($fp) +lw $t0 -132($fp) +bne $t0 $zero label_23 +lw $t0 -112($fp) +lw $t1 -72($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +j label_24 +label_21: +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -156($fp) +lw $t1 -152($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +j label_24 +label_22: +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -156($fp) +move $a0 $t0 +lw $t0 -152($fp) +move $a1 $t0 +jal equal_str +sw $v0 -128($fp) +j label_24 +label_23: +lw $t0 -112($fp) +lw $t1 12($t0) +sw $t1 -156($fp) +lw $t0 -72($fp) +lw $t1 12($t0) +sw $t1 -152($fp) +lw $t0 -156($fp) +lw $t1 -152($fp) +seq $t0 $t0 $t1 +sw $t0 -128($fp) +j label_24 +label_24: +lw $t0 -128($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -160($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_25 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 -68($fp) +sw $t0 -168($fp) +j label_32 +label_25: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -44($fp) +lw $t0 -44($fp) +bne $t0 $zero label_26 +j label_27 +label_26: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_27: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -40($fp) +lw $t0 -40($fp) +lw $t1 12($t0) +sw $t1 -56($fp) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 -36($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -56($fp) +lw $t1 -52($fp) +sub $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_28 +j label_29 +label_28: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_29: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -28($fp) +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_30 +j label_31 +label_30: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_31: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -168($fp) +label_32: +lw $t0 -168($fp) +sw $t0 -224($fp) +j label_34 +label_33: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 -16($fp) +sw $t0 -224($fp) +label_34: +lw $t0 -224($fp) +sw $t0 -280($fp) +j label_36 +label_35: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -280($fp) +label_36: +lw $v0 -280($fp) +addi $sp $sp 276 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -92 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - la $t0 data_19 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_37 - j label_38 - label_37: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_38: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -68($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_39 - j label_40 - label_39: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_40: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_41 - j label_42 - label_41: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_42: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_45 - la $t0 data_23 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_44: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -64($fp) - j label_48 - label_45: - la $t0 data_25 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_46 - j label_47 - label_46: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_47: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -64($fp) - label_48: - lw $v0 -64($fp) - addi $sp $sp 92 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -92 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -92($fp) +not $t0 $t0 +addi $t0 $t0 1 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 -96($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +la $t0 data_19 +sw $t0 -80($fp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -76($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -72($fp) +lw $t0 -72($fp) +bne $t0 $zero label_37 +j label_38 +label_37: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_38: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -76($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -68($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_39 +j label_40 +label_39: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_40: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 16($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_41 +j label_42 +label_41: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_42: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -44($fp) +lw $t0 -44($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_45 +la $t0 data_23 +sw $t0 -40($fp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -36($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_44: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -64($fp) +j label_48 +label_45: +la $t0 data_25 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_46 +j label_47 +label_46: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_47: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -64($fp) +label_48: +lw $v0 -64($fp) +addi $sp $sp 92 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra - jr $ra - \ No newline at end of file +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index cf0bfb264..2dac74189 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -42,1742 +42,1635 @@ data_19: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_6_prototype: - .word 5 - .word 9 - .word type_6_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 +.word 5 +.word 9 +.word type_6_dispatch +.word 0 +.word 0 +.word 0 +.word 0 +.word 0 +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_7 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_7 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_10 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_10 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -388 - la $t0 data_11 - sw $t0 -372($fp) - lw $t0 -372($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -368($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -364($fp) - lw $t0 -364($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -368($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -360($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -356($fp) - lw $t0 -356($fp) - sw $t0 -376($fp) - lw $t0 0($fp) - lw $t1 -376($fp) - sw $t1 20($t0) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -352($fp) - lw $t0 0($fp) - lw $t1 -352($fp) - sw $t1 28($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -348($fp) - lw $t0 0($fp) - lw $t1 -348($fp) - sw $t1 12($t0) - li $t0 500 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -340($fp) - lw $t0 -340($fp) - sw $t0 -344($fp) - lw $t0 0($fp) - lw $t1 -344($fp) - sw $t1 24($t0) - label_5: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -328($fp) - lw $t0 -328($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -332($fp) - bne $t0 $zero label_6 - j label_30 - label_6: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -320($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -308($fp) - lw $t0 -308($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -320($fp) - lw $t1 -316($fp) - add $t0 $t0 $t1 - sw $t0 -312($fp) - lw $t0 -312($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -324($fp) - lw $t0 -324($fp) - lw $t1 0($fp) - addi $t1 $t1 28 - sw $t0 0($t1) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -304($fp) - lw $t0 -304($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - label_7: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - mul $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - slt $t1 $t0 $t1 - sw $t1 -276($fp) - lw $t0 -276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -288($fp) - lw $t0 -288($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_16 - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -176($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -164($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -164($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_8 - j label_9 - label_8: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_9: - lw $t0 -176($fp) - lw $t1 -172($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -168($fp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -180($fp) - lw $t0 -180($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) - mul $t0 $t0 $t1 - sw $t0 -184($fp) - lw $t0 -184($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -196($fp) - lw $t0 -196($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -208($fp) - lw $t1 -204($fp) - sub $t0 $t0 $t1 - sw $t0 -200($fp) - lw $t0 -200($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -212($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -212($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -236($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -232($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -228($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -224($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_10 - lw $t0 -236($fp) - lw $t1 -228($fp) - seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_11 - lw $t0 -236($fp) - lw $t1 -224($fp) - seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_12 - lw $t0 -212($fp) - lw $t1 -160($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - j label_13 - label_10: - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - j label_13 - label_11: - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - move $a0 $t0 - lw $t0 -240($fp) - move $a1 $t0 - jal equal_str - sw $v0 -216($fp) - j label_13 - label_12: - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - j label_13 - label_13: - lw $t0 -216($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -248($fp) - lw $t0 -248($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -252($fp) - bne $t0 $zero label_14 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - sw $t0 -256($fp) - j label_15 - label_14: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - sw $t0 -256($fp) - label_15: - lw $t0 -256($fp) - sw $t0 -296($fp) - j label_17 - label_16: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - sw $t0 -296($fp) - label_17: - lw $t0 -296($fp) - lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -300($fp) - bne $t0 $zero label_18 - j label_19 - label_18: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -140($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -128($fp) - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - add $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - j label_7 - label_19: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - mul $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - slt $t1 $t0 $t1 - sw $t1 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_20 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -124($fp) - j label_25 - label_20: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_22: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -76($fp) - la $t0 data_15 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_24: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -124($fp) - label_25: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - sle $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_26 - la $t0 data_17 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -56($fp) - j label_29 - label_26: - la $t0 data_18 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_28: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -56($fp) - label_29: - j label_5 - label_30: - sw $zero -336($fp) - lw $t0 0($fp) - lw $t1 -336($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 388 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -388 +la $t0 data_11 +sw $t0 -372($fp) +lw $t0 -372($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -368($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -364($fp) +lw $t0 -364($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -368($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -360($fp) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -356($fp) +lw $t0 -356($fp) +sw $t0 -376($fp) +lw $t0 0($fp) +lw $t1 -376($fp) +sw $t1 20($t0) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +sw $t0 -352($fp) +lw $t0 0($fp) +lw $t1 -352($fp) +sw $t1 28($t0) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -348($fp) +lw $t0 0($fp) +lw $t1 -348($fp) +sw $t1 12($t0) +li $t0 500 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -340($fp) +lw $t0 -340($fp) +sw $t0 -344($fp) +lw $t0 0($fp) +lw $t1 -344($fp) +sw $t1 24($t0) +label_5: +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -328($fp) +lw $t0 -328($fp) +lw $t1 12($t0) +sw $t1 -332($fp) +lw $t0 -332($fp) +bne $t0 $zero label_6 +j label_30 +label_6: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -320($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -308($fp) +lw $t0 -308($fp) +lw $t1 12($t0) +sw $t1 -316($fp) +lw $t0 -320($fp) +lw $t1 -316($fp) +add $t0 $t0 $t1 +sw $t0 -312($fp) +lw $t0 -312($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -324($fp) +lw $t0 -324($fp) +lw $t1 0($fp) +addi $t1 $t1 28 +sw $t0 0($t1) +li $t0 2 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -304($fp) +lw $t0 -304($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +label_7: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -284($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -268($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -264($fp) +lw $t0 -268($fp) +lw $t1 -264($fp) +mul $t0 $t0 $t1 +sw $t0 -260($fp) +lw $t0 -260($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -272($fp) +lw $t0 -272($fp) +lw $t1 12($t0) +sw $t1 -280($fp) +lw $t0 -284($fp) +lw $t1 -280($fp) +slt $t1 $t0 $t1 +sw $t1 -276($fp) +lw $t0 -276($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -288($fp) +lw $t0 -288($fp) +lw $t1 12($t0) +sw $t1 -292($fp) +lw $t0 -292($fp) +bne $t0 $zero label_16 +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -208($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -192($fp) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -176($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -164($fp) +lw $t0 -164($fp) +lw $t1 12($t0) +sw $t1 -164($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -172($fp) +lw $t0 -164($fp) +lw $t1 -172($fp) +seq $t0 $t0 $t1 +sw $t0 -164($fp) +lw $t0 -164($fp) +bne $t0 $zero label_8 +j label_9 +label_8: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_9: +lw $t0 -176($fp) +lw $t1 -172($fp) +div $t0 $t1 +mflo $t0 +sw $t0 -168($fp) +lw $t0 -168($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -180($fp) +lw $t0 -180($fp) +lw $t1 12($t0) +sw $t1 -188($fp) +lw $t0 -192($fp) +lw $t1 -188($fp) +mul $t0 $t0 $t1 +sw $t0 -184($fp) +lw $t0 -184($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -196($fp) +lw $t0 -196($fp) +lw $t1 12($t0) +sw $t1 -204($fp) +lw $t0 -208($fp) +lw $t1 -204($fp) +sub $t0 $t0 $t1 +sw $t0 -200($fp) +lw $t0 -200($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -212($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -160($fp) +lw $t0 -212($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -236($fp) +la $t0 types_table +addi $t0 $t0 12 +lw $t0 0($t0) +sw $t0 -232($fp) +la $t0 types_table +addi $t0 $t0 8 +lw $t0 0($t0) +sw $t0 -228($fp) +la $t0 types_table +addi $t0 $t0 16 +lw $t0 0($t0) +sw $t0 -224($fp) +lw $t0 -236($fp) +lw $t1 -232($fp) +seq $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_10 +lw $t0 -236($fp) +lw $t1 -228($fp) +seq $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_11 +lw $t0 -236($fp) +lw $t1 -224($fp) +seq $t0 $t0 $t1 +sw $t0 -220($fp) +lw $t0 -220($fp) +bne $t0 $zero label_12 +lw $t0 -212($fp) +lw $t1 -160($fp) +seq $t0 $t0 $t1 +sw $t0 -216($fp) +j label_13 +label_10: +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -240($fp) +lw $t0 -244($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -216($fp) +j label_13 +label_11: +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -240($fp) +lw $t0 -244($fp) +move $a0 $t0 +lw $t0 -240($fp) +move $a1 $t0 +jal equal_str +sw $v0 -216($fp) +j label_13 +label_12: +lw $t0 -212($fp) +lw $t1 12($t0) +sw $t1 -244($fp) +lw $t0 -160($fp) +lw $t1 12($t0) +sw $t1 -240($fp) +lw $t0 -244($fp) +lw $t1 -240($fp) +seq $t0 $t0 $t1 +sw $t0 -216($fp) +j label_13 +label_13: +lw $t0 -216($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -248($fp) +lw $t0 -248($fp) +lw $t1 12($t0) +sw $t1 -252($fp) +lw $t0 -252($fp) +bne $t0 $zero label_14 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -156($fp) +lw $t0 -156($fp) +sw $t0 -256($fp) +j label_15 +label_14: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -152($fp) +lw $t0 -152($fp) +sw $t0 -256($fp) +label_15: +lw $t0 -256($fp) +sw $t0 -296($fp) +j label_17 +label_16: +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -148($fp) +lw $t0 -148($fp) +sw $t0 -296($fp) +label_17: +lw $t0 -296($fp) +lw $t1 12($t0) +sw $t1 -300($fp) +lw $t0 -300($fp) +bne $t0 $zero label_18 +j label_19 +label_18: +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -140($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -128($fp) +lw $t0 -128($fp) +lw $t1 12($t0) +sw $t1 -136($fp) +lw $t0 -140($fp) +lw $t1 -136($fp) +add $t0 $t0 $t1 +sw $t0 -132($fp) +lw $t0 -132($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -144($fp) +lw $t0 -144($fp) +lw $t1 0($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +j label_7 +label_19: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -112($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -96($fp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -92($fp) +lw $t0 -96($fp) +lw $t1 -92($fp) +mul $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -100($fp) +lw $t0 -100($fp) +lw $t1 12($t0) +sw $t1 -108($fp) +lw $t0 -112($fp) +lw $t1 -108($fp) +slt $t1 $t0 $t1 +sw $t1 -104($fp) +lw $t0 -104($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -116($fp) +lw $t0 -116($fp) +lw $t1 12($t0) +sw $t1 -120($fp) +lw $t0 -120($fp) +bne $t0 $zero label_20 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -84($fp) +lw $t0 -84($fp) +sw $t0 -124($fp) +j label_25 +label_20: +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 0($fp) +addi $t1 $t1 20 +sw $t0 0($t1) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -80($fp) +lw $t0 -80($fp) +bne $t0 $zero label_21 +j label_22 +label_21: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_22: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 20($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -76($fp) +la $t0 data_15 +sw $t0 -72($fp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -68($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -64($fp) +lw $t0 -64($fp) +bne $t0 $zero label_23 +j label_24 +label_23: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_24: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -60($fp) +lw $t0 -60($fp) +sw $t0 -124($fp) +label_25: +lw $t4 0($fp) +lw $t4 24($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -44($fp) +lw $t4 0($fp) +lw $t4 28($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 -44($fp) +lw $t1 -40($fp) +sle $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -48($fp) +lw $t0 -48($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 -52($fp) +bne $t0 $zero label_26 +la $t0 data_17 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -56($fp) +j label_29 +label_26: +la $t0 data_18 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_27 +j label_28 +label_27: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_28: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -56($fp) +label_29: +j label_5 +label_30: +sw $zero -336($fp) +lw $t0 0($fp) +lw $t1 -336($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 388 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -28 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 28 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra - - - -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra - jr $ra - \ No newline at end of file +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index 9c53891bb..05870c3ba 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -40,1302 +40,1195 @@ data_18: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 +.word 5 +.word 4 +.word type_6_dispatch +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_7 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_9 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_7 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_10 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_10 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -92 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_11 - syscall - li $v0 10 - syscall - label_4: - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 4($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -72($fp) - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - jal __init_at_Object - sw $v0 -60($fp) - lw $t0 -60($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 4($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_10: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_12: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_14: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - la $t0 data_17 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_16: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 92 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -92 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -100($fp) +li $t0 3 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -96($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -88($fp) +lw $t0 -88($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -92($fp) +lw $t0 -92($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -84($fp) +lw $t0 -84($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_11 +syscall +li $v0 10 +syscall +label_4: +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -92($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 4($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -80($fp) +lw $t0 -80($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -76($fp) +lw $t0 -76($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_12 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -100($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -96($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -80($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -72($fp) +li $t0 4 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -68($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -64($fp) +jal __init_at_Object +sw $v0 -60($fp) +lw $t0 -60($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_8: +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 4($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -52($fp) +lw $t0 -52($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_10: +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -52($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_12: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_14: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -72($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -28($fp) +la $t0 data_17 +sw $t0 -24($fp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_16: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 92 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra - jr $ra - \ No newline at end of file +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index 2685db1ea..86bc961a8 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -94,2853 +94,2746 @@ data_45: .asciiz "RuntimeError: Function call in a void instance" types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 +.word data_1 +.word data_2 +.word data_3 +.word data_4 +.word data_5 +.word data_6 +.word data_7 +.word data_8 +.word data_9 prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype + .word type_1_prototype + .word type_2_prototype + .word type_3_prototype + .word type_4_prototype + .word type_5_prototype + .word type_6_prototype + .word type_7_prototype + .word type_8_prototype + .word type_9_prototype type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Object type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 +.word 0 +.word 4 +.word type_1_dispatch +.word -1 type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_out_string_at_IO +.word function_out_int_at_IO +.word function_in_string_at_IO +.word function_in_int_at_IO +.word __init_at_IO type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 +.word 1 +.word 4 +.word type_2_dispatch +.word -1 type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word function_length_at_String +.word function_concat_at_String +.word function_substr_at_String +.word __init_at_String type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 +.word 2 +.word 6 +.word type_3_dispatch +.word 0 +.word 0 +.word -1 type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Int type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 +.word 3 +.word 5 +.word type_4_dispatch +.word 0 +.word -1 type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool +.word function_abort_at_Object +.word function_type_name_at_Object +.word function_copy_at_Object +.word __init_at_Bool type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 +.word 4 +.word 5 +.word type_5_dispatch +.word 0 +.word -1 type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_List - .word function_cdr_at_List - .word function_cons_at_List - .word function_insert_at_List - .word function_isNil_at_List - .word function_print_list_at_List - .word function_rcons_at_List - .word function_rev_at_List - .word function_sort_at_List - .word __init_attr_at_List - .word __init_at_List +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_car_at_List +.word function_cdr_at_List +.word function_cons_at_List +.word function_insert_at_List +.word function_isNil_at_List +.word function_print_list_at_List +.word function_rcons_at_List +.word function_rev_at_List +.word function_sort_at_List +.word __init_attr_at_List +.word __init_at_List type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 +.word 5 +.word 4 +.word type_6_dispatch +.word -1 type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_Cons - .word function_cdr_at_Cons - .word function_cons_at_List - .word function_insert_at_Cons - .word function_isNil_at_Cons - .word function_print_list_at_Cons - .word function_rcons_at_Cons - .word function_rev_at_Cons - .word function_sort_at_Cons - .word function_init_at_Cons - .word __init_attr_at_Cons - .word __init_at_Cons +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_car_at_Cons +.word function_cdr_at_Cons +.word function_cons_at_List +.word function_insert_at_Cons +.word function_isNil_at_Cons +.word function_print_list_at_Cons +.word function_rcons_at_Cons +.word function_rev_at_Cons +.word function_sort_at_Cons +.word function_init_at_Cons +.word __init_attr_at_Cons +.word __init_at_Cons type_7_prototype: - .word 6 - .word 6 - .word type_7_dispatch - .word 0 - .word 0 - .word -1 +.word 6 +.word 6 +.word type_7_dispatch +.word 0 +.word 0 +.word -1 type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_List - .word function_cdr_at_List - .word function_cons_at_List - .word function_insert_at_Nil - .word function_isNil_at_Nil - .word function_print_list_at_Nil - .word function_rcons_at_Nil - .word function_rev_at_Nil - .word function_sort_at_Nil - .word __init_attr_at_Nil - .word __init_at_Nil +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_car_at_List +.word function_cdr_at_List +.word function_cons_at_List +.word function_insert_at_Nil +.word function_isNil_at_Nil +.word function_print_list_at_Nil +.word function_rcons_at_Nil +.word function_rev_at_Nil +.word function_sort_at_Nil +.word __init_attr_at_Nil +.word __init_at_Nil type_8_prototype: - .word 7 - .word 4 - .word type_8_dispatch - .word -1 +.word 7 +.word 4 +.word type_8_dispatch +.word -1 type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_iota_at_Main - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main +.word function_abort_at_Object +.word function_copy_at_Object +.word function_type_name_at_Object +.word function_in_int_at_IO +.word function_in_string_at_IO +.word function_out_int_at_IO +.word function_out_string_at_IO +.word function_iota_at_Main +.word function_main_at_Main +.word __init_attr_at_Main +.word __init_at_Main type_9_prototype: - .word 8 - .word 5 - .word type_9_dispatch - .word 0 - .word -1 +.word 8 +.word 5 +.word type_9_dispatch +.word 0 +.word -1 .text .globl main main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +jal __init_at_Main +sw $v0 -12($fp) +lw $t0 -12($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal function_main_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +li $v0 0 +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +li $v0 10 +syscall __init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 0 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_12 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_10 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +la $t0 data_12 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +la $t0 data_10 +sw $t0 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +li $v0 10 +syscall +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 0($t0) +sll $t1 $t1 2 +la $t0 types_table +add $t0 $t0 $t1 +lw $t1 0($t0) +sw $t1 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $a0 4($t0) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t0 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 4 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -12($fp) +li $v0 1 +lw $a0 -12($fp) +syscall +lw $v0 4($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +jal read_string +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $v0 5 +syscall +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 2 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -20($fp) +lw $t0 -20($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $a0 0($fp) +jal length +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -20($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 -20($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -32($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 4($fp) +lw $t1 16($t0) +sw $t1 -24($fp) +lw $t0 0($fp) +lw $t1 16($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +lw $t0 -20($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $a0 -32($fp) +lw $a1 -28($fp) +lw $a2 -24($fp) +jal concat +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -36 +lw $t0 8($fp) +lw $t1 12($t0) +sw $t1 -16($fp) +lw $t0 4($fp) +lw $t1 12($t0) +sw $t1 -40($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -36($fp) +lw $t0 8($fp) +lw $t1 16($t0) +sw $t1 -32($fp) +lw $t0 -32($fp) +lw $t1 12($t0) +sw $t1 -28($fp) +lw $t0 -36($fp) +lw $t1 -40($fp) +add $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -28($fp) +lw $t1 -24($fp) +slt $t1 $t0 $t1 +sw $t1 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_1 +j label_2 +label_1: +li $v0 4 +la $a0 data_13 +syscall +li $v0 10 +syscall +label_2: +lw $a0 -16($fp) +lw $a1 -40($fp) +lw $a2 -36($fp) +jal substr +sw $v0 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 36 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 3 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 4 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 0($fp) +sw $t1 12($t0) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_isNil_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_3 +j label_4 +label_3: +li $v0 4 +la $a0 data_14 +syscall +li $v0 10 +syscall +label_4: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cons_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -24($fp) - lw $t0 -24($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +jal __init_at_Cons +sw $v0 -20($fp) +lw $t0 -20($fp) +sw $t0 -24($fp) +lw $t0 -24($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_5 +j label_6 +label_5: +li $v0 4 +la $a0 data_15 +syscall +li $v0 10 +syscall +label_6: +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_car_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_8: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_7 +j label_8 +label_7: +li $v0 4 +la $a0 data_16 +syscall +li $v0 10 +syscall +label_8: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cdr_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_10: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - jal __init_at_List - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -20($fp) +lw $t0 -20($fp) +bne $t0 $zero label_9 +j label_10 +label_9: +li $v0 4 +la $a0 data_17 +syscall +li $v0 10 +syscall +label_10: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -16($fp) +jal __init_at_List +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_rev_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_12: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_11 +j label_12 +label_11: +li $v0 4 +la $a0 data_18 +syscall +li $v0 10 +syscall +label_12: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_sort_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_14: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_13 +j label_14 +label_13: +li $v0 4 +la $a0 data_19 +syscall +li $v0 10 +syscall +label_14: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_insert_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_16: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_15 +j label_16 +label_15: +li $v0 4 +la $a0 data_20 +syscall +li $v0 10 +syscall +label_16: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_rcons_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_18: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_17 +j label_18 +label_17: +li $v0 4 +la $a0 data_21 +syscall +li $v0 10 +syscall +label_18: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 32($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_list_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_20: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_19 +j label_20 +label_19: +li $v0 4 +la $a0 data_22 +syscall +li $v0 10 +syscall +label_20: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 0($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 5 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_List +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -20($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -20 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_List +addi $sp $sp 4 +sw $v0 -20($fp) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -16($fp) +lw $t0 0($fp) +lw $t1 -16($fp) +sw $t1 12($t0) +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 16($t0) +lw $v0 0($fp) +addi $sp $sp 20 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_isNil_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 4($fp) +lw $t1 8($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 0($fp) +lw $t1 8($fp) +addi $t1 $t1 16 +sw $t0 0($t1) +lw $v0 8($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_car_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_cdr_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_rev_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_22: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_24: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_21 +j label_22 +label_21: +li $v0 4 +la $a0 data_23 +syscall +li $v0 10 +syscall +label_22: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_23 +j label_24 +label_23: +li $v0 4 +la $a0 data_24 +syscall +li $v0 10 +syscall +label_24: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_sort_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_25 - j label_26 - label_25: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_26: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 60($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_28: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -24 +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_25 +j label_26 +label_25: +li $v0 4 +la $a0 data_25 +syscall +li $v0 10 +syscall +label_26: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 60($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_27 +j label_28 +label_27: +li $v0 4 +la $a0 data_26 +syscall +li $v0 10 +syscall +label_28: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 24 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_insert_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -64 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - slt $t1 $t0 $t1 - sw $t1 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_33 - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_29 - j label_30 - label_29: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_30: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - jal __init_at_Cons - sw $v0 -32($fp) - lw $t0 -32($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_31 - j label_32 - label_31: - li $v0 4 - la $a0 data_28 - syscall - li $v0 10 - syscall - label_32: - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -64($fp) - j label_36 - label_33: - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_34 - j label_35 - label_34: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_35: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -64($fp) - label_36: - lw $v0 -64($fp) - addi $sp $sp 64 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -64 +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +slt $t1 $t0 $t1 +sw $t1 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_33 +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_29 +j label_30 +label_29: +li $v0 4 +la $a0 data_27 +syscall +li $v0 10 +syscall +label_30: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 40($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +jal __init_at_Cons +sw $v0 -32($fp) +lw $t0 -32($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_31 +j label_32 +label_31: +li $v0 4 +la $a0 data_28 +syscall +li $v0 10 +syscall +label_32: +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -24($fp) +lw $t0 -24($fp) +sw $t0 -64($fp) +j label_36 +label_33: +jal __init_at_Cons +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_34 +j label_35 +label_34: +li $v0 4 +la $a0 data_29 +syscall +li $v0 10 +syscall +label_35: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $t0 -12($fp) +sw $t0 -64($fp) +label_36: +lw $v0 -64($fp) +addi $sp $sp 64 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_rcons_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_37 - j label_38 - label_37: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_38: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -24($fp) - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_39 - j label_40 - label_39: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_40: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -28 +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -28($fp) +lw $t0 -28($fp) +bne $t0 $zero label_37 +j label_38 +label_37: +li $v0 4 +la $a0 data_30 +syscall +li $v0 10 +syscall +label_38: +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -24($fp) +jal __init_at_Cons +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_39 +j label_40 +label_39: +li $v0 4 +la $a0 data_31 +syscall +li $v0 10 +syscall +label_40: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -24($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 28 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_list_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -40 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_41 - j label_42 - label_41: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_42: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - la $t0 data_33 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_34 - syscall - li $v0 10 - syscall - label_44: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_45 - j label_46 - label_45: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_46: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 40 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -40 +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_41 +j label_42 +label_41: +li $v0 4 +la $a0 data_32 +syscall +li $v0 10 +syscall +label_42: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 20($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +la $t0 data_33 +sw $t0 -32($fp) +lw $t0 -32($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_43 +j label_44 +label_43: +li $v0 4 +la $a0 data_34 +syscall +li $v0 10 +syscall +label_44: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -20($fp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_45 +j label_46 +label_45: +li $v0 4 +la $a0 data_35 +syscall +li $v0 10 +syscall +label_46: +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 0($fp) +lw $t4 16($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 40 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Cons - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -16 +li $t0 6 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Cons +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 16 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_List +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 0($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_isNil_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_rev_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_sort_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp 0 +lw $v0 0($fp) +addi $sp $sp 0 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_insert_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_47 - j label_48 - label_47: - li $v0 4 - la $a0 data_36 - syscall - li $v0 10 - syscall - label_48: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 4($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_47 +j label_48 +label_47: +li $v0 4 +la $a0 data_36 +syscall +li $v0 10 +syscall +label_48: +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 52($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_rcons_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_49 - j label_50 - label_49: - li $v0 4 - la $a0 data_37 - syscall - li $v0 10 - syscall - label_50: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +jal __init_at_Cons +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_49 +j label_50 +label_49: +li $v0 4 +la $a0 data_37 +syscall +li $v0 10 +syscall +label_50: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 4($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_print_list_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -4 +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 4 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Nil - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +li $t0 7 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Nil +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -8 +lw $t0 0($fp) +lw $t1 -12($fp) +sw $t1 12($t0) +lw $v0 0($fp) +addi $sp $sp 8 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_iota_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -68 - jal __init_at_Nil - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - sw $t0 -68($fp) - label_51: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - slt $t1 $t0 $t1 - sw $t1 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_52 - j label_55 - label_52: - jal __init_at_Cons - sw $v0 -40($fp) - lw $t0 -40($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_53 - j label_54 - label_53: - li $v0 4 - la $a0 data_38 - syscall - li $v0 10 - syscall - label_54: - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -68($fp) - j label_51 - label_55: - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 68 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -68 +jal __init_at_Nil +sw $v0 -72($fp) +lw $t0 -72($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +li $t0 0 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -64($fp) +lw $t0 -64($fp) +sw $t0 -68($fp) +label_51: +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -52($fp) +lw $t0 0($fp) +lw $t1 12($t0) +sw $t1 -48($fp) +lw $t0 -52($fp) +lw $t1 -48($fp) +slt $t1 $t0 $t1 +sw $t1 -44($fp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Bool +addi $sp $sp 4 +sw $v0 -56($fp) +lw $t0 -56($fp) +lw $t1 12($t0) +sw $t1 -60($fp) +lw $t0 -60($fp) +bne $t0 $zero label_52 +j label_55 +label_52: +jal __init_at_Cons +sw $v0 -40($fp) +lw $t0 -40($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -36($fp) +lw $t0 -36($fp) +bne $t0 $zero label_53 +j label_54 +label_53: +li $v0 4 +la $a0 data_38 +syscall +li $v0 10 +syscall +label_54: +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -68($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -40($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 64($t0) +jalr $ra $t0 +addi $sp $sp 12 +sw $v0 -32($fp) +lw $t0 -32($fp) +lw $t1 4($fp) +addi $t1 $t1 12 +sw $t0 0($t1) +lw $t0 -68($fp) +lw $t1 12($t0) +sw $t1 -24($fp) +li $t0 1 +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -12($fp) +lw $t0 -12($fp) +lw $t1 12($t0) +sw $t1 -20($fp) +lw $t0 -24($fp) +lw $t1 -20($fp) +add $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_Int +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +sw $t0 -68($fp) +j label_51 +label_55: +lw $t4 4($fp) +lw $t4 12($t4) +addi $sp $sp -4 +sw $t4 0($sp) +lw $v0 0($sp) +addi $sp $sp 4 +addi $sp $sp 68 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -60 - la $t0 data_39 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_56 - j label_57 - label_56: - li $v0 4 - la $a0 data_40 - syscall - li $v0 10 - syscall - label_57: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_58 - j label_59 - label_58: - li $v0 4 - la $a0 data_41 - syscall - li $v0 10 - syscall - label_59: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_60 - j label_61 - label_60: - li $v0 4 - la $a0 data_42 - syscall - li $v0 10 - syscall - label_61: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_62 - j label_63 - label_62: - li $v0 4 - la $a0 data_43 - syscall - li $v0 10 - syscall - label_63: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_64 - j label_65 - label_64: - li $v0 4 - la $a0 data_44 - syscall - li $v0 10 - syscall - label_65: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 60($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_66 - j label_67 - label_66: - li $v0 4 - la $a0 data_45 - syscall - li $v0 10 - syscall - label_67: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 60 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -60 +la $t0 data_39 +sw $t0 -64($fp) +lw $t0 -64($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_at_String +addi $sp $sp 4 +sw $v0 -60($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -56($fp) +lw $t0 -56($fp) +bne $t0 $zero label_56 +j label_57 +label_56: +li $v0 4 +la $a0 data_40 +syscall +li $v0 10 +syscall +label_57: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -60($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 24($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -52($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -48($fp) +lw $t0 -48($fp) +bne $t0 $zero label_58 +j label_59 +label_58: +li $v0 4 +la $a0 data_41 +syscall +li $v0 10 +syscall +label_59: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 12($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -44($fp) +lw $t0 0($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -40($fp) +lw $t0 -40($fp) +bne $t0 $zero label_60 +j label_61 +label_60: +li $v0 4 +la $a0 data_42 +syscall +li $v0 10 +syscall +label_61: +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -44($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 28($t0) +jalr $ra $t0 +addi $sp $sp 8 +sw $v0 -36($fp) +lw $t0 -36($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -32($fp) +lw $t0 -32($fp) +bne $t0 $zero label_62 +j label_63 +label_62: +li $v0 4 +la $a0 data_43 +syscall +li $v0 10 +syscall +label_63: +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -36($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 56($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -28($fp) +lw $t0 -28($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -24($fp) +lw $t0 -24($fp) +bne $t0 $zero label_64 +j label_65 +label_64: +li $v0 4 +la $a0 data_44 +syscall +li $v0 10 +syscall +label_65: +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -28($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 60($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -20($fp) +lw $t0 -20($fp) +li $t1 0 +seq $t0 $t0 $t1 +sw $t0 -16($fp) +lw $t0 -16($fp) +bne $t0 $zero label_66 +j label_67 +label_66: +li $v0 4 +la $a0 data_45 +syscall +li $v0 10 +syscall +label_67: +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 -20($fp) +addi $sp $sp -4 +sw $t0 0($sp) +lw $t0 0($sp) +addi $sp $sp 4 +lw $t0 8($t0) +lw $t0 48($t0) +jalr $ra $t0 +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 60 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra __init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size +addi $sp $sp -4 +sw $ra 0($sp) +addi $sp $sp -4 +sw $fp 0($sp) +addi $fp $sp 8 +addi $sp $sp -12 +li $t0 8 +sll $t0 $t0 2 +la $t1 prototype_table +add $t1 $t1 $t0 +lw $t1 0($t1) +lw $a0 4($t1) +sll $a0 $a0 2 +jal allocate +move $a2 $a0 +move $a0 $t1 +move $a1 $v0 +jal copy +sw $v0 -16($fp) +lw $t0 -16($fp) +addi $sp $sp -4 +sw $t0 0($sp) +jal __init_attr_at_Main +addi $sp $sp 4 +sw $v0 -12($fp) +lw $v0 -12($fp) +addi $sp $sp 12 +lw $fp 0($sp) +addi $sp $sp 4 +lw $ra 0($sp) +addi $sp $sp 4 +jr $ra + + + +allocate: +addiu $sp $sp -12 +sw $a0 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +li $t0 4 +div $a0 $t0 +mfhi $t1 +sub $t0 $t0 $t1 +add $a0 $a0 $t0 +li $v0 9 +syscall +lw $a0 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +addiu $sp $sp 12 +jr $ra copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - +addiu $sp $sp -16 +sw $a0 0($sp) +sw $a1 4($sp) +sw $a2 8($sp) +sw $t0 12($sp) +while_copy: +beq $a2 $zero copy_end +lw $t0 0($a0) +sw $t0 0($a1) +addiu $a0 $a0 4 +addiu $a1 $a1 4 +addi $a2 $a2 -4 +j while_copy copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - +lw $a0 0($sp) +lw $a1 4($sp) +lw $a2 8($sp) +lw $t0 12($sp) +addiu $sp $sp 16 +jr $ra - -# LEN -# a0 begin address -# return size in v0 length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - +addiu $sp $sp -8 +sw $t0 0($sp) +sw $t1 4($sp) +move $t0 $a0 +move $v0 $zero +while_len: +lb $t1 0($t0) +beq $t1 $zero len_end +addi $v0 $v0 1 +addiu $t0 $t0 1 +j while_len len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 +lw $t0 0($sp) +lw $t1 4($sp) +addiu $sp $sp 8 +jr $ra concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $ra 20($sp) +move $t0 $a0 +move $t1 $a1 +addiu $a0 $a2 1 +li $t2 4 +div $a0 $t2 +mfhi $a0 +bne $a0 $zero concat_allign_size +addiu $a0 $a2 1 +j concat_size_allignned concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - +sub $t2 $t2 $a0 +add $a0 $a2 $t2 +addiu $a0 $a0 1 +concat_size_allignned: +jal allocate +move $t2 $v0 +j first_while_concat_copy +first_while_concat_copy: +lb $a0 0($t0) +beq $a0 $zero second_while_concat_copy +sb $a0 0($t2) +addiu $t0 $t0 1 +addiu $t2 $t2 1 +j first_while_concat_copy +second_while_concat_copy: +lb $a0 0($t1) +beq $a0 $zero concat_end +sb $a0 0($t2) +addiu $t1 $t1 1 +addiu $t2 $t2 1 +j second_while_concat_copy concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un +sb $zero 0($t2) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $ra 20($sp) +addiu $sp $sp 24 +jr $ra -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING +substr: +addiu $sp $sp -32 +sw $t0 0($sp) +sw $t1 4($sp) +sw $t2 8($sp) +sw $t3 12($sp) +sw $a0 16($sp) +sw $a1 20($sp) +sw $a2 24($sp) +sw $ra 28($sp) +move $t0 $a0 +add $t0 $t0 $a1 +li $t1 4 +div $a2 $t1 +mfhi $t2 +bne $t2 $zero substr_allign_size +move $t1 $a2 +j substr_new_chunk +substr_allign_size: +sub $t1 $t1 $t2 +add $t1 $t1 $a2 +substr_new_chunk: +move $a0 $t1 +jal allocate +move $t3 $v0 +move $t1 $zero +while_substr_copy: +beq $t1 $a2 substr_end +lb $t2 0($t0) +sb $t2 0($t3) +addiu $t0 $t0 1 +addiu $t3 $t3 1 +addiu $t1 $t1 1 +j while_substr_copy +substr_end: +sb $zero 0($t3) +lw $t0 0($sp) +lw $t1 4($sp) +lw $t2 8($sp) +lw $t3 12($sp) +lw $a0 16($sp) +lw $a1 20($sp) +lw $a2 24($sp) +lw $ra 28($sp) +addiu $sp $sp 32 +jr $ra equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - +addiu $sp $sp -24 +sw $t0 0($sp) +sw $t1 4($sp) +sw $a0 8($sp) +sw $a1 12($sp) +sw $t2 16($sp) +sw $t3 20($sp) +move $t0 $a0 +move $t1 $a1 +while_equal_str: +lb $t2 0($t0) +lb $t3 0($t1) +bne $t2 $t3 equal_str_different_strings +beq $t2 $zero first_end_equal_str +beq $t3 $zero second_end_equal_str +addi $t1 $t1 1 +addi $t0 $t0 1 +j while_equal_str equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - +move $v0 $zero +j equal_str_end +first_end_equal_str: +beq $t3 $zero second_end_equal_str +move $v0 $zero +j equal_str_end +second_end_equal_str: +li $v0 1 equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file +lw $t0 0($sp) +lw $t1 4($sp) +lw $a0 8($sp) +lw $a1 12($sp) +lw $t2 16($sp) +lw $t3 20($sp) +addiu $sp $sp 24 +jr $ra + +read_string: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $a0 12($sp) +sw $a1 16($sp) +sw $a2 20($sp) +sw $t2 24($sp) +li $t0 8 +addi $a0 $t0 4 +jal allocate +move $t1 $v0 +move $t2 $zero +while_read_string: +addu $a0 $t1 $t2 +subu $a1 $t0 $t2 +addu $t2 $t2 $a1 +jal read_string_up_to +beq $v0 $zero read_string_not_finished +move $v0 $t1 +j end_read_string +read_string_not_finished: +sll $t0 $t0 1 +addi $a0 $t0 4 +jal allocate +move $a0 $t1 +move $t1 $v0 +move $a1 $v0 +move $a2 $t2 +jal copy +j while_read_string +end_read_string: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $a0 12($sp) +lw $a1 16($sp) +lw $a2 20($sp) +lw $t2 24($sp) +addiu $sp $sp 28 +jr $ra +read_string_up_to: +addiu $sp $sp -28 +sw $ra 0($sp) +sw $t0 4($sp) +sw $t1 8($sp) +sw $t2 12($sp) +sw $t3 16($sp) +sw $t4 20($sp) +sw $t5 24($sp) +move $t0 $a0 +move $t1 $zero +li $t2 10 +addu $t3 $t0 $a1 +addiu $a1 $a1 1 +li $v0 8 +syscall +lw $a0 0($a0) +beq $a0 $zero eol_terminated +li $v0 0 +eol_check: +beq $t0 $t3 read_loop_continue +lb $t1 0($t0) +beq $t1 $t2 eol_terminated +addiu $t0 $t0 1 +j eol_check +eol_terminated: +sb $zero 0($t0) +li $v0 1 +read_loop_continue: +lw $ra 0($sp) +lw $t0 4($sp) +lw $t1 8($sp) +lw $t2 12($sp) +lw $t3 16($sp) +lw $t4 20($sp) +lw $t5 24($sp) +addiu $sp $sp 28 +jr $ra \ No newline at end of file diff --git a/tests/utils/utils.py b/tests/utils/utils.py index 7d15c63e5..3b446e81b 100644 --- a/tests/utils/utils.py +++ b/tests/utils/utils.py @@ -48,7 +48,6 @@ def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str try: sp = subprocess.run(['bash', compiler_path, cool_file_path], capture_output=True, timeout=timeout) return_code, output = sp.returncode, sp.stdout.decode() - print(sp.stderr) except subprocess.TimeoutExpired: assert False, COMPILER_TIMEOUT @@ -60,10 +59,6 @@ def compare_errors(compiler_path: str, cool_file_path: str, error_file_path: str # checking the errors of compiler compiler_output = output.split('\n') - print("-----------errores de mi cmp---------------") - print(compiler_output) - print("-----------errores del test---------------") - print(errors) cmp(compiler_output[2:], errors) SPIM_HEADER = r'''^SPIM Version .+ of .+ From b8cb66c0df7a382d68ff1d17029951f8c73497f8 Mon Sep 17 00:00:00 2001 From: regnod Date: Mon, 28 Feb 2022 12:53:32 -0500 Subject: [PATCH 80/93] cleansing --- .vscode/settings.json | 38 +- out | 772 ------------------- poetry.lock | 167 ----- pyproject.toml | 17 - setup.cfg | 2 - src/__main__.py | 4 +- src/c_parser/parser.py | 216 +----- src/cil_ast/cil_ast_d.py | 234 ------ src/cool_ast/cool_ast.py | 10 - src/lexer/lexer.py | 3 - src/visitors/Builder.py | 2 +- src/visitors/Checker.py | 40 +- src/visitors/Cil2MipsCurrent.py | 1225 ------------------------------- src/visitors/CiltoMips.py | 1 - src/visitors/CiltoMips_old.py | 317 -------- src/visitors/CooltoCil.py | 4 +- src/visitors/Executor.py | 21 +- src/visitors/Inferencer.py | 39 +- 18 files changed, 48 insertions(+), 3064 deletions(-) delete mode 100644 out delete mode 100644 poetry.lock delete mode 100644 pyproject.toml delete mode 100644 setup.cfg delete mode 100644 src/cil_ast/cil_ast_d.py delete mode 100644 src/visitors/Cil2MipsCurrent.py delete mode 100644 src/visitors/CiltoMips_old.py diff --git a/.vscode/settings.json b/.vscode/settings.json index f0a500c65..0a0f7d361 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,27 +3,63 @@ "addi", "addiu", "addu", + "ademas", + "agregarlos", + "ahora", "alloc", "argumentos", "asciiz", + "atributo", "beqz", "bnez", + "busca", + "casos", "cattrs", + "ccur", + "cpar", + "cualquier", + "definir", + "deje", "dfunc", + "digrafo", "direccion", "dividir", "dparents", + "ehhhhhhhhhhh", + "ehhhhhhhhhhhh", + "encapsulada", + "esac", + "estos", + "existe", "funciones", "heeerreeee", "heerrrre", + "hijo", + "Inferencer", "Inmediate", + "isvoid", + "jachtagsad", "límite", + "lneq", + "menos", + "mismo", "mult", + "ocur", + "opar", + "parentesis", "proto", + "ptype", "pusieron", + "recorrer", + "referencia", "reservada", "reservar", + "sobrescribiendo", "subu", - "tipe" + "tipe", + "tipo", + "toca", + "trozo", + "visitar" ] } \ No newline at end of file diff --git a/out b/out deleted file mode 100644 index 60b1a29e2..000000000 --- a/out +++ /dev/null @@ -1,772 +0,0 @@ -.data -p_error: .asciiz "Aborting from String" -zero_error: .asciiz "Division by zero" -range_error: .asciiz "Index out of range" -Object_class_name: .asciiz "Object" -String_class_name: .asciiz "String" -IO_class_name: .asciiz "IO" -Int_class_name: .asciiz "Int" -Bool_class_name: .asciiz "Bool" -Main_class_name: .asciiz "Main" -Object_conforms_to: .word Object_class_name -String_conforms_to: .word String_class_name, Object_class_name -IO_conforms_to: .word IO_class_name, Object_class_name -Int_conforms_to: .word Int_class_name, Object_class_name -Bool_conforms_to: .word Bool_class_name, Object_class_name -Main_conforms_to: .word Main_class_name, IO_class_name, Object_class_name -data_0: .asciiz "Hello, World.\n" -.text -.globl main -main: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 12 -# Static Call -jal function_ctor_at_Main -sw $v0, 0($fp) -# Arg -addi $sp, $sp, -4 -lw $t1, 0($fp) -sw $t1, 0($sp) -# Static Call -jal function_main_at_Main -sw $v0, -4($fp) -# Exit -li $v0, 10 -syscall -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_abort_at_Object: -addi $sp, $sp, -0 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 8 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_copy_at_Object: -addi $sp, $sp, -0 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 8 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_type_name_at_Object: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 16 -# TypeOf -lw $s0, 0($fp) -lw $t1, 0($s0) -lw $t2, 0($t1) -sw $t2, -4($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 24 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_length_at_String -sw $a0, 12($s0) -la $a0, function_substr_at_String -sw $a0, 16($s0) -la $a0, function_concat_at_String -sw $a0, 20($s0) -sw $s0, 4($s1) -la $a0, String_conforms_to -sw $a0, 0($s1) -sw $s1, -8($fp) -# SetAttrib -lw $s1, -8($fp) -lw $s0, -4($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, -8($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_concat_at_String: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 20 -# Concat -lw $s0, 0($fp) -lw $a0, 8($s0) -lw $s0, -4($fp) -lw $a1, 8($s0) -jal str_concat -sw $v0, -8($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 24 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_length_at_String -sw $a0, 12($s0) -la $a0, function_substr_at_String -sw $a0, 16($s0) -la $a0, function_concat_at_String -sw $a0, 20($s0) -sw $s0, 4($s1) -la $a0, String_conforms_to -sw $a0, 0($s1) -sw $s1, -12($fp) -# SetAttrib -lw $s1, -12($fp) -lw $s0, -8($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, -12($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_length_at_String: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 16 -# LengthNode -lw $s0, 0($fp) -lw $a0, 8($s0) -jal str_len -sw $v0, -4($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -sw $s0, 4($s1) -la $a0, Int_conforms_to -sw $a0, 0($s1) -sw $s1, -8($fp) -# SetAttrib -lw $s1, -8($fp) -lw $s0, -4($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, -8($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_substr_at_String: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 24 -# Substring -lw $s0, 0($fp) -lw $a0, 8($s0) -lw $s0, -4($fp) -lw $a1, 8($s0) -lw $s0, -8($fp) -lw $a2, 8($s0) -jal str_substring -sw $v0, -12($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 24 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_length_at_String -sw $a0, 12($s0) -la $a0, function_substr_at_String -sw $a0, 16($s0) -la $a0, function_concat_at_String -sw $a0, 20($s0) -sw $s0, 4($s1) -la $a0, String_conforms_to -sw $a0, 0($s1) -sw $s1, -16($fp) -# SetAttrib -lw $s1, -16($fp) -lw $s0, -12($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, -16($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_out_string_at_IO: -addi $sp, $sp, -0 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 12 -## out_string builtin -li $v0, 4 -lw $t0, -4($fp) -lw $a0, 8($t0) -syscall -# ReturnNode -lw $t0, 0($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_in_string_at_IO: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 16 -## in_string builtin -li $v0, 9 -li $a0, 1024 -syscall -move $a0, $v0 -li $v0, 8 -la $a1, 1024 -syscall -move $t0, $a0 -move $a3, $ra -jal str_len -move $ra, $a3 -subu $v0, $v0, 1 -addu $v1, $v0, $t0 -sb $0, 0($v1) -move $v0, $t0 -sw $v0, -4($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 24 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_length_at_String -sw $a0, 12($s0) -la $a0, function_substr_at_String -sw $a0, 16($s0) -la $a0, function_concat_at_String -sw $a0, 20($s0) -sw $s0, 4($s1) -la $a0, String_conforms_to -sw $a0, 0($s1) -sw $s1, -8($fp) -# SetAttrib -lw $s1, -8($fp) -lw $s0, -4($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, -8($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_out_int_at_IO: -addi $sp, $sp, -0 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 12 -## out_int builtin -li $v0, 1 -lw $t0, -4($fp) -lw $a0, 8($t0) -syscall -# ReturnNode -lw $t0, 0($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_in_int_at_IO: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 16 -## out_int builtin -li $v0, 5 -syscall -move $t0, $v0 -sw $t0, -4($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -sw $s0, 4($s1) -la $a0, Int_conforms_to -sw $a0, 0($s1) -sw $s1, -8($fp) -# SetAttrib -lw $s1, -8($fp) -lw $s0, -4($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, -8($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_ctor_at_Main: -addi $sp, $sp, -12 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 16 -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 32 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_in_string_at_IO -sw $a0, 12($s0) -la $a0, function_out_string_at_IO -sw $a0, 16($s0) -la $a0, function_in_int_at_IO -sw $a0, 20($s0) -la $a0, function_out_int_at_IO -sw $a0, 24($s0) -la $a0, function_main_at_Main -sw $a0, 28($s0) -sw $s0, 4($s1) -la $a0, Main_conforms_to -sw $a0, 0($s1) -sw $s1, 0($fp) -# Allocate -addiu $a0, $zero, 12 -li $v0, 9 -syscall -addu $s1, $zero, $v0 -addiu $a0, $zero, 24 -li $v0, 9 -syscall -addu $s0, $zero, $v0 -la $a0, function_abort_at_Object -sw $a0, 0($s0) -la $a0, function_type_name_at_Object -sw $a0, 4($s0) -la $a0, function_copy_at_Object -sw $a0, 8($s0) -la $a0, function_length_at_String -sw $a0, 12($s0) -la $a0, function_substr_at_String -sw $a0, 16($s0) -la $a0, function_concat_at_String -sw $a0, 20($s0) -sw $s0, 4($s1) -la $a0, String_conforms_to -sw $a0, 0($s1) -sw $s1, -8($fp) -# Load -la $t1, data_0 -lw $t2, -8($fp) -sw $t1, 8($t2) -lw $t0, -8($sp) -sw $t0, -4($sp) -# SetAttrib -lw $s1, 0($fp) -lw $s0, -4($fp) -sw $s0, 8($s1) -# ReturnNode -lw $t0, 0($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra -function_main_at_Main: -addi $sp, $sp, -8 -addi $sp, $sp, -8 -sw $ra, 4($sp) # save $ra -sw $fp, 0($sp) # save $fp -addi $fp, $sp, 16 -# GetAttrib -lw $s1, 0($fp) -lw $s0, 8($s1) -sw $s0, -8($fp) -# Arg -addi $sp, $sp, -4 -lw $t1, 0($fp) -sw $t1, 0($sp) -# Arg -addi $sp, $sp, -4 -lw $t1, -8($fp) -sw $t1, 0($sp) -# Static Call -jal function_out_string_at_IO -sw $v0, -4($fp) -# ReturnNode -lw $t0, -4($fp) -move $v0, $t0 -lw $ra, 4($sp) # restore $ra -lw $t1, 0($sp) -addi $sp, $fp, 4 -move $fp, $t1 # restore $fp -jr $ra - - str_len: - li $v0,0 - move $v1, $a0 - __lenLoop: - lbu $t1, 0($v1) - beq $t1,$0,__lenExit - addu $v0,$v0,1 - addu $v1,$v1,1 - b __lenLoop - __lenExit: - jr $ra - - str_copy: - lw $a0, -4($fp) - lw $a1, -8($fp) - lw $a2, -12($fp) - - move $v0, $a0 - - str__while_copy: - beqz $a2, str__end_copy - - xor $t0, $t0, $t0 - lb $t0, 0($a1) - sb $t0, 0($a0) - - subu $a2, $a2,1 - addu $a0, $a0,1 - addu $a1, $a1,1 - j str__while_copy - - str__end_copy: - jr $ra - - str_index_error: - li $v0, 4 - la $a0, range_error - syscall - li $v0, 10 - syscall - jr $ra - - str_substring: - # load arguments - move $t5, $a0 - move $t3, $a1 - li $t4, 0 - move $t2, $a2 - - # check for index out of range - move $a3, $ra - jal str_len - move $ra, $a3 - - addu $t6, $t3, $t2 - bgt $t6, $v0, str_index_error - - # create substring - move $a0, $t2 #length - addu $a0, $a0, 1 - li $v0, 9 #make space - syscall - # tenemos en $v0 la direccion del nuevo string - - addu $t5, $t5, $t3 - - subu $sp, $sp, 4 - sw $ra, 0($sp) - subu $sp, $sp, 4 - sw $fp, 0($sp) - move $fp,$sp - subu $sp, $sp, 4 - sw $v0, 0($sp) - subu $sp, $sp, 4 - sw $t5, 0($sp) - subu $sp, $sp, 4 - sw $t2, 0($sp) - - jal str_copy - move $sp,$fp - - lw $fp, 0($sp) - addi $sp,$sp, 4 - - lw $ra, 0($sp) - addi $sp,$sp, 4 - - addu $t9, $v0, $t2 #null terminated - sb $0, 0($t9) - jr $ra - - - #$a0 el prefijo, y en $a1, el str. - - str1_prefix_of_str2: - lb $t0, 0($a0) - lb $t1, 0($a1) - beqz $t0, prefixTrue - bne $t0, $t1, prefixFalse - addu $a0,$a0,1 - addu $a1,$a1,1 - b str1_prefix_of_str2 - prefixFalse: - li $v0, 0 - jr $ra - prefixTrue: - li $v0, 1 - jr $ra - - str_comparer: - move $a0, $a2 - move $a1, $ra - jal str_len #$v0=len(message1) - move $ra, $a1 - - move $s1, $v0 - - move $a0, $a3 - - move $a1, $ra - jal str_len #$v0=len(message2) - move $ra, $a1 - - beq $v0, $s1, string_length_comparer_end - li $v0, 0 - j string_comparer_end - - string_length_comparer_end: - move $a0, $a2 - move $a1, $a3 - move $s1, $ra - jal str1_prefix_of_str2 - move $ra, $s1 - string_comparer_end: - jr $ra - - case_conform: - move $s0, $a0 - move $s1, $a1 - START_CASE_LOOP: - - lw $a1, 0($s0) - - addi $s0, $s0, 4 - - move $t0, $s1 # Address of 1st element in array. - li $v0, 4 # System call code 4 (print_string). - li $t1, 0 # Initialize array offset. - - loop_INTERNAL: - - # Use the address mode label(register). - - lw $a0, 0($t0) # Load value at address str_array + $t1 (offset). - - beq $a0, $a1, END_CASE_LOOP - - addi $t0, $t0, 4 # Next element, i.e., increment offset by 4. - addi $t1, $t1, 4 # Next element, i.e., increment offset by 4. - - # Done or loop once more? - - ble $t1, $a2, loop_INTERNAL - b START_CASE_LOOP - END_CASE_LOOP: - move $v0, $a0 - jr $ra - - str_concat: - move $a3, $ra - jal str_len - move $ra, $a3 - - # guardamos en $t4, la longitud de str1 - move $t4, $v0 - # el str1 - move $t5, $a0 - move $a0, $a1 - move $t8, $a1 - - move $a3, $ra - jal str_len - move $ra, $a3 - - # reservamos espacio para el nuevo string - # guardamos en $t7 la longitud de str2 - move $t7, $v0 - addu $v0, $t4, $v0 - addu $v0, $v0, 1 - move $a0, $v0 - li $v0, 9 - syscall - - # en $t5 esta str1, y en $t8, str2------------------------- - - # save str1 part------------------------------------------ - # push $ra - subu $sp, $sp, 4 - sw $ra, 0($sp) - # push $fp - subu $sp, $sp, 4 - sw $fp, 0($sp) - - move $fp, $sp - - # push dest to copy pointer - subu $sp, $sp, 4 - sw $v0, 0($sp) - - # push copy from - subu $sp, $sp, 4 - sw $t5, 0($sp) - - # push how much to copy - subu $sp, $sp, 4 - sw $t4, 0($sp) - - jal str_copy - - move $sp, $fp - - lw $fp, 0($sp) - addu $sp, $sp, 4 - - lw $ra, 0($sp) - addu $sp, $sp, 4 - - # save str2 part------------- - # push $ra - subu $sp, $sp, 4 - sw $ra, 0($sp) - - # push $fp - subu $sp, $sp, 4 - sw $fp, 0($sp) - - move $fp, $sp - - # push where to copy - move $t9, $v0 - addu $t0, $v0, $t4 - subu $sp, $sp, 4 - sw $t0, 0($sp) - - # push copy from - subu $sp, $sp, 4 - sw $t8, 0($sp) - - subu $sp, $sp, 4 - sw $t7, 0($sp) - - jal str_copy - - move $sp, $fp - - lw $fp, 0($sp) - addu $sp, $sp, 4 - - lw $ra, 0($sp) - addu $sp, $sp, 4 - - addu $v0, $t7, $v0 - sb $0, 0($v0) - - move $v0, $t9 - jr $ra - diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 4531e801c..000000000 --- a/poetry.lock +++ /dev/null @@ -1,167 +0,0 @@ -[[package]] -name = "atomicwrites" -version = "1.4.0" -description = "Atomic file writes." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "attrs" -version = "21.4.0" -description = "Classes Without Boilerplate" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] - -[[package]] -name = "colorama" -version = "0.4.4" -description = "Cross-platform colored terminal text." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "packaging" -version = "21.3" -description = "Core utilities for Python packages" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" - -[[package]] -name = "pluggy" -version = "1.0.0" -description = "plugin and hook calling mechanisms for python" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "ply" -version = "3.11" -description = "Python Lex & Yacc" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "pyparsing" -version = "3.0.6" -description = "Python parsing module" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pytest" -version = "6.2.5" -description = "pytest: simple powerful testing with Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" - -[package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[metadata] -lock-version = "1.1" -python-versions = "^3.10" -content-hash = "f576a82b5e6c2b19c78eb67cb6508703b706de1eca9d33f7bc29c732a6b070ca" - -[metadata.files] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -ply = [ - {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, - {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pyparsing = [ - {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, - {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, -] -pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, -] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 1cc2c14dd..000000000 --- a/pyproject.toml +++ /dev/null @@ -1,17 +0,0 @@ -[tool.poetry] -name = "cool-compiler-2021" -version = "0.1.0" -description = "COOL language compiler" -authors = ["rodrigo-pino "] -license = "MIT" - -[tool.poetry.dependencies] -python = "^3.10" -pytest = "^6.2.5" -ply = "^3.11" - -[tool.poetry.dev-dependencies] - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 9221b85c5..000000000 --- a/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[flake8] -ignore = F811 diff --git a/src/__main__.py b/src/__main__.py index ffd9e1576..98c6b2f42 100644 --- a/src/__main__.py +++ b/src/__main__.py @@ -7,8 +7,8 @@ def main(): if len(sys.argv) > 1: input_file = sys.argv[1] else: - input_file = "./tests/codegen/fib.cl" - # raise Exception("Incorrect number of arguments") + # input_file = "./tests/codegen/fib.cl" + raise Exception("Incorrect number of arguments") program_file = open(input_file) program = program_file.read() diff --git a/src/c_parser/parser.py b/src/c_parser/parser.py index 29c8c7969..ae896eb44 100644 --- a/src/c_parser/parser.py +++ b/src/c_parser/parser.py @@ -37,12 +37,6 @@ def find_column(input, token): def p_program(p): 'program : class_list' p[0] = ProgramNode(p[1]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_class_list(p): @@ -60,21 +54,9 @@ def p_def_class(p): ''' if len(p) == 7: p[0] = ClassDeclarationNode(p[2], p[4]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = ClassDeclarationNode(p[2], p[6], p[4]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_feature_list_attr(p): @@ -95,53 +77,27 @@ def p_feature_list_attr(p): else: p[0] = [p[1]] - # def p_feature_list_func(p): - # 'feature_list : def_func feature_list' - # p[0] = [p[1]] + p[2] - - # def p_feature_list_empty(p): - # 'feature_list : empty' - # p[0] = [] - def p_def_attr(p): '''def_attr : id colon type semi | id colon type assignArrow expr semi ''' if len(p) == 5: p[0] = AttrDeclarationNode(p[1], p[3]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = AttrDeclarationNode(p[1],p[3],p[5]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_def_func(p): 'def_func : id opar arg_list cpar colon type ocur expr ccur semi' p[0] = FuncDeclarationNode(p[1],p[3],p[6],p[8]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_arg_list(p): '''arg_list : non_empty_arg_list | ''' - if len(p) == 2: #p[1] == 'non_empty_arg_list': + if len(p) == 2: p[0] = p[1] else: p[0] = [] @@ -189,12 +145,6 @@ def p_chunk(p): def p_expr_assign(p): 'expr : id assignArrow expr' p[0] = AssignNode(p[1],p[3]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_call(p): @@ -204,109 +154,47 @@ def p_expr_call(p): ''' if len(p) == 7: p[0] = CallNode(p[3], p[5], p[1]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] elif len(p) == 9: p[0] = CallNode(p[5], p[7], p[1], p[3]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = CallNode(p[1], p[3]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_if(p): 'expr : if expr then expr else expr fi' p[0] = ConditionalNode(p[2],p[4],p[6]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_while(p): 'expr : while expr loop expr pool' p[0] = WhileNode(p[2], p[4]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_chunk(p): 'expr : ocur chunk ccur' p[0] = ChunkNode(p[2]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_let(p): 'expr : let decl_list in expr' p[0] = LetInNode(p[2],p[4]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_case(p): 'expr : case expr of case_list esac' p[0] = SwitchCaseNode(p[2],p[4]) - a = p[4] - b = p[2] - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_instantiate(p): 'expr : new type' p[0] = InstantiateNode(p[2]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_isvoid(p): 'expr : isvoid expr' p[0] = IsVoidNode(p[2]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_bin1(p): @@ -315,23 +203,9 @@ def p_expr_bin1(p): ''' if p[2] == '+': p[0] = PlusNode(p[1], p[3]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # a= p.lexer.lexdata.rfind('\n', 0, sl.lexpos) - # b = p.lexer.lexdata - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = MinusNode(p[1], p[3]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_bin2(p): @@ -340,21 +214,9 @@ def p_expr_bin2(p): ''' if p[2] == '*': p[0] = StarNode(p[1], p[3]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = DivNode(p[1], p[3]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_bin3(p): @@ -364,30 +226,12 @@ def p_expr_bin3(p): ''' if p[2] == '=': p[0] = EqualNode(p[1],p[3]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] elif p[2] == '<=': p[0] = LeqNode(p[1], p[3]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = LessNode(p[1], p[3]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_unary(p): @@ -396,21 +240,9 @@ def p_expr_unary(p): ''' if p[1] == '~': p[0] = ComplementNode(p[2]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = NotNode(p[2]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_par(p): @@ -420,34 +252,16 @@ def p_expr_par(p): def p_expr_id(p): 'expr : id' p[0] = VariableNode(p[1]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_int(p): 'expr : number' p[0] = ConstantNumNode(p[1]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_string(p): 'expr : string' p[0] = StringNode(p[1]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_expr_boolean(p): @@ -455,21 +269,9 @@ def p_expr_boolean(p): | false''' if p[1] == 'true': p[0] = TrueNode(p[1]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = FalseNode(p[1]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_decl_list(p): @@ -486,21 +288,9 @@ def p_decl(p): ''' if len(p) == 4: p[0] = VarDeclarationNode(p[1], p[3]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] else: p[0] = VarDeclarationNode(p[1], p[3], p[5]) - # token_list = [] - # for sl in p.slice: - # if type(lt.LexToken()) == type(sl): - # token_list.append(sl) - # token_list[-1].col = (sl.lexpos - p.lexer.lexdata.rfind('\n', 0, sl.lexpos) + 2) - # p[0].token_list = token_list p[0].token_list = [sl for sl in p.slice if type(lt.LexToken()) == type(sl)] def p_case_list(p): @@ -510,8 +300,6 @@ def p_case_list(p): if len(p) == 7: p[0] = [(p[1], p[3], p[5], [sl for sl in p.slice if type(lt.LexToken()) == type(sl)])] else: - # p[0] = [(p[1], p[3], p[5], p[7])] - a = p[3] p[0] = [(p[1], p[3], p[5], [sl for sl in p.slice if type(lt.LexToken()) == type(sl)])]+ p[7] # Compute column. @@ -531,8 +319,6 @@ def find_column(input, token): token_column = find_column(p.lexer.lexdata, p) errors.append(_SyntacticError % (p.lineno, token_column, p.value)) - # print(SyntacticError % (p.lineno, token_column, p.value)) - # print(f'({p.lineno}, {token_column}) - SyntacticError: ERROR at or near "{p.value}"') parser = yacc.yacc(debug = True) diff --git a/src/cil_ast/cil_ast_d.py b/src/cil_ast/cil_ast_d.py deleted file mode 100644 index 8bfae3dd0..000000000 --- a/src/cil_ast/cil_ast_d.py +++ /dev/null @@ -1,234 +0,0 @@ -class Node: - pass - -class ProgramNode(Node): - def __init__(self, dottypes, dotdata, dotcode): - self.dottypes = dottypes - self.dotdata = dotdata - self.dotcode = dotcode - -class TypeNode(Node): - def __init__(self, name): - self.name = name - self.attrs = {} - self.methods = [] - - @property - def attributes(self): - return self.attrs.keys() - -class DataNode(Node): - def __init__(self, vname, value): - self.name = vname - self.value = value - -class FunctionNode(Node): - def __init__(self, fname, params, localvars, instructions, ctor= False): - self.name = fname - self.params = params - self.localvars = localvars - self.instructions = instructions - self.ctor = ctor - -class ParamNode(Node): - def __init__(self, name): - self.name = name - -class LocalNode(Node): - def __init__(self, name): - self.name = name - -class InstructionNode(Node): - def __init__(self, dest, op, second_op): - self.dest = dest - self.op = op - self.second_op = second_op - - -class AssignNode(InstructionNode): - def __init__(self, dest, source): - self.dest = dest - self.source = source - -class BinaryOperatorNode(InstructionNode): - def __init__(self, dest, left, right): - self.dest = dest - self.left = left - self.right = right - -class PlusNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) - -class MinusNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) - -class StarNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) - -class DivNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) - -class EqualNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) - -class StringEqualNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) - -class LessNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) - -class LeqNode(BinaryOperatorNode): - def __init__(self, dest, left, right): - super().__init__(dest, left, right) - -class GetAttribNode(InstructionNode): - def __init__(self, dest, inst, attr): - self. dest = dest - self.inst = inst - self.attr = attr - -class SetAttribNode(InstructionNode): - def __init__(self, inst, attr, source): - self.inst = inst - self.attr = attr - self.source = source - -class GetIndexNode(InstructionNode): - def __init__(self, dest, array, index): - self.dest = dest - self.array = array - self.index = index - -class SetIndexNode(InstructionNode): - def __init__(self, array, index, source): - self.array = array - self.index = index - self.source = source - -class AllocateNode(InstructionNode): - def __init__(self, itype, dest): - self.type = itype - self.dest = dest - -class ArrayNode(InstructionNode): - def __init__(self, dest, length): - self.dest = dest - self.length = length - -class TypeOfNode(InstructionNode): - def __init__(self, obj, dest): - self.obj = obj - self.dest = dest - -class IsTypeNode(InstructionNode): - def __init(self, dest, type_obj, type_name): - self.dest = dest - self.type_obj = type_obj - self.type_name = type_name - -class ParentTypeNode(InstructionNode): - def __init__(self, dest, type_obj): - self.dest = dest - self.type_obj = type_obj - -class LabelNode(InstructionNode): - def __init__(self, name): - self.name = name - -class GotoNode(InstructionNode): - def __init__(self, label): - self.label = label - -class GotoIfNode(InstructionNode): - def __init__(self, label, condition): - self.label = label - self.condition = condition - -class StaticCallNode(InstructionNode): - def __init__(self, function, dest): - self.function = function - self.dest = dest - -class DynamicCallNode(InstructionNode): - def __init__(self, xtype, method, dest): - self.type = xtype - self.method = method - self.dest = dest - -class ArgNode(InstructionNode): - def __init__(self, name): - self.name = name - -class ReturnNode(InstructionNode): - def __init__(self, value=None): - self.value = value - -class EndNode(InstructionNode): - def __init__(self): - pass - -class LoadNode(InstructionNode): - def __init__(self, dest, msg): - self.dest = dest - self.msg = msg - -class LengthNode(InstructionNode): - def __init__(self, dest, string): - self.dest = dest - self.string = string - -class ConcatNode(InstructionNode): - def __init__(self, dest, prefix, sufix): - self.dest = dest - self.prefix = prefix - self.sufix = sufix - -class PrefixNode(InstructionNode): - def __init__(self, dest, string, n): - self.dest = dest - self.string = string - self.n = n - -class SubstringNode(InstructionNode): - def __init__(self, dest, string, i, n): - self.dest = dest - self.string = string - self.i = i - self.n = n - -class ToStrNode(InstructionNode): - def __init__(self, dest, ivalue): - self.dest = dest - self.ivalue = ivalue - -class AbortNode(InstructionNode): - def __init__(self): - pass - -class CopyNode(): - def __init__(self, dest, source): - self.dest = dest - self.source = source - -class PrintStrNode(): - def __init__(self, output): - self.output = output - -class ReadStrNode(): - def __init__(self, input): - self.input = input - -class PrintIntNode(): - def __init__(self, output): - self.output = output - -class ReadIntNode(): - def __init__(self, input): - self.input = input \ No newline at end of file diff --git a/src/cool_ast/cool_ast.py b/src/cool_ast/cool_ast.py index 84b2accc7..14129a0e6 100644 --- a/src/cool_ast/cool_ast.py +++ b/src/cool_ast/cool_ast.py @@ -57,18 +57,10 @@ def __init__(self, left, right): self.left = left self.right = right - -#mios class ChunkNode(ExpressionNode): def __init__(self, chunk): self.chunk = chunk -# class VarNode(ExpressionNode): -# def __init__(self, idx, type, expr = None): -# self.id = idx -# self.type = type -# self.value = expr - class ConditionalNode(ExpressionNode): def __init__(self, ifChunk, thenChunk, elseChunk): self.ifChunk = ifChunk @@ -111,7 +103,6 @@ def __init__(self, lex): super().__init__(lex) self.type = lex -#mios class TrueNode(AtomicNode): pass class FalseNode(AtomicNode): @@ -132,7 +123,6 @@ class StarNode(BinaryNode): class DivNode(BinaryNode): pass -#mios class LessNode(BinaryNode): pass class LeqNode(BinaryNode): diff --git a/src/lexer/lexer.py b/src/lexer/lexer.py index 0b35a4c48..281c4e64a 100755 --- a/src/lexer/lexer.py +++ b/src/lexer/lexer.py @@ -297,16 +297,13 @@ def t_string_error(self, t): row, col, eof = find_last(t.value, t.lexer.lineno, self.find_column(t.lexer.lexdata,t)) if eof: self.errors.append(_LexicographicError % (row, col, f'EOF in string constant')) - # print(LexicographicError % (row, col, f'EOF in string constant')) t.lexer.skip(len(t.value)) else: self.errors.append(_LexicographicError % (row, col, f'Unterminated string constant')) - # print(LexicographicError % (row, col, f'Unterminated string constant')) t.lexer.skip(1) t.lexer.begin('INITIAL') - # t_arroba = r'@' def t_arroba(self, t): r'@' t.col = self.find_column(t.lexer.lexdata,t) + (self.col - self.col//4) diff --git a/src/visitors/Builder.py b/src/visitors/Builder.py index bb6236b80..7523d2ec1 100755 --- a/src/visitors/Builder.py +++ b/src/visitors/Builder.py @@ -1,6 +1,6 @@ from cool_ast.cool_ast import ProgramNode, ClassDeclarationNode, AttrDeclarationNode, FuncDeclarationNode import visitors.visitor as visitor -from utils.semantic import Context, SemanticError, Type, ErrorType +from utils.semantic import SemanticError, ErrorType from utils.errors import _SemanticError, _TypeError class TypeBuilder: diff --git a/src/visitors/Checker.py b/src/visitors/Checker.py index 63e44cbbe..005d7d468 100755 --- a/src/visitors/Checker.py +++ b/src/visitors/Checker.py @@ -41,17 +41,9 @@ def visit(self, node, scope): for attr, owner in self.current_type.all_attributes(): #definir atributos de los ancestros - # if owner != self.current_type: - # scope.define_variable(attr.name, attr.type) scope.define_variable(attr.name, attr.type) - # for attr in attrs: - # self.visit(attr, scope) - - # for method in methods: - # self.visit(method, scope.create_child()) - for feature in node.features: if isinstance(feature, AttrDeclarationNode): cscope = scope.create_child() @@ -102,7 +94,6 @@ def visit(self, node, scope): elseT = self.visit(node.elseChunk, scope.create_child()) if ifT != self.context.get_type('Bool'): - # self.errors.append(f"Can't convert {ifT.name} to Bool.") self.errors.append(_TypeError % (node.ifChunk.token_list[0].lineno, node.ifChunk.token_list[0].col,f"Predicate of 'if' does not have type Bool.")) try: node.type = thenT.join(elseT) @@ -138,16 +129,12 @@ def visit(self, node, scope): else: expr = None if expr is not None and not expr.conforms_to(var_type): - # self.errors.append(f"Can't convert {expr.name} to {var_type.name}.") self.errors.append(_TypeError %(node.decl_list[iteration].token_list[0].lineno, node.decl_list[iteration].token_list[0].col, f"Infered type {expr.name} of initialization of {_id} does not conform to identifier's declared type {var_type.name}")) - ## this else is to assign to the variable the type of the right-side expression, but it doesnt pass the semantic tests this way, f - # else: - # var_type = expr scope.define_variable(_id, var_type) iteration+=1 expr_type = self.visit(node.expression, scope.create_child()) - node.type = expr_type #node.expression.type + node.type = expr_type return node.type @visitor.when(AttrDeclarationNode) @@ -159,7 +146,6 @@ def visit(self, node, scope): _char = node.id[0] if _char not in ''.join(chr(n) for n in range(ord('a'),ord('z')+1)): - # self.errors.append((f'Attribute names must not be capitalized')) self.errors.append(_SemanticError %(node.token_list[0].lineno, node.token_list[0].col, f"Attribute names must not be capitalized.")) if node.type != 'SELF_TYPE': @@ -172,15 +158,7 @@ def visit(self, node, scope): if node.value is not None: value_t = self.visit(node.value, scope.create_child()) if not value_t.conforms_to(attrType): - # self.errors.append(f"Can't convert {value_t.name} to {attrType.name}.") self.errors.append(_TypeError %(node.value.token_list[0].lineno, node.value.token_list[0].col, f'Infered type {value_t.name} of initialization of attribute {node.id} does not conform to declared type {attrType.name}')) - - ## this is to assign to the variable the type of the right-side expression, but it doesnt pass the semantic tests this way, f - # attrType = value_t - # else: - # scope.create_child() - - # scope.define_variable(node.id, attrType) @visitor.when(AssignNode) def visit(self, node, scope): @@ -204,11 +182,8 @@ def visit(self, node, scope): @visitor.when(WhileNode) def visit(self, node, scope): - # if node.condition.lex == 'true': - # _ = 0 condition = self.visit(node.condition, scope.create_child()) if condition != self.context.get_type('Bool'): - # self.errors.append(f"Can't convert {condition.name} to Bool.") self.errors.append(_TypeError %(node.condition.token_list[0].lineno, node.condition.token_list[0].col, f'Loop condition does not have type Bool.')) self.visit(node.loopChunk, scope.create_child()) @@ -217,7 +192,6 @@ def visit(self, node, scope): @visitor.when(ChunkNode) def visit(self, node, scope): - # child_scope = scope.create_child() return_type = ErrorType() for expr in node.chunk: @@ -264,7 +238,6 @@ def visit(self, node, scope): node.type = intType return intType self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' + '+str(rt.name))) - # self.errors.append(f'Undefined operation "+" between {lt.name} and {rt.name}.') node.type = ErrorType() return ErrorType() @@ -279,7 +252,6 @@ def visit(self, node, scope): node.type = intType return intType self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' - '+str(rt.name))) - # self.errors.append(f'Undefined operation "-" between {lt.name} and {rt.name}.') node.type = ErrorType() return ErrorType() @@ -294,7 +266,6 @@ def visit(self, node, scope): node.type = intType return intType self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' * '+str(rt.name))) - # self.errors.append(f'Undefined operation "*" between {lt.name} and {rt.name}.') node.type = ErrorType() return ErrorType() @@ -309,7 +280,6 @@ def visit(self, node, scope): node.type = intType return intType self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' / '+str(rt.name))) - # self.errors.append(f'Undefined operation "/" between {lt.name} and {rt.name}.') node.type = ErrorType() return ErrorType() @@ -327,7 +297,6 @@ def visit(self, node, scope): if not obj_type.conforms_to(ancestor_type): self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f'Expression type {obj_type.name} does not conform to declared static dispatch type {ancestor_type.name}.')) - # self.errors.append(f'{obj_type.name} does not inherits from {ancestor_type.name}.') else: ancestor_type = obj_type @@ -346,7 +315,6 @@ def visit(self, node, scope): for i, arg in enumerate(node.args): arg_type = self.visit(arg, scope) if not arg_type.conforms_to(method.param_types[i]): - # self.errors.append(f"Can't convert {arg_type.name} to {method.param_types[i].name}.") self.errors.append(_TypeError %(node.args[i].token_list[0].lineno, node.args[i].token_list[0].col, f"In call of {method.name}, type {arg_type.name} of parameter {method.param_names[i]} does not conform to declare type {method.param_types[i].name}")) if method.return_type.name != 'SELF_TYPE': @@ -389,7 +357,6 @@ def visit(self, node, scope): except SemanticError as e: pass if variable is None: - # self.errors.append(f'Variable {node.lex} is not defined in {self.current_method.name}.') self.errors.append(_NameError % (node.token_list[0].lineno, node.token_list[0].col, f"Undeclared identifier {node.lex}.")) node.type = ErrorType() return ErrorType() @@ -407,7 +374,6 @@ def visit(self, node, scope): return self.current_type except SemanticError as e: self.errors.append(_TypeError % (node.token_list[1].lineno, node.token_list[1].col, f"'new' used with undefined class {node.lex}.")) - # self.errors.append(e.text) node.errors = ErrorType return ErrorType() @@ -418,7 +384,6 @@ def visit(self, node, scope): node.type = tp return tp self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f"Argument of 'not' has type {tp.name} instead of Bool.")) - # self.errors.append(f'Undefined operation "not" for {tp.name}.') node.type = ErrorType() return ErrorType() @@ -429,7 +394,6 @@ def visit(self, node, scope): node.type = tp return tp self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, f"Argument of '~' has type {tp.name} instead of Int.")) - # self.errors.append(f'Undefined operation "~" for {tp.name}.') node.type = ErrorType() return ErrorType() @@ -451,7 +415,6 @@ def visit(self, node, scope): node.type = boolType return boolType self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' <= '+str(rt.name))) - # self.errors.append(f'Undefined operation "<=" for {lt.name} and {rt.name}.') node.type = ErrorType() return ErrorType() @@ -466,7 +429,6 @@ def visit(self, node, scope): node.type = boolType return boolType self.errors.append(_TypeError % (node.token_list[0].lineno, node.token_list[0].col, 'non-Int arguments: '+str(lt.name)+' < '+str(rt.name))) - # self.errors.append(f'Undefined operation "<" for {lt.name} and {rt.name}.') return ErrorType() @visitor.when(EqualNode) diff --git a/src/visitors/Cil2MipsCurrent.py b/src/visitors/Cil2MipsCurrent.py deleted file mode 100644 index 1f8d9f98d..000000000 --- a/src/visitors/Cil2MipsCurrent.py +++ /dev/null @@ -1,1225 +0,0 @@ -from utils.mip_utils import registers as r, operations as o, datatype as dt -import visitors.visitor as visitor -from cil_ast.cil_ast import * - -#heeerreeee con heerrrre carrrill - -class Function(): - def __init__(self, label, params, localvars): - self.label = label - self.localvars = localvars - self.params = params - self.instructions = [] - - def to_str(self): - code = f'{self.label}:\n' - code += '\n'.join(i for i in self.instructions) - return code - - def register_instruction(self, instruction): - self.instructions.append(instruction) - - def register_instructions(self, instructions): - self.instructions.extend(instructions) - - def find_location_param(self, name): - index = self.params.index(name) - offset = ((len(self.params) - 1) - index) * 4 - return '{}({})'.format(offset, r.fp) - - def find_location_local(self, name): - index = self.localvars.index(name) - offset = (len(self.localvars) + 2 - index) * 4 - return '{}({})'.format(-offset, r.fp) - - def find_var_loc(self, name): - try: - return self.find_location_param(name) - except ValueError: - return self.find_location_local(name) - -class MType(): - def __init__(self, name, label, code, index, attrs, methods): - self.name = name - self.label = label - self.index = index - self.methods = methods - self.attributes = attrs - self.code = code - -class DataHandler(): - def __init__(self, label, msg): - self.label = label - self.string = msg - self.code = '{}: {} "{}"'.format(self.label, dt.asciiz, self.string) - -class CILToMipsVisitor: - def __init__(self): - - self.type_lab_cnt = 0 - self.data_lab_cnt = 0 - self.code_lab_cnt = 0 - self.stack_args = 0 - self._function_names = {} - self._labels = {} - - self._data_section = {} - self._types_section = {} - self._functions_section = {} - self._current_function : FunctionNode = None - - def register_instruction(self, instruction): - self._current_function.register_instruction(instruction) - - def register_instructions(self, instructions): - self._current_function.register_instructions( instructions) - - def build_type_label(self): - self.type_lab_cnt += 1 - return f'type_{self.type_lab_cnt}' - - def build_data_label(self): - self.data_lab_cnt += 1 - return f'data_{self.data_lab_cnt}' - - def build_code_label(self): - self.code_lab_cnt += 1 - return f'label_{self.code_lab_cnt}' - - def start_function(self, name, function): - self._functions_section[name] = function - self._current_function = function - self._labels = {} - - def end_function(self): - self._current_function = None - - def register_label(self, label, new_label): - self._labels[label] = new_label - - def get_label(self, label): - return self._labels[label] - - def push_register(self, reg): - move_stack = '{} {} {} {}'.format(o.addi, r.sp, r.sp, -4) - save_location = '{}({})'.format(0, r.sp) - save_register = '{} {} {}'.format(o.sw, reg, save_location) - return [move_stack, save_register] - - def pop_register(self, reg): - load_value = '{} {} {}({})'.format(o.lw, reg, 0, r.sp) - move_stack = '{} {} {} {}'.format(o.addi, r.sp, r.sp, 4) - return [load_value, move_stack] - - def initialize_object(self, reg1, reg2): - instructions = [] - - instructions.append('{} {} {} {}'.format(o.sll, reg1, reg1, 2)) - instructions.append('{} {} {}'.format(o.la, reg2, 'prototype_table')) - instructions.append('{} {} {} {}'.format(o.add, reg2, reg2, reg1)) - instructions.append("{} {} {}({})".format(o.lw, reg2, 0, reg2)) - instructions.append("{} {} {}({})".format(o.lw, r.a0, 4, reg2)) - instructions.append('{} {} {} {}'.format(o.sll, r.a0, r.a0, 2)) - instructions.append('{} {}'.format(o.jal, "allocate")) - instructions.append("{} {} {}".format(o.move, r.a2, r.a0)) - instructions.append("{} {} {}".format(o.move, r.a0, reg2)) - instructions.append("{} {} {}".format(o.move, r.a1, r.v0)) - instructions.append('{} {}'.format(o.jal, "copy")) - - return instructions - - def find_var_loc(self, node): - if isinstance(node, AttributeNode): - return '0({})'.format(r.sp) - if isinstance(node, str): - return self._current_function.find_var_loc(node) - return self._current_function.find_var_loc(node.name) - - @visitor.on('node') - def collector_fnames(self, node): - pass - - @visitor.when(ProgramNode) - def collector_fnames(self, node): - for f in node.dotcode: - self.collector_fnames(f) - - @visitor.when(FunctionNode) - def collector_fnames(self, node): - if node.name == "entry": - self._function_names[node.name] = 'main' - else: - self._function_names[node.name] = node.name - - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node): - self.collector_fnames(node) - self._data_section["default_str"] = DataHandler("default_str", "") - - for i in node.dottypes: - self.visit(i) - for i in node.dotdata: - self.visit(i) - for i in node.dotcode: - self.visit(i) - - data = f'.data\n' + '\n.word 0\n'.join(d.code for d in self._data_section.values()) + '\n' - names_table = f"types_table:\n" + "\n".join([f".word {tp.name}" for tp in self._types_section.values()]) - proto_table = f"prototype_table:\n" + "\n".join([f" .word {tp.label}_prototype" for tp in self._types_section.values()]) - types_table = "\n\n\n".join([tp.code for tp in self._types_section.values()]) - code = '\n\n'.join(f.to_str() for f in self._functions_section.values()) + '\n' - - mipsCode = f'{data}\n\n{names_table}\n\n{proto_table}\n\n{types_table}\n\n\n.text\n.globl main\n{code}\n\n' - mipsCode += '\n'+self.define_util_functions() - - return mipsCode - - @visitor.when(TypeNode) - def visit(self, node): - name_label = self.build_data_label() - self._data_section[node.name] = DataHandler(name_label, node.name) - - type_label = self.build_type_label() - methods = [self._function_names[key] for key in node.methods.values()] - - type_attrs = list(node.attributes.keys()) - - _methods = "\n".join([f".word {m}" for m in methods]) - dispatch_table = f"{type_label}_dispatch:\n{_methods}" - begin = f"{type_label}_prototype:\n.word {len(self._types_section)}\n.word {len(type_attrs) + 4}\n.word {type_label}_dispatch" - attr = "\n".join([f'.word 0' for attr in type_attrs]) - end = f".word\t-1" - proto = f"{begin}\n{attr}\n{end}" if attr != "" else f"{begin}\n{end}" - - code = f'{dispatch_table}\n\n{proto}' - - self._types_section[node.name] = MType(name_label, type_label, code, len(self._types_section), type_attrs, methods) - - @visitor.when(DataNode) - def visit(self, node): - label = self.build_data_label() - self._data_section[node.name] = DataHandler(label, node.value) - - @visitor.when(FunctionNode) - def visit(self, node): - label = self._function_names[node.name] - params = [param.name for param in node.params] - localvars = [local.name for local in node.localvars] - size_for_locals = len(localvars) * 4 - - new_func = Function(label, params, localvars) - self.start_function(node.name, new_func) - - for instruction in node.instructions: - if isinstance(instruction, LabelNode): - mips_label = self.build_code_label() - self.register_label(instruction.label, mips_label) - - instructions = [] - instructions.extend(self.push_register(r.ra)) - instructions.extend(self.push_register(r.fp)) - instructions.append('{} {} {} {}'.format(o.addi, r.fp, r.sp, 8)) - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, -size_for_locals)) - - for i in node.instructions: - instructions.extend(self.visit(i)) - - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, size_for_locals)) - instructions.extend(self.pop_register(r.fp)) - instructions.extend(self.pop_register(r.ra)) - - if self._current_function.label != 'main': - instructions.append('{} {}'.format(o.jr, r.ra)) - else: - instructions.append('{} {} {}'.format(o.li, r.v0, 10)) - instructions.append('{}'.format(o.syscall)) - - new_func.register_instructions( instructions) - self.end_function() - - @visitor.when(AssignNode) - def visit(self, node): - instructions = [] - - if isinstance(node.source, VoidNode): - register = r.zero - elif isinstance(node.source, int): - register = r.t0 - instructions.append('{} {} {}'.format(o.li, r.t0, int(node.source))) - else: - register = r.t0 - instructions.extend(self.visit(node.source)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.source))) - if isinstance(node.source, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - if isinstance(node.dest, AttributeNode): - self_var = self._current_function.params[0] - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(self_var))) - - index = self._types_section[node.dest.type].attributes.index(node.dest.name) + 3 - instructions.append('{} {} {} {}'.format(o.addi, r.t1, r.t1, index * 4)) - instructions.append('{} {} 0({})'.format(o.sw, register, r.t1)) - else: - instructions.append('{} {} {}'.format(o.sw, register, self.find_var_loc(node.dest))) - - return instructions - - @visitor.when(PlusNode) - def visit(self, node): - instructions = [] - - if isinstance(node.left, int): - instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) - else: - instructions.extend(self.visit(node.left)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) - if isinstance(node.left, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - if isinstance(node.right, int): - instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) - else: - instructions.extend(self.visit(node.right)) - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) - if isinstance(node.right, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {} {}'.format(o.add, r.t0, r.t0, r.t1)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(MinusNode) - def visit(self, node): - instructions = [] - - if isinstance(node.left, int): - instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) - else: - instructions.extend(self.visit(node.left)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) - if isinstance(node.left, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - if isinstance(node.right, int): - instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) - else: - instructions.extend(self.visit(node.right)) - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) - if isinstance(node.right, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {} {}'.format(o.sub, r.t0, r.t0, r.t1)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(StarNode) - def visit(self, node): - instructions = [] - - if isinstance(node.left, int): - instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) - else: - instructions.extend(self.visit(node.left)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) - if isinstance(node.left, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - if isinstance(node.right, int): - instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) - else: - instructions.extend(self.visit(node.right)) - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) - if isinstance(node.right, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {} {}'.format(r.t0, r.t0, r.t1)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(DivNode) - def visit(self, node): - instructions = [] - - if isinstance(node.left, int): - instructions.append('{} {} {}'.format(o.li, r.t0, node.left)) - else: - instructions.extend(self.visit(node.left)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) - if isinstance(node.left, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - if isinstance(node.right, int): - instructions.append('{} {} {}'.format(o.li, r.t1, node.right)) - else: - instructions.extend(self.visit(node.right)) - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) - if isinstance(node.right, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {}'.format(o.div, r.t0, r.t1)) - instructions.append('{} {}'.format(o.mflo, r.t0)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(AllocateNode) - def visit(self, node): - instructions = [] - - if isinstance(node.type, int): - _type = node.type - else: - _type = self._types_section[node.type].index - instructions.append('{} {} {}'.format(o.li, r.t0, _type)) - instructions.extend(self.initialize_object(r.t0, r.t1)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(TypeOfNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.obj)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) - if isinstance(node.obj, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} 0({})'.format(o.lw, r.t1, r.t0)) - instructions.append('{} {} {} {}'.format(o.sll, r.t1, r.t1, 2)) - instructions.append('{} {} {}'.format(o.la, r.t0, 'types_table')) - instructions.append('{} {} {} {}'.format(o.add, r.t0, r.t0, r.t1)) - instructions.append('{} {} 0({})'.format(o.lw, r.t1, r.t0)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(StaticCallNode) - def visit(self, node): - instructions = [] - - func_name = self._function_names[node.function] - instructions.append('{} {}'.format(o.jal, func_name)) - if self.stack_args > 0: - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, self.stack_args * 4)) - self.stack_args = 0 - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(DynamicCallNode) - def visit(self, node): - instructions = [] - - _type = self._types_section[node.type] - method = _type.methods.index(self._function_names[node.method]) - - instructions.append('{} {} 0({})'.format(o.lw, r.t0, r.sp)) - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - self.stack_args -= 1 - - instructions.append('{} {} 8({})'.format(o.lw, r.t0, r.t0)) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, method * 4, r.t0)) - instructions.append('{} {} {}'.format(o.jalr, r.ra, r.t0)) - - if self.stack_args > 0: - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, self.stack_args * 4)) - self.stack_args = 0 - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(ArgNode) - def visit(self, node): - instructions = [] - - self.stack_args += 1 - if isinstance(node.name, int): - instructions.append('{} {} {}'.format(o.li, r.t0, node.name)) - else: - instructions.extend(self.visit(node.name)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.name))) - if isinstance(node.name, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.extend(self.push_register(r.t0)) - - return instructions - - @visitor.when(ReturnNode) - def visit(self, node): - instructions = [] - - if node.value is None or isinstance(node.value, VoidNode): - instructions.append('{} {} {}'.format(o.li, r.v0, 0)) - elif isinstance(node.value, int): - instructions.append('{} {} {}'.format(o.li, r.v0, node.value)) - else: - instructions.extend(self.visit(node.value)) - instructions.append('{} {} {}'.format(o.lw, r.v0, self.find_var_loc(node.value))) - if isinstance(node.value, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(LoadNode) - def visit(self, node): - instructions = [] - - instructions.append('{} {} {}'.format(o.la, r.t0, self._data_section[node.msg.name].label)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(PrintStringNode) - def visit(self, node): - instructions = [] - - instructions.append('{} {} {}'.format(o.li, r.v0, 4)) - instructions.extend(self.visit(node.str_addr)) - instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.str_addr))) - if isinstance(node.str_addr, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{}'.format(o.syscall)) - - return instructions - - @visitor.when(PrintIntNode) - def visit(self, node): - instructions = [] - - instructions.append('{} {} {}'.format(o.li, r.v0, 1)) - instructions.extend(self.visit(node.value)) - instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.value))) - if isinstance(node.value, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{}'.format(o.syscall)) - - return instructions - - @visitor.when(ExitNode) - def visit(self, node): - instructions = [] - - instructions.append('{} {} {}'.format(o.li, r.v0, 10)) - instructions.append('{}'.format(o.syscall)) - - return instructions - - @visitor.when(CopyNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.value)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) - if isinstance(node.value, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} 4({})'.format(o.lw, r.a0, r.t0)) - instructions.append('{} {} {} {}'.format(o.sll, r.a0, r.a0, 2)) - instructions.append('{} {}'.format(o.jal, "allocate")) - instructions.append('{} {} {}'.format(o.move, r.a2, r.a0)) - instructions.append('{} {} {}'.format(o.move, r.a0, r.t0)) - instructions.append('{} {} {}'.format(o.move, r.a1, r.v0)) - instructions.append('{} {}'.format(o.jal, "copy")) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(GetAttribNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.obj)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) - if isinstance(node.obj, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - tp = self._types_section[node.computed_type] - offset = (tp.attributes.index(node.attr) + 3) * 4 - instructions.append('{} {} {}({})'.format(o.lw, r.t1, offset, r.t0)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(ErrorNode) - def visit(self, node): - instructions = [] - - mips_label = self._data_section[node.data.name].label - instructions.append('{} {} {}'.format(o.li, r.v0, 4)) - instructions.append('{} {} {}'.format(o.la, r.a0, mips_label)) - instructions.append('{}'.format(o.syscall)) - instructions.append('{} {} {}'.format(o.li, r.v0, 10)) - instructions.append('{}'.format(o.syscall)) - - return instructions - - @visitor.when(ReadIntNode) - def visit(self, node): - instructions = [] - - instructions.append('{} {} {}'.format(o.li, r.v0, 5)) - instructions.append('{}'.format(o.syscall)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(ReadStringNode) - def visit(self, node): - instructions = [] - - instructions.append('{} {}'.format(o.jal, "read_string")) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(SetAttribNode) - def visit(self, node): - instructions = [] - - tp = self._types_section[node.computed_type] - offset = (tp.attributes.index(node.attr) + 3) * 4 - - instructions.extend(self.visit(node.obj)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.obj))) - if isinstance(node.obj, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - if type(node.value) == int: - instructions.append('{} {} {}'.format(o.li, r.t1, node.value)) - else: - instructions.extend(self.visit(node.value)) - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.value))) - if isinstance(node.value, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - instructions.append('{} {} {}({})'.format(o.sw, r.t1, offset, r.t0)) - - return instructions - - @visitor.when(LessNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.left)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) - if isinstance(node.left, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - instructions.extend(self.visit(node.right)) - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) - if isinstance(node.right, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {} {}'.format(o.slt, r.t1, r.t0, r.t1)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t1, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(GotoIfNode) - def visit(self, node): - instructions = [] - - mips_label = self.get_label(node.label) - instructions.extend(self.visit(node.condition)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.condition))) - if isinstance(node.condition, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {} {}'.format(o.bne, r.t0, r.zero, mips_label)) - - return instructions - - @visitor.when(GotoNode) - def visit(self, node): - instructions = [] - - mips_label = self.get_label(node.label) - instructions.append('{} {}'.format(o.j, mips_label)) - - return instructions - - @visitor.when(LabelNode) - def visit(self, node): - instructions = [] - - mips_label = self.get_label(node.label) - instructions.append('{}:'.format(mips_label)) - - return instructions - - @visitor.when(SubstringNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.str_value)) - instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.str_value))) - if isinstance(node.str_value, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - if type(node.index) == int: - instructions.append('{} {} {}'.format(o.li, r.a1, node.index)) - else: - instructions.extend(self.visit(node.index)) - instructions.append('{} {} {}'.format(o.lw, r.a1, self.find_var_loc(node.index))) - if isinstance(node.index, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - if type(node.index) == int: - instructions.append('{} {} {}'.format(o.li, r.a2, node.length)) - else: - instructions.extend(self.visit(node.length)) - instructions.append('{} {} {}'.format(o.lw, r.a2, self.find_var_loc(node.length))) - if isinstance(node.length, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - instructions.append('{} {}'.format(o.jal, "substr")) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(ConcatNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.prefix)) - instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.prefix))) - if isinstance(node.prefix, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.extend(self.visit(node.suffix)) - instructions.append('{} {} {}'.format(o.lw, r.a1, self.find_var_loc(node.suffix))) - if isinstance(node.suffix, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.extend(self.visit(node.length)) - instructions.append('{} {} {}'.format(o.lw, r.a2, self.find_var_loc(node.length))) - if isinstance(node.length, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {}'.format(o.jal, "concat")) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(LengthNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.source)) - instructions.append('{} {} {}'.format(o.lw, r.a0, self.find_var_loc(node.source))) - if isinstance(node.source, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - instructions.append('{} {}'.format(o.jal, "length")) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(EqualNode) - def visit(self, node): - instructions = [] - - if type(node.left) == VoidNode: - instructions.append('{} {} {}'.format(o.li, r.t0, 0)) - else: - instructions.extend(self.visit(node.left)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) - if isinstance(node.left, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - if type(node.right) == VoidNode: - instructions.append('{} {} {}'.format(o.li, r.t1, 0)) - else: - instructions.extend(self.visit(node.right)) - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) - if isinstance(node.right, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - instructions.append('{} {} {} {}'.format(o.seq, r.t0, r.t0, r.t1)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(NameNode) - def visit(self, node): - instructions = [] - - instructions.append('{} {} {}'.format(o.la, r.t0, 'types_table')) - - tp_number = self._types_section[node.value].index - instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, tp_number * 4)) - instructions.append('{} {} 0({})'.format(o.lw, r.t0, r.t0)) - - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(EqualStringNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.left)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) - if isinstance(node.left, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {}'.format(o.move, r.a0, r.t0)) - - instructions.extend(self.visit(node.right)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.right))) - if isinstance(node.right, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {}'.format(o.move, r.a1, r.t0)) - - instructions.append('{} {}'.format(o.jal, "equal_str")) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.v0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(ComplementNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.value)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) - if isinstance(node.value, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - instructions.append('{} {} {}'.format(o.not_bw, r.t0, r.t0)) - instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, 1)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(LessEqualNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.left)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.left))) - if isinstance(node.left, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - instructions.extend(self.visit(node.right)) - instructions.append('{} {} {}'.format(o.lw, r.t1, self.find_var_loc(node.right))) - if isinstance(node.right, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - instructions.append('{} {} {} {}'.format(o.sle, r.t0, r.t0, r.t1)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(NotNode) - def visit(self, node): - instructions = [] - - instructions.extend(self.visit(node.value)) - instructions.append('{} {} {}'.format(o.lw, r.t0, self.find_var_loc(node.value))) - if isinstance(node.value, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - instructions.append('{} {} {}'.format(o.xori, r.t0, r.t0)) - instructions.extend(self.visit(node.dest)) - instructions.append('{} {} {}'.format(o.sw, r.t0, self.find_var_loc(node.dest))) - if isinstance(node.dest, AttributeNode): - instructions.append('{} {} {} {}'.format(o.addi, r.sp, r.sp, 4)) - - return instructions - - @visitor.when(VarNode) - def visit(self, node): - return [] - - @visitor.when(ParamNode) - def visit(self, node): - return [] - - @visitor.when(AttributeNode) - def visit(self, node): - instructions = [] - - self_var = self._current_function.params[0] - instructions.append('{} {} {}'.format(o.lw, r.t4, self.find_var_loc(self_var))) - - index = self._types_section[node.type].attributes.index(node.name) + 3 - instructions.append('{} {} {}({})'.format(o.lw, r.t4, index * 4, r.t4)) - instructions.extend(self.push_register(r.t4)) - - return instructions - - - def allocate(self): - instructions = [] - - instructions.append('{}:'.format('allocate')) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -12)) - instructions.append('{} {} {}({})'.format(o.sw, r.a0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) - instructions.append('{} {} {}'.format(o.li, r.t0, 4)) - instructions.append('{} {} {}'.format(o.div, r.a0, r.t0)) - instructions.append('{} {}'.format(o.mfhi, r.t1)) - instructions.append('{} {} {} {}'.format(o.sub, r.t0, r.t0, r.t1)) - instructions.append('{} {} {} {}'.format(o.add, r.a0, r.a0, r.t0)) - instructions.append('{} {} {}'.format(o.li, r.v0, 9)) - instructions.append('{}'.format(o.syscall)) - instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 12)) - instructions.append('{} {}'.format(o.jr, r.ra)) - - return instructions - - def copy(self): - instructions = [] - - instructions.append('{}:'.format('copy')) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -16)) - instructions.append('{} {} {}({})'.format(o.sw, r.a0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a1, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a2, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t0, 12, r.sp)) - instructions.append('{}:'.format('while_copy')) - instructions.append('{} {} {} {}'.format(o.beq, r.a2, r.zero, 'copy_end')) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.a0)) - instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.a1)) - instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a0, 4)) - instructions.append('{} {} {} {}'.format(o.addiu, r.a1, r.a1, 4)) - instructions.append('{} {} {} {}'.format(o.addi, r.a2, r.a2, -4)) - instructions.append('{} {}'.format(o.j, 'while_copy')) - instructions.append('{}:'.format('copy_end')) - instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a1, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a2, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, 12, r.sp)) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 16)) - instructions.append('{} {}'.format(o.jr, r.ra)) - - return instructions - - def length(self): - instructions = [] - - instructions.append('{}:'.format('length')) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -8)) - instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) - instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) - instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) - instructions.append('{}:'.format('while_len')) - instructions.append('{} {} {}({})'.format(o.lb, r.t1, 0, r.t0)) - instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.zero, 'len_end')) - instructions.append('{} {} {} {}'.format(o.addi, r.v0, r.v0, 1)) - instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) - instructions.append('{} {}'.format(o.j, 'while_len')) - instructions.append('{}:'.format('len_end')) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 8)) - instructions.append('{} {}'.format(o.jr, r.ra)) - - return instructions - - def substring(self): - instructions = [] - - instructions.append('{}:'.format('substr')) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -32)) - instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t2, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t3, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a0, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a1, 20, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a2, 24, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.ra, 28, r.sp)) - instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) - instructions.append('{} {} {} {}'.format(o.add, r.t0, r.t0, r.a1)) - instructions.append('{} {} {}'.format(o.li, r.t1, 4)) - instructions.append('{} {} {}'.format(o.div, r.a2, r.t1)) - instructions.append('{} {}'.format(o.mfhi, r.t2)) - instructions.append('{} {} {} {}'.format(o.bne, r.t2, r.zero, 'substr_allign_size')) - instructions.append('{} {} {}'.format(o.move, r.t1, r.a2)) - instructions.append('{} {}'.format(o.j, 'substr_new_chunk')) - instructions.append('{}:'.format('substr_allign_size')) - instructions.append('{} {} {} {}'.format(o.sub, r.t1, r.t1, r.t2)) - instructions.append('{} {} {} {}'.format(o.add, r.t1, r.t1, r.a2)) - instructions.append('{}:'.format('substr_new_chunk')) - instructions.append('{} {} {}'.format(o.move, r.a0, r.t1)) - instructions.append('{} {}'.format(o.jal, 'allocate')) - instructions.append('{} {} {}'.format(o.move, r.t3, r.v0)) - instructions.append('{} {} {}'.format(o.move, r.t1, r.zero)) - instructions.append('{}:'.format('while_substr_copy')) - instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.a2, 'substr_end')) - instructions.append('{} {} {}({})'.format(o.lb, r.t2, 0, r.t0)) - instructions.append('{} {} {}({})'.format(o.sb, r.t2, 0, r.t3)) - instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) - instructions.append('{} {} {} {}'.format(o.addiu, r.t3, r.t3, 1)) - instructions.append('{} {} {} {}'.format(o.addiu, r.t1, r.t1, 1)) - instructions.append('{} {}'.format(o.j, 'while_substr_copy')) - instructions.append('{}:'.format('substr_end')) - instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t3)) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t2, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t3, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a0, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a1, 20, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a2, 24, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.ra, 28, r.sp)) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 32)) - instructions.append('{} {}'.format(o.jr, r.ra)) - - return instructions - - def concat(self): - instructions = [] - - instructions.append('{}:'.format('concat')) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -24)) - instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t2, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a0, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a1, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.ra, 20, r.sp)) - instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) - instructions.append('{} {} {}'.format(o.move, r.t1, r.a1)) - instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a2, 1)) - instructions.append('{} {} {}'.format(o.li, r.t2, 4)) - instructions.append('{} {} {}'.format(o.div, r.a0, r.t2)) - instructions.append('{} {}'.format(o.mfhi, r.a0)) - instructions.append('{} {} {} {}'.format(o.bne, r.a0, r.zero, 'concat_allign_size')) - instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a2, 1)) - instructions.append('{} {}'.format(o.j, 'concat_size_allignned')) - instructions.append('{}:'.format('concat_allign_size')) - instructions.append('{} {} {} {}'.format(o.sub, r.t2, r.t2, r.a0)) - instructions.append('{} {} {} {}'.format(o.add, r.a0, r.a2, r.t2)) - instructions.append('{} {} {} {}'.format(o.addiu, r.a0, r.a0, 1)) - instructions.append('{}:'.format('concat_size_allignned')) - instructions.append('{} {}'.format(o.jal, 'allocate')) - instructions.append('{} {} {}'.format(o.move, r.t2, r.v0)) - instructions.append('{} {}'.format(o.j, 'first_while_concat_copy')) - instructions.append('{}:'.format('first_while_concat_copy')) - instructions.append('{} {} {}({})'.format(o.lb, r.a0, 0, r.t0)) - instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'second_while_concat_copy')) - instructions.append('{} {} {}({})'.format(o.sb, r.a0, 0, r.t2)) - instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) - instructions.append('{} {} {} {}'.format(o.addiu, r.t2, r.t2, 1)) - instructions.append('{} {}'.format(o.j, 'first_while_concat_copy')) - instructions.append('{}:'.format('second_while_concat_copy')) - instructions.append('{} {} {}({})'.format(o.lb, r.a0, 0, r.t1)) - instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'concat_end')) - instructions.append('{} {} {}({})'.format(o.sb, r.a0, 0, r.t2)) - instructions.append('{} {} {} {}'.format(o.addiu, r.t1, r.t1, 1)) - instructions.append('{} {} {} {}'.format(o.addiu, r.t2, r.t2, 1)) - instructions.append('{} {}'.format(o.j, 'second_while_concat_copy')) - instructions.append('{}:'.format('concat_end')) - instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t2)) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t2, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a0, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a1, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.ra, 20, r.sp)) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 24)) - instructions.append('{} {}'.format(o.jr, r.ra)) - - return instructions - - def read_string(self): - instructions = [] - - instructions.append('{}:'.format('read_string')) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -28)) - instructions.append('{} {} {}({})'.format(o.sw, r.ra, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a0, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a1, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a2, 20, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t2, 24, r.sp)) - instructions.append('{} {} {}'.format(o.li, r.t0, 8)) - instructions.append('{} {} {} {}'.format(o.addi, r.a0, r.t0, 4)) - instructions.append('{} {}'.format(o.jal, 'allocate')) - instructions.append('{} {} {}'.format(o.move, r.t1, r.v0)) - instructions.append('{} {} {}'.format(o.move, r.t2, r.zero)) - instructions.append('{}:'.format('while_read_string')) - instructions.append('{} {} {} {}'.format(o.addu, r.a0, r.t1, r.t2)) - instructions.append('{} {} {} {}'.format(o.subu, r.a1, r.t0, r.t2)) - instructions.append('{} {} {} {}'.format(o.addu, r.t2, r.t2, r.a1)) - instructions.append('{} {}'.format(o.jal, 'read_string_up_to')) - instructions.append('{} {} {} {}'.format(o.beq, r.v0, r.zero, 'read_string_not_finished')) - instructions.append('{} {} {}'.format(o.move, r.v0, r.t1)) - instructions.append('{} {}'.format(o.j, 'end_read_string')) - instructions.append('{}:'.format('read_string_not_finished')) - instructions.append('{} {} {} {}'.format(o.sll, r.t0, r.t0, 1)) - instructions.append('{} {} {} {}'.format(o.addi, r.a0, r.t0, 4)) - instructions.append('{} {}'.format(o.jal, 'allocate')) - instructions.append('{} {} {}'.format(o.move, r.a0, r.t1)) - instructions.append('{} {} {}'.format(o.move, r.t1, r.v0)) - instructions.append('{} {} {}'.format(o.move, r.a1, r.v0)) - instructions.append('{} {} {}'.format(o.move, r.a2, r.t2)) - instructions.append('{} {}'.format(o.jal, 'copy')) - instructions.append('{} {}'.format(o.j, 'while_read_string')) - instructions.append('{}:'.format('end_read_string')) - instructions.append('{} {} {}({})'.format(o.lw, r.ra, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a0, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a1, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a2, 20, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t2, 24, r.sp)) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 28)) - instructions.append('{} {}'.format(o.jr, r.ra)) - instructions.append('{}:'.format('read_string_up_to')) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -28)) - instructions.append('{} {} {}({})'.format(o.sw, r.ra, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t0, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t1, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t2, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t3, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t4, 20, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t5, 24, r.sp)) - instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) - instructions.append('{} {} {}'.format(o.move, r.t1, r.zero)) - instructions.append('{} {} {}'.format(o.li, r.t2, 10)) - instructions.append('{} {} {} {}'.format(o.addu, r.t3, r.t0, r.a1)) - instructions.append('{} {} {} {}'.format(o.addiu, r.a1, r.a1, 1)) - instructions.append('{} {} {}'.format(o.li, r.v0, 8)) - instructions.append('{}'.format(o.syscall)) - instructions.append('{} {} {}({})'.format(o.lw, r.a0, 0, r.a0)) - instructions.append('{} {} {} {}'.format(o.beq, r.a0, r.zero, 'eol_terminated')) - instructions.append('{} {} {}'.format(o.li, r.v0, 0)) - instructions.append('{}:'.format('eol_check')) - instructions.append('{} {} {} {}'.format(o.beq, r.t0, r.t3, 'read_loop_continue')) - instructions.append('{} {} {}({})'.format(o.lb, r.t1, 0, r.t0)) - instructions.append('{} {} {} {}'.format(o.beq, r.t1, r.t2, 'eol_terminated')) - instructions.append('{} {} {} {}'.format(o.addiu, r.t0, r.t0, 1)) - instructions.append('{} {}'.format(o.j, 'eol_check')) - instructions.append('{}:'.format('eol_terminated')) - instructions.append('{} {} {}({})'.format(o.sb, r.zero, 0, r.t0)) - instructions.append('{} {} {}'.format(o.li, r.v0, 1)) - instructions.append('{}:'.format('read_loop_continue')) - instructions.append('{} {} {}({})'.format(o.lw, r.ra, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t1, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t2, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t3, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t4, 20, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t5, 24, r.sp)) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 28)) - instructions.append('{} {}'.format(o.jr, r.ra)) - - return instructions - - def string_equals(self): - instructions = [] - - instructions.append('{}:'.format('equal_str')) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, -24)) - instructions.append('{} {} {}({})'.format(o.sw, r.t0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t1, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a0, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.a1, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t2, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.sw, r.t3, 20, r.sp)) - instructions.append('{} {} {}'.format(o.move, r.t0, r.a0)) - instructions.append('{} {} {}'.format(o.move, r.t1, r.a1)) - instructions.append('{}:'.format('while_equal_str')) - instructions.append('{} {} {}({})'.format(o.lb, r.t2, 0, r.t0)) - instructions.append('{} {} {}({})'.format(o.lb, r.t3, 0, r.t1)) - instructions.append('{} {} {} {}'.format(o.bne, r.t2, r.t3, 'equal_str_different_strings')) - instructions.append('{} {} {} {}'.format(o.beq, r.t2, r.zero, 'first_end_equal_str')) - instructions.append('{} {} {} {}'.format(o.beq, r.t3, r.zero, 'second_end_equal_str')) - instructions.append('{} {} {} {}'.format(o.addi, r.t1, r.t1, 1)) - instructions.append('{} {} {} {}'.format(o.addi, r.t0, r.t0, 1)) - instructions.append('{} {}'.format(o.j, 'while_equal_str')) - instructions.append('{}:'.format('equal_str_different_strings')) - instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) - instructions.append('{} {}'.format(o.j, 'equal_str_end')) - instructions.append('{}:'.format('first_end_equal_str')) - instructions.append('{} {} {} {}'.format(o.beq, r.t3, r.zero, 'second_end_equal_str')) - instructions.append('{} {} {}'.format(o.move, r.v0, r.zero)) - instructions.append('{} {}'.format(o.j, 'equal_str_end')) - instructions.append('{}:'.format('second_end_equal_str')) - instructions.append('{} {} {}'.format(o.li, r.v0, 1)) - instructions.append('{}:'.format('equal_str_end')) - instructions.append('{} {} {}({})'.format(o.lw, r.t0, 0, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t1, 4, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a0, 8, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.a1, 12, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t2, 16, r.sp)) - instructions.append('{} {} {}({})'.format(o.lw, r.t3, 20, r.sp)) - instructions.append('{} {} {} {}'.format(o.addiu, r.sp, r.sp, 24)) - instructions.append('{} {}'.format(o.jr, r.ra)) - - return instructions - - def define_util_functions(self): - # instructions = [self.allocate(), self.copy(), self.length(), self.substring(), self.concat(), self.read_string(), self.string_equals()] - instructions = [self.allocate(), self.copy(), self.length(), self.concat(), self.substring(), self.string_equals(), self.read_string()] - - code = '\n\n'.join('\n'.join(i for i in j) for j in instructions) - return code - diff --git a/src/visitors/CiltoMips.py b/src/visitors/CiltoMips.py index 87bd13fbd..e0659bcdc 100644 --- a/src/visitors/CiltoMips.py +++ b/src/visitors/CiltoMips.py @@ -1217,7 +1217,6 @@ def string_equals(self): return instructions def define_util_functions(self): - # instructions = [self.allocate(), self.copy(), self.length(), self.substring(), self.concat(), self.read_string(), self.string_equals()] instructions = [self.allocate(), self.copy(), self.length(), self.concat(), self.substring(), self.string_equals(), self.read_string()] code = '\n\n'.join('\n'.join(i for i in j) for j in instructions) diff --git a/src/visitors/CiltoMips_old.py b/src/visitors/CiltoMips_old.py deleted file mode 100644 index 914bd43b4..000000000 --- a/src/visitors/CiltoMips_old.py +++ /dev/null @@ -1,317 +0,0 @@ -from utils.mip_utils import registers, operations, datatype -import visitors.visitor as visitor -from cil_ast.cil_ast import * - -class CiltoMipsVisitor: - def __init__(self, context): - self.dottypes = [] - self.dotdata =[] - self.dotcode =[] - self.context = context - self.code = [] - self.data = [] - def write_data(self, instruction): - self.data.append(instruction) - - def write_code(self, instruction): - self.code.append(instruction) - - - - @visitor.on('node') - def visit(self, node): - pass - - @visitor.when(ProgramNode) - def visit(self, node): - self.dottypes = node.dottypes - self.dotdata = node.dotdata - self.dotcode = node.dotcode - - self.write_data('.data') - self.write_code('.text') - - inherited = "# Inherited Method\n" \ - ".inherited:\n" \ - "lw $a0, 8($sp)\n" \ - "lw $a1, 4($sp)\n" \ - "lw $a0, ($a0)\n" \ - "lw $a2, ($a0)\n" \ - "lw $a3, 4($a0)\n" \ - "lw $a0, ($a1)\n" \ - "lw $a1, 4($a1)\n" \ - "sge $t0, $a2, $a0\n" \ - "sle $t1, $a3, $a1\n" \ - "and $a0, $t0, $t1\n" \ - "sw $a0, ($sp)\n" \ - "subu $sp, $sp, 4\n" \ - "jr $ra\n" \ - "\n" - - raise_exc = "# raise exception Method\n" \ - ".raise:\n" \ - "lw $a0, 4($sp)\n" \ - "li $v0, 4\n" \ - "syscall\n" \ - "li $v0, 10\n" \ - "syscall" - - self.write_data("# Start .data segment (data!)") - self.write_data(".data") - self.write_data("zero_error: .asciiz \"Divition by zero exception\"") - self.write_data("index_error: .asciiz \"Invalid index exception\"") - self.write_data("void_error: .asciiz \"Objects must be inizializated before use exception\"") - self.write_data("case_error: .asciiz \"Case expression no match exception\"") - self.write_data("void_str: .asciiz \"\"") - - self.write_code(inherited) - self.write_code(raise_exc) - - self.write_code("main:") - self.write_code(f'{operations.move} {registers.s7} {registers.gp}') - self.write_code(f'{operations.addi} {registers.s7} {registers.s7} 300000') - self.write_code(f"") - - self.write_data(f"_abort: {datatype.asciiz} \"Program Aborted\"") - self.write_data(f"_zero: {datatype.asciiz} \"0 Division Error\"") - self.write_data(f"_substr: {datatype.asciiz} \"Substr Length Error\"") - self.write_data(f"_mem: {datatype.asciiz} \"Memory Error\"") - self.write_data(f"") - - for i, d in enumerate(self.dotdata): - self.write_data("msg{}: {} \"{}\"".format(i, datatype.asciiz, d)) # every one of the user defined data through the program - - self.write_data('buffer: .space 1024') # buffer for the in_string method - - for i, t in enumerate(self.dottypes): - self.write_data(f"type_str{i}: {datatype.asciiz} \"{t.name}\"") - - for i, t in enumerate(self.dottypes): - # words = f"{tipe.cType}: .word {tipe.t_in}, {tipe.t_out}, type_str{i}" - words = f"{t.name}: .word 12, 42, type_str{i}" - for method in t.methods: - words += ", " + "." + method[1] - self.write_data(words) - - for instr in self.dotcode: - a = 0 - - - @visitor.when(TypeNode) - def visit(self, node): - pass - - @visitor.when(DataNode) - def visit(self, node): - pass - - @visitor.when(FunctionNode) - def visit(self, node): - methods = [ - 'Object_abort', - 'Object_type_name', - 'Object_copy', - 'String_concat', - 'String_substr', - 'String_length', - 'IO_in_int', - 'IO_out_int', - 'IO_in_string', - 'IO_out_string', - ] - if node.fname in methods: - return - pass - - @visitor.when(ParamNode) - def visit(self, node): - pass - - @visitor.when(LocalNode) - def visit(self, node): - pass - - @visitor.when(AssignNode) - def visit(self, node): - pass - - @visitor.when(PlusNode) - def visit(self, node): - pass - - @visitor.when(MinusNode) - def visit(self, node): - pass - - @visitor.when(StarNode) - def visit(self, node): - pass - - @visitor.when(DivNode) - def visit(self, node): - pass - - @visitor.when(EqualNode) - def visit(self, node): - pass - - @visitor.when(LessNode) - def visit(self, node): - pass - - @visitor.when(LeqNode) - def visit(self, node): - pass - - @visitor.when(GotoNode) - def visit(self, node): - pass - - @visitor.when(GotoIfNode) - def visit(self, node): - pass - - @visitor.when(GetAttribNode) - def visit(self, node): - pass - - @visitor.when(SetAttribNode) - def visit(self, node): - pass - - @visitor.when(AllocateNode) - def visit(self, node): - pass - - @visitor.when(TypeOfNode) - def visit(self, node): - pass - - @visitor.when(LabelNode) - def visit(self, node): - pass - - @visitor.when(IsTypeNode) - def visit(self, node): - pass - - @visitor.when(ParentTypeNode) - def visit(self, node): - pass - - @visitor.when(StaticCallNode) - def visit(self, node): - pass - - @visitor.when(DynamicCallNode) - def visit(self, node): - pass - - @visitor.when(ArgNode) - def visit(self, node): - pass - - @visitor.when(ReturnNode) - def visit(self, node): - pass - - @visitor.when(LoadNode) - def visit(self, node): - pass - - @visitor.when(LengthNode) - def visit(self, node): - pass - - @visitor.when(ConcatNode) - def visit(self, node): - pass - - @visitor.when(PrefixNode) - def visit(self, node): - pass - - @visitor.when(SubstringNode) - def visit(self, node): - pass - - @visitor.when(ToStrNode) - def visit(self, node): - pass - -# Input espacio a reservar en $a0 -# Output direccion de memoria reservada en $a0 - def mem_alloc(self): - self.write_code(f"# Declartation of the mem_alloc") - - self.write_code(f"mem_alloc:") - self.write_code(f"{operations.add} {registers.gp} {registers.gp} {registers.a0}") - self.write_code(f"{operations.blt} {registers.gp} {registers.s7} mem_alloc_end")# si se pasa del límite de memoria dar error - self.write_code(f"{operations.j} mem_error") - self.write_code(f"mem_alloc_end:") - self.write_code(f"{operations.sub} {registers.a0} {registers.gp} {registers.a0}") - self.write_code(f"{operations.jr} {registers.ra}") - self.write_code(f"") - -# en a0 tengo el la instancia - def get_parent_prot(self): - self.write_code(f"# get parent prototype") # - self.write_code(f"get_parent_prot:") - self.write_code(f"{operations.lw} {registers.t0} ({registers.a0})") - self.write_code(f"{operations.sll} {registers.t0} {registers.t0} 2")# mult por 4 pa tener el offset - self.write_code(f"{operations.lw} {registers.t0} ({registers.s4})") - self.write_code(f"{operations.move} {registers.a0} {registers.t0}") - self.write_code(f"{operations.jr} {registers.ra}") - self.write_code(f"") - -# funciones para errores en runtime - def zero_error(self): # error al dividir por 0 - self.write_code(f"# Declartation of the zero-div runtime error") - - self.write_code(f"zero_error:") - self.write_code(f"{operations.la} {registers.a0} _zero") - self.write_code(f"") - - self.write_code(f"{operations.li} {registers.v0} 4") - self.write_code(f"{operations.syscall}") - self.write_code(f"{operations.li} {registers.v0} 10") - self.write_code(f"{operations.syscall}") - self.write_code(f"") - - def substr_error(self): - self.write_code(f"# Declartation of the substr-index.out.of.range runtime error") - - self.write_code(f"substr_error:") - self.write_code(f"{operations.la} {registers.a0} _substr") - self.write_code(f"") - - self.write_code(f"{operations.li} {registers.v0} 4") - self.write_code(f"{operations.syscall}") - self.write_code(f"{operations.li} {registers.v0} 10") - self.write_code(f"{operations.syscall}") - self.write_code(f"") - - def mem_error(self): - self.write_code(f"# Declartation of the memory-overflow runtime error") - self.write_code(f"mem_error:") - self.write_code(f"{operations.la} {registers.a0} _mem") - self.write_code(f"") - - self.write_code(f"{operations.li} {registers.v0} 4") - self.write_code(f"{operations.syscall}") - self.write_code(f"{operations.li} {registers.v0} 10") - self.write_code(f"{operations.syscall}") - self.write_code(f"") - - - def utils_functs(self): - self.mem_alloc() - self.get_parent_prot() - self.object_copy() - self.str_eq() - self.str_concat() - self.str_substr() - self.length() - self.zero_error() - self.mem_error() - self.substr_error() \ No newline at end of file diff --git a/src/visitors/CooltoCil.py b/src/visitors/CooltoCil.py index 5ab97aa9c..4fd7d49f6 100644 --- a/src/visitors/CooltoCil.py +++ b/src/visitors/CooltoCil.py @@ -1,9 +1,7 @@ -from distutils.log import error from cool_ast.cool_ast import * import cil_ast.cil_ast as cil -from utils.semantic import Context, SemanticError, Type, Method, Scope, ErrorType, VariableInfo +from utils.semantic import VariableInfo import visitors.visitor as visitor -# from utils.errors import _TypeError, _NameError, _SemanticError, _AtributeError class BaseCOOLToCILVisitor: def __init__(self, context): diff --git a/src/visitors/Executor.py b/src/visitors/Executor.py index e37f2cf10..ff0cc3d1b 100755 --- a/src/visitors/Executor.py +++ b/src/visitors/Executor.py @@ -1,8 +1,6 @@ from cool_ast.cool_ast import * -from typing import List, Dict import visitors.visitor as visitor -from utils.semantic import Context, Type, Method, Scope -from typing import Any +from utils.semantic import Context, Scope from utils.exceptions import RuntimeException class Pod: @@ -151,21 +149,11 @@ def visit(self, node, scope): _funcCall_scope.define_variable('self', token.type).token = token - # atrbs = [] - # if node.obj.lex != 'self': - # for attr in token.attr_values.keys(): - # if scope.is_local(attr): - # pass - # else: - # child_scope.define_variable(attr, token.attr_values[attr].type).token = token.attr_values[attr] - # atrbs.append(attr) + self.stack.append(self.currentPod) self.currentPod = token result = self.visit(method.expr, _funcCall_scope) - - # for name in atrbs: - # token.attr_values[name] = child_scope.find_variable(name).token self.currentPod = self.stack.pop() return result @@ -241,7 +229,6 @@ def visit(self, node, scope): attr_token = self.visit(attr.expr, scope) else: attr_token = VoidPod() - # scope.define_variable(attr.name, attr.type).token = attr_token self.currentPod.set_attribute(attr.name, attr_token) self.currentPod = self.stack.pop() return token @@ -283,7 +270,7 @@ def visit(self, node, scope): raise RuntimeException('Reference to an instance of a void object.') types = [(i, self.context.get_type(t)) for i, (_, t, _) in enumerate(node.case_list) - if token.type.conforms_to(self.context.get_type(t))] + if token.type.conforms_to(self.context.get_type(t))] if len(types) == 0: raise RuntimeException('NotTypeFoundError: None of the types were valid') @@ -300,7 +287,6 @@ def visit(self, node, scope): @visitor.when(WhileNode) def visit(self, node, scope): - # if isinstance(node.condition, ConditionalNode) and isinstance(node.condition.ifChunk, CallNode): a = 0 while self.visit(node.condition, scope).value: self.visit(node.loopChunk, scope.create_child()) @@ -359,7 +345,6 @@ def visit(self, node, scope): class VoidPod(Pod): def __init__(self): super(VoidPod, self).__init__(None, None) - # raise Exception('hola worl') def __eq__(self, cousin): return isinstance(cousin, VoidPod) \ No newline at end of file diff --git a/src/visitors/Inferencer.py b/src/visitors/Inferencer.py index 310514f1a..1853b7c86 100755 --- a/src/visitors/Inferencer.py +++ b/src/visitors/Inferencer.py @@ -56,7 +56,6 @@ def visit(self, node, scope): attrType = self.context.get_type(node.type) attr = scope.define_variable(node.id, attrType) self.vars[attr] = VarNode(attrType, attr) - # self.vars[attr] = VarNode(self.context.get_type('AUTO_TYPE'), attr) ?? varNode = self.vars[attr] attrValueNode = None @@ -83,9 +82,7 @@ def visit(self, node, scope): paramNodeList, _returnTypeNode = self.methods[self.currentType.name, self.currentMethod.name] - # for i, (_paramName, _paramType) in enumerate(zip(self.currentMethod.param_names, self.currentMethod.param_types)): - for i in range(len(self.currentMethod.param_names)): #param_names.Length = param_types.Length - #i -> indice del parametro en la lista de parametros + for i in range(len(self.currentMethod.param_names)): _ithParamName = self.currentMethod.param_names[i] _ithParamType = self.currentMethod.param_types[i] @@ -259,12 +256,6 @@ def visit(self, node, scope): node.obj = node.obj if node.obj is not None else VariableNode('self') _node = self.visit(node.obj, scope) if isinstance(_node, PrimeNode): - # if _node.type.name == 'SELF_TYPE': - # _method_type = self.context.get_type(node.parent) if node.parent is not None else self.currentType - # _function, _obj = _method_type.get_method(node.method, _method_type, False, True) - # else: - # _method_type = self.context.get_type(node.parent) if node.parent is not None else _node.type - # _function, _obj = _method_type.get_method(node.method, _method_type, False, True) _method_type = self.context.get_type(node.parent) if node.parent is not None else _node.type _function, _obj = _method_type.get_method(node.method, _method_type, False, True) paramNodeList, _returnTypeNode = self.methods[_obj.name, _function.name] @@ -328,9 +319,6 @@ def visit(self, node, scope): def visit(self, node, scope): #definir cada una de las variables de node.decl_list en el scope y luego visitar la expresion for d in node.decl_list: - # _varName = node.decl_list[i].id - # _varTypeName = node.decl_list[i].type - # _varValue = node.decl_list[i].expr try: _varType = self.context.get_type(d.type) _var = scope.define_variable(d.id, _varType) @@ -377,8 +365,6 @@ def visit(self, node, scope): @visitor.when(ChunkNode)# def visit(self, node, scope): innerScope = scope.create_child() - #exprNode = [ ] - #if exprNodes = [self.visit(i, innerScope) for i in node.chunk] return exprNodes[-1] if exprNodes else None @@ -387,17 +373,6 @@ def visit(self, node, scope): var = scope.find_variable(node.id) valueNode = self.visit(node.expr, scope.create_child()) - #THE PARCHE - # if valueNode.type.name == 'SELF_TYPE' and isinstance(node.expr, CallNode) and node.expr.obj is not None: - # try: - # rType = scope.find_variable(node.expr.obj.lex).type if node.expr.parent is None else self.context.get_type(node.expr.parent) - # except: - # rType = self.context.get_type(node.expr.obj.lex) if node.expr.parent is None else self.context.get_type(node.expr.parent) - # if self.currentType.conforms_to(rType): - # pass - # else: - # valueNode = PrimeNode(rType) - if var is not None: #cuando es None es xq esa variable no existe, y ese error no toca detectarlo ahora _var = self.vars[var] if var.type.name == "AUTO_TYPE" and valueNode.type.name == 'AUTO_TYPE': @@ -457,7 +432,6 @@ def visit(self, node, scope): @visitor.when(ClassDeclarationNode)# def visit(self, node, scope): - # attrIndex = 0 index = 0 self.currentType = self.context.get_type(node.id) @@ -500,7 +474,7 @@ def visit(self, node, scope): if self.context.get_type(node.type.name) == self.autoType: if _func.return_type == self.autoType: self.errors.append(f'Unable to infer the type of {_func.name}') - node.type = _func.return_type.name # .name? + node.type = _func.return_type.name # elif isinstance(node.type, Type): node.type = node.type.name @@ -543,15 +517,6 @@ def visit(self, node, scope): _var.type = _var.type.type d.type = _var.type.name - - # for i in range(len(node.decl_list)): - # _ithName, _ithTypeName, _value = node.decl_list[i] - # _ithVar = scope.find_variable(_ithName) - # if _ithTypeName == 'AUTO_TYPE': - # if _ithVar.type == self.autoType: - # self.errors.append(f'Unable to infer the type of {_ithVar.name}') - # node.decl_list[i] = (_ithName, _ithVar.type.name, _value) - @visitor.when(SwitchCaseNode)# def visit(self, node, scope): self.visit(node.expr, scope) From 516921e73242f32da60cca0194591c67276a4750 Mon Sep 17 00:00:00 2001 From: Yumenio Date: Mon, 28 Feb 2022 14:34:41 -0500 Subject: [PATCH 81/93] before last pull --- src/pipeline.py | 7 +- tests/codegen/arith.mips | 12886 ------------------------------- tests/codegen/atoi.mips | 5388 ------------- tests/codegen/book_list.mips | 2864 ------- tests/codegen/cells.mips | 2984 ------- tests/codegen/complex.mips | 2632 ------- tests/codegen/fib.mips | 1449 ---- tests/codegen/graph.mips | 7494 ------------------ tests/codegen/hairyscary.mips | 2430 ------ tests/codegen/hello_world.mips | 1113 --- tests/codegen/io.mips | 1798 ----- tests/codegen/life.mips | 11525 --------------------------- tests/codegen/list.mips | 2099 ----- tests/codegen/new_complex.mips | 3200 -------- tests/codegen/palindrome.mips | 1967 ----- tests/codegen/primes.mips | 1783 ----- tests/codegen/print-cool.mips | 1341 ---- tests/codegen/sort-list.mips | 2946 ------- 18 files changed, 6 insertions(+), 65900 deletions(-) diff --git a/src/pipeline.py b/src/pipeline.py index 06e8ffaca..b7a30e821 100644 --- a/src/pipeline.py +++ b/src/pipeline.py @@ -9,6 +9,7 @@ from visitors.CilDepicter import get_formatter + class Pipeline(): def __init__(self, program, lexer, parser, verbose=False): self.context: Context = Context() @@ -44,4 +45,8 @@ def __init__(self, program, lexer, parser, verbose=False): self.coolToCil = COOLToCILVisitor(self.context) cil_ast = self.coolToCil.visit(self.ast, scope) __a = 0 - self.mipsCode = '' \ No newline at end of file + MIPSVisitor = CILToMIPSVisitor() + MIPSAst = MIPSVisitor.visit(cil_ast) + MIPSFormatter = MIPSAstFormatter() + mipsCode = MIPSFormatter.visit(MIPSAst) + self.mipsCode = mipsCode \ No newline at end of file diff --git a/tests/codegen/arith.mips b/tests/codegen/arith.mips index a20bbb01d..e69de29bb 100644 --- a/tests/codegen/arith.mips +++ b/tests/codegen/arith.mips @@ -1,12886 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "A" -.word 0 -data_7: .asciiz "B" -.word 0 -data_8: .asciiz "C" -.word 0 -data_9: .asciiz "D" -.word 0 -data_10: .asciiz "E" -.word 0 -data_11: .asciiz "A2I" -.word 0 -data_12: .asciiz "Main" -.word 0 -data_13: .asciiz " -" -.word 0 -data_14: .asciiz "" -.word 0 -data_15: .asciiz "Abort called from class " -.word 0 -data_16: .asciiz "Substring out of range" -.word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_27: .asciiz "RuntimeError: Division by zero" -.word 0 -data_28: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_29: .asciiz "0" -.word 0 -data_30: .asciiz "1" -.word 0 -data_31: .asciiz "2" -.word 0 -data_32: .asciiz "3" -.word 0 -data_33: .asciiz "4" -.word 0 -data_34: .asciiz "5" -.word 0 -data_35: .asciiz "6" -.word 0 -data_36: .asciiz "7" -.word 0 -data_37: .asciiz "8" -.word 0 -data_38: .asciiz "9" -.word 0 -data_39: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_40: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_41: .asciiz "" -.word 0 -data_42: .asciiz "9" -.word 0 -data_43: .asciiz "8" -.word 0 -data_44: .asciiz "7" -.word 0 -data_45: .asciiz "6" -.word 0 -data_46: .asciiz "5" -.word 0 -data_47: .asciiz "4" -.word 0 -data_48: .asciiz "3" -.word 0 -data_49: .asciiz "2" -.word 0 -data_50: .asciiz "1" -.word 0 -data_51: .asciiz "0" -.word 0 -data_52: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_53: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_54: .asciiz "-" -.word 0 -data_55: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_56: .asciiz "+" -.word 0 -data_57: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_58: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_59: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_60: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_61: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_62: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_63: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_64: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_65: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_66: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_67: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_68: .asciiz "-" -.word 0 -data_69: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_70: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_71: .asciiz "0" -.word 0 -data_72: .asciiz "RuntimeError: Division by zero" -.word 0 -data_73: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_74: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_75: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_76: .asciiz "" -.word 0 -data_77: .asciiz "\n\tTo add a number to " -.word 0 -data_78: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_79: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_80: .asciiz "...enter a:\n" -.word 0 -data_81: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_82: .asciiz "\tTo negate " -.word 0 -data_83: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_84: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_85: .asciiz "...enter b:\n" -.word 0 -data_86: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_87: .asciiz "\tTo find the difference between " -.word 0 -data_88: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_89: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_90: .asciiz "and another number...enter c:\n" -.word 0 -data_91: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_92: .asciiz "\tTo find the factorial of " -.word 0 -data_93: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_94: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_95: .asciiz "...enter d:\n" -.word 0 -data_96: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_97: .asciiz "\tTo square " -.word 0 -data_98: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_99: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_100: .asciiz "...enter e:\n" -.word 0 -data_101: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_102: .asciiz "\tTo cube " -.word 0 -data_103: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_104: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_105: .asciiz "...enter f:\n" -.word 0 -data_106: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_107: .asciiz "\tTo find out if " -.word 0 -data_108: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_109: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_110: .asciiz "is a multiple of 3...enter g:\n" -.word 0 -data_111: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_112: .asciiz "\tTo divide " -.word 0 -data_113: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_114: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_115: .asciiz "by 8...enter h:\n" -.word 0 -data_116: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_117: .asciiz "\tTo get a new number...enter j:\n" -.word 0 -data_118: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_119: .asciiz "\tTo quit...enter q:\n\n" -.word 0 -data_120: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_121: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_122: .asciiz "\n" -.word 0 -data_123: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_124: .asciiz "Please enter a number... " -.word 0 -data_125: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_126: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_127: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_128: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_129: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_130: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_131: .asciiz "RuntimeError: void in switch case" -.word 0 -data_132: .asciiz "RuntimeError: Case statement without a match branch" -.word 0 -data_133: .asciiz "Class type is now E\n" -.word 0 -data_134: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_135: .asciiz "Class type is now C\n" -.word 0 -data_136: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_137: .asciiz "Class type is now D\n" -.word 0 -data_138: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_139: .asciiz "Class type is now B\n" -.word 0 -data_140: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_141: .asciiz "Class type is now A\n" -.word 0 -data_142: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_143: .asciiz "Oooops\n" -.word 0 -data_144: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_145: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_146: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_147: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_148: .asciiz " " -.word 0 -data_149: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_150: .asciiz "number " -.word 0 -data_151: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_152: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_153: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_154: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_155: .asciiz "is odd!\n" -.word 0 -data_156: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_157: .asciiz "is even!\n" -.word 0 -data_158: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_159: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_160: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_161: .asciiz "a" -.word 0 -data_162: .asciiz "b" -.word 0 -data_163: .asciiz "c" -.word 0 -data_164: .asciiz "d" -.word 0 -data_165: .asciiz "e" -.word 0 -data_166: .asciiz "f" -.word 0 -data_167: .asciiz "g" -.word 0 -data_168: .asciiz "h" -.word 0 -data_169: .asciiz "j" -.word 0 -data_170: .asciiz "q" -.word 0 -data_171: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_172: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_173: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_174: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_175: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_176: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_177: .asciiz "number " -.word 0 -data_178: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_179: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_180: .asciiz "is equal to " -.word 0 -data_181: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_182: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_183: .asciiz "times 8 with a remainder of " -.word 0 -data_184: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_185: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_186: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_187: .asciiz "\n" -.word 0 -data_188: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_189: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_190: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_191: .asciiz "number " -.word 0 -data_192: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_193: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_194: .asciiz "is not divisible by 3.\n" -.word 0 -data_195: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_196: .asciiz "number " -.word 0 -data_197: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_198: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_199: .asciiz "is divisible by 3.\n" -.word 0 -data_200: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_201: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_202: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_203: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_204: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_205: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_206: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_207: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_208: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_209: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_210: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_211: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_212: .asciiz "RuntimeError: void in switch case" -.word 0 -data_213: .asciiz "RuntimeError: Case statement without a match branch" -.word 0 -data_214: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_215: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_216: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_217: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_218: .asciiz "Oooops\n" -.word 0 -data_219: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_220: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_221: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_222: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_223: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_224: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_225: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 - .word data_10 - .word data_11 - .word data_12 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype - .word type_10_prototype - .word type_11_prototype - .word type_12_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_method1_at_A - .word function_method2_at_A - .word function_method3_at_A - .word function_method4_at_A - .word function_method5_at_A - .word function_set_var_at_A - .word function_value_at_A - .word __init_attr_at_A - .word __init_at_A - -type_6_prototype: - .word 5 - .word 5 - .word type_6_dispatch - .word 0 - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_method1_at_A - .word function_method2_at_A - .word function_method3_at_A - .word function_method4_at_A - .word function_method5_at_B - .word function_set_var_at_A - .word function_value_at_A - .word __init_attr_at_B - .word __init_at_B - -type_7_prototype: - .word 6 - .word 5 - .word type_7_dispatch - .word 0 - .word -1 - - -type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_method1_at_A - .word function_method2_at_A - .word function_method3_at_A - .word function_method4_at_A - .word function_method5_at_C - .word function_set_var_at_A - .word function_value_at_A - .word function_method6_at_C - .word __init_attr_at_C - .word __init_at_C - -type_8_prototype: - .word 7 - .word 5 - .word type_8_dispatch - .word 0 - .word -1 - - -type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_method1_at_A - .word function_method2_at_A - .word function_method3_at_A - .word function_method4_at_A - .word function_method5_at_B - .word function_set_var_at_A - .word function_value_at_A - .word function_method7_at_D - .word __init_attr_at_D - .word __init_at_D - -type_9_prototype: - .word 8 - .word 5 - .word type_9_dispatch - .word 0 - .word -1 - - -type_10_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_method1_at_A - .word function_method2_at_A - .word function_method3_at_A - .word function_method4_at_A - .word function_method5_at_B - .word function_set_var_at_A - .word function_value_at_A - .word function_method7_at_D - .word function_method6_at_E - .word __init_attr_at_E - .word __init_at_E - -type_10_prototype: - .word 9 - .word 5 - .word type_10_dispatch - .word 0 - .word -1 - - -type_11_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_a2i_at_A2I - .word function_a2i_aux_at_A2I - .word function_c2i_at_A2I - .word function_i2a_at_A2I - .word function_i2a_aux_at_A2I - .word function_i2c_at_A2I - .word __init_attr_at_A2I - .word __init_at_A2I - -type_11_prototype: - .word 10 - .word 4 - .word type_11_dispatch - .word -1 - - -type_12_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_class_type_at_Main - .word function_get_int_at_Main - .word function_is_even_at_Main - .word function_main_at_Main - .word function_menu_at_Main - .word function_print_at_Main - .word function_prompt_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_12_prototype: - .word 11 - .word 8 - .word type_12_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_15 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_13 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_value_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_set_var_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_method1_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_method2_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -40($fp) - jal __init_at_B - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_4: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_method3_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -32 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -28($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -36($fp) - jal __init_at_C - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 32 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_method4_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -92 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - slt $t1 $t0 $t1 - sw $t1 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_9 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - sub $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -72($fp) - jal __init_at_D - sw $v0 -52($fp) - lw $t0 -52($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -96($fp) - j label_12 - label_9: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) - sub $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -40($fp) - jal __init_at_D - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_10 - j label_11 - label_10: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_11: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -96($fp) - label_12: - lw $v0 -96($fp) - addi $sp $sp 92 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_method5_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -88 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - sw $t0 -92($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -84($fp) - label_13: - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - sle $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_14 - j label_15 - label_14: - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - mul $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - sw $t0 -92($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 -36($fp) - lw $t1 -32($fp) - add $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -84($fp) - j label_13 - label_15: - jal __init_at_E - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_16 - j label_17 - label_16: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_17: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 88 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_B: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_method5_at_B: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) - mul $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -40($fp) - jal __init_at_E - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_18 - j label_19 - label_18: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_19: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_B: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_B - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_B - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_method6_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -32 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -28($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -36($fp) - jal __init_at_A - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_20 - j label_21 - label_20: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_21: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 32 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_method5_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -52 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) - mul $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - mul $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -56($fp) - jal __init_at_E - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_22 - j label_23 - label_22: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_23: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 52 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_C - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_D: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_B - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_method7_at_D: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -240 - lw $t0 0($fp) - sw $t0 -244($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -228($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 -216($fp) - lw $t1 12($t0) - sw $t1 -224($fp) - lw $t0 -228($fp) - lw $t1 -224($fp) - slt $t1 $t0 $t1 - sw $t1 -220($fp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -232($fp) - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -236($fp) - bne $t0 $zero label_44 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 -168($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -192($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -184($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -180($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_24 - lw $t0 -192($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_25 - lw $t0 -192($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_26 - lw $t0 -168($fp) - lw $t1 -244($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_27 - label_24: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_27 - label_25: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - move $a0 $t0 - lw $t0 -196($fp) - move $a1 $t0 - jal equal_str - sw $v0 -172($fp) - j label_27 - label_26: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_27 - label_27: - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_42 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -120($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_28 - lw $t0 -144($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_29 - lw $t0 -144($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_30 - lw $t0 -120($fp) - lw $t1 -244($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_31 - label_28: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_31 - label_29: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - move $a0 $t0 - lw $t0 -148($fp) - move $a1 $t0 - jal equal_str - sw $v0 -124($fp) - j label_31 - label_30: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_31 - label_31: - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_40 - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -96($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -92($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -84($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_32 - lw $t0 -96($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_33 - lw $t0 -96($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_34 - lw $t0 -72($fp) - lw $t1 -244($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - j label_35 - label_32: - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - j label_35 - label_33: - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - move $a0 $t0 - lw $t0 -100($fp) - move $a1 $t0 - jal equal_str - sw $v0 -76($fp) - j label_35 - label_34: - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - j label_35 - label_35: - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_38 - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - sub $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_36 - j label_37 - label_36: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_37: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -116($fp) - j label_39 - label_38: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -116($fp) - label_39: - lw $t0 -116($fp) - sw $t0 -164($fp) - j label_41 - label_40: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -164($fp) - label_41: - lw $t0 -164($fp) - sw $t0 -212($fp) - j label_43 - label_42: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -212($fp) - label_43: - lw $t0 -212($fp) - sw $t0 -240($fp) - j label_47 - label_44: - lw $t0 -244($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -24($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -20($fp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_45 - j label_46 - label_45: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_46: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -240($fp) - label_47: - lw $v0 -240($fp) - addi $sp $sp 240 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_D: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_D - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_E: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_D - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_method6_at_E: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -44 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -28($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_48 - j label_49 - label_48: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_49: - lw $t0 -40($fp) - lw $t1 -36($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -48($fp) - jal __init_at_A - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_50 - j label_51 - label_50: - li $v0 4 - la $a0 data_28 - syscall - li $v0 10 - syscall - label_51: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 44 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_E: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 9 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_E - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_c2i_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -572 - la $t0 data_29 - sw $t0 -536($fp) - lw $t0 -536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -532($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -560($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -556($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -552($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -548($fp) - lw $t0 -560($fp) - lw $t1 -556($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_52 - lw $t0 -560($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_53 - lw $t0 -560($fp) - lw $t1 -548($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_54 - lw $t0 0($fp) - lw $t1 -532($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_55 - label_52: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_55 - label_53: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - move $a0 $t0 - lw $t0 -564($fp) - move $a1 $t0 - jal equal_str - sw $v0 -540($fp) - j label_55 - label_54: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_55 - label_55: - lw $t0 -540($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -572($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -576($fp) - lw $t0 -576($fp) - bne $t0 $zero label_112 - la $t0 data_30 - sw $t0 -484($fp) - lw $t0 -484($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -480($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -508($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -504($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -500($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -496($fp) - lw $t0 -508($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_56 - lw $t0 -508($fp) - lw $t1 -500($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_57 - lw $t0 -508($fp) - lw $t1 -496($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_58 - lw $t0 0($fp) - lw $t1 -480($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_59 - label_56: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_59 - label_57: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - move $a0 $t0 - lw $t0 -512($fp) - move $a1 $t0 - jal equal_str - sw $v0 -488($fp) - j label_59 - label_58: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_59 - label_59: - lw $t0 -488($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -520($fp) - lw $t0 -520($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -524($fp) - bne $t0 $zero label_110 - la $t0 data_31 - sw $t0 -432($fp) - lw $t0 -432($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -456($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -452($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -448($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -444($fp) - lw $t0 -456($fp) - lw $t1 -452($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_60 - lw $t0 -456($fp) - lw $t1 -448($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_61 - lw $t0 -456($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_62 - lw $t0 0($fp) - lw $t1 -428($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_63 - label_60: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_63 - label_61: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - move $a0 $t0 - lw $t0 -460($fp) - move $a1 $t0 - jal equal_str - sw $v0 -436($fp) - j label_63 - label_62: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_63 - label_63: - lw $t0 -436($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -468($fp) - lw $t0 -468($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -472($fp) - bne $t0 $zero label_108 - la $t0 data_32 - sw $t0 -380($fp) - lw $t0 -380($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -376($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -404($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -400($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -396($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -392($fp) - lw $t0 -404($fp) - lw $t1 -400($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_64 - lw $t0 -404($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_65 - lw $t0 -404($fp) - lw $t1 -392($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_66 - lw $t0 0($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_67 - label_64: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_67 - label_65: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - move $a0 $t0 - lw $t0 -408($fp) - move $a1 $t0 - jal equal_str - sw $v0 -384($fp) - j label_67 - label_66: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_67 - label_67: - lw $t0 -384($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -416($fp) - lw $t0 -416($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -420($fp) - bne $t0 $zero label_106 - la $t0 data_33 - sw $t0 -328($fp) - lw $t0 -328($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -324($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -352($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -348($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -344($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -340($fp) - lw $t0 -352($fp) - lw $t1 -348($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_68 - lw $t0 -352($fp) - lw $t1 -344($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_69 - lw $t0 -352($fp) - lw $t1 -340($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_70 - lw $t0 0($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_71 - label_68: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_71 - label_69: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - move $a0 $t0 - lw $t0 -356($fp) - move $a1 $t0 - jal equal_str - sw $v0 -332($fp) - j label_71 - label_70: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_71 - label_71: - lw $t0 -332($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -364($fp) - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -368($fp) - lw $t0 -368($fp) - bne $t0 $zero label_104 - la $t0 data_34 - sw $t0 -276($fp) - lw $t0 -276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -300($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -296($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -292($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -288($fp) - lw $t0 -300($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_72 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_73 - lw $t0 -300($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_74 - lw $t0 0($fp) - lw $t1 -272($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_75 - label_72: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_75 - label_73: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - move $a0 $t0 - lw $t0 -304($fp) - move $a1 $t0 - jal equal_str - sw $v0 -280($fp) - j label_75 - label_74: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_75 - label_75: - lw $t0 -280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -312($fp) - lw $t0 -312($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_102 - la $t0 data_35 - sw $t0 -224($fp) - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -220($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -248($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -244($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -240($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -236($fp) - lw $t0 -248($fp) - lw $t1 -244($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_76 - lw $t0 -248($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_77 - lw $t0 -248($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_78 - lw $t0 0($fp) - lw $t1 -220($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_79 - label_76: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_79 - label_77: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - move $a0 $t0 - lw $t0 -252($fp) - move $a1 $t0 - jal equal_str - sw $v0 -228($fp) - j label_79 - label_78: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_79 - label_79: - lw $t0 -228($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -260($fp) - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -264($fp) - bne $t0 $zero label_100 - la $t0 data_36 - sw $t0 -172($fp) - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -196($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -192($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -184($fp) - lw $t0 -196($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_80 - lw $t0 -196($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_81 - lw $t0 -196($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_82 - lw $t0 0($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_83 - label_80: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_83 - label_81: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - move $a0 $t0 - lw $t0 -200($fp) - move $a1 $t0 - jal equal_str - sw $v0 -176($fp) - j label_83 - label_82: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_83 - label_83: - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -208($fp) - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_98 - la $t0 data_37 - sw $t0 -120($fp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_84 - lw $t0 -144($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_85 - lw $t0 -144($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_86 - lw $t0 0($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_87 - label_84: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_87 - label_85: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - move $a0 $t0 - lw $t0 -148($fp) - move $a1 $t0 - jal equal_str - sw $v0 -124($fp) - j label_87 - label_86: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_87 - label_87: - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_96 - la $t0 data_38 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_88 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_89 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_90 - lw $t0 0($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_91 - label_88: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_91 - label_89: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_91 - label_90: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_91 - label_91: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_94 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_92 - j label_93 - label_92: - li $v0 4 - la $a0 data_39 - syscall - li $v0 10 - syscall - label_93: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -56($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -112($fp) - j label_95 - label_94: - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -112($fp) - label_95: - lw $t0 -112($fp) - sw $t0 -164($fp) - j label_97 - label_96: - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -164($fp) - label_97: - lw $t0 -164($fp) - sw $t0 -216($fp) - j label_99 - label_98: - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -216($fp) - label_99: - lw $t0 -216($fp) - sw $t0 -268($fp) - j label_101 - label_100: - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -268($fp) - label_101: - lw $t0 -268($fp) - sw $t0 -320($fp) - j label_103 - label_102: - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -320($fp) - label_103: - lw $t0 -320($fp) - sw $t0 -372($fp) - j label_105 - label_104: - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -372($fp) - label_105: - lw $t0 -372($fp) - sw $t0 -424($fp) - j label_107 - label_106: - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -424($fp) - label_107: - lw $t0 -424($fp) - sw $t0 -476($fp) - j label_109 - label_108: - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -476($fp) - label_109: - lw $t0 -476($fp) - sw $t0 -528($fp) - j label_111 - label_110: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -528($fp) - label_111: - lw $t0 -528($fp) - sw $t0 -580($fp) - j label_113 - label_112: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -580($fp) - label_113: - lw $v0 -580($fp) - addi $sp $sp 572 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_i2c_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -576 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -540($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -564($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -560($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -556($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -552($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) - seq $t0 $t0 $t1 - sw $t0 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_114 - lw $t0 -564($fp) - lw $t1 -556($fp) - seq $t0 $t0 $t1 - sw $t0 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_115 - lw $t0 -564($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_116 - lw $t0 0($fp) - lw $t1 -540($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - j label_117 - label_114: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -540($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -572($fp) - lw $t1 -568($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - j label_117 - label_115: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -540($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -572($fp) - move $a0 $t0 - lw $t0 -568($fp) - move $a1 $t0 - jal equal_str - sw $v0 -544($fp) - j label_117 - label_116: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -540($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -572($fp) - lw $t1 -568($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - j label_117 - label_117: - lw $t0 -544($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -576($fp) - lw $t0 -576($fp) - lw $t1 12($t0) - sw $t1 -580($fp) - lw $t0 -580($fp) - bne $t0 $zero label_174 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -492($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -516($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -512($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -508($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -504($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -500($fp) - lw $t0 -500($fp) - bne $t0 $zero label_118 - lw $t0 -516($fp) - lw $t1 -508($fp) - seq $t0 $t0 $t1 - sw $t0 -500($fp) - lw $t0 -500($fp) - bne $t0 $zero label_119 - lw $t0 -516($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -500($fp) - lw $t0 -500($fp) - bne $t0 $zero label_120 - lw $t0 0($fp) - lw $t1 -492($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - j label_121 - label_118: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -492($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -524($fp) - lw $t1 -520($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - j label_121 - label_119: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -492($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -524($fp) - move $a0 $t0 - lw $t0 -520($fp) - move $a1 $t0 - jal equal_str - sw $v0 -496($fp) - j label_121 - label_120: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -492($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -524($fp) - lw $t1 -520($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - j label_121 - label_121: - lw $t0 -496($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -528($fp) - lw $t0 -528($fp) - lw $t1 12($t0) - sw $t1 -532($fp) - lw $t0 -532($fp) - bne $t0 $zero label_172 - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -444($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -468($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -464($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -460($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -456($fp) - lw $t0 -468($fp) - lw $t1 -464($fp) - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_122 - lw $t0 -468($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_123 - lw $t0 -468($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_124 - lw $t0 0($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - j label_125 - label_122: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -476($fp) - lw $t0 -444($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -476($fp) - lw $t1 -472($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - j label_125 - label_123: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -476($fp) - lw $t0 -444($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -476($fp) - move $a0 $t0 - lw $t0 -472($fp) - move $a1 $t0 - jal equal_str - sw $v0 -448($fp) - j label_125 - label_124: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -476($fp) - lw $t0 -444($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -476($fp) - lw $t1 -472($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - j label_125 - label_125: - lw $t0 -448($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -480($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_170 - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -396($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -420($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -416($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -412($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -408($fp) - lw $t0 -420($fp) - lw $t1 -416($fp) - seq $t0 $t0 $t1 - sw $t0 -404($fp) - lw $t0 -404($fp) - bne $t0 $zero label_126 - lw $t0 -420($fp) - lw $t1 -412($fp) - seq $t0 $t0 $t1 - sw $t0 -404($fp) - lw $t0 -404($fp) - bne $t0 $zero label_127 - lw $t0 -420($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -404($fp) - lw $t0 -404($fp) - bne $t0 $zero label_128 - lw $t0 0($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - j label_129 - label_126: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -396($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -428($fp) - lw $t1 -424($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - j label_129 - label_127: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -396($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -428($fp) - move $a0 $t0 - lw $t0 -424($fp) - move $a1 $t0 - jal equal_str - sw $v0 -400($fp) - j label_129 - label_128: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -396($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -428($fp) - lw $t1 -424($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - j label_129 - label_129: - lw $t0 -400($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -432($fp) - lw $t0 -432($fp) - lw $t1 12($t0) - sw $t1 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_168 - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -348($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -372($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -368($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -364($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -360($fp) - lw $t0 -372($fp) - lw $t1 -368($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_130 - lw $t0 -372($fp) - lw $t1 -364($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_131 - lw $t0 -372($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_132 - lw $t0 0($fp) - lw $t1 -348($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_133 - label_130: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_133 - label_131: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - move $a0 $t0 - lw $t0 -376($fp) - move $a1 $t0 - jal equal_str - sw $v0 -352($fp) - j label_133 - label_132: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_133 - label_133: - lw $t0 -352($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -384($fp) - lw $t0 -384($fp) - lw $t1 12($t0) - sw $t1 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_166 - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -324($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -320($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -316($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -312($fp) - lw $t0 -324($fp) - lw $t1 -320($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - lw $t0 -308($fp) - bne $t0 $zero label_134 - lw $t0 -324($fp) - lw $t1 -316($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - lw $t0 -308($fp) - bne $t0 $zero label_135 - lw $t0 -324($fp) - lw $t1 -312($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - lw $t0 -308($fp) - bne $t0 $zero label_136 - lw $t0 0($fp) - lw $t1 -300($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - j label_137 - label_134: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -332($fp) - lw $t1 -328($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - j label_137 - label_135: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -332($fp) - move $a0 $t0 - lw $t0 -328($fp) - move $a1 $t0 - jal equal_str - sw $v0 -304($fp) - j label_137 - label_136: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -332($fp) - lw $t1 -328($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - j label_137 - label_137: - lw $t0 -304($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -336($fp) - lw $t0 -336($fp) - lw $t1 12($t0) - sw $t1 -340($fp) - lw $t0 -340($fp) - bne $t0 $zero label_164 - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -252($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -276($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -272($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -268($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -264($fp) - lw $t0 -276($fp) - lw $t1 -272($fp) - seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_138 - lw $t0 -276($fp) - lw $t1 -268($fp) - seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_139 - lw $t0 -276($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_140 - lw $t0 0($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_141 - label_138: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -252($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_141 - label_139: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -252($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - move $a0 $t0 - lw $t0 -280($fp) - move $a1 $t0 - jal equal_str - sw $v0 -256($fp) - j label_141 - label_140: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -252($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_141 - label_141: - lw $t0 -256($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -288($fp) - lw $t0 -288($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_162 - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -228($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -224($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -220($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -216($fp) - lw $t0 -228($fp) - lw $t1 -224($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_142 - lw $t0 -228($fp) - lw $t1 -220($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_143 - lw $t0 -228($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_144 - lw $t0 0($fp) - lw $t1 -204($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_145 - label_142: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_145 - label_143: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - move $a0 $t0 - lw $t0 -232($fp) - move $a1 $t0 - jal equal_str - sw $v0 -208($fp) - j label_145 - label_144: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_145 - label_145: - lw $t0 -208($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -240($fp) - lw $t0 -240($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_160 - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -180($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -176($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -172($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -168($fp) - lw $t0 -180($fp) - lw $t1 -176($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_146 - lw $t0 -180($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_147 - lw $t0 -180($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_148 - lw $t0 0($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_149 - label_146: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_149 - label_147: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - move $a0 $t0 - lw $t0 -184($fp) - move $a1 $t0 - jal equal_str - sw $v0 -160($fp) - j label_149 - label_148: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_149 - label_149: - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -192($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_158 - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -132($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -124($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_150 - lw $t0 -132($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_151 - lw $t0 -132($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_152 - lw $t0 0($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_153 - label_150: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_153 - label_151: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - move $a0 $t0 - lw $t0 -136($fp) - move $a1 $t0 - jal equal_str - sw $v0 -112($fp) - j label_153 - label_152: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_153 - label_153: - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_156 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_154 - j label_155 - label_154: - li $v0 4 - la $a0 data_40 - syscall - li $v0 10 - syscall - label_155: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -100($fp) - la $t0 data_41 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -152($fp) - j label_157 - label_156: - la $t0 data_42 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -152($fp) - label_157: - lw $t0 -152($fp) - sw $t0 -200($fp) - j label_159 - label_158: - la $t0 data_43 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -200($fp) - label_159: - lw $t0 -200($fp) - sw $t0 -248($fp) - j label_161 - label_160: - la $t0 data_44 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -248($fp) - label_161: - lw $t0 -248($fp) - sw $t0 -296($fp) - j label_163 - label_162: - la $t0 data_45 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -296($fp) - label_163: - lw $t0 -296($fp) - sw $t0 -344($fp) - j label_165 - label_164: - la $t0 data_46 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -344($fp) - label_165: - lw $t0 -344($fp) - sw $t0 -392($fp) - j label_167 - label_166: - la $t0 data_47 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -392($fp) - label_167: - lw $t0 -392($fp) - sw $t0 -440($fp) - j label_169 - label_168: - la $t0 data_48 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -440($fp) - label_169: - lw $t0 -440($fp) - sw $t0 -488($fp) - j label_171 - label_170: - la $t0 data_49 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -488($fp) - label_171: - lw $t0 -488($fp) - sw $t0 -536($fp) - j label_173 - label_172: - la $t0 data_50 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -536($fp) - label_173: - lw $t0 -536($fp) - sw $t0 -584($fp) - j label_175 - label_174: - la $t0 data_51 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -584($fp) - label_175: - lw $v0 -584($fp) - addi $sp $sp 576 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_a2i_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -312 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -276($fp) - lw $t0 -276($fp) - bne $t0 $zero label_176 - j label_177 - label_176: - li $v0 4 - la $a0 data_52 - syscall - li $v0 10 - syscall - label_177: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -272($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -268($fp) - lw $t0 -272($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -300($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -296($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -292($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -288($fp) - lw $t0 -300($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_178 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_179 - lw $t0 -300($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_180 - lw $t0 -272($fp) - lw $t1 -268($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_181 - label_178: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_181 - label_179: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - move $a0 $t0 - lw $t0 -304($fp) - move $a1 $t0 - jal equal_str - sw $v0 -280($fp) - j label_181 - label_180: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_181 - label_181: - lw $t0 -280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -312($fp) - lw $t0 -312($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_212 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -220($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_182 - j label_183 - label_182: - li $v0 4 - la $a0 data_53 - syscall - li $v0 10 - syscall - label_183: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -216($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -208($fp) - la $t0 data_54 - sw $t0 -204($fp) - lw $t0 -204($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -200($fp) - lw $t0 -208($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -244($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -240($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -236($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -232($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_184 - lw $t0 -244($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_185 - lw $t0 -244($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_186 - lw $t0 -208($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_187 - label_184: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_187 - label_185: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - move $a0 $t0 - lw $t0 -248($fp) - move $a1 $t0 - jal equal_str - sw $v0 -224($fp) - j label_187 - label_186: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_187 - label_187: - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_204 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_188 - j label_189 - label_188: - li $v0 4 - la $a0 data_55 - syscall - li $v0 10 - syscall - label_189: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -140($fp) - la $t0 data_56 - sw $t0 -136($fp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 -140($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -176($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -172($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -168($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -164($fp) - lw $t0 -176($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_190 - lw $t0 -176($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_191 - lw $t0 -176($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_192 - lw $t0 -140($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_193 - label_190: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_193 - label_191: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - move $a0 $t0 - lw $t0 -180($fp) - move $a1 $t0 - jal equal_str - sw $v0 -156($fp) - j label_193 - label_192: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_193 - label_193: - lw $t0 -156($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -192($fp) - bne $t0 $zero label_196 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_194 - j label_195 - label_194: - li $v0 4 - la $a0 data_57 - syscall - li $v0 10 - syscall - label_195: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -124($fp) - lw $t0 -124($fp) - sw $t0 -196($fp) - j label_203 - label_196: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_197 - j label_198 - label_197: - li $v0 4 - la $a0 data_58 - syscall - li $v0 10 - syscall - label_198: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -112($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - sub $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_199 - j label_200 - label_199: - li $v0 4 - la $a0 data_59 - syscall - li $v0 10 - syscall - label_200: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -84($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_201 - j label_202 - label_201: - li $v0 4 - la $a0 data_60 - syscall - li $v0 10 - syscall - label_202: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -196($fp) - label_203: - lw $t0 -196($fp) - sw $t0 -264($fp) - j label_211 - label_204: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_205 - j label_206 - label_205: - li $v0 4 - la $a0 data_61 - syscall - li $v0 10 - syscall - label_206: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - sub $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_207 - j label_208 - label_207: - li $v0 4 - la $a0 data_62 - syscall - li $v0 10 - syscall - label_208: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -24($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_209 - j label_210 - label_209: - li $v0 4 - la $a0 data_63 - syscall - li $v0 10 - syscall - label_210: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -16($fp) - lw $t0 -16($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -68($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -264($fp) - label_211: - lw $t0 -264($fp) - sw $t0 -320($fp) - j label_213 - label_212: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -320($fp) - label_213: - lw $v0 -320($fp) - addi $sp $sp 312 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_a2i_aux_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -124 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -128($fp) - lw $t0 -128($fp) - sw $t0 -132($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_214 - j label_215 - label_214: - li $v0 4 - la $a0 data_64 - syscall - li $v0 10 - syscall - label_215: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - sw $t0 -124($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) - sw $t0 -112($fp) - label_216: - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - slt $t1 $t0 $t1 - sw $t1 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_217 - j label_222 - label_217: - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - mul $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_218 - j label_219 - label_218: - li $v0 4 - la $a0 data_65 - syscall - li $v0 10 - syscall - label_219: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -40($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_220 - j label_221 - label_220: - li $v0 4 - la $a0 data_66 - syscall - li $v0 10 - syscall - label_221: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - add $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -132($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -112($fp) - j label_216 - label_222: - lw $v0 -132($fp) - addi $sp $sp 124 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_i2a_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -148 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -136($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -132($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -124($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_223 - lw $t0 -136($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_224 - lw $t0 -136($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_225 - lw $t0 0($fp) - lw $t1 -112($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_226 - label_223: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_226 - label_224: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - move $a0 $t0 - lw $t0 -140($fp) - move $a1 $t0 - jal equal_str - sw $v0 -116($fp) - j label_226 - label_225: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_226 - label_226: - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -152($fp) - bne $t0 $zero label_235 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - slt $t1 $t0 $t1 - sw $t1 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_231 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -60($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - mul $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_227 - j label_228 - label_227: - li $v0 4 - la $a0 data_67 - syscall - li $v0 10 - syscall - label_228: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - la $t0 data_68 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_229 - j label_230 - label_229: - li $v0 4 - la $a0 data_69 - syscall - li $v0 10 - syscall - label_230: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -108($fp) - j label_234 - label_231: - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_232 - j label_233 - label_232: - li $v0 4 - la $a0 data_70 - syscall - li $v0 10 - syscall - label_233: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -108($fp) - label_234: - lw $t0 -108($fp) - sw $t0 -156($fp) - j label_236 - label_235: - la $t0 data_71 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -156($fp) - label_236: - lw $v0 -156($fp) - addi $sp $sp 148 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_i2a_aux_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -144 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -132($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -124($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_237 - lw $t0 -132($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_238 - lw $t0 -132($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_239 - lw $t0 0($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_240 - label_237: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_240 - label_238: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - move $a0 $t0 - lw $t0 -136($fp) - move $a1 $t0 - jal equal_str - sw $v0 -112($fp) - j label_240 - label_239: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_240 - label_240: - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_249 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -80($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -84($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_241 - j label_242 - label_241: - li $v0 4 - la $a0 data_72 - syscall - li $v0 10 - syscall - label_242: - lw $t0 -96($fp) - lw $t1 -92($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -104($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - mul $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - sub $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_243 - j label_244 - label_243: - li $v0 4 - la $a0 data_73 - syscall - li $v0 10 - syscall - label_244: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_245 - j label_246 - label_245: - li $v0 4 - la $a0 data_74 - syscall - li $v0 10 - syscall - label_246: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_247 - j label_248 - label_247: - li $v0 4 - la $a0 data_75 - syscall - li $v0 10 - syscall - label_248: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -152($fp) - j label_250 - label_249: - la $t0 data_76 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -152($fp) - label_250: - lw $v0 -152($fp) - addi $sp $sp 144 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 10 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A2I - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - la $t0 data_14 - sw $t0 -28($fp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - lw $t1 -28($fp) - sw $t1 20($t0) - lw $t0 0($fp) - lw $t1 -24($fp) - sw $t1 16($t0) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 12($t0) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 24($t0) - lw $v0 0($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_menu_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -376 - la $t0 data_77 - sw $t0 -368($fp) - lw $t0 -368($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -364($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -360($fp) - lw $t0 -360($fp) - bne $t0 $zero label_251 - j label_252 - label_251: - li $v0 4 - la $a0 data_78 - syscall - li $v0 10 - syscall - label_252: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -364($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -356($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -352($fp) - lw $t0 -352($fp) - bne $t0 $zero label_253 - j label_254 - label_253: - li $v0 4 - la $a0 data_79 - syscall - li $v0 10 - syscall - label_254: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -348($fp) - la $t0 data_80 - sw $t0 -344($fp) - lw $t0 -344($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -340($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_255 - j label_256 - label_255: - li $v0 4 - la $a0 data_81 - syscall - li $v0 10 - syscall - label_256: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -340($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -332($fp) - la $t0 data_82 - sw $t0 -328($fp) - lw $t0 -328($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -324($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -320($fp) - lw $t0 -320($fp) - bne $t0 $zero label_257 - j label_258 - label_257: - li $v0 4 - la $a0 data_83 - syscall - li $v0 10 - syscall - label_258: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -324($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -316($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -312($fp) - lw $t0 -312($fp) - bne $t0 $zero label_259 - j label_260 - label_259: - li $v0 4 - la $a0 data_84 - syscall - li $v0 10 - syscall - label_260: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -308($fp) - la $t0 data_85 - sw $t0 -304($fp) - lw $t0 -304($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -296($fp) - lw $t0 -296($fp) - bne $t0 $zero label_261 - j label_262 - label_261: - li $v0 4 - la $a0 data_86 - syscall - li $v0 10 - syscall - label_262: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -300($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -292($fp) - la $t0 data_87 - sw $t0 -288($fp) - lw $t0 -288($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -284($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_263 - j label_264 - label_263: - li $v0 4 - la $a0 data_88 - syscall - li $v0 10 - syscall - label_264: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -284($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -276($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_265 - j label_266 - label_265: - li $v0 4 - la $a0 data_89 - syscall - li $v0 10 - syscall - label_266: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -268($fp) - la $t0 data_90 - sw $t0 -264($fp) - lw $t0 -264($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -260($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_267 - j label_268 - label_267: - li $v0 4 - la $a0 data_91 - syscall - li $v0 10 - syscall - label_268: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -260($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -252($fp) - la $t0 data_92 - sw $t0 -248($fp) - lw $t0 -248($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -244($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -240($fp) - lw $t0 -240($fp) - bne $t0 $zero label_269 - j label_270 - label_269: - li $v0 4 - la $a0 data_93 - syscall - li $v0 10 - syscall - label_270: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -244($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -236($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_271 - j label_272 - label_271: - li $v0 4 - la $a0 data_94 - syscall - li $v0 10 - syscall - label_272: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -228($fp) - la $t0 data_95 - sw $t0 -224($fp) - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -220($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_273 - j label_274 - label_273: - li $v0 4 - la $a0 data_96 - syscall - li $v0 10 - syscall - label_274: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -212($fp) - la $t0 data_97 - sw $t0 -208($fp) - lw $t0 -208($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -200($fp) - lw $t0 -200($fp) - bne $t0 $zero label_275 - j label_276 - label_275: - li $v0 4 - la $a0 data_98 - syscall - li $v0 10 - syscall - label_276: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -204($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -196($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -192($fp) - lw $t0 -192($fp) - bne $t0 $zero label_277 - j label_278 - label_277: - li $v0 4 - la $a0 data_99 - syscall - li $v0 10 - syscall - label_278: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -188($fp) - la $t0 data_100 - sw $t0 -184($fp) - lw $t0 -184($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -180($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_279 - j label_280 - label_279: - li $v0 4 - la $a0 data_101 - syscall - li $v0 10 - syscall - label_280: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -180($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -172($fp) - la $t0 data_102 - sw $t0 -168($fp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_281 - j label_282 - label_281: - li $v0 4 - la $a0 data_103 - syscall - li $v0 10 - syscall - label_282: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -164($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -156($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -152($fp) - lw $t0 -152($fp) - bne $t0 $zero label_283 - j label_284 - label_283: - li $v0 4 - la $a0 data_104 - syscall - li $v0 10 - syscall - label_284: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -148($fp) - la $t0 data_105 - sw $t0 -144($fp) - lw $t0 -144($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_285 - j label_286 - label_285: - li $v0 4 - la $a0 data_106 - syscall - li $v0 10 - syscall - label_286: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -132($fp) - la $t0 data_107 - sw $t0 -128($fp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_287 - j label_288 - label_287: - li $v0 4 - la $a0 data_108 - syscall - li $v0 10 - syscall - label_288: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -116($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_289 - j label_290 - label_289: - li $v0 4 - la $a0 data_109 - syscall - li $v0 10 - syscall - label_290: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -108($fp) - la $t0 data_110 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_291 - j label_292 - label_291: - li $v0 4 - la $a0 data_111 - syscall - li $v0 10 - syscall - label_292: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -92($fp) - la $t0 data_112 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_293 - j label_294 - label_293: - li $v0 4 - la $a0 data_113 - syscall - li $v0 10 - syscall - label_294: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -76($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_295 - j label_296 - label_295: - li $v0 4 - la $a0 data_114 - syscall - li $v0 10 - syscall - label_296: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -68($fp) - la $t0 data_115 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_297 - j label_298 - label_297: - li $v0 4 - la $a0 data_116 - syscall - li $v0 10 - syscall - label_298: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - la $t0 data_117 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_299 - j label_300 - label_299: - li $v0 4 - la $a0 data_118 - syscall - li $v0 10 - syscall - label_300: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - la $t0 data_119 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_301 - j label_302 - label_301: - li $v0 4 - la $a0 data_120 - syscall - li $v0 10 - syscall - label_302: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_303 - j label_304 - label_303: - li $v0 4 - la $a0 data_121 - syscall - li $v0 10 - syscall - label_304: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 376 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_prompt_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - la $t0 data_122 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_305 - j label_306 - label_305: - li $v0 4 - la $a0 data_123 - syscall - li $v0 10 - syscall - label_306: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - la $t0 data_124 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_307 - j label_308 - label_307: - li $v0 4 - la $a0 data_125 - syscall - li $v0 10 - syscall - label_308: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_309 - j label_310 - label_309: - li $v0 4 - la $a0 data_126 - syscall - li $v0 10 - syscall - label_310: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_get_int_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -44 - jal __init_at_A2I - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_311 - j label_312 - label_311: - li $v0 4 - la $a0 data_127 - syscall - li $v0 10 - syscall - label_312: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -28($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_313 - j label_314 - label_313: - li $v0 4 - la $a0 data_128 - syscall - li $v0 10 - syscall - label_314: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 44 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_is_even_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -200 - lw $t0 0($fp) - sw $t0 -192($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -176($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -176($fp) - lw $t1 -172($fp) - slt $t1 $t0 $t1 - sw $t1 -168($fp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -180($fp) - lw $t0 -180($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -184($fp) - bne $t0 $zero label_329 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -140($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -132($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -128($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_315 - lw $t0 -140($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_316 - lw $t0 -140($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_317 - lw $t0 -116($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_318 - label_315: - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_318 - label_316: - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - move $a0 $t0 - lw $t0 -144($fp) - move $a1 $t0 - jal equal_str - sw $v0 -120($fp) - j label_318 - label_317: - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_318 - label_318: - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -156($fp) - bne $t0 $zero label_327 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_319 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_320 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_321 - lw $t0 -68($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_322 - label_319: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_322 - label_320: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_322 - label_321: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_322 - label_322: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_325 - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - sub $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_323 - j label_324 - label_323: - li $v0 4 - la $a0 data_129 - syscall - li $v0 10 - syscall - label_324: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -112($fp) - j label_326 - label_325: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -112($fp) - label_326: - lw $t0 -112($fp) - sw $t0 -160($fp) - j label_328 - label_327: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -160($fp) - label_328: - lw $t0 -160($fp) - sw $t0 -188($fp) - j label_332 - label_329: - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -24($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -20($fp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_330 - j label_331 - label_330: - li $v0 4 - la $a0 data_130 - syscall - li $v0 10 - syscall - label_331: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -188($fp) - label_332: - lw $v0 -188($fp) - addi $sp $sp 200 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_class_type_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -156 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_333 - j label_334 - label_333: - li $v0 4 - la $a0 data_131 - syscall - li $v0 10 - syscall - label_334: - la $t0 types_table - addi $t0 $t0 36 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_335 - la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_338 - la $t0 types_table - addi $t0 $t0 32 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_341 - la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_344 - la $t0 types_table - addi $t0 $t0 20 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_347 - la $t0 types_table - addi $t0 $t0 0 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - la $t0 types_table - addi $t0 $t0 4 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - la $t0 types_table - addi $t0 $t0 40 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - la $t0 types_table - addi $t0 $t0 44 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_350 - li $v0 4 - la $a0 data_132 - syscall - li $v0 10 - syscall - label_335: - lw $t0 0($fp) - sw $t0 -128($fp) - la $t0 data_133 - sw $t0 -124($fp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_336 - j label_337 - label_336: - li $v0 4 - la $a0 data_134 - syscall - li $v0 10 - syscall - label_337: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -148($fp) - j label_353 - label_338: - lw $t0 0($fp) - sw $t0 -108($fp) - la $t0 data_135 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_339 - j label_340 - label_339: - li $v0 4 - la $a0 data_136 - syscall - li $v0 10 - syscall - label_340: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -148($fp) - j label_353 - label_341: - lw $t0 0($fp) - sw $t0 -88($fp) - la $t0 data_137 - sw $t0 -84($fp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_342 - j label_343 - label_342: - li $v0 4 - la $a0 data_138 - syscall - li $v0 10 - syscall - label_343: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -148($fp) - j label_353 - label_344: - lw $t0 0($fp) - sw $t0 -68($fp) - la $t0 data_139 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_345 - j label_346 - label_345: - li $v0 4 - la $a0 data_140 - syscall - li $v0 10 - syscall - label_346: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -148($fp) - j label_353 - label_347: - lw $t0 0($fp) - sw $t0 -48($fp) - la $t0 data_141 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_348 - j label_349 - label_348: - li $v0 4 - la $a0 data_142 - syscall - li $v0 10 - syscall - label_349: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -148($fp) - j label_353 - label_350: - lw $t0 0($fp) - sw $t0 -28($fp) - la $t0 data_143 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_351 - j label_352 - label_351: - li $v0 4 - la $a0 data_144 - syscall - li $v0 10 - syscall - label_352: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -148($fp) - j label_353 - label_353: - lw $v0 -148($fp) - addi $sp $sp 156 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -64 - jal __init_at_A2I - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -56($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_354 - j label_355 - label_354: - li $v0 4 - la $a0 data_145 - syscall - li $v0 10 - syscall - label_355: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -56($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_356 - j label_357 - label_356: - li $v0 4 - la $a0 data_146 - syscall - li $v0 10 - syscall - label_357: - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_358 - j label_359 - label_358: - li $v0 4 - la $a0 data_147 - syscall - li $v0 10 - syscall - label_359: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - la $t0 data_148 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_360 - j label_361 - label_360: - li $v0 4 - la $a0 data_149 - syscall - li $v0 10 - syscall - label_361: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 64 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -1208 - jal __init_at_A - sw $v0 -1200($fp) - lw $t0 -1200($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - label_362: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1196($fp) - lw $t0 -1196($fp) - bne $t0 $zero label_363 - j label_538 - label_363: - la $t0 data_150 - sw $t0 -1192($fp) - lw $t0 -1192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1188($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1184($fp) - lw $t0 -1184($fp) - bne $t0 $zero label_364 - j label_365 - label_364: - li $v0 4 - la $a0 data_151 - syscall - li $v0 10 - syscall - label_365: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1188($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1180($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1176($fp) - lw $t0 -1176($fp) - bne $t0 $zero label_366 - j label_367 - label_366: - li $v0 4 - la $a0 data_152 - syscall - li $v0 10 - syscall - label_367: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1172($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1160($fp) - lw $t0 -1160($fp) - bne $t0 $zero label_368 - j label_369 - label_368: - li $v0 4 - la $a0 data_153 - syscall - li $v0 10 - syscall - label_369: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -1156($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1152($fp) - lw $t0 -1152($fp) - bne $t0 $zero label_370 - j label_371 - label_370: - li $v0 4 - la $a0 data_154 - syscall - li $v0 10 - syscall - label_371: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1156($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1148($fp) - lw $t0 -1148($fp) - lw $t1 12($t0) - sw $t1 -1164($fp) - lw $t0 -1164($fp) - bne $t0 $zero label_374 - la $t0 data_155 - sw $t0 -1144($fp) - lw $t0 -1144($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1140($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1136($fp) - lw $t0 -1136($fp) - bne $t0 $zero label_372 - j label_373 - label_372: - li $v0 4 - la $a0 data_156 - syscall - li $v0 10 - syscall - label_373: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1132($fp) - lw $t0 -1132($fp) - sw $t0 -1168($fp) - j label_377 - label_374: - la $t0 data_157 - sw $t0 -1128($fp) - lw $t0 -1128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1124($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1120($fp) - lw $t0 -1120($fp) - bne $t0 $zero label_375 - j label_376 - label_375: - li $v0 4 - la $a0 data_158 - syscall - li $v0 10 - syscall - label_376: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1116($fp) - lw $t0 -1116($fp) - sw $t0 -1168($fp) - label_377: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1112($fp) - lw $t0 -1112($fp) - bne $t0 $zero label_378 - j label_379 - label_378: - li $v0 4 - la $a0 data_159 - syscall - li $v0 10 - syscall - label_379: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1108($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1104($fp) - lw $t0 -1104($fp) - bne $t0 $zero label_380 - j label_381 - label_380: - li $v0 4 - la $a0 data_160 - syscall - li $v0 10 - syscall - label_381: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -1100($fp) - lw $t0 -1100($fp) - lw $t1 0($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - la $t0 data_161 - sw $t0 -1052($fp) - lw $t0 -1052($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1048($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -1076($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -1072($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -1068($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -1064($fp) - lw $t0 -1076($fp) - lw $t1 -1072($fp) - seq $t0 $t0 $t1 - sw $t0 -1060($fp) - lw $t0 -1060($fp) - bne $t0 $zero label_382 - lw $t0 -1076($fp) - lw $t1 -1068($fp) - seq $t0 $t0 $t1 - sw $t0 -1060($fp) - lw $t0 -1060($fp) - bne $t0 $zero label_383 - lw $t0 -1076($fp) - lw $t1 -1064($fp) - seq $t0 $t0 $t1 - sw $t0 -1060($fp) - lw $t0 -1060($fp) - bne $t0 $zero label_384 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -1048($fp) - seq $t0 $t0 $t1 - sw $t0 -1056($fp) - j label_385 - label_382: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1084($fp) - lw $t0 -1048($fp) - lw $t1 12($t0) - sw $t1 -1080($fp) - lw $t0 -1084($fp) - lw $t1 -1080($fp) - seq $t0 $t0 $t1 - sw $t0 -1056($fp) - j label_385 - label_383: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1084($fp) - lw $t0 -1048($fp) - lw $t1 12($t0) - sw $t1 -1080($fp) - lw $t0 -1084($fp) - move $a0 $t0 - lw $t0 -1080($fp) - move $a1 $t0 - jal equal_str - sw $v0 -1056($fp) - j label_385 - label_384: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1084($fp) - lw $t0 -1048($fp) - lw $t1 12($t0) - sw $t1 -1080($fp) - lw $t0 -1084($fp) - lw $t1 -1080($fp) - seq $t0 $t0 $t1 - sw $t0 -1056($fp) - j label_385 - label_385: - lw $t0 -1056($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -1088($fp) - lw $t0 -1088($fp) - lw $t1 12($t0) - sw $t1 -1092($fp) - lw $t0 -1092($fp) - bne $t0 $zero label_526 - la $t0 data_162 - sw $t0 -1000($fp) - lw $t0 -1000($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -996($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -1024($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -1020($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -1016($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -1012($fp) - lw $t0 -1024($fp) - lw $t1 -1020($fp) - seq $t0 $t0 $t1 - sw $t0 -1008($fp) - lw $t0 -1008($fp) - bne $t0 $zero label_386 - lw $t0 -1024($fp) - lw $t1 -1016($fp) - seq $t0 $t0 $t1 - sw $t0 -1008($fp) - lw $t0 -1008($fp) - bne $t0 $zero label_387 - lw $t0 -1024($fp) - lw $t1 -1012($fp) - seq $t0 $t0 $t1 - sw $t0 -1008($fp) - lw $t0 -1008($fp) - bne $t0 $zero label_388 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -996($fp) - seq $t0 $t0 $t1 - sw $t0 -1004($fp) - j label_389 - label_386: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1032($fp) - lw $t0 -996($fp) - lw $t1 12($t0) - sw $t1 -1028($fp) - lw $t0 -1032($fp) - lw $t1 -1028($fp) - seq $t0 $t0 $t1 - sw $t0 -1004($fp) - j label_389 - label_387: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1032($fp) - lw $t0 -996($fp) - lw $t1 12($t0) - sw $t1 -1028($fp) - lw $t0 -1032($fp) - move $a0 $t0 - lw $t0 -1028($fp) - move $a1 $t0 - jal equal_str - sw $v0 -1004($fp) - j label_389 - label_388: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -1032($fp) - lw $t0 -996($fp) - lw $t1 12($t0) - sw $t1 -1028($fp) - lw $t0 -1032($fp) - lw $t1 -1028($fp) - seq $t0 $t0 $t1 - sw $t0 -1004($fp) - j label_389 - label_389: - lw $t0 -1004($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -1036($fp) - lw $t0 -1036($fp) - lw $t1 12($t0) - sw $t1 -1040($fp) - lw $t0 -1040($fp) - bne $t0 $zero label_506 - la $t0 data_163 - sw $t0 -948($fp) - lw $t0 -948($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -944($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -972($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -968($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -964($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -960($fp) - lw $t0 -972($fp) - lw $t1 -968($fp) - seq $t0 $t0 $t1 - sw $t0 -956($fp) - lw $t0 -956($fp) - bne $t0 $zero label_390 - lw $t0 -972($fp) - lw $t1 -964($fp) - seq $t0 $t0 $t1 - sw $t0 -956($fp) - lw $t0 -956($fp) - bne $t0 $zero label_391 - lw $t0 -972($fp) - lw $t1 -960($fp) - seq $t0 $t0 $t1 - sw $t0 -956($fp) - lw $t0 -956($fp) - bne $t0 $zero label_392 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -944($fp) - seq $t0 $t0 $t1 - sw $t0 -952($fp) - j label_393 - label_390: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -980($fp) - lw $t0 -944($fp) - lw $t1 12($t0) - sw $t1 -976($fp) - lw $t0 -980($fp) - lw $t1 -976($fp) - seq $t0 $t0 $t1 - sw $t0 -952($fp) - j label_393 - label_391: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -980($fp) - lw $t0 -944($fp) - lw $t1 12($t0) - sw $t1 -976($fp) - lw $t0 -980($fp) - move $a0 $t0 - lw $t0 -976($fp) - move $a1 $t0 - jal equal_str - sw $v0 -952($fp) - j label_393 - label_392: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -980($fp) - lw $t0 -944($fp) - lw $t1 12($t0) - sw $t1 -976($fp) - lw $t0 -980($fp) - lw $t1 -976($fp) - seq $t0 $t0 $t1 - sw $t0 -952($fp) - j label_393 - label_393: - lw $t0 -952($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -984($fp) - lw $t0 -984($fp) - lw $t1 12($t0) - sw $t1 -988($fp) - lw $t0 -988($fp) - bne $t0 $zero label_494 - la $t0 data_164 - sw $t0 -896($fp) - lw $t0 -896($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -892($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -920($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -916($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -912($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -908($fp) - lw $t0 -920($fp) - lw $t1 -916($fp) - seq $t0 $t0 $t1 - sw $t0 -904($fp) - lw $t0 -904($fp) - bne $t0 $zero label_394 - lw $t0 -920($fp) - lw $t1 -912($fp) - seq $t0 $t0 $t1 - sw $t0 -904($fp) - lw $t0 -904($fp) - bne $t0 $zero label_395 - lw $t0 -920($fp) - lw $t1 -908($fp) - seq $t0 $t0 $t1 - sw $t0 -904($fp) - lw $t0 -904($fp) - bne $t0 $zero label_396 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -892($fp) - seq $t0 $t0 $t1 - sw $t0 -900($fp) - j label_397 - label_394: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -928($fp) - lw $t0 -892($fp) - lw $t1 12($t0) - sw $t1 -924($fp) - lw $t0 -928($fp) - lw $t1 -924($fp) - seq $t0 $t0 $t1 - sw $t0 -900($fp) - j label_397 - label_395: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -928($fp) - lw $t0 -892($fp) - lw $t1 12($t0) - sw $t1 -924($fp) - lw $t0 -928($fp) - move $a0 $t0 - lw $t0 -924($fp) - move $a1 $t0 - jal equal_str - sw $v0 -900($fp) - j label_397 - label_396: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -928($fp) - lw $t0 -892($fp) - lw $t1 12($t0) - sw $t1 -924($fp) - lw $t0 -928($fp) - lw $t1 -924($fp) - seq $t0 $t0 $t1 - sw $t0 -900($fp) - j label_397 - label_397: - lw $t0 -900($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -932($fp) - lw $t0 -932($fp) - lw $t1 12($t0) - sw $t1 -936($fp) - lw $t0 -936($fp) - bne $t0 $zero label_488 - la $t0 data_165 - sw $t0 -844($fp) - lw $t0 -844($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -840($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -868($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -864($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -860($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -856($fp) - lw $t0 -868($fp) - lw $t1 -864($fp) - seq $t0 $t0 $t1 - sw $t0 -852($fp) - lw $t0 -852($fp) - bne $t0 $zero label_398 - lw $t0 -868($fp) - lw $t1 -860($fp) - seq $t0 $t0 $t1 - sw $t0 -852($fp) - lw $t0 -852($fp) - bne $t0 $zero label_399 - lw $t0 -868($fp) - lw $t1 -856($fp) - seq $t0 $t0 $t1 - sw $t0 -852($fp) - lw $t0 -852($fp) - bne $t0 $zero label_400 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -840($fp) - seq $t0 $t0 $t1 - sw $t0 -848($fp) - j label_401 - label_398: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -876($fp) - lw $t0 -840($fp) - lw $t1 12($t0) - sw $t1 -872($fp) - lw $t0 -876($fp) - lw $t1 -872($fp) - seq $t0 $t0 $t1 - sw $t0 -848($fp) - j label_401 - label_399: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -876($fp) - lw $t0 -840($fp) - lw $t1 12($t0) - sw $t1 -872($fp) - lw $t0 -876($fp) - move $a0 $t0 - lw $t0 -872($fp) - move $a1 $t0 - jal equal_str - sw $v0 -848($fp) - j label_401 - label_400: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -876($fp) - lw $t0 -840($fp) - lw $t1 12($t0) - sw $t1 -872($fp) - lw $t0 -876($fp) - lw $t1 -872($fp) - seq $t0 $t0 $t1 - sw $t0 -848($fp) - j label_401 - label_401: - lw $t0 -848($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -880($fp) - lw $t0 -880($fp) - lw $t1 12($t0) - sw $t1 -884($fp) - lw $t0 -884($fp) - bne $t0 $zero label_482 - la $t0 data_166 - sw $t0 -792($fp) - lw $t0 -792($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -788($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -816($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -812($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -808($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -804($fp) - lw $t0 -816($fp) - lw $t1 -812($fp) - seq $t0 $t0 $t1 - sw $t0 -800($fp) - lw $t0 -800($fp) - bne $t0 $zero label_402 - lw $t0 -816($fp) - lw $t1 -808($fp) - seq $t0 $t0 $t1 - sw $t0 -800($fp) - lw $t0 -800($fp) - bne $t0 $zero label_403 - lw $t0 -816($fp) - lw $t1 -804($fp) - seq $t0 $t0 $t1 - sw $t0 -800($fp) - lw $t0 -800($fp) - bne $t0 $zero label_404 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -788($fp) - seq $t0 $t0 $t1 - sw $t0 -796($fp) - j label_405 - label_402: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -824($fp) - lw $t0 -788($fp) - lw $t1 12($t0) - sw $t1 -820($fp) - lw $t0 -824($fp) - lw $t1 -820($fp) - seq $t0 $t0 $t1 - sw $t0 -796($fp) - j label_405 - label_403: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -824($fp) - lw $t0 -788($fp) - lw $t1 12($t0) - sw $t1 -820($fp) - lw $t0 -824($fp) - move $a0 $t0 - lw $t0 -820($fp) - move $a1 $t0 - jal equal_str - sw $v0 -796($fp) - j label_405 - label_404: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -824($fp) - lw $t0 -788($fp) - lw $t1 12($t0) - sw $t1 -820($fp) - lw $t0 -824($fp) - lw $t1 -820($fp) - seq $t0 $t0 $t1 - sw $t0 -796($fp) - j label_405 - label_405: - lw $t0 -796($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -828($fp) - lw $t0 -828($fp) - lw $t1 12($t0) - sw $t1 -832($fp) - lw $t0 -832($fp) - bne $t0 $zero label_476 - la $t0 data_167 - sw $t0 -740($fp) - lw $t0 -740($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -736($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -764($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -760($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -756($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -752($fp) - lw $t0 -764($fp) - lw $t1 -760($fp) - seq $t0 $t0 $t1 - sw $t0 -748($fp) - lw $t0 -748($fp) - bne $t0 $zero label_406 - lw $t0 -764($fp) - lw $t1 -756($fp) - seq $t0 $t0 $t1 - sw $t0 -748($fp) - lw $t0 -748($fp) - bne $t0 $zero label_407 - lw $t0 -764($fp) - lw $t1 -752($fp) - seq $t0 $t0 $t1 - sw $t0 -748($fp) - lw $t0 -748($fp) - bne $t0 $zero label_408 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -736($fp) - seq $t0 $t0 $t1 - sw $t0 -744($fp) - j label_409 - label_406: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -772($fp) - lw $t0 -736($fp) - lw $t1 12($t0) - sw $t1 -768($fp) - lw $t0 -772($fp) - lw $t1 -768($fp) - seq $t0 $t0 $t1 - sw $t0 -744($fp) - j label_409 - label_407: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -772($fp) - lw $t0 -736($fp) - lw $t1 12($t0) - sw $t1 -768($fp) - lw $t0 -772($fp) - move $a0 $t0 - lw $t0 -768($fp) - move $a1 $t0 - jal equal_str - sw $v0 -744($fp) - j label_409 - label_408: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -772($fp) - lw $t0 -736($fp) - lw $t1 12($t0) - sw $t1 -768($fp) - lw $t0 -772($fp) - lw $t1 -768($fp) - seq $t0 $t0 $t1 - sw $t0 -744($fp) - j label_409 - label_409: - lw $t0 -744($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -776($fp) - lw $t0 -776($fp) - lw $t1 12($t0) - sw $t1 -780($fp) - lw $t0 -780($fp) - bne $t0 $zero label_456 - la $t0 data_168 - sw $t0 -688($fp) - lw $t0 -688($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -684($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -712($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -708($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -704($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -700($fp) - lw $t0 -712($fp) - lw $t1 -708($fp) - seq $t0 $t0 $t1 - sw $t0 -696($fp) - lw $t0 -696($fp) - bne $t0 $zero label_410 - lw $t0 -712($fp) - lw $t1 -704($fp) - seq $t0 $t0 $t1 - sw $t0 -696($fp) - lw $t0 -696($fp) - bne $t0 $zero label_411 - lw $t0 -712($fp) - lw $t1 -700($fp) - seq $t0 $t0 $t1 - sw $t0 -696($fp) - lw $t0 -696($fp) - bne $t0 $zero label_412 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -684($fp) - seq $t0 $t0 $t1 - sw $t0 -692($fp) - j label_413 - label_410: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -720($fp) - lw $t0 -684($fp) - lw $t1 12($t0) - sw $t1 -716($fp) - lw $t0 -720($fp) - lw $t1 -716($fp) - seq $t0 $t0 $t1 - sw $t0 -692($fp) - j label_413 - label_411: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -720($fp) - lw $t0 -684($fp) - lw $t1 12($t0) - sw $t1 -716($fp) - lw $t0 -720($fp) - move $a0 $t0 - lw $t0 -716($fp) - move $a1 $t0 - jal equal_str - sw $v0 -692($fp) - j label_413 - label_412: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -720($fp) - lw $t0 -684($fp) - lw $t1 12($t0) - sw $t1 -716($fp) - lw $t0 -720($fp) - lw $t1 -716($fp) - seq $t0 $t0 $t1 - sw $t0 -692($fp) - j label_413 - label_413: - lw $t0 -692($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -724($fp) - lw $t0 -724($fp) - lw $t1 12($t0) - sw $t1 -728($fp) - lw $t0 -728($fp) - bne $t0 $zero label_430 - la $t0 data_169 - sw $t0 -636($fp) - lw $t0 -636($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -632($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -660($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -656($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -652($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -648($fp) - lw $t0 -660($fp) - lw $t1 -656($fp) - seq $t0 $t0 $t1 - sw $t0 -644($fp) - lw $t0 -644($fp) - bne $t0 $zero label_414 - lw $t0 -660($fp) - lw $t1 -652($fp) - seq $t0 $t0 $t1 - sw $t0 -644($fp) - lw $t0 -644($fp) - bne $t0 $zero label_415 - lw $t0 -660($fp) - lw $t1 -648($fp) - seq $t0 $t0 $t1 - sw $t0 -644($fp) - lw $t0 -644($fp) - bne $t0 $zero label_416 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -632($fp) - seq $t0 $t0 $t1 - sw $t0 -640($fp) - j label_417 - label_414: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -668($fp) - lw $t0 -632($fp) - lw $t1 12($t0) - sw $t1 -664($fp) - lw $t0 -668($fp) - lw $t1 -664($fp) - seq $t0 $t0 $t1 - sw $t0 -640($fp) - j label_417 - label_415: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -668($fp) - lw $t0 -632($fp) - lw $t1 12($t0) - sw $t1 -664($fp) - lw $t0 -668($fp) - move $a0 $t0 - lw $t0 -664($fp) - move $a1 $t0 - jal equal_str - sw $v0 -640($fp) - j label_417 - label_416: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -668($fp) - lw $t0 -632($fp) - lw $t1 12($t0) - sw $t1 -664($fp) - lw $t0 -668($fp) - lw $t1 -664($fp) - seq $t0 $t0 $t1 - sw $t0 -640($fp) - j label_417 - label_417: - lw $t0 -640($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -672($fp) - lw $t0 -672($fp) - lw $t1 12($t0) - sw $t1 -676($fp) - lw $t0 -676($fp) - bne $t0 $zero label_428 - la $t0 data_170 - sw $t0 -584($fp) - lw $t0 -584($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -580($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -608($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -604($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -600($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -596($fp) - lw $t0 -608($fp) - lw $t1 -604($fp) - seq $t0 $t0 $t1 - sw $t0 -592($fp) - lw $t0 -592($fp) - bne $t0 $zero label_418 - lw $t0 -608($fp) - lw $t1 -600($fp) - seq $t0 $t0 $t1 - sw $t0 -592($fp) - lw $t0 -592($fp) - bne $t0 $zero label_419 - lw $t0 -608($fp) - lw $t1 -596($fp) - seq $t0 $t0 $t1 - sw $t0 -592($fp) - lw $t0 -592($fp) - bne $t0 $zero label_420 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -580($fp) - seq $t0 $t0 $t1 - sw $t0 -588($fp) - j label_421 - label_418: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -616($fp) - lw $t0 -580($fp) - lw $t1 12($t0) - sw $t1 -612($fp) - lw $t0 -616($fp) - lw $t1 -612($fp) - seq $t0 $t0 $t1 - sw $t0 -588($fp) - j label_421 - label_419: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -616($fp) - lw $t0 -580($fp) - lw $t1 12($t0) - sw $t1 -612($fp) - lw $t0 -616($fp) - move $a0 $t0 - lw $t0 -612($fp) - move $a1 $t0 - jal equal_str - sw $v0 -588($fp) - j label_421 - label_420: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -616($fp) - lw $t0 -580($fp) - lw $t1 12($t0) - sw $t1 -612($fp) - lw $t0 -616($fp) - lw $t1 -612($fp) - seq $t0 $t0 $t1 - sw $t0 -588($fp) - j label_421 - label_421: - lw $t0 -588($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -620($fp) - lw $t0 -620($fp) - lw $t1 12($t0) - sw $t1 -624($fp) - lw $t0 -624($fp) - bne $t0 $zero label_426 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -576($fp) - lw $t0 -576($fp) - bne $t0 $zero label_422 - j label_423 - label_422: - li $v0 4 - la $a0 data_171 - syscall - li $v0 10 - syscall - label_423: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -572($fp) - jal __init_at_A - sw $v0 -568($fp) - lw $t0 -568($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -564($fp) - lw $t0 -564($fp) - bne $t0 $zero label_424 - j label_425 - label_424: - li $v0 4 - la $a0 data_172 - syscall - li $v0 10 - syscall - label_425: - lw $t0 -568($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -572($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -568($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -560($fp) - lw $t0 -560($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -628($fp) - j label_427 - label_426: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -556($fp) - lw $t0 -556($fp) - lw $t1 0($fp) - addi $t1 $t1 24 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -628($fp) - label_427: - lw $t0 -628($fp) - sw $t0 -680($fp) - j label_429 - label_428: - jal __init_at_A - sw $v0 -552($fp) - lw $t0 -552($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -680($fp) - label_429: - lw $t0 -680($fp) - sw $t0 -732($fp) - j label_455 - label_430: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_431 - j label_432 - label_431: - li $v0 4 - la $a0 data_173 - syscall - li $v0 10 - syscall - label_432: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -540($fp) - jal __init_at_E - sw $v0 -536($fp) - lw $t0 -536($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -532($fp) - lw $t0 -532($fp) - bne $t0 $zero label_433 - j label_434 - label_433: - li $v0 4 - la $a0 data_174 - syscall - li $v0 10 - syscall - label_434: - lw $t0 -536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -540($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -528($fp) - lw $t0 -528($fp) - sw $t0 -548($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -504($fp) - lw $t0 -504($fp) - bne $t0 $zero label_435 - j label_436 - label_435: - li $v0 4 - la $a0 data_175 - syscall - li $v0 10 - syscall - label_436: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -500($fp) - lw $t0 -500($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -548($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -480($fp) - lw $t0 -480($fp) - bne $t0 $zero label_437 - j label_438 - label_437: - li $v0 4 - la $a0 data_176 - syscall - li $v0 10 - syscall - label_438: - lw $t0 -548($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -548($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -476($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -492($fp) - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -472($fp) - lw $t0 -472($fp) - lw $t1 12($t0) - sw $t1 -488($fp) - lw $t0 -492($fp) - lw $t1 -488($fp) - mul $t0 $t0 $t1 - sw $t0 -484($fp) - lw $t0 -484($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -496($fp) - lw $t0 -496($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - sub $t0 $t0 $t1 - sw $t0 -508($fp) - lw $t0 -508($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -520($fp) - lw $t0 -520($fp) - sw $t0 -524($fp) - la $t0 data_177 - sw $t0 -468($fp) - lw $t0 -468($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -464($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -460($fp) - lw $t0 -460($fp) - bne $t0 $zero label_439 - j label_440 - label_439: - li $v0 4 - la $a0 data_178 - syscall - li $v0 10 - syscall - label_440: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -464($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -456($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_441 - j label_442 - label_441: - li $v0 4 - la $a0 data_179 - syscall - li $v0 10 - syscall - label_442: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -448($fp) - la $t0 data_180 - sw $t0 -444($fp) - lw $t0 -444($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -440($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_443 - j label_444 - label_443: - li $v0 4 - la $a0 data_181 - syscall - li $v0 10 - syscall - label_444: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -440($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -432($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -428($fp) - lw $t0 -428($fp) - bne $t0 $zero label_445 - j label_446 - label_445: - li $v0 4 - la $a0 data_182 - syscall - li $v0 10 - syscall - label_446: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -548($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -424($fp) - la $t0 data_183 - sw $t0 -420($fp) - lw $t0 -420($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -416($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -412($fp) - lw $t0 -412($fp) - bne $t0 $zero label_447 - j label_448 - label_447: - li $v0 4 - la $a0 data_184 - syscall - li $v0 10 - syscall - label_448: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -416($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -408($fp) - jal __init_at_A2I - sw $v0 -400($fp) - lw $t0 -400($fp) - sw $t0 -404($fp) - lw $t0 -404($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -396($fp) - lw $t0 -396($fp) - bne $t0 $zero label_449 - j label_450 - label_449: - li $v0 4 - la $a0 data_185 - syscall - li $v0 10 - syscall - label_450: - lw $t0 -404($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -524($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -404($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -392($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_451 - j label_452 - label_451: - li $v0 4 - la $a0 data_186 - syscall - li $v0 10 - syscall - label_452: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -392($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -384($fp) - la $t0 data_187 - sw $t0 -380($fp) - lw $t0 -380($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -376($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -372($fp) - lw $t0 -372($fp) - bne $t0 $zero label_453 - j label_454 - label_453: - li $v0 4 - la $a0 data_188 - syscall - li $v0 10 - syscall - label_454: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -376($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -368($fp) - lw $t0 -548($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -732($fp) - label_455: - lw $t0 -732($fp) - sw $t0 -784($fp) - j label_475 - label_456: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_457 - j label_458 - label_457: - li $v0 4 - la $a0 data_189 - syscall - li $v0 10 - syscall - label_458: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -352($fp) - jal __init_at_D - sw $v0 -348($fp) - lw $t0 -348($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -344($fp) - lw $t0 -344($fp) - bne $t0 $zero label_459 - j label_460 - label_459: - li $v0 4 - la $a0 data_190 - syscall - li $v0 10 - syscall - label_460: - lw $t0 -348($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -352($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -348($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -340($fp) - lw $t0 -340($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -360($fp) - bne $t0 $zero label_467 - la $t0 data_191 - sw $t0 -336($fp) - lw $t0 -336($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -332($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -328($fp) - lw $t0 -328($fp) - bne $t0 $zero label_461 - j label_462 - label_461: - li $v0 4 - la $a0 data_192 - syscall - li $v0 10 - syscall - label_462: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -332($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -324($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -320($fp) - lw $t0 -320($fp) - bne $t0 $zero label_463 - j label_464 - label_463: - li $v0 4 - la $a0 data_193 - syscall - li $v0 10 - syscall - label_464: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -316($fp) - la $t0 data_194 - sw $t0 -312($fp) - lw $t0 -312($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -308($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_465 - j label_466 - label_465: - li $v0 4 - la $a0 data_195 - syscall - li $v0 10 - syscall - label_466: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -308($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -300($fp) - lw $t0 -300($fp) - sw $t0 -364($fp) - j label_474 - label_467: - la $t0 data_196 - sw $t0 -296($fp) - lw $t0 -296($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -292($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -288($fp) - lw $t0 -288($fp) - bne $t0 $zero label_468 - j label_469 - label_468: - li $v0 4 - la $a0 data_197 - syscall - li $v0 10 - syscall - label_469: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -292($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -284($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -280($fp) - lw $t0 -280($fp) - bne $t0 $zero label_470 - j label_471 - label_470: - li $v0 4 - la $a0 data_198 - syscall - li $v0 10 - syscall - label_471: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -276($fp) - la $t0 data_199 - sw $t0 -272($fp) - lw $t0 -272($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -268($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -264($fp) - lw $t0 -264($fp) - bne $t0 $zero label_472 - j label_473 - label_472: - li $v0 4 - la $a0 data_200 - syscall - li $v0 10 - syscall - label_473: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -268($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -260($fp) - lw $t0 -260($fp) - sw $t0 -364($fp) - label_474: - lw $t0 -364($fp) - sw $t0 -784($fp) - label_475: - lw $t0 -784($fp) - sw $t0 -836($fp) - j label_481 - label_476: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -256($fp) - lw $t0 -256($fp) - bne $t0 $zero label_477 - j label_478 - label_477: - li $v0 4 - la $a0 data_201 - syscall - li $v0 10 - syscall - label_478: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -252($fp) - jal __init_at_C - sw $v0 -248($fp) - lw $t0 -248($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_479 - j label_480 - label_479: - li $v0 4 - la $a0 data_202 - syscall - li $v0 10 - syscall - label_480: - lw $t0 -248($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -252($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_method5_at_C - addi $sp $sp 8 - sw $v0 -240($fp) - lw $t0 -240($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -836($fp) - label_481: - lw $t0 -836($fp) - sw $t0 -888($fp) - j label_487 - label_482: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -236($fp) - lw $t0 -236($fp) - bne $t0 $zero label_483 - j label_484 - label_483: - li $v0 4 - la $a0 data_203 - syscall - li $v0 10 - syscall - label_484: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -232($fp) - jal __init_at_C - sw $v0 -228($fp) - lw $t0 -228($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -224($fp) - lw $t0 -224($fp) - bne $t0 $zero label_485 - j label_486 - label_485: - li $v0 4 - la $a0 data_204 - syscall - li $v0 10 - syscall - label_486: - lw $t0 -228($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -232($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_method5_at_B - addi $sp $sp 8 - sw $v0 -220($fp) - lw $t0 -220($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -888($fp) - label_487: - lw $t0 -888($fp) - sw $t0 -940($fp) - j label_493 - label_488: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -216($fp) - lw $t0 -216($fp) - bne $t0 $zero label_489 - j label_490 - label_489: - li $v0 4 - la $a0 data_205 - syscall - li $v0 10 - syscall - label_490: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -212($fp) - jal __init_at_C - sw $v0 -208($fp) - lw $t0 -208($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -204($fp) - lw $t0 -204($fp) - bne $t0 $zero label_491 - j label_492 - label_491: - li $v0 4 - la $a0 data_206 - syscall - li $v0 10 - syscall - label_492: - lw $t0 -208($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -212($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_method5_at_A - addi $sp $sp 8 - sw $v0 -200($fp) - lw $t0 -200($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -940($fp) - label_493: - lw $t0 -940($fp) - sw $t0 -992($fp) - j label_505 - label_494: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_495 - j label_496 - label_495: - li $v0 4 - la $a0 data_207 - syscall - li $v0 10 - syscall - label_496: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -192($fp) - jal __init_at_A - sw $v0 -188($fp) - lw $t0 -188($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -184($fp) - lw $t0 -184($fp) - bne $t0 $zero label_497 - j label_498 - label_497: - li $v0 4 - la $a0 data_208 - syscall - li $v0 10 - syscall - label_498: - lw $t0 -188($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -188($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -180($fp) - lw $t0 -180($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_499 - j label_500 - label_499: - li $v0 4 - la $a0 data_209 - syscall - li $v0 10 - syscall - label_500: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -172($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_501 - j label_502 - label_501: - li $v0 4 - la $a0 data_210 - syscall - li $v0 10 - syscall - label_502: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -164($fp) - jal __init_at_D - sw $v0 -160($fp) - lw $t0 -160($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -156($fp) - lw $t0 -156($fp) - bne $t0 $zero label_503 - j label_504 - label_503: - li $v0 4 - la $a0 data_211 - syscall - li $v0 10 - syscall - label_504: - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -164($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -992($fp) - label_505: - lw $t0 -992($fp) - sw $t0 -1044($fp) - j label_525 - label_506: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_507 - j label_508 - label_507: - li $v0 4 - la $a0 data_212 - syscall - li $v0 10 - syscall - label_508: - la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_509 - la $t0 types_table - addi $t0 $t0 20 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_514 - la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_514 - la $t0 types_table - addi $t0 $t0 32 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_514 - la $t0 types_table - addi $t0 $t0 36 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_514 - la $t0 types_table - addi $t0 $t0 0 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - la $t0 types_table - addi $t0 $t0 4 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - la $t0 types_table - addi $t0 $t0 40 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - la $t0 types_table - addi $t0 $t0 44 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_519 - li $v0 4 - la $a0 data_213 - syscall - li $v0 10 - syscall - label_509: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -128($fp) - lw $t0 -128($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_510 - j label_511 - label_510: - li $v0 4 - la $a0 data_214 - syscall - li $v0 10 - syscall - label_511: - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -128($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_512 - j label_513 - label_512: - li $v0 4 - la $a0 data_215 - syscall - li $v0 10 - syscall - label_513: - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -112($fp) - lw $t0 -112($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -148($fp) - j label_524 - label_514: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -108($fp) - lw $t0 -108($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_515 - j label_516 - label_515: - li $v0 4 - la $a0 data_216 - syscall - li $v0 10 - syscall - label_516: - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -108($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_517 - j label_518 - label_517: - li $v0 4 - la $a0 data_217 - syscall - li $v0 10 - syscall - label_518: - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -148($fp) - j label_524 - label_519: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -88($fp) - la $t0 data_218 - sw $t0 -84($fp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_520 - j label_521 - label_520: - li $v0 4 - la $a0 data_219 - syscall - li $v0 10 - syscall - label_521: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -72($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_522 - j label_523 - label_522: - li $v0 4 - la $a0 data_220 - syscall - li $v0 10 - syscall - label_523: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -64($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -148($fp) - j label_524 - label_524: - lw $t0 -148($fp) - sw $t0 -1044($fp) - label_525: - lw $t0 -1044($fp) - sw $t0 -1096($fp) - j label_537 - label_526: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_527 - j label_528 - label_527: - li $v0 4 - la $a0 data_221 - syscall - li $v0 10 - syscall - label_528: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - jal __init_at_A - sw $v0 -48($fp) - lw $t0 -48($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_529 - j label_530 - label_529: - li $v0 4 - la $a0 data_222 - syscall - li $v0 10 - syscall - label_530: - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_531 - j label_532 - label_531: - li $v0 4 - la $a0 data_223 - syscall - li $v0 10 - syscall - label_532: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_533 - j label_534 - label_533: - li $v0 4 - la $a0 data_224 - syscall - li $v0 10 - syscall - label_534: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -24($fp) - jal __init_at_B - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_535 - j label_536 - label_535: - li $v0 4 - la $a0 data_225 - syscall - li $v0 10 - syscall - label_536: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -1096($fp) - label_537: - j label_362 - label_538: - li $v0 0 - addi $sp $sp 1208 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 11 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/atoi.mips b/tests/codegen/atoi.mips index fdee09672..e69de29bb 100644 --- a/tests/codegen/atoi.mips +++ b/tests/codegen/atoi.mips @@ -1,5388 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "A2I" -.word 0 -data_7: .asciiz "Main" -.word 0 -data_8: .asciiz " -" -.word 0 -data_9: .asciiz "" -.word 0 -data_10: .asciiz "Abort called from class " -.word 0 -data_11: .asciiz "Substring out of range" -.word 0 -data_12: .asciiz "0" -.word 0 -data_13: .asciiz "1" -.word 0 -data_14: .asciiz "2" -.word 0 -data_15: .asciiz "3" -.word 0 -data_16: .asciiz "4" -.word 0 -data_17: .asciiz "5" -.word 0 -data_18: .asciiz "6" -.word 0 -data_19: .asciiz "7" -.word 0 -data_20: .asciiz "8" -.word 0 -data_21: .asciiz "9" -.word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_24: .asciiz "" -.word 0 -data_25: .asciiz "9" -.word 0 -data_26: .asciiz "8" -.word 0 -data_27: .asciiz "7" -.word 0 -data_28: .asciiz "6" -.word 0 -data_29: .asciiz "5" -.word 0 -data_30: .asciiz "4" -.word 0 -data_31: .asciiz "3" -.word 0 -data_32: .asciiz "2" -.word 0 -data_33: .asciiz "1" -.word 0 -data_34: .asciiz "0" -.word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_36: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_37: .asciiz "-" -.word 0 -data_38: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_39: .asciiz "+" -.word 0 -data_40: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_41: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_42: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_43: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_44: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_45: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_46: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_47: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_48: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_49: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_50: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_51: .asciiz "-" -.word 0 -data_52: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_53: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_54: .asciiz "0" -.word 0 -data_55: .asciiz "RuntimeError: Division by zero" -.word 0 -data_56: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_57: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_58: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_59: .asciiz "" -.word 0 -data_60: .asciiz "678987" -.word 0 -data_61: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_62: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_63: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_64: .asciiz " == " -.word 0 -data_65: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_66: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_67: .asciiz "\n" -.word 0 -data_68: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_a2i_at_A2I - .word function_a2i_aux_at_A2I - .word function_c2i_at_A2I - .word function_i2a_at_A2I - .word function_i2a_aux_at_A2I - .word function_i2c_at_A2I - .word __init_attr_at_A2I - .word __init_at_A2I - -type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_7_prototype: - .word 6 - .word 4 - .word type_7_dispatch - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_10 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_8 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_11 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_c2i_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -572 - la $t0 data_12 - sw $t0 -536($fp) - lw $t0 -536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -532($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -560($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -556($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -552($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -548($fp) - lw $t0 -560($fp) - lw $t1 -556($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_3 - lw $t0 -560($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_4 - lw $t0 -560($fp) - lw $t1 -548($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_5 - lw $t0 0($fp) - lw $t1 -532($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_6 - label_3: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_6 - label_4: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - move $a0 $t0 - lw $t0 -564($fp) - move $a1 $t0 - jal equal_str - sw $v0 -540($fp) - j label_6 - label_5: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_6 - label_6: - lw $t0 -540($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -572($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -576($fp) - lw $t0 -576($fp) - bne $t0 $zero label_63 - la $t0 data_13 - sw $t0 -484($fp) - lw $t0 -484($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -480($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -508($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -504($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -500($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -496($fp) - lw $t0 -508($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_7 - lw $t0 -508($fp) - lw $t1 -500($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_8 - lw $t0 -508($fp) - lw $t1 -496($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_9 - lw $t0 0($fp) - lw $t1 -480($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_10 - label_7: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_10 - label_8: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - move $a0 $t0 - lw $t0 -512($fp) - move $a1 $t0 - jal equal_str - sw $v0 -488($fp) - j label_10 - label_9: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_10 - label_10: - lw $t0 -488($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -520($fp) - lw $t0 -520($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -524($fp) - bne $t0 $zero label_61 - la $t0 data_14 - sw $t0 -432($fp) - lw $t0 -432($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -456($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -452($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -448($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -444($fp) - lw $t0 -456($fp) - lw $t1 -452($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_11 - lw $t0 -456($fp) - lw $t1 -448($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_12 - lw $t0 -456($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_13 - lw $t0 0($fp) - lw $t1 -428($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_14 - label_11: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_14 - label_12: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - move $a0 $t0 - lw $t0 -460($fp) - move $a1 $t0 - jal equal_str - sw $v0 -436($fp) - j label_14 - label_13: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_14 - label_14: - lw $t0 -436($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -468($fp) - lw $t0 -468($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -472($fp) - bne $t0 $zero label_59 - la $t0 data_15 - sw $t0 -380($fp) - lw $t0 -380($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -376($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -404($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -400($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -396($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -392($fp) - lw $t0 -404($fp) - lw $t1 -400($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_15 - lw $t0 -404($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_16 - lw $t0 -404($fp) - lw $t1 -392($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_17 - lw $t0 0($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_18 - label_15: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_18 - label_16: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - move $a0 $t0 - lw $t0 -408($fp) - move $a1 $t0 - jal equal_str - sw $v0 -384($fp) - j label_18 - label_17: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_18 - label_18: - lw $t0 -384($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -416($fp) - lw $t0 -416($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -420($fp) - bne $t0 $zero label_57 - la $t0 data_16 - sw $t0 -328($fp) - lw $t0 -328($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -324($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -352($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -348($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -344($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -340($fp) - lw $t0 -352($fp) - lw $t1 -348($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_19 - lw $t0 -352($fp) - lw $t1 -344($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_20 - lw $t0 -352($fp) - lw $t1 -340($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_21 - lw $t0 0($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_22 - label_19: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_22 - label_20: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - move $a0 $t0 - lw $t0 -356($fp) - move $a1 $t0 - jal equal_str - sw $v0 -332($fp) - j label_22 - label_21: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_22 - label_22: - lw $t0 -332($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -364($fp) - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -368($fp) - lw $t0 -368($fp) - bne $t0 $zero label_55 - la $t0 data_17 - sw $t0 -276($fp) - lw $t0 -276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -300($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -296($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -292($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -288($fp) - lw $t0 -300($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_23 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_24 - lw $t0 -300($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_25 - lw $t0 0($fp) - lw $t1 -272($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_26 - label_23: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_26 - label_24: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - move $a0 $t0 - lw $t0 -304($fp) - move $a1 $t0 - jal equal_str - sw $v0 -280($fp) - j label_26 - label_25: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_26 - label_26: - lw $t0 -280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -312($fp) - lw $t0 -312($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_53 - la $t0 data_18 - sw $t0 -224($fp) - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -220($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -248($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -244($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -240($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -236($fp) - lw $t0 -248($fp) - lw $t1 -244($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_27 - lw $t0 -248($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_28 - lw $t0 -248($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_29 - lw $t0 0($fp) - lw $t1 -220($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_30 - label_27: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_30 - label_28: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - move $a0 $t0 - lw $t0 -252($fp) - move $a1 $t0 - jal equal_str - sw $v0 -228($fp) - j label_30 - label_29: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_30 - label_30: - lw $t0 -228($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -260($fp) - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -264($fp) - bne $t0 $zero label_51 - la $t0 data_19 - sw $t0 -172($fp) - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -196($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -192($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -184($fp) - lw $t0 -196($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_31 - lw $t0 -196($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_32 - lw $t0 -196($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_33 - lw $t0 0($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_34 - label_31: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_34 - label_32: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - move $a0 $t0 - lw $t0 -200($fp) - move $a1 $t0 - jal equal_str - sw $v0 -176($fp) - j label_34 - label_33: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_34 - label_34: - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -208($fp) - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_49 - la $t0 data_20 - sw $t0 -120($fp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_35 - lw $t0 -144($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_36 - lw $t0 -144($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_37 - lw $t0 0($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_38 - label_35: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_38 - label_36: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - move $a0 $t0 - lw $t0 -148($fp) - move $a1 $t0 - jal equal_str - sw $v0 -124($fp) - j label_38 - label_37: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_38 - label_38: - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_47 - la $t0 data_21 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_39 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_40 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_41 - lw $t0 0($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_42 - label_39: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_42 - label_40: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_42 - label_41: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_42 - label_42: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_45 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_44: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -56($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -112($fp) - j label_46 - label_45: - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -112($fp) - label_46: - lw $t0 -112($fp) - sw $t0 -164($fp) - j label_48 - label_47: - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -164($fp) - label_48: - lw $t0 -164($fp) - sw $t0 -216($fp) - j label_50 - label_49: - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -216($fp) - label_50: - lw $t0 -216($fp) - sw $t0 -268($fp) - j label_52 - label_51: - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -268($fp) - label_52: - lw $t0 -268($fp) - sw $t0 -320($fp) - j label_54 - label_53: - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -320($fp) - label_54: - lw $t0 -320($fp) - sw $t0 -372($fp) - j label_56 - label_55: - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -372($fp) - label_56: - lw $t0 -372($fp) - sw $t0 -424($fp) - j label_58 - label_57: - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -424($fp) - label_58: - lw $t0 -424($fp) - sw $t0 -476($fp) - j label_60 - label_59: - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -476($fp) - label_60: - lw $t0 -476($fp) - sw $t0 -528($fp) - j label_62 - label_61: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -528($fp) - label_62: - lw $t0 -528($fp) - sw $t0 -580($fp) - j label_64 - label_63: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -580($fp) - label_64: - lw $v0 -580($fp) - addi $sp $sp 572 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_i2c_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -576 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -540($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -564($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -560($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -556($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -552($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) - seq $t0 $t0 $t1 - sw $t0 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_65 - lw $t0 -564($fp) - lw $t1 -556($fp) - seq $t0 $t0 $t1 - sw $t0 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_66 - lw $t0 -564($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_67 - lw $t0 0($fp) - lw $t1 -540($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - j label_68 - label_65: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -540($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -572($fp) - lw $t1 -568($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - j label_68 - label_66: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -540($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -572($fp) - move $a0 $t0 - lw $t0 -568($fp) - move $a1 $t0 - jal equal_str - sw $v0 -544($fp) - j label_68 - label_67: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -572($fp) - lw $t0 -540($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -572($fp) - lw $t1 -568($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - j label_68 - label_68: - lw $t0 -544($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -576($fp) - lw $t0 -576($fp) - lw $t1 12($t0) - sw $t1 -580($fp) - lw $t0 -580($fp) - bne $t0 $zero label_125 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -492($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -516($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -512($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -508($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -504($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -500($fp) - lw $t0 -500($fp) - bne $t0 $zero label_69 - lw $t0 -516($fp) - lw $t1 -508($fp) - seq $t0 $t0 $t1 - sw $t0 -500($fp) - lw $t0 -500($fp) - bne $t0 $zero label_70 - lw $t0 -516($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -500($fp) - lw $t0 -500($fp) - bne $t0 $zero label_71 - lw $t0 0($fp) - lw $t1 -492($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - j label_72 - label_69: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -492($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -524($fp) - lw $t1 -520($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - j label_72 - label_70: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -492($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -524($fp) - move $a0 $t0 - lw $t0 -520($fp) - move $a1 $t0 - jal equal_str - sw $v0 -496($fp) - j label_72 - label_71: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -492($fp) - lw $t1 12($t0) - sw $t1 -520($fp) - lw $t0 -524($fp) - lw $t1 -520($fp) - seq $t0 $t0 $t1 - sw $t0 -496($fp) - j label_72 - label_72: - lw $t0 -496($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -528($fp) - lw $t0 -528($fp) - lw $t1 12($t0) - sw $t1 -532($fp) - lw $t0 -532($fp) - bne $t0 $zero label_123 - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -444($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -468($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -464($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -460($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -456($fp) - lw $t0 -468($fp) - lw $t1 -464($fp) - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_73 - lw $t0 -468($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_74 - lw $t0 -468($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -452($fp) - lw $t0 -452($fp) - bne $t0 $zero label_75 - lw $t0 0($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - j label_76 - label_73: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -476($fp) - lw $t0 -444($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -476($fp) - lw $t1 -472($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - j label_76 - label_74: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -476($fp) - lw $t0 -444($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -476($fp) - move $a0 $t0 - lw $t0 -472($fp) - move $a1 $t0 - jal equal_str - sw $v0 -448($fp) - j label_76 - label_75: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -476($fp) - lw $t0 -444($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -476($fp) - lw $t1 -472($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - j label_76 - label_76: - lw $t0 -448($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -480($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_121 - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -396($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -420($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -416($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -412($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -408($fp) - lw $t0 -420($fp) - lw $t1 -416($fp) - seq $t0 $t0 $t1 - sw $t0 -404($fp) - lw $t0 -404($fp) - bne $t0 $zero label_77 - lw $t0 -420($fp) - lw $t1 -412($fp) - seq $t0 $t0 $t1 - sw $t0 -404($fp) - lw $t0 -404($fp) - bne $t0 $zero label_78 - lw $t0 -420($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -404($fp) - lw $t0 -404($fp) - bne $t0 $zero label_79 - lw $t0 0($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - j label_80 - label_77: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -396($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -428($fp) - lw $t1 -424($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - j label_80 - label_78: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -396($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -428($fp) - move $a0 $t0 - lw $t0 -424($fp) - move $a1 $t0 - jal equal_str - sw $v0 -400($fp) - j label_80 - label_79: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -396($fp) - lw $t1 12($t0) - sw $t1 -424($fp) - lw $t0 -428($fp) - lw $t1 -424($fp) - seq $t0 $t0 $t1 - sw $t0 -400($fp) - j label_80 - label_80: - lw $t0 -400($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -432($fp) - lw $t0 -432($fp) - lw $t1 12($t0) - sw $t1 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_119 - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -348($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -372($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -368($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -364($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -360($fp) - lw $t0 -372($fp) - lw $t1 -368($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_81 - lw $t0 -372($fp) - lw $t1 -364($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_82 - lw $t0 -372($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_83 - lw $t0 0($fp) - lw $t1 -348($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_84 - label_81: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_84 - label_82: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - move $a0 $t0 - lw $t0 -376($fp) - move $a1 $t0 - jal equal_str - sw $v0 -352($fp) - j label_84 - label_83: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_84 - label_84: - lw $t0 -352($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -384($fp) - lw $t0 -384($fp) - lw $t1 12($t0) - sw $t1 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_117 - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -324($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -320($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -316($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -312($fp) - lw $t0 -324($fp) - lw $t1 -320($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - lw $t0 -308($fp) - bne $t0 $zero label_85 - lw $t0 -324($fp) - lw $t1 -316($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - lw $t0 -308($fp) - bne $t0 $zero label_86 - lw $t0 -324($fp) - lw $t1 -312($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - lw $t0 -308($fp) - bne $t0 $zero label_87 - lw $t0 0($fp) - lw $t1 -300($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - j label_88 - label_85: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -332($fp) - lw $t1 -328($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - j label_88 - label_86: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -332($fp) - move $a0 $t0 - lw $t0 -328($fp) - move $a1 $t0 - jal equal_str - sw $v0 -304($fp) - j label_88 - label_87: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -332($fp) - lw $t1 -328($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - j label_88 - label_88: - lw $t0 -304($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -336($fp) - lw $t0 -336($fp) - lw $t1 12($t0) - sw $t1 -340($fp) - lw $t0 -340($fp) - bne $t0 $zero label_115 - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -252($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -276($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -272($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -268($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -264($fp) - lw $t0 -276($fp) - lw $t1 -272($fp) - seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_89 - lw $t0 -276($fp) - lw $t1 -268($fp) - seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_90 - lw $t0 -276($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_91 - lw $t0 0($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_92 - label_89: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -252($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_92 - label_90: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -252($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - move $a0 $t0 - lw $t0 -280($fp) - move $a1 $t0 - jal equal_str - sw $v0 -256($fp) - j label_92 - label_91: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t0 -252($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -256($fp) - j label_92 - label_92: - lw $t0 -256($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -288($fp) - lw $t0 -288($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_113 - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -228($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -224($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -220($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -216($fp) - lw $t0 -228($fp) - lw $t1 -224($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_93 - lw $t0 -228($fp) - lw $t1 -220($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_94 - lw $t0 -228($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_95 - lw $t0 0($fp) - lw $t1 -204($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_96 - label_93: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_96 - label_94: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - move $a0 $t0 - lw $t0 -232($fp) - move $a1 $t0 - jal equal_str - sw $v0 -208($fp) - j label_96 - label_95: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -236($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -232($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -208($fp) - j label_96 - label_96: - lw $t0 -208($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -240($fp) - lw $t0 -240($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_111 - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -180($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -176($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -172($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -168($fp) - lw $t0 -180($fp) - lw $t1 -176($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_97 - lw $t0 -180($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_98 - lw $t0 -180($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_99 - lw $t0 0($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_100 - label_97: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_100 - label_98: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - move $a0 $t0 - lw $t0 -184($fp) - move $a1 $t0 - jal equal_str - sw $v0 -160($fp) - j label_100 - label_99: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - j label_100 - label_100: - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -192($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_109 - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -132($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -124($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_101 - lw $t0 -132($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_102 - lw $t0 -132($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_103 - lw $t0 0($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_104 - label_101: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_104 - label_102: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - move $a0 $t0 - lw $t0 -136($fp) - move $a1 $t0 - jal equal_str - sw $v0 -112($fp) - j label_104 - label_103: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_104 - label_104: - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_107 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_105 - j label_106 - label_105: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_106: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -100($fp) - la $t0 data_24 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -152($fp) - j label_108 - label_107: - la $t0 data_25 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -152($fp) - label_108: - lw $t0 -152($fp) - sw $t0 -200($fp) - j label_110 - label_109: - la $t0 data_26 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -200($fp) - label_110: - lw $t0 -200($fp) - sw $t0 -248($fp) - j label_112 - label_111: - la $t0 data_27 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -248($fp) - label_112: - lw $t0 -248($fp) - sw $t0 -296($fp) - j label_114 - label_113: - la $t0 data_28 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -296($fp) - label_114: - lw $t0 -296($fp) - sw $t0 -344($fp) - j label_116 - label_115: - la $t0 data_29 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -344($fp) - label_116: - lw $t0 -344($fp) - sw $t0 -392($fp) - j label_118 - label_117: - la $t0 data_30 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -392($fp) - label_118: - lw $t0 -392($fp) - sw $t0 -440($fp) - j label_120 - label_119: - la $t0 data_31 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -440($fp) - label_120: - lw $t0 -440($fp) - sw $t0 -488($fp) - j label_122 - label_121: - la $t0 data_32 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -488($fp) - label_122: - lw $t0 -488($fp) - sw $t0 -536($fp) - j label_124 - label_123: - la $t0 data_33 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -536($fp) - label_124: - lw $t0 -536($fp) - sw $t0 -584($fp) - j label_126 - label_125: - la $t0 data_34 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -584($fp) - label_126: - lw $v0 -584($fp) - addi $sp $sp 576 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_a2i_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -312 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -276($fp) - lw $t0 -276($fp) - bne $t0 $zero label_127 - j label_128 - label_127: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_128: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -272($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -268($fp) - lw $t0 -272($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -300($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -296($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -292($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -288($fp) - lw $t0 -300($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_129 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_130 - lw $t0 -300($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_131 - lw $t0 -272($fp) - lw $t1 -268($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_132 - label_129: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_132 - label_130: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - move $a0 $t0 - lw $t0 -304($fp) - move $a1 $t0 - jal equal_str - sw $v0 -280($fp) - j label_132 - label_131: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_132 - label_132: - lw $t0 -280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -312($fp) - lw $t0 -312($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_163 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -220($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_133 - j label_134 - label_133: - li $v0 4 - la $a0 data_36 - syscall - li $v0 10 - syscall - label_134: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -216($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -208($fp) - la $t0 data_37 - sw $t0 -204($fp) - lw $t0 -204($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -200($fp) - lw $t0 -208($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -244($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -240($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -236($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -232($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_135 - lw $t0 -244($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_136 - lw $t0 -244($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_137 - lw $t0 -208($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_138 - label_135: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_138 - label_136: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - move $a0 $t0 - lw $t0 -248($fp) - move $a1 $t0 - jal equal_str - sw $v0 -224($fp) - j label_138 - label_137: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_138 - label_138: - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_155 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_139 - j label_140 - label_139: - li $v0 4 - la $a0 data_38 - syscall - li $v0 10 - syscall - label_140: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -140($fp) - la $t0 data_39 - sw $t0 -136($fp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 -140($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -176($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -172($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -168($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -164($fp) - lw $t0 -176($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_141 - lw $t0 -176($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_142 - lw $t0 -176($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_143 - lw $t0 -140($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_144 - label_141: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_144 - label_142: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - move $a0 $t0 - lw $t0 -180($fp) - move $a1 $t0 - jal equal_str - sw $v0 -156($fp) - j label_144 - label_143: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_144 - label_144: - lw $t0 -156($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -192($fp) - bne $t0 $zero label_147 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_145 - j label_146 - label_145: - li $v0 4 - la $a0 data_40 - syscall - li $v0 10 - syscall - label_146: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -124($fp) - lw $t0 -124($fp) - sw $t0 -196($fp) - j label_154 - label_147: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_148 - j label_149 - label_148: - li $v0 4 - la $a0 data_41 - syscall - li $v0 10 - syscall - label_149: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -112($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - sub $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_150 - j label_151 - label_150: - li $v0 4 - la $a0 data_42 - syscall - li $v0 10 - syscall - label_151: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -84($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_152 - j label_153 - label_152: - li $v0 4 - la $a0 data_43 - syscall - li $v0 10 - syscall - label_153: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -196($fp) - label_154: - lw $t0 -196($fp) - sw $t0 -264($fp) - j label_162 - label_155: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_156 - j label_157 - label_156: - li $v0 4 - la $a0 data_44 - syscall - li $v0 10 - syscall - label_157: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - sub $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_158 - j label_159 - label_158: - li $v0 4 - la $a0 data_45 - syscall - li $v0 10 - syscall - label_159: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -24($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_160 - j label_161 - label_160: - li $v0 4 - la $a0 data_46 - syscall - li $v0 10 - syscall - label_161: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -16($fp) - lw $t0 -16($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -68($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -264($fp) - label_162: - lw $t0 -264($fp) - sw $t0 -320($fp) - j label_164 - label_163: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -320($fp) - label_164: - lw $v0 -320($fp) - addi $sp $sp 312 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_a2i_aux_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -124 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -128($fp) - lw $t0 -128($fp) - sw $t0 -132($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_165 - j label_166 - label_165: - li $v0 4 - la $a0 data_47 - syscall - li $v0 10 - syscall - label_166: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - sw $t0 -124($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) - sw $t0 -112($fp) - label_167: - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - slt $t1 $t0 $t1 - sw $t1 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_168 - j label_173 - label_168: - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - mul $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_169 - j label_170 - label_169: - li $v0 4 - la $a0 data_48 - syscall - li $v0 10 - syscall - label_170: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -40($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_171 - j label_172 - label_171: - li $v0 4 - la $a0 data_49 - syscall - li $v0 10 - syscall - label_172: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - add $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -132($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -112($fp) - j label_167 - label_173: - lw $v0 -132($fp) - addi $sp $sp 124 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_i2a_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -148 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -136($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -132($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -124($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_174 - lw $t0 -136($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_175 - lw $t0 -136($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_176 - lw $t0 0($fp) - lw $t1 -112($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_177 - label_174: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_177 - label_175: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - move $a0 $t0 - lw $t0 -140($fp) - move $a1 $t0 - jal equal_str - sw $v0 -116($fp) - j label_177 - label_176: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_177 - label_177: - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -152($fp) - bne $t0 $zero label_186 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - slt $t1 $t0 $t1 - sw $t1 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_182 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -60($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - mul $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_178 - j label_179 - label_178: - li $v0 4 - la $a0 data_50 - syscall - li $v0 10 - syscall - label_179: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - la $t0 data_51 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_180 - j label_181 - label_180: - li $v0 4 - la $a0 data_52 - syscall - li $v0 10 - syscall - label_181: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -108($fp) - j label_185 - label_182: - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_183 - j label_184 - label_183: - li $v0 4 - la $a0 data_53 - syscall - li $v0 10 - syscall - label_184: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -108($fp) - label_185: - lw $t0 -108($fp) - sw $t0 -156($fp) - j label_187 - label_186: - la $t0 data_54 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -156($fp) - label_187: - lw $v0 -156($fp) - addi $sp $sp 148 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_i2a_aux_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -144 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -132($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -124($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -120($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_188 - lw $t0 -132($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_189 - lw $t0 -132($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_190 - lw $t0 0($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_191 - label_188: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_191 - label_189: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - move $a0 $t0 - lw $t0 -136($fp) - move $a1 $t0 - jal equal_str - sw $v0 -112($fp) - j label_191 - label_190: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - j label_191 - label_191: - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -148($fp) - bne $t0 $zero label_200 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -80($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -84($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_192 - j label_193 - label_192: - li $v0 4 - la $a0 data_55 - syscall - li $v0 10 - syscall - label_193: - lw $t0 -96($fp) - lw $t1 -92($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -104($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - mul $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - sub $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_194 - j label_195 - label_194: - li $v0 4 - la $a0 data_56 - syscall - li $v0 10 - syscall - label_195: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_196 - j label_197 - label_196: - li $v0 4 - la $a0 data_57 - syscall - li $v0 10 - syscall - label_197: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_198 - j label_199 - label_198: - li $v0 4 - la $a0 data_58 - syscall - li $v0 10 - syscall - label_199: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -152($fp) - j label_201 - label_200: - la $t0 data_59 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -152($fp) - label_201: - lw $v0 -152($fp) - addi $sp $sp 144 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_A2I: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A2I - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -92 - la $t0 data_60 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - jal __init_at_A2I - sw $v0 -88($fp) - lw $t0 -88($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_202 - j label_203 - label_202: - li $v0 4 - la $a0 data_61 - syscall - li $v0 10 - syscall - label_203: - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -100($fp) - li $t0 678987 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - jal __init_at_A2I - sw $v0 -68($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_204 - j label_205 - label_204: - li $v0 4 - la $a0 data_62 - syscall - li $v0 10 - syscall - label_205: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -76($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_206 - j label_207 - label_206: - li $v0 4 - la $a0 data_63 - syscall - li $v0 10 - syscall - label_207: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - la $t0 data_64 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_208 - j label_209 - label_208: - li $v0 4 - la $a0 data_65 - syscall - li $v0 10 - syscall - label_209: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_210 - j label_211 - label_210: - li $v0 4 - la $a0 data_66 - syscall - li $v0 10 - syscall - label_211: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - la $t0 data_67 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_212 - j label_213 - label_212: - li $v0 4 - la $a0 data_68 - syscall - li $v0 10 - syscall - label_213: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 92 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/book_list.mips b/tests/codegen/book_list.mips index 10b56bf55..e69de29bb 100644 --- a/tests/codegen/book_list.mips +++ b/tests/codegen/book_list.mips @@ -1,2864 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "Book" -.word 0 -data_7: .asciiz "Article" -.word 0 -data_8: .asciiz "BookList" -.word 0 -data_9: .asciiz "Cons" -.word 0 -data_10: .asciiz "Nil" -.word 0 -data_11: .asciiz "Main" -.word 0 -data_12: .asciiz " -" -.word 0 -data_13: .asciiz "" -.word 0 -data_14: .asciiz "Abort called from class " -.word 0 -data_15: .asciiz "Substring out of range" -.word 0 -data_16: .asciiz "\n" -.word 0 -data_17: .asciiz "title: " -.word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_21: .asciiz "\n" -.word 0 -data_22: .asciiz "author: " -.word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_28: .asciiz "\n" -.word 0 -data_29: .asciiz "periodical: " -.word 0 -data_30: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_31: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_33: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_34: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_36: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_37: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_38: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_39: .asciiz "RuntimeError: void in switch case" -.word 0 -data_40: .asciiz "RuntimeError: Case statement without a match branch" -.word 0 -data_41: .asciiz "- dynamic type was Article -\n" -.word 0 -data_42: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_43: .asciiz "- dynamic type was Book -\n" -.word 0 -data_44: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_45: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_46: .asciiz "Compilers, Principles, Techniques, and Tools" -.word 0 -data_47: .asciiz "Aho, Sethi, and Ullman" -.word 0 -data_48: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_49: .asciiz "The Top 100 CD_ROMs" -.word 0 -data_50: .asciiz "Ulanoff" -.word 0 -data_51: .asciiz "PC Magazine" -.word 0 -data_52: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_53: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_54: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_55: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 - .word data_10 - .word data_11 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype - .word type_10_prototype - .word type_11_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_initBook_at_Book - .word function_print_at_Book - .word __init_attr_at_Book - .word __init_at_Book - -type_6_prototype: - .word 5 - .word 6 - .word type_6_dispatch - .word 0 - .word 0 - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_initBook_at_Book - .word function_print_at_Article - .word function_initArticle_at_Article - .word __init_attr_at_Article - .word __init_at_Article - -type_7_prototype: - .word 6 - .word 7 - .word type_7_dispatch - .word 0 - .word 0 - .word 0 - .word -1 - - -type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_BookList - .word function_cdr_at_BookList - .word function_cons_at_BookList - .word function_isNil_at_BookList - .word function_print_list_at_BookList - .word __init_attr_at_BookList - .word __init_at_BookList - -type_8_prototype: - .word 7 - .word 4 - .word type_8_dispatch - .word -1 - - -type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_Cons - .word function_cdr_at_Cons - .word function_cons_at_BookList - .word function_isNil_at_Cons - .word function_print_list_at_Cons - .word function_init_at_Cons - .word __init_attr_at_Cons - .word __init_at_Cons - -type_9_prototype: - .word 8 - .word 6 - .word type_9_dispatch - .word 0 - .word 0 - .word -1 - - -type_10_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_BookList - .word function_cdr_at_BookList - .word function_cons_at_BookList - .word function_isNil_at_Nil - .word function_print_list_at_Nil - .word __init_attr_at_Nil - .word __init_at_Nil - -type_10_prototype: - .word 9 - .word 4 - .word type_10_dispatch - .word -1 - - -type_11_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_11_prototype: - .word 10 - .word 5 - .word type_11_dispatch - .word 0 - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_14 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_12 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Book: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - la $t0 data_13 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 16($t0) - la $t0 data_13 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_initBook_at_Book: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_Book: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -88 - la $t0 data_16 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -84($fp) - la $t0 data_17 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -68($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - la $t0 data_21 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - la $t0 data_22 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_10: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_12: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_14: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 88 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Book: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Book - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Article: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Book - addi $sp $sp 4 - sw $v0 -16($fp) - la $t0 data_13 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 20($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_initArticle_at_Article: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 12($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_16: - lw $t0 12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 8($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 12($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - lw $v0 12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_Article: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -60 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_18: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_print_at_Book - addi $sp $sp 4 - sw $v0 -52($fp) - la $t0 data_28 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - la $t0 data_29 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_20: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_22: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_24: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 60 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Article: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Article - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_25 - j label_26 - label_25: - li $v0 4 - la $a0 data_33 - syscall - li $v0 10 - syscall - label_26: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cons_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -24($fp) - lw $t0 -24($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_34 - syscall - li $v0 10 - syscall - label_28: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_car_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_29 - j label_30 - label_29: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_30: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - jal __init_at_Book - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cdr_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_31 - j label_32 - label_31: - li $v0 4 - la $a0 data_36 - syscall - li $v0 10 - syscall - label_32: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - jal __init_at_BookList - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_list_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_33 - j label_34 - label_33: - li $v0 4 - la $a0 data_37 - syscall - li $v0 10 - syscall - label_34: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_BookList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_BookList - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_BookList - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_car_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cdr_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_list_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -84 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_35 - j label_36 - label_35: - li $v0 4 - la $a0 data_38 - syscall - li $v0 10 - syscall - label_36: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -80($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_37 - j label_38 - label_37: - li $v0 4 - la $a0 data_39 - syscall - li $v0 10 - syscall - label_38: - la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -60($fp) - lw $t0 -60($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_39 - la $t0 types_table - addi $t0 $t0 20 - lw $t0 0($t0) - sw $t0 -60($fp) - lw $t0 -60($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_42 - li $v0 4 - la $a0 data_40 - syscall - li $v0 10 - syscall - label_39: - lw $t0 -68($fp) - sw $t0 -56($fp) - la $t0 data_41 - sw $t0 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_40 - j label_41 - label_40: - li $v0 4 - la $a0 data_42 - syscall - li $v0 10 - syscall - label_41: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -84($fp) - j label_45 - label_42: - lw $t0 -68($fp) - sw $t0 -36($fp) - la $t0 data_43 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_44 - syscall - li $v0 10 - syscall - label_44: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -84($fp) - j label_45 - label_45: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_46 - j label_47 - label_46: - li $v0 4 - la $a0 data_45 - syscall - li $v0 10 - syscall - label_47: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 84 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Cons - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_BookList - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_list_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 9 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Nil - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -104 - la $t0 data_46 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -100($fp) - la $t0 data_47 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - jal __init_at_Book - sw $v0 -88($fp) - lw $t0 -88($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_48 - j label_49 - label_48: - li $v0 4 - la $a0 data_48 - syscall - li $v0 10 - syscall - label_49: - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -108($fp) - la $t0 data_49 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - la $t0 data_50 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - la $t0 data_51 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - jal __init_at_Article - sw $v0 -48($fp) - lw $t0 -48($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_50 - j label_51 - label_50: - li $v0 4 - la $a0 data_52 - syscall - li $v0 10 - syscall - label_51: - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 16 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -76($fp) - jal __init_at_Nil - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_52 - j label_53 - label_52: - li $v0 4 - la $a0 data_53 - syscall - li $v0 10 - syscall - label_53: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_54 - j label_55 - label_54: - li $v0 4 - la $a0 data_54 - syscall - li $v0 10 - syscall - label_55: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_56 - j label_57 - label_56: - li $v0 4 - la $a0 data_55 - syscall - li $v0 10 - syscall - label_57: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 104 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 10 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/cells.mips b/tests/codegen/cells.mips index e10bcfdf6..e69de29bb 100644 --- a/tests/codegen/cells.mips +++ b/tests/codegen/cells.mips @@ -1,2984 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "CellularAutomaton" -.word 0 -data_7: .asciiz "Main" -.word 0 -data_8: .asciiz " -" -.word 0 -data_9: .asciiz "" -.word 0 -data_10: .asciiz "Abort called from class " -.word 0 -data_11: .asciiz "Substring out of range" -.word 0 -data_12: .asciiz "\n" -.word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_24: .asciiz "X" -.word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_26: .asciiz "X" -.word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_28: .asciiz "X" -.word 0 -data_29: .asciiz "." -.word 0 -data_30: .asciiz "X" -.word 0 -data_31: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_33: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_34: .asciiz " X " -.word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_36: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_37: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_38: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_cell_at_CellularAutomaton - .word function_cell_at_next_evolution_at_CellularAutomaton - .word function_cell_left_neighbor_at_CellularAutomaton - .word function_cell_right_neighbor_at_CellularAutomaton - .word function_evolve_at_CellularAutomaton - .word function_init_at_CellularAutomaton - .word function_num_cells_at_CellularAutomaton - .word function_print_at_CellularAutomaton - .word __init_attr_at_CellularAutomaton - .word __init_at_CellularAutomaton - -type_6_prototype: - .word 5 - .word 5 - .word type_6_dispatch - .word 0 - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_7_prototype: - .word 6 - .word 5 - .word type_7_dispatch - .word 0 - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_10 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_8 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_11 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - la $t0 data_9 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_init_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - la $t0 data_12 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_4: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_6: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_num_cells_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_8: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cell_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_10: - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cell_left_neighbor_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -116 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -100($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -96($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -92($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -88($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_11 - lw $t0 -100($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_12 - lw $t0 -100($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_13 - lw $t0 0($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - j label_14 - label_11: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - j label_14 - label_12: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - move $a0 $t0 - lw $t0 -104($fp) - move $a1 $t0 - jal equal_str - sw $v0 -80($fp) - j label_14 - label_13: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - j label_14 - label_14: - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_17 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - sub $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_16: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -120($fp) - j label_22 - label_17: - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_18 - j label_19 - label_18: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_19: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - sub $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_20 - j label_21 - label_20: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_21: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -120($fp) - label_22: - lw $v0 -120($fp) - addi $sp $sp 116 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cell_right_neighbor_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -116 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_24: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - sub $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -100($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -96($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -92($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -88($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_25 - lw $t0 -100($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_26 - lw $t0 -100($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_27 - lw $t0 0($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - j label_28 - label_25: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - j label_28 - label_26: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - move $a0 $t0 - lw $t0 -104($fp) - move $a1 $t0 - jal equal_str - sw $v0 -80($fp) - j label_28 - label_27: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - j label_28 - label_28: - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_31 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_29 - j label_30 - label_29: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_30: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -120($fp) - j label_34 - label_31: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_32 - j label_33 - label_32: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_33: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -120($fp) - label_34: - lw $v0 -120($fp) - addi $sp $sp 116 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cell_at_next_evolution_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -304 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -188($fp) - lw $t0 -188($fp) - bne $t0 $zero label_35 - j label_36 - label_35: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_36: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -184($fp) - la $t0 data_24 - sw $t0 -180($fp) - lw $t0 -180($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -176($fp) - lw $t0 -184($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -212($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -208($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -204($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -200($fp) - lw $t0 -212($fp) - lw $t1 -208($fp) - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_37 - lw $t0 -212($fp) - lw $t1 -204($fp) - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_38 - lw $t0 -212($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_39 - lw $t0 -184($fp) - lw $t1 -176($fp) - seq $t0 $t0 $t1 - sw $t0 -192($fp) - j label_40 - label_37: - lw $t0 -184($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -192($fp) - j label_40 - label_38: - lw $t0 -184($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - move $a0 $t0 - lw $t0 -216($fp) - move $a1 $t0 - jal equal_str - sw $v0 -192($fp) - j label_40 - label_39: - lw $t0 -184($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -192($fp) - j label_40 - label_40: - lw $t0 -192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -224($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_41 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -172($fp) - lw $t0 -172($fp) - sw $t0 -232($fp) - j label_42 - label_41: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 -168($fp) - sw $t0 -232($fp) - label_42: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_44: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -116($fp) - la $t0 data_26 - sw $t0 -112($fp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -116($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_45 - lw $t0 -144($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_46 - lw $t0 -144($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_47 - lw $t0 -116($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_48 - label_45: - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_48 - label_46: - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - move $a0 $t0 - lw $t0 -148($fp) - move $a1 $t0 - jal equal_str - sw $v0 -124($fp) - j label_48 - label_47: - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_48 - label_48: - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_49 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - sw $t0 -164($fp) - j label_50 - label_49: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -164($fp) - label_50: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - add $t0 $t0 $t1 - sw $t0 -236($fp) - lw $t0 -236($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -248($fp) - lw $t0 -248($fp) - lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_51 - j label_52 - label_51: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_52: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -48($fp) - la $t0 data_28 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -48($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -76($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -72($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -68($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -64($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_53 - lw $t0 -76($fp) - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_54 - lw $t0 -76($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_55 - lw $t0 -48($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - j label_56 - label_53: - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -40($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - j label_56 - label_54: - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -40($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - move $a0 $t0 - lw $t0 -80($fp) - move $a1 $t0 - jal equal_str - sw $v0 -56($fp) - j label_56 - label_55: - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -40($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - j label_56 - label_56: - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_57 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -96($fp) - j label_58 - label_57: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -96($fp) - label_58: - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -260($fp) - lw $t1 -256($fp) - add $t0 $t0 $t1 - sw $t0 -252($fp) - lw $t0 -252($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -264($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -264($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -288($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -284($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -280($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -276($fp) - lw $t0 -288($fp) - lw $t1 -284($fp) - seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_59 - lw $t0 -288($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_60 - lw $t0 -288($fp) - lw $t1 -276($fp) - seq $t0 $t0 $t1 - sw $t0 -272($fp) - lw $t0 -272($fp) - bne $t0 $zero label_61 - lw $t0 -264($fp) - lw $t1 -28($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_62 - label_59: - lw $t0 -264($fp) - lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_62 - label_60: - lw $t0 -264($fp) - lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - move $a0 $t0 - lw $t0 -292($fp) - move $a1 $t0 - jal equal_str - sw $v0 -268($fp) - j label_62 - label_61: - lw $t0 -264($fp) - lw $t1 12($t0) - sw $t1 -296($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -296($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - j label_62 - label_62: - lw $t0 -268($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -300($fp) - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_63 - la $t0 data_29 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -308($fp) - j label_64 - label_63: - la $t0 data_30 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -308($fp) - label_64: - lw $v0 -308($fp) - addi $sp $sp 304 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_evolve_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -80 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_65 - j label_66 - label_65: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_66: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -80($fp) - la $t0 data_9 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - label_67: - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -80($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - slt $t1 $t0 $t1 - sw $t1 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_68 - j label_73 - label_68: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_69 - j label_70 - label_69: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_70: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_71 - j label_72 - label_71: - li $v0 4 - la $a0 data_33 - syscall - li $v0 10 - syscall - label_72: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -68($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -84($fp) - j label_67 - label_73: - lw $t0 -68($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $v0 0($fp) - addi $sp $sp 80 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_CellularAutomaton - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -100 - la $t0 data_34 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -100($fp) - jal __init_at_CellularAutomaton - sw $v0 -96($fp) - lw $t0 -96($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_74 - j label_75 - label_74: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_75: - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_76 - j label_77 - label_76: - li $v0 4 - la $a0 data_36 - syscall - li $v0 10 - syscall - label_77: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -80($fp) - li $t0 20 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -76($fp) - label_78: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - slt $t1 $t0 $t1 - sw $t1 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_79 - j label_84 - label_79: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_80 - j label_81 - label_80: - li $v0 4 - la $a0 data_37 - syscall - li $v0 10 - syscall - label_81: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_82 - j label_83 - label_82: - li $v0 4 - la $a0 data_38 - syscall - li $v0 10 - syscall - label_83: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - sub $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -76($fp) - j label_78 - label_84: - lw $v0 0($fp) - addi $sp $sp 100 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/complex.mips b/tests/codegen/complex.mips index e513494e6..e69de29bb 100644 --- a/tests/codegen/complex.mips +++ b/tests/codegen/complex.mips @@ -1,2632 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "Main" -.word 0 -data_7: .asciiz "Complex" -.word 0 -data_8: .asciiz " -" -.word 0 -data_9: .asciiz "" -.word 0 -data_10: .asciiz "Abort called from class " -.word 0 -data_11: .asciiz "Substring out of range" -.word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_16: .asciiz "=(\n" -.word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_18: .asciiz "=)\n" -.word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_20: .asciiz "I" -.word 0 -data_21: .asciiz "+" -.word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_init_at_Complex - .word function_print_at_Complex - .word function_reflect_0_at_Complex - .word function_reflect_X_at_Complex - .word function_reflect_Y_at_Complex - .word __init_attr_at_Complex - .word __init_at_Complex - -type_7_prototype: - .word 6 - .word 6 - .word type_7_dispatch - .word 0 - .word 0 - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_10 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_8 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_11 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -124 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -128($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -124($fp) - jal __init_at_Complex - sw $v0 -120($fp) - lw $t0 -120($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_4: - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -132($fp) - lw $t0 -132($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -132($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_10: - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -52($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -88($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -80($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -76($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_11 - lw $t0 -88($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_12 - lw $t0 -88($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_13 - lw $t0 -52($fp) - lw $t1 -44($fp) - seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_14 - label_11: - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_14 - label_12: - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - move $a0 $t0 - lw $t0 -92($fp) - move $a1 $t0 - jal equal_str - sw $v0 -68($fp) - j label_14 - label_13: - lw $t0 -52($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -68($fp) - j label_14 - label_14: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_17 - la $t0 data_16 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_16: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -108($fp) - j label_20 - label_17: - la $t0 data_18 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_18 - j label_19 - label_18: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_19: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -108($fp) - label_20: - lw $v0 -108($fp) - addi $sp $sp 124 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_init_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -80 - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -68($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -64($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -60($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -56($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_21 - lw $t0 -68($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_22 - lw $t0 -68($fp) - lw $t1 -56($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_23 - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 4($fp) - seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_24 - label_21: - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_24 - label_22: - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - move $a0 $t0 - lw $t0 -72($fp) - move $a1 $t0 - jal equal_str - sw $v0 -48($fp) - j label_24 - label_23: - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_24 - label_24: - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -32($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -28($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -24($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -20($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_25 - lw $t0 -32($fp) - lw $t1 -24($fp) - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_26 - lw $t0 -32($fp) - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_27 - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($fp) - seq $t0 $t0 $t1 - sw $t0 -12($fp) - j label_28 - label_25: - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -12($fp) - j label_28 - label_26: - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - move $a0 $t0 - lw $t0 -36($fp) - move $a1 $t0 - jal equal_str - sw $v0 -12($fp) - j label_28 - label_27: - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -12($fp) - j label_28 - label_28: - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -44($fp) - lw $v0 8($fp) - addi $sp $sp 80 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -112 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_29 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_30 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_31 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_32 - label_29: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_32 - label_30: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_32 - label_31: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_32 - label_32: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_41 - la $t0 data_20 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - la $t0 data_21 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_33 - j label_34 - label_33: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_34: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_35 - j label_36 - label_35: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_36: - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_37 - j label_38 - label_37: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_38: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_39 - j label_40 - label_39: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_40: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -112($fp) - j label_44 - label_41: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_42 - j label_43 - label_42: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_43: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -112($fp) - label_44: - lw $v0 -112($fp) - addi $sp $sp 112 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_reflect_0_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -104 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_45 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_46 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_47 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_48 - label_45: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_48 - label_46: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_48 - label_47: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_48 - label_48: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -44($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -36($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -32($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_49 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_50 - lw $t0 -44($fp) - lw $t1 -32($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_51 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_52 - label_49: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_52 - label_50: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - move $a0 $t0 - lw $t0 -48($fp) - move $a1 $t0 - jal equal_str - sw $v0 -24($fp) - j label_52 - label_51: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_52 - label_52: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $v0 0($fp) - addi $sp $sp 104 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_reflect_X_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -44($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -36($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -32($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_53 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_54 - lw $t0 -44($fp) - lw $t1 -32($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_55 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_56 - label_53: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_56 - label_54: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - move $a0 $t0 - lw $t0 -48($fp) - move $a1 $t0 - jal equal_str - sw $v0 -24($fp) - j label_56 - label_55: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_56 - label_56: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $v0 0($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_reflect_Y_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -44($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -36($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -32($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_57 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_58 - lw $t0 -44($fp) - lw $t1 -32($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_59 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_60 - label_57: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_60 - label_58: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - move $a0 $t0 - lw $t0 -48($fp) - move $a1 $t0 - jal equal_str - sw $v0 -24($fp) - j label_60 - label_59: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_60 - label_60: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $v0 0($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Complex - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/fib.mips b/tests/codegen/fib.mips index ce5371718..e69de29bb 100644 --- a/tests/codegen/fib.mips +++ b/tests/codegen/fib.mips @@ -1,1449 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "Main" -.word 0 -data_7: .asciiz " -" -.word 0 -data_8: .asciiz "" -.word 0 -data_9: .asciiz "Abort called from class " -.word 0 -data_10: .asciiz "Substring out of range" -.word 0 -data_11: .asciiz "Enter n to find nth fibonacci number!\n" -.word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_16: .asciiz "\n" -.word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_fib_at_Main - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_7 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_10 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - la $t0 data_11 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_6: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_8: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_10: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - la $t0 data_16 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_12: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_fib_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -116 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -120($fp) - sw $t0 -124($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -116($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - sw $t0 -108($fp) - label_13: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -72($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -68($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -64($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -60($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_14 - lw $t0 -72($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_15 - lw $t0 -72($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_16 - lw $t0 0($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_17 - label_14: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_17 - label_15: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - move $a0 $t0 - lw $t0 -76($fp) - move $a1 $t0 - jal equal_str - sw $v0 -52($fp) - j label_17 - label_16: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_17 - label_17: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - xori $t0 $t0 1 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_18 - j label_19 - label_18: - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - add $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -108($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - sub $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 0($fp) - lw $t0 -124($fp) - sw $t0 -116($fp) - lw $t0 -108($fp) - sw $t0 -124($fp) - j label_13 - label_19: - lw $v0 -108($fp) - addi $sp $sp 116 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/graph.mips b/tests/codegen/graph.mips index 68e4d3c63..e69de29bb 100644 --- a/tests/codegen/graph.mips +++ b/tests/codegen/graph.mips @@ -1,7494 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "Graph" -.word 0 -data_7: .asciiz "Vertice" -.word 0 -data_8: .asciiz "Edge" -.word 0 -data_9: .asciiz "EList" -.word 0 -data_10: .asciiz "ECons" -.word 0 -data_11: .asciiz "VList" -.word 0 -data_12: .asciiz "VCons" -.word 0 -data_13: .asciiz "Parse" -.word 0 -data_14: .asciiz "Main" -.word 0 -data_15: .asciiz "BoolOp" -.word 0 -data_16: .asciiz " -" -.word 0 -data_17: .asciiz "" -.word 0 -data_18: .asciiz "Abort called from class " -.word 0 -data_19: .asciiz "Substring out of range" -.word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_28: .asciiz " (" -.word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_30: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_31: .asciiz "," -.word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_33: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_34: .asciiz ")" -.word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_36: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_37: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_38: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_39: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_40: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_41: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_42: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_43: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_44: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_45: .asciiz "\n" -.word 0 -data_46: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_47: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_48: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_49: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_50: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_51: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_52: .asciiz "\n" -.word 0 -data_53: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_54: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_55: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_56: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_57: .asciiz "\n" -.word 0 -data_58: .asciiz "" -.word 0 -data_59: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_60: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_61: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_62: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_63: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_64: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_65: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_66: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_67: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_68: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_69: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_70: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_71: .asciiz "0" -.word 0 -data_72: .asciiz "1" -.word 0 -data_73: .asciiz "2" -.word 0 -data_74: .asciiz "3" -.word 0 -data_75: .asciiz "4" -.word 0 -data_76: .asciiz "5" -.word 0 -data_77: .asciiz "6" -.word 0 -data_78: .asciiz "7" -.word 0 -data_79: .asciiz "8" -.word 0 -data_80: .asciiz "9" -.word 0 -data_81: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_82: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_83: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_84: .asciiz "-" -.word 0 -data_85: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_86: .asciiz " " -.word 0 -data_87: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_88: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_89: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_90: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_91: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_92: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_93: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_94: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_95: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_96: .asciiz " " -.word 0 -data_97: .asciiz "," -.word 0 -data_98: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_99: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_100: .asciiz "" -.word 0 -data_101: .asciiz "" -.word 0 -data_102: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_103: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_104: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_105: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_106: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_107: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_108: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 - .word data_10 - .word data_11 - .word data_12 - .word data_13 - .word data_14 - .word data_15 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype - .word type_10_prototype - .word type_11_prototype - .word type_12_prototype - .word type_13_prototype - .word type_14_prototype - .word type_15_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_add_vertice_at_Graph - .word function_print_E_at_Graph - .word function_print_V_at_Graph - .word __init_attr_at_Graph - .word __init_at_Graph - -type_6_prototype: - .word 5 - .word 6 - .word type_6_dispatch - .word 0 - .word 0 - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_add_out_at_Vertice - .word function_init_at_Vertice - .word function_number_at_Vertice - .word function_outgoing_at_Vertice - .word function_print_at_Vertice - .word __init_attr_at_Vertice - .word __init_at_Vertice - -type_7_prototype: - .word 6 - .word 6 - .word type_7_dispatch - .word 0 - .word 0 - .word -1 - - -type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_init_at_Edge - .word function_print_at_Edge - .word __init_attr_at_Edge - .word __init_at_Edge - -type_8_prototype: - .word 7 - .word 7 - .word type_8_dispatch - .word 0 - .word 0 - .word 0 - .word -1 - - -type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_append_at_EList - .word function_cons_at_EList - .word function_head_at_EList - .word function_isNil_at_EList - .word function_print_at_EList - .word function_tail_at_EList - .word __init_attr_at_EList - .word __init_at_EList - -type_9_prototype: - .word 8 - .word 5 - .word type_9_dispatch - .word 0 - .word -1 - - -type_10_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_append_at_EList - .word function_cons_at_EList - .word function_head_at_ECons - .word function_isNil_at_ECons - .word function_print_at_ECons - .word function_tail_at_ECons - .word function_init_at_ECons - .word __init_attr_at_ECons - .word __init_at_ECons - -type_10_prototype: - .word 9 - .word 6 - .word type_10_dispatch - .word 0 - .word 0 - .word -1 - - -type_11_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_cons_at_VList - .word function_head_at_VList - .word function_isNil_at_VList - .word function_print_at_VList - .word function_tail_at_VList - .word __init_attr_at_VList - .word __init_at_VList - -type_11_prototype: - .word 10 - .word 5 - .word type_11_dispatch - .word 0 - .word -1 - - -type_12_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_cons_at_VList - .word function_head_at_VCons - .word function_isNil_at_VCons - .word function_print_at_VCons - .word function_tail_at_VCons - .word function_init_at_VCons - .word __init_attr_at_VCons - .word __init_at_VCons - -type_12_prototype: - .word 11 - .word 6 - .word type_12_dispatch - .word 0 - .word 0 - .word -1 - - -type_13_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_a2i_at_Parse - .word function_a2i_aux_at_Parse - .word function_c2i_at_Parse - .word function_parse_line_at_Parse - .word function_read_input_at_Parse - .word __init_attr_at_Parse - .word __init_at_Parse - -type_13_prototype: - .word 12 - .word 6 - .word type_13_dispatch - .word 0 - .word 0 - .word -1 - - -type_14_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_a2i_at_Parse - .word function_a2i_aux_at_Parse - .word function_c2i_at_Parse - .word function_parse_line_at_Parse - .word function_read_input_at_Parse - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_14_prototype: - .word 13 - .word 7 - .word type_14_dispatch - .word 0 - .word 0 - .word 0 - .word -1 - - -type_15_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_and_at_BoolOp - .word function_or_at_BoolOp - .word __init_attr_at_BoolOp - .word __init_at_BoolOp - -type_15_prototype: - .word 14 - .word 4 - .word type_15_dispatch - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_18 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_16 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Graph: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - jal __init_at_VList - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -24($fp) - lw $t0 0($fp) - lw $t1 -24($fp) - sw $t1 16($t0) - jal __init_at_EList - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_add_vertice_at_Graph: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -32 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_8: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 32 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_E_at_Graph: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_10: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_V_at_Graph: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_12: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Graph: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Graph - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 12($t0) - jal __init_at_EList - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_outgoing_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_number_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_init_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $v0 4($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_add_out_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_14: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 4($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_16: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_18: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Vertice: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Vertice - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Edge: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 12($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 16($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 20($t0) - lw $v0 0($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_init_at_Edge: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 8($fp) - lw $t1 12($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 4($fp) - lw $t1 12($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 12($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - lw $v0 12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_Edge: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -84 - la $t0 data_28 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_20: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -68($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_22: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - la $t0 data_31 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_24: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_25 - j label_26 - label_25: - li $v0 4 - la $a0 data_33 - syscall - li $v0 10 - syscall - label_26: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - la $t0 data_34 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_28: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_29 - j label_30 - label_29: - li $v0 4 - la $a0 data_36 - syscall - li $v0 10 - syscall - label_30: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 84 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Edge: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Edge - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_head_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_31 - j label_32 - label_31: - li $v0 4 - la $a0 data_37 - syscall - li $v0 10 - syscall - label_32: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_tail_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_33 - j label_34 - label_33: - li $v0 4 - la $a0 data_38 - syscall - li $v0 10 - syscall - label_34: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cons_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - jal __init_at_ECons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_35 - j label_36 - label_35: - li $v0 4 - la $a0 data_39 - syscall - li $v0 10 - syscall - label_36: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_append_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -52 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_37 - j label_38 - label_37: - li $v0 4 - la $a0 data_40 - syscall - li $v0 10 - syscall - label_38: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_47 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_39 - j label_40 - label_39: - li $v0 4 - la $a0 data_41 - syscall - li $v0 10 - syscall - label_40: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_41 - j label_42 - label_41: - li $v0 4 - la $a0 data_42 - syscall - li $v0 10 - syscall - label_42: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_43 - syscall - li $v0 10 - syscall - label_44: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_45 - j label_46 - label_45: - li $v0 4 - la $a0 data_44 - syscall - li $v0 10 - syscall - label_46: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -56($fp) - j label_48 - label_47: - lw $t0 0($fp) - sw $t0 -56($fp) - label_48: - lw $v0 -56($fp) - addi $sp $sp 52 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - la $t0 data_45 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_49 - j label_50 - label_49: - li $v0 4 - la $a0 data_46 - syscall - li $v0 10 - syscall - label_50: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_EList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_EList - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_EList - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_head_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_tail_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_init_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_51 - j label_52 - label_51: - li $v0 4 - la $a0 data_47 - syscall - li $v0 10 - syscall - label_52: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_53 - j label_54 - label_53: - li $v0 4 - la $a0 data_48 - syscall - li $v0 10 - syscall - label_54: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_ECons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 9 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_ECons - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_head_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_55 - j label_56 - label_55: - li $v0 4 - la $a0 data_49 - syscall - li $v0 10 - syscall - label_56: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_tail_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_57 - j label_58 - label_57: - li $v0 4 - la $a0 data_50 - syscall - li $v0 10 - syscall - label_58: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cons_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - jal __init_at_VCons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_59 - j label_60 - label_59: - li $v0 4 - la $a0 data_51 - syscall - li $v0 10 - syscall - label_60: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - la $t0 data_52 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_61 - j label_62 - label_61: - li $v0 4 - la $a0 data_53 - syscall - li $v0 10 - syscall - label_62: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_VList: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 10 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_VList - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_VList - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_head_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_tail_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_init_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_63 - j label_64 - label_63: - li $v0 4 - la $a0 data_54 - syscall - li $v0 10 - syscall - label_64: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_65 - j label_66 - label_65: - li $v0 4 - la $a0 data_55 - syscall - li $v0 10 - syscall - label_66: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_VCons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 11 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_VCons - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - jal __init_at_BoolOp - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 12($t0) - la $t0 data_17 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_read_input_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -176 - jal __init_at_Graph - sw $v0 -172($fp) - lw $t0 -172($fp) - sw $t0 -176($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_67 - j label_68 - label_67: - li $v0 4 - la $a0 data_56 - syscall - li $v0 10 - syscall - label_68: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -160($fp) - sw $t0 -168($fp) - label_69: - la $t0 data_57 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -168($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -128($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -124($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -120($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -128($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_70 - lw $t0 -128($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_71 - lw $t0 -128($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_72 - lw $t0 -168($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_73 - label_70: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_73 - label_71: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - move $a0 $t0 - lw $t0 -132($fp) - move $a1 $t0 - jal equal_str - sw $v0 -108($fp) - j label_73 - label_72: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - j label_73 - label_73: - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -148($fp) - xori $t0 $t0 1 - sw $t0 -144($fp) - lw $t0 -144($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -152($fp) - la $t0 data_58 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -168($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -72($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -68($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -64($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -60($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_74 - lw $t0 -72($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_75 - lw $t0 -72($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_76 - lw $t0 -168($fp) - lw $t1 -44($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_77 - label_74: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_77 - label_75: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - move $a0 $t0 - lw $t0 -76($fp) - move $a1 $t0 - jal equal_str - sw $v0 -52($fp) - j label_77 - label_76: - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_77 - label_77: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - xori $t0 $t0 1 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_78 - j label_79 - label_78: - li $v0 4 - la $a0 data_59 - syscall - li $v0 10 - syscall - label_79: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -156($fp) - bne $t0 $zero label_80 - j label_87 - label_80: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_81 - j label_82 - label_81: - li $v0 4 - la $a0 data_60 - syscall - li $v0 10 - syscall - label_82: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -176($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_83 - j label_84 - label_83: - li $v0 4 - la $a0 data_61 - syscall - li $v0 10 - syscall - label_84: - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_85 - j label_86 - label_85: - li $v0 4 - la $a0 data_62 - syscall - li $v0 10 - syscall - label_86: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -168($fp) - j label_69 - label_87: - lw $v0 -176($fp) - addi $sp $sp 176 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_parse_line_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -148 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_88 - j label_89 - label_88: - li $v0 4 - la $a0 data_63 - syscall - li $v0 10 - syscall - label_89: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -140($fp) - jal __init_at_Vertice - sw $v0 -136($fp) - lw $t0 -136($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_90 - j label_91 - label_90: - li $v0 4 - la $a0 data_64 - syscall - li $v0 10 - syscall - label_91: - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -128($fp) - lw $t0 -128($fp) - sw $t0 -148($fp) - label_92: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_93 - j label_94 - label_93: - li $v0 4 - la $a0 data_65 - syscall - li $v0 10 - syscall - label_94: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -68($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -68($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -96($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -92($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -84($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_95 - lw $t0 -96($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_96 - lw $t0 -96($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_97 - lw $t0 -68($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - j label_98 - label_95: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - j label_98 - label_96: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - move $a0 $t0 - lw $t0 -100($fp) - move $a1 $t0 - jal equal_str - sw $v0 -76($fp) - j label_98 - label_97: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - j label_98 - label_98: - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -116($fp) - xori $t0 $t0 1 - sw $t0 -112($fp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_99 - j label_110 - label_99: - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_100 - j label_101 - label_100: - li $v0 4 - la $a0 data_66 - syscall - li $v0 10 - syscall - label_101: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -60($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_102 - j label_103 - label_102: - li $v0 4 - la $a0 data_67 - syscall - li $v0 10 - syscall - label_103: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -48($fp) - lw $t0 -148($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_104 - j label_105 - label_104: - li $v0 4 - la $a0 data_68 - syscall - li $v0 10 - syscall - label_105: - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -32($fp) - jal __init_at_Edge - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_106 - j label_107 - label_106: - li $v0 4 - la $a0 data_69 - syscall - li $v0 10 - syscall - label_107: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 16 - sw $v0 -20($fp) - lw $t0 -148($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_108 - j label_109 - label_108: - li $v0 4 - la $a0 data_70 - syscall - li $v0 10 - syscall - label_109: - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - j label_92 - label_110: - lw $v0 -148($fp) - addi $sp $sp 148 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_c2i_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -580 - la $t0 data_71 - sw $t0 -536($fp) - lw $t0 -536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -532($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -560($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -556($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -552($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -548($fp) - lw $t0 -560($fp) - lw $t1 -556($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_111 - lw $t0 -560($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_112 - lw $t0 -560($fp) - lw $t1 -548($fp) - seq $t0 $t0 $t1 - sw $t0 -544($fp) - lw $t0 -544($fp) - bne $t0 $zero label_113 - lw $t0 0($fp) - lw $t1 -532($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_114 - label_111: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_114 - label_112: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - move $a0 $t0 - lw $t0 -564($fp) - move $a1 $t0 - jal equal_str - sw $v0 -540($fp) - j label_114 - label_113: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -568($fp) - lw $t0 -532($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -568($fp) - lw $t1 -564($fp) - seq $t0 $t0 $t1 - sw $t0 -540($fp) - j label_114 - label_114: - lw $t0 -540($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -572($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -576($fp) - lw $t0 -576($fp) - bne $t0 $zero label_171 - la $t0 data_72 - sw $t0 -484($fp) - lw $t0 -484($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -480($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -508($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -504($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -500($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -496($fp) - lw $t0 -508($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_115 - lw $t0 -508($fp) - lw $t1 -500($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_116 - lw $t0 -508($fp) - lw $t1 -496($fp) - seq $t0 $t0 $t1 - sw $t0 -492($fp) - lw $t0 -492($fp) - bne $t0 $zero label_117 - lw $t0 0($fp) - lw $t1 -480($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_118 - label_115: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_118 - label_116: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - move $a0 $t0 - lw $t0 -512($fp) - move $a1 $t0 - jal equal_str - sw $v0 -488($fp) - j label_118 - label_117: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -480($fp) - lw $t1 12($t0) - sw $t1 -512($fp) - lw $t0 -516($fp) - lw $t1 -512($fp) - seq $t0 $t0 $t1 - sw $t0 -488($fp) - j label_118 - label_118: - lw $t0 -488($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -520($fp) - lw $t0 -520($fp) - lw $t1 12($t0) - sw $t1 -524($fp) - lw $t0 -524($fp) - bne $t0 $zero label_169 - la $t0 data_73 - sw $t0 -432($fp) - lw $t0 -432($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -456($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -452($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -448($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -444($fp) - lw $t0 -456($fp) - lw $t1 -452($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_119 - lw $t0 -456($fp) - lw $t1 -448($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_120 - lw $t0 -456($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_121 - lw $t0 0($fp) - lw $t1 -428($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_122 - label_119: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_122 - label_120: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - move $a0 $t0 - lw $t0 -460($fp) - move $a1 $t0 - jal equal_str - sw $v0 -436($fp) - j label_122 - label_121: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -464($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - j label_122 - label_122: - lw $t0 -436($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -468($fp) - lw $t0 -468($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -472($fp) - bne $t0 $zero label_167 - la $t0 data_74 - sw $t0 -380($fp) - lw $t0 -380($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -376($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -404($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -400($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -396($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -392($fp) - lw $t0 -404($fp) - lw $t1 -400($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_123 - lw $t0 -404($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_124 - lw $t0 -404($fp) - lw $t1 -392($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_125 - lw $t0 0($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_126 - label_123: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_126 - label_124: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - move $a0 $t0 - lw $t0 -408($fp) - move $a1 $t0 - jal equal_str - sw $v0 -384($fp) - j label_126 - label_125: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -376($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_126 - label_126: - lw $t0 -384($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -416($fp) - lw $t0 -416($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -420($fp) - bne $t0 $zero label_165 - la $t0 data_75 - sw $t0 -328($fp) - lw $t0 -328($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -324($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -352($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -348($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -344($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -340($fp) - lw $t0 -352($fp) - lw $t1 -348($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_127 - lw $t0 -352($fp) - lw $t1 -344($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_128 - lw $t0 -352($fp) - lw $t1 -340($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_129 - lw $t0 0($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_130 - label_127: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_130 - label_128: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - move $a0 $t0 - lw $t0 -356($fp) - move $a1 $t0 - jal equal_str - sw $v0 -332($fp) - j label_130 - label_129: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -324($fp) - lw $t1 12($t0) - sw $t1 -356($fp) - lw $t0 -360($fp) - lw $t1 -356($fp) - seq $t0 $t0 $t1 - sw $t0 -332($fp) - j label_130 - label_130: - lw $t0 -332($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -364($fp) - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -368($fp) - lw $t0 -368($fp) - bne $t0 $zero label_163 - la $t0 data_76 - sw $t0 -276($fp) - lw $t0 -276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -300($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -296($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -292($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -288($fp) - lw $t0 -300($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_131 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_132 - lw $t0 -300($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_133 - lw $t0 0($fp) - lw $t1 -272($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_134 - label_131: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_134 - label_132: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - move $a0 $t0 - lw $t0 -304($fp) - move $a1 $t0 - jal equal_str - sw $v0 -280($fp) - j label_134 - label_133: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_134 - label_134: - lw $t0 -280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -312($fp) - lw $t0 -312($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_161 - la $t0 data_77 - sw $t0 -224($fp) - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -220($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -248($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -244($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -240($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -236($fp) - lw $t0 -248($fp) - lw $t1 -244($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_135 - lw $t0 -248($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_136 - lw $t0 -248($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -232($fp) - lw $t0 -232($fp) - bne $t0 $zero label_137 - lw $t0 0($fp) - lw $t1 -220($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_138 - label_135: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_138 - label_136: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - move $a0 $t0 - lw $t0 -252($fp) - move $a1 $t0 - jal equal_str - sw $v0 -228($fp) - j label_138 - label_137: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -256($fp) - lw $t0 -220($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -256($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - j label_138 - label_138: - lw $t0 -228($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -260($fp) - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -264($fp) - bne $t0 $zero label_159 - la $t0 data_78 - sw $t0 -172($fp) - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -196($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -192($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -184($fp) - lw $t0 -196($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_139 - lw $t0 -196($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_140 - lw $t0 -196($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_141 - lw $t0 0($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_142 - label_139: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_142 - label_140: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - move $a0 $t0 - lw $t0 -200($fp) - move $a1 $t0 - jal equal_str - sw $v0 -176($fp) - j label_142 - label_141: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - j label_142 - label_142: - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -208($fp) - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_157 - la $t0 data_79 - sw $t0 -120($fp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_143 - lw $t0 -144($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_144 - lw $t0 -144($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_145 - lw $t0 0($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_146 - label_143: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_146 - label_144: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - move $a0 $t0 - lw $t0 -148($fp) - move $a1 $t0 - jal equal_str - sw $v0 -124($fp) - j label_146 - label_145: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_146 - label_146: - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_155 - la $t0 data_80 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_147 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_148 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_149 - lw $t0 0($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_150 - label_147: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_150 - label_148: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_150 - label_149: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_150 - label_150: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_153 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_151 - j label_152 - label_151: - li $v0 4 - la $a0 data_81 - syscall - li $v0 10 - syscall - label_152: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -56($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -112($fp) - j label_154 - label_153: - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - sw $t0 -112($fp) - label_154: - lw $t0 -112($fp) - sw $t0 -164($fp) - j label_156 - label_155: - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -164($fp) - label_156: - lw $t0 -164($fp) - sw $t0 -216($fp) - j label_158 - label_157: - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -216($fp) - label_158: - lw $t0 -216($fp) - sw $t0 -268($fp) - j label_160 - label_159: - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -268($fp) - label_160: - lw $t0 -268($fp) - sw $t0 -320($fp) - j label_162 - label_161: - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -320($fp) - label_162: - lw $t0 -320($fp) - sw $t0 -372($fp) - j label_164 - label_163: - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -372($fp) - label_164: - lw $t0 -372($fp) - sw $t0 -424($fp) - j label_166 - label_165: - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -424($fp) - label_166: - lw $t0 -424($fp) - sw $t0 -476($fp) - j label_168 - label_167: - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -476($fp) - label_168: - lw $t0 -476($fp) - sw $t0 -528($fp) - j label_170 - label_169: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -528($fp) - label_170: - lw $t0 -528($fp) - sw $t0 -580($fp) - j label_172 - label_171: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -580($fp) - label_172: - lw $v0 -580($fp) - addi $sp $sp 580 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_a2i_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -320 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -276($fp) - lw $t0 -276($fp) - bne $t0 $zero label_173 - j label_174 - label_173: - li $v0 4 - la $a0 data_82 - syscall - li $v0 10 - syscall - label_174: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -272($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -268($fp) - lw $t0 -272($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -300($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -296($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -292($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -288($fp) - lw $t0 -300($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_175 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_176 - lw $t0 -300($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -284($fp) - lw $t0 -284($fp) - bne $t0 $zero label_177 - lw $t0 -272($fp) - lw $t1 -268($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_178 - label_175: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_178 - label_176: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - move $a0 $t0 - lw $t0 -304($fp) - move $a1 $t0 - jal equal_str - sw $v0 -280($fp) - j label_178 - label_177: - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -308($fp) - lw $t0 -268($fp) - lw $t1 12($t0) - sw $t1 -304($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -280($fp) - j label_178 - label_178: - lw $t0 -280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -312($fp) - lw $t0 -312($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_209 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -220($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_179 - j label_180 - label_179: - li $v0 4 - la $a0 data_83 - syscall - li $v0 10 - syscall - label_180: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -216($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -208($fp) - la $t0 data_84 - sw $t0 -204($fp) - lw $t0 -204($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -200($fp) - lw $t0 -208($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -244($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -240($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -236($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -232($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_181 - lw $t0 -244($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_182 - lw $t0 -244($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_183 - lw $t0 -208($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_184 - label_181: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_184 - label_182: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - move $a0 $t0 - lw $t0 -248($fp) - move $a1 $t0 - jal equal_str - sw $v0 -224($fp) - j label_184 - label_183: - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -248($fp) - lw $t0 -252($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -224($fp) - j label_184 - label_184: - lw $t0 -224($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -260($fp) - lw $t0 -260($fp) - bne $t0 $zero label_201 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_185 - j label_186 - label_185: - li $v0 4 - la $a0 data_85 - syscall - li $v0 10 - syscall - label_186: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -148($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -140($fp) - la $t0 data_86 - sw $t0 -136($fp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 -140($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -176($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -172($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -168($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -164($fp) - lw $t0 -176($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_187 - lw $t0 -176($fp) - lw $t1 -168($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_188 - lw $t0 -176($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_189 - lw $t0 -140($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_190 - label_187: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_190 - label_188: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - move $a0 $t0 - lw $t0 -180($fp) - move $a1 $t0 - jal equal_str - sw $v0 -156($fp) - j label_190 - label_189: - lw $t0 -140($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -156($fp) - j label_190 - label_190: - lw $t0 -156($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -192($fp) - bne $t0 $zero label_193 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_191 - j label_192 - label_191: - li $v0 4 - la $a0 data_87 - syscall - li $v0 10 - syscall - label_192: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -124($fp) - lw $t0 -124($fp) - sw $t0 -196($fp) - j label_200 - label_193: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_194 - j label_195 - label_194: - li $v0 4 - la $a0 data_88 - syscall - li $v0 10 - syscall - label_195: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -112($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - sub $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_196 - j label_197 - label_196: - li $v0 4 - la $a0 data_89 - syscall - li $v0 10 - syscall - label_197: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -84($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_198 - j label_199 - label_198: - li $v0 4 - la $a0 data_90 - syscall - li $v0 10 - syscall - label_199: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -196($fp) - label_200: - lw $t0 -196($fp) - sw $t0 -264($fp) - j label_208 - label_201: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_202 - j label_203 - label_202: - li $v0 4 - la $a0 data_91 - syscall - li $v0 10 - syscall - label_203: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - sub $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_204 - j label_205 - label_204: - li $v0 4 - la $a0 data_92 - syscall - li $v0 10 - syscall - label_205: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -24($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_206 - j label_207 - label_206: - li $v0 4 - la $a0 data_93 - syscall - li $v0 10 - syscall - label_207: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -16($fp) - lw $t0 -16($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -68($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -264($fp) - label_208: - lw $t0 -264($fp) - sw $t0 -320($fp) - j label_210 - label_209: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -320($fp) - label_210: - lw $v0 -320($fp) - addi $sp $sp 320 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_a2i_aux_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -456 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -452($fp) - lw $t0 -452($fp) - sw $t0 -456($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -444($fp) - lw $t0 -444($fp) - bne $t0 $zero label_211 - j label_212 - label_211: - li $v0 4 - la $a0 data_94 - syscall - li $v0 10 - syscall - label_212: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -440($fp) - lw $t0 -440($fp) - sw $t0 -448($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -432($fp) - lw $t0 -432($fp) - sw $t0 -436($fp) - label_213: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -448($fp) - lw $t1 12($t0) - sw $t1 -416($fp) - lw $t0 -420($fp) - lw $t1 -416($fp) - slt $t1 $t0 $t1 - sw $t1 -412($fp) - lw $t0 -412($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -424($fp) - lw $t0 -424($fp) - lw $t1 12($t0) - sw $t1 -428($fp) - lw $t0 -428($fp) - bne $t0 $zero label_214 - j label_247 - label_214: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -404($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -400($fp) - lw $t0 -400($fp) - bne $t0 $zero label_215 - j label_216 - label_215: - li $v0 4 - la $a0 data_95 - syscall - li $v0 10 - syscall - label_216: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -436($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -404($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -396($fp) - lw $t0 -396($fp) - sw $t0 -408($fp) - la $t0 data_96 - sw $t0 -348($fp) - lw $t0 -348($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -344($fp) - lw $t0 -408($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -372($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -368($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -364($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -360($fp) - lw $t0 -372($fp) - lw $t1 -368($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_217 - lw $t0 -372($fp) - lw $t1 -364($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_218 - lw $t0 -372($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -356($fp) - lw $t0 -356($fp) - bne $t0 $zero label_219 - lw $t0 -408($fp) - lw $t1 -344($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_220 - label_217: - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -344($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_220 - label_218: - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -344($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - move $a0 $t0 - lw $t0 -376($fp) - move $a1 $t0 - jal equal_str - sw $v0 -352($fp) - j label_220 - label_219: - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -380($fp) - lw $t0 -344($fp) - lw $t1 12($t0) - sw $t1 -376($fp) - lw $t0 -380($fp) - lw $t1 -376($fp) - seq $t0 $t0 $t1 - sw $t0 -352($fp) - j label_220 - label_220: - lw $t0 -352($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -384($fp) - lw $t0 -384($fp) - lw $t1 12($t0) - sw $t1 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_241 - la $t0 data_97 - sw $t0 -296($fp) - lw $t0 -296($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -292($fp) - lw $t0 -408($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -320($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -316($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -312($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -308($fp) - lw $t0 -320($fp) - lw $t1 -316($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_221 - lw $t0 -320($fp) - lw $t1 -312($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_222 - lw $t0 -320($fp) - lw $t1 -308($fp) - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_223 - lw $t0 -408($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_224 - label_221: - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -292($fp) - lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_224 - label_222: - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -292($fp) - lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - move $a0 $t0 - lw $t0 -324($fp) - move $a1 $t0 - jal equal_str - sw $v0 -300($fp) - j label_224 - label_223: - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -328($fp) - lw $t0 -292($fp) - lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -328($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -300($fp) - j label_224 - label_224: - lw $t0 -300($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -332($fp) - lw $t0 -332($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -336($fp) - bne $t0 $zero label_235 - lw $t0 -456($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -256($fp) - lw $t0 -256($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - mul $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -284($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -252($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -248($fp) - lw $t0 -248($fp) - bne $t0 $zero label_225 - j label_226 - label_225: - li $v0 4 - la $a0 data_98 - syscall - li $v0 10 - syscall - label_226: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -436($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -252($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -244($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -240($fp) - lw $t0 -240($fp) - bne $t0 $zero label_227 - j label_228 - label_227: - li $v0 4 - la $a0 data_99 - syscall - li $v0 10 - syscall - label_228: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -244($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -236($fp) - lw $t0 -236($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - add $t0 $t0 $t1 - sw $t0 -276($fp) - lw $t0 -276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -288($fp) - lw $t0 -288($fp) - sw $t0 -456($fp) - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -228($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 -216($fp) - lw $t1 12($t0) - sw $t1 -224($fp) - lw $t0 -228($fp) - lw $t1 -224($fp) - add $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -232($fp) - lw $t0 -232($fp) - sw $t0 -436($fp) - lw $t0 -436($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -192($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -184($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -180($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_229 - lw $t0 -192($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_230 - lw $t0 -192($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_231 - lw $t0 -436($fp) - lw $t1 -448($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_232 - label_229: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -448($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_232 - label_230: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -448($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - move $a0 $t0 - lw $t0 -196($fp) - move $a1 $t0 - jal equal_str - sw $v0 -172($fp) - j label_232 - label_231: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -448($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_232 - label_232: - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_233 - la $t0 data_100 - sw $t0 -168($fp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - sw $t0 -212($fp) - j label_234 - label_233: - la $t0 data_101 - sw $t0 -160($fp) - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -212($fp) - label_234: - lw $t0 -212($fp) - sw $t0 -340($fp) - j label_240 - label_235: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - add $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_236 - j label_237 - label_236: - li $v0 4 - la $a0 data_102 - syscall - li $v0 10 - syscall - label_237: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - sub $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -124($fp) - lw $t0 -128($fp) - lw $t1 -124($fp) - sub $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_238 - j label_239 - label_238: - li $v0 4 - la $a0 data_103 - syscall - li $v0 10 - syscall - label_239: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -448($fp) - sw $t0 -436($fp) - lw $t0 -436($fp) - sw $t0 -340($fp) - label_240: - lw $t0 -340($fp) - sw $t0 -392($fp) - j label_246 - label_241: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - add $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_242 - j label_243 - label_242: - li $v0 4 - la $a0 data_104 - syscall - li $v0 10 - syscall - label_243: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - sub $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - sub $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_244 - j label_245 - label_244: - li $v0 4 - la $a0 data_105 - syscall - li $v0 10 - syscall - label_245: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -448($fp) - sw $t0 -436($fp) - lw $t0 -436($fp) - sw $t0 -392($fp) - label_246: - j label_213 - label_247: - lw $v0 -456($fp) - addi $sp $sp 456 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Parse: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 12 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Parse - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Parse - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_248 - j label_249 - label_248: - li $v0 4 - la $a0 data_106 - syscall - li $v0 10 - syscall - label_249: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 20($t0) - lw $v0 0($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_250 - j label_251 - label_250: - li $v0 4 - la $a0 data_107 - syscall - li $v0 10 - syscall - label_251: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_252 - j label_253 - label_252: - li $v0 4 - la $a0 data_108 - syscall - li $v0 10 - syscall - label_253: - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 13 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_BoolOp: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_and_at_BoolOp: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_254 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -20($fp) - j label_255 - label_254: - lw $t0 0($fp) - sw $t0 -20($fp) - label_255: - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_or_at_BoolOp: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_256 - lw $t0 0($fp) - sw $t0 -20($fp) - j label_257 - label_256: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -20($fp) - label_257: - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_BoolOp: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 14 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_BoolOp - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/hairyscary.mips b/tests/codegen/hairyscary.mips index 722b83cb3..e69de29bb 100644 --- a/tests/codegen/hairyscary.mips +++ b/tests/codegen/hairyscary.mips @@ -1,2430 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "Foo" -.word 0 -data_7: .asciiz "Bar" -.word 0 -data_8: .asciiz "Razz" -.word 0 -data_9: .asciiz "Bazz" -.word 0 -data_10: .asciiz "Main" -.word 0 -data_11: .asciiz " -" -.word 0 -data_12: .asciiz "" -.word 0 -data_13: .asciiz "Abort called from class " -.word 0 -data_14: .asciiz "Substring out of range" -.word 0 -data_15: .asciiz "RuntimeError: void in switch case" -.word 0 -data_16: .asciiz "RuntimeError: Case statement without a match branch" -.word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_23: .asciiz "RuntimeError: void in switch case" -.word 0 -data_24: .asciiz "RuntimeError: Case statement without a match branch" -.word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_28: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_30: .asciiz "RuntimeError: void in switch case" -.word 0 -data_31: .asciiz "RuntimeError: Case statement without a match branch" -.word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_33: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_34: .asciiz "do nothing" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 - .word data_10 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype - .word type_10_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_doh_at_Foo - .word function_printh_at_Bazz - .word __init_attr_at_Foo - .word __init_at_Foo - -type_6_prototype: - .word 5 - .word 9 - .word type_6_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_doh_at_Foo - .word function_printh_at_Bazz - .word __init_attr_at_Bar - .word __init_at_Bar - -type_7_prototype: - .word 6 - .word 13 - .word type_7_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 - - -type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_doh_at_Foo - .word function_printh_at_Bazz - .word __init_attr_at_Razz - .word __init_at_Razz - -type_8_prototype: - .word 7 - .word 11 - .word type_8_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 - - -type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_doh_at_Bazz - .word function_printh_at_Bazz - .word __init_attr_at_Bazz - .word __init_at_Bazz - -type_9_prototype: - .word 8 - .word 7 - .word type_9_dispatch - .word 0 - .word 0 - .word 0 - .word -1 - - -type_10_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_10_prototype: - .word 9 - .word 8 - .word type_10_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_13 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_11 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Foo: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -152 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Bazz - addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -128($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_4: - la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -116($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_5 - la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -116($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_6 - la $t0 types_table - addi $t0 $t0 20 - lw $t0 0($t0) - sw $t0 -116($fp) - lw $t0 -116($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_7 - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_5: - lw $t0 0($fp) - sw $t0 -112($fp) - lw $t0 -112($fp) - sw $t0 -132($fp) - j label_8 - label_6: - lw $t0 0($fp) - sw $t0 -108($fp) - jal __init_at_Bar - sw $v0 -104($fp) - lw $t0 -104($fp) - sw $t0 -132($fp) - j label_8 - label_7: - lw $t0 0($fp) - sw $t0 -100($fp) - jal __init_at_Razz - sw $v0 -96($fp) - lw $t0 -96($fp) - sw $t0 -132($fp) - j label_8 - label_8: - lw $t0 -132($fp) - sw $t0 -136($fp) - lw $t0 0($fp) - lw $t1 -136($fp) - sw $t1 24($t0) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_10: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_12: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - add $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_14: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - add $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_16: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - add $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - sw $t0 -92($fp) - lw $t0 0($fp) - lw $t1 -92($fp) - sw $t1 28($t0) - lw $v0 0($fp) - addi $sp $sp 152 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_doh_at_Foo: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -44 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -32($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 -32($fp) - addi $sp $sp 44 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Foo: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Foo - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Bar: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -64 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Razz - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_18: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -32($fp) - lw $t0 0($fp) - lw $t1 -32($fp) - sw $t1 40($t0) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_20: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 44($t0) - lw $v0 0($fp) - addi $sp $sp 64 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bar: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -44 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Bar - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 44 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Razz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -176 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Foo - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_22: - la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_23 - la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -132($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_24 - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_23: - lw $t0 0($fp) - sw $t0 -128($fp) - lw $t0 -128($fp) - sw $t0 -148($fp) - j label_25 - label_24: - lw $t0 0($fp) - sw $t0 -124($fp) - jal __init_at_Bar - sw $v0 -120($fp) - lw $t0 -120($fp) - sw $t0 -148($fp) - j label_25 - label_25: - lw $t0 -148($fp) - sw $t0 -152($fp) - lw $t0 0($fp) - lw $t1 -152($fp) - sw $t1 32($t0) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_26 - j label_27 - label_26: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_27: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal function_doh_at_Bazz - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_28 - j label_29 - label_28: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_29: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - add $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t4 0($fp) - lw $t4 32($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_30 - j label_31 - label_30: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_31: - lw $t4 0($fp) - lw $t4 32($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 32($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - add $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_32 - j label_33 - label_32: - li $v0 4 - la $a0 data_28 - syscall - li $v0 10 - syscall - label_33: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - add $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_34 - j label_35 - label_34: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_35: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -108($fp) - lw $t1 -104($fp) - add $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - sw $t0 -116($fp) - lw $t0 0($fp) - lw $t1 -116($fp) - sw $t1 36($t0) - lw $v0 0($fp) - addi $sp $sp 176 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Razz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Razz - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Bazz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -84 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -80($fp) - lw $t0 0($fp) - lw $t1 -80($fp) - sw $t1 16($t0) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -64($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_36 - j label_37 - label_36: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_37: - la $t0 types_table - addi $t0 $t0 24 - lw $t0 0($t0) - sw $t0 -52($fp) - lw $t0 -52($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_38 - la $t0 types_table - addi $t0 $t0 28 - lw $t0 0($t0) - sw $t0 -52($fp) - lw $t0 -52($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_39 - la $t0 types_table - addi $t0 $t0 20 - lw $t0 0($t0) - sw $t0 -52($fp) - lw $t0 -52($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_40 - la $t0 types_table - addi $t0 $t0 32 - lw $t0 0($t0) - sw $t0 -52($fp) - lw $t0 -52($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_41 - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_38: - lw $t0 0($fp) - sw $t0 -48($fp) - lw $t0 -48($fp) - sw $t0 -68($fp) - j label_42 - label_39: - lw $t0 0($fp) - sw $t0 -44($fp) - jal __init_at_Bar - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -68($fp) - j label_42 - label_40: - lw $t0 0($fp) - sw $t0 -36($fp) - jal __init_at_Razz - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -68($fp) - j label_42 - label_41: - lw $t0 0($fp) - sw $t0 -28($fp) - jal __init_at_Foo - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -68($fp) - j label_42 - label_42: - lw $t0 -68($fp) - sw $t0 -72($fp) - lw $t0 0($fp) - lw $t1 -72($fp) - sw $t1 12($t0) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_44: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 20($t0) - lw $v0 0($fp) - addi $sp $sp 84 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_printh_at_Bazz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_45 - j label_46 - label_45: - li $v0 4 - la $a0 data_33 - syscall - li $v0 10 - syscall - label_46: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -16($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_doh_at_Bazz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -32($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 0($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 -32($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bazz: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Bazz - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -48 - jal __init_at_Bazz - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -40($fp) - lw $t0 0($fp) - lw $t1 -40($fp) - sw $t1 12($t0) - jal __init_at_Foo - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -32($fp) - lw $t0 0($fp) - lw $t1 -32($fp) - sw $t1 16($t0) - jal __init_at_Razz - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -24($fp) - lw $t0 0($fp) - lw $t1 -24($fp) - sw $t1 20($t0) - jal __init_at_Bar - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 24($t0) - lw $v0 0($fp) - addi $sp $sp 48 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - la $t0 data_34 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 9 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/hello_world.mips b/tests/codegen/hello_world.mips index e54f8ffc9..e69de29bb 100644 --- a/tests/codegen/hello_world.mips +++ b/tests/codegen/hello_world.mips @@ -1,1113 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "Main" -.word 0 -data_7: .asciiz " -" -.word 0 -data_8: .asciiz "" -.word 0 -data_9: .asciiz "Abort called from class " -.word 0 -data_10: .asciiz "Substring out of range" -.word 0 -data_11: .asciiz "Hello, World.\n" -.word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_7 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_10 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - la $t0 data_11 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/io.mips b/tests/codegen/io.mips index 477159a11..e69de29bb 100644 --- a/tests/codegen/io.mips +++ b/tests/codegen/io.mips @@ -1,1798 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "A" -.word 0 -data_7: .asciiz "B" -.word 0 -data_8: .asciiz "C" -.word 0 -data_9: .asciiz "D" -.word 0 -data_10: .asciiz "Main" -.word 0 -data_11: .asciiz " -" -.word 0 -data_12: .asciiz "" -.word 0 -data_13: .asciiz "Abort called from class " -.word 0 -data_14: .asciiz "Substring out of range" -.word 0 -data_15: .asciiz "A: Hello world\n" -.word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_17: .asciiz "B: Hello world\n" -.word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_19: .asciiz "C: Hello world\n" -.word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_21: .asciiz "D: Hello world\n" -.word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_27: .asciiz "Done.\n" -.word 0 -data_28: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 - .word data_10 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype - .word type_10_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_out_a_at_A - .word __init_attr_at_A - .word __init_at_A - -type_6_prototype: - .word 5 - .word 5 - .word type_6_dispatch - .word 0 - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_out_a_at_A - .word function_out_b_at_B - .word __init_attr_at_B - .word __init_at_B - -type_7_prototype: - .word 6 - .word 5 - .word type_7_dispatch - .word 0 - .word -1 - - -type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_out_c_at_C - .word __init_attr_at_C - .word __init_at_C - -type_8_prototype: - .word 7 - .word 4 - .word type_8_dispatch - .word -1 - - -type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_out_c_at_C - .word function_out_d_at_D - .word __init_attr_at_D - .word __init_at_D - -type_9_prototype: - .word 8 - .word 4 - .word type_9_dispatch - .word -1 - - -type_10_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_10_prototype: - .word 9 - .word 4 - .word type_10_dispatch - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_13 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_11 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - jal __init_at_IO - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_a_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - la $t0 data_15 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_4: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_A: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_B: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_A - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_b_at_B: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - la $t0 data_17 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_6: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_B: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_B - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_c_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - la $t0 data_19 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_8: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_C: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_C - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_D: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_C - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_d_at_D: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - la $t0 data_21 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_10: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_D: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_D - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -64 - jal __init_at_A - sw $v0 -72($fp) - lw $t0 -72($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_12: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -64($fp) - jal __init_at_B - sw $v0 -60($fp) - lw $t0 -60($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_14: - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - jal __init_at_C - sw $v0 -48($fp) - lw $t0 -48($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_16: - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -40($fp) - jal __init_at_D - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_18: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - la $t0 data_27 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_28 - syscall - li $v0 10 - syscall - label_20: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 64 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 9 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/life.mips b/tests/codegen/life.mips index 828bcd748..e69de29bb 100644 --- a/tests/codegen/life.mips +++ b/tests/codegen/life.mips @@ -1,11525 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "Board" -.word 0 -data_7: .asciiz "CellularAutomaton" -.word 0 -data_8: .asciiz "Main" -.word 0 -data_9: .asciiz " -" -.word 0 -data_10: .asciiz "" -.word 0 -data_11: .asciiz "Abort called from class " -.word 0 -data_12: .asciiz "Substring out of range" -.word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_16: .asciiz "\n" -.word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_20: .asciiz "\n" -.word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_22: .asciiz "\n" -.word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_26: .asciiz " " -.word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_28: .asciiz " " -.word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_30: .asciiz " " -.word 0 -data_31: .asciiz "RuntimeError: Division by zero" -.word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_33: .asciiz " " -.word 0 -data_34: .asciiz "RuntimeError: Division by zero" -.word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_36: .asciiz " " -.word 0 -data_37: .asciiz " " -.word 0 -data_38: .asciiz "RuntimeError: Division by zero" -.word 0 -data_39: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_40: .asciiz " " -.word 0 -data_41: .asciiz " " -.word 0 -data_42: .asciiz "RuntimeError: Division by zero" -.word 0 -data_43: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_44: .asciiz " " -.word 0 -data_45: .asciiz " " -.word 0 -data_46: .asciiz "RuntimeError: Division by zero" -.word 0 -data_47: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_48: .asciiz " " -.word 0 -data_49: .asciiz " " -.word 0 -data_50: .asciiz "RuntimeError: Division by zero" -.word 0 -data_51: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_52: .asciiz " " -.word 0 -data_53: .asciiz " " -.word 0 -data_54: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_55: .asciiz "X" -.word 0 -data_56: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_57: .asciiz "X" -.word 0 -data_58: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_59: .asciiz "X" -.word 0 -data_60: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_61: .asciiz "X" -.word 0 -data_62: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_63: .asciiz "X" -.word 0 -data_64: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_65: .asciiz "X" -.word 0 -data_66: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_67: .asciiz "X" -.word 0 -data_68: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_69: .asciiz "X" -.word 0 -data_70: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_71: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_72: .asciiz "-" -.word 0 -data_73: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_74: .asciiz "X" -.word 0 -data_75: .asciiz "-" -.word 0 -data_76: .asciiz "X" -.word 0 -data_77: .asciiz "X" -.word 0 -data_78: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_79: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_80: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_81: .asciiz "\nPlease chose a number:\n" -.word 0 -data_82: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_83: .asciiz "\t1: A cross\n" -.word 0 -data_84: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_85: .asciiz "\t2: A slash from the upper left to lower right\n" -.word 0 -data_86: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_87: .asciiz "\t3: A slash from the upper right to lower left\n" -.word 0 -data_88: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_89: .asciiz "\t4: An X\n" -.word 0 -data_90: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_91: .asciiz "\t5: A greater than sign \n" -.word 0 -data_92: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_93: .asciiz "\t6: A less than sign\n" -.word 0 -data_94: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_95: .asciiz "\t7: Two greater than signs\n" -.word 0 -data_96: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_97: .asciiz "\t8: Two less than signs\n" -.word 0 -data_98: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_99: .asciiz "\t9: A 'V'\n" -.word 0 -data_100: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_101: .asciiz "\t10: An inverse 'V'\n" -.word 0 -data_102: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_103: .asciiz "\t11: Numbers 9 and 10 combined\n" -.word 0 -data_104: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_105: .asciiz "\t12: A full grid\n" -.word 0 -data_106: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_107: .asciiz "\t13: A 'T'\n" -.word 0 -data_108: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_109: .asciiz "\t14: A plus '+'\n" -.word 0 -data_110: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_111: .asciiz "\t15: A 'W'\n" -.word 0 -data_112: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_113: .asciiz "\t16: An 'M'\n" -.word 0 -data_114: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_115: .asciiz "\t17: An 'E'\n" -.word 0 -data_116: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_117: .asciiz "\t18: A '3'\n" -.word 0 -data_118: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_119: .asciiz "\t19: An 'O'\n" -.word 0 -data_120: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_121: .asciiz "\t20: An '8'\n" -.word 0 -data_122: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_123: .asciiz "\t21: An 'S'\n" -.word 0 -data_124: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_125: .asciiz "Your choice => " -.word 0 -data_126: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_127: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_128: .asciiz "\n" -.word 0 -data_129: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_130: .asciiz " " -.word 0 -data_131: .asciiz " XXXX X XX X XXXX " -.word 0 -data_132: .asciiz " XX X XX X XX X XX X XX " -.word 0 -data_133: .asciiz " XX X XX X XX " -.word 0 -data_134: .asciiz "XXX X X X X XXXX " -.word 0 -data_135: .asciiz "XXXXX X XXXXX X XXXX" -.word 0 -data_136: .asciiz " X X X X X X X" -.word 0 -data_137: .asciiz "X X X X X X X " -.word 0 -data_138: .asciiz " X X XXXXX X X " -.word 0 -data_139: .asciiz "XXXXX X X X X " -.word 0 -data_140: .asciiz "XXXXXXXXXXXXXXXXXXXXXXXXX" -.word 0 -data_141: .asciiz "X X X X X X X X" -.word 0 -data_142: .asciiz " X X X X X" -.word 0 -data_143: .asciiz "X X X X X " -.word 0 -data_144: .asciiz " X XX X X X " -.word 0 -data_145: .asciiz "X X X XX X " -.word 0 -data_146: .asciiz " X X X X X" -.word 0 -data_147: .asciiz "X X X X X " -.word 0 -data_148: .asciiz "X X X X X X X X X" -.word 0 -data_149: .asciiz "X X X X X" -.word 0 -data_150: .asciiz " X X X X X " -.word 0 -data_151: .asciiz " XX XXXX XXXX XX " -.word 0 -data_152: .asciiz "Would you like to continue with the next generation? \n" -.word 0 -data_153: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_154: .asciiz "Please use lowercase y or n for your answer [y]: " -.word 0 -data_155: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_156: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_157: .asciiz "\n" -.word 0 -data_158: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_159: .asciiz "n" -.word 0 -data_160: .asciiz "\n\n" -.word 0 -data_161: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_162: .asciiz "Would you like to choose a background pattern? \n" -.word 0 -data_163: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_164: .asciiz "Please use lowercase y or n for your answer [n]: " -.word 0 -data_165: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_166: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_167: .asciiz "y" -.word 0 -data_168: .asciiz "Welcome to the Game of Life.\n" -.word 0 -data_169: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_170: .asciiz "There are many initial states to choose from. \n" -.word 0 -data_171: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_172: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_173: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_174: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_175: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_176: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_177: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_178: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_board_init_at_Board - .word function_size_of_board_at_Board - .word __init_attr_at_Board - .word __init_at_Board - -type_6_prototype: - .word 5 - .word 7 - .word type_6_dispatch - .word 0 - .word 0 - .word 0 - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_board_init_at_Board - .word function_size_of_board_at_Board - .word function_cell_at_CellularAutomaton - .word function_cell_at_next_evolution_at_CellularAutomaton - .word function_east_at_CellularAutomaton - .word function_evolve_at_CellularAutomaton - .word function_init_at_CellularAutomaton - .word function_neighbors_at_CellularAutomaton - .word function_north_at_CellularAutomaton - .word function_northeast_at_CellularAutomaton - .word function_northwest_at_CellularAutomaton - .word function_num_cells_at_CellularAutomaton - .word function_option_at_CellularAutomaton - .word function_print_at_CellularAutomaton - .word function_prompt_at_CellularAutomaton - .word function_prompt2_at_CellularAutomaton - .word function_south_at_CellularAutomaton - .word function_southeast_at_CellularAutomaton - .word function_southwest_at_CellularAutomaton - .word function_west_at_CellularAutomaton - .word __init_attr_at_CellularAutomaton - .word __init_at_CellularAutomaton - -type_7_prototype: - .word 6 - .word 8 - .word type_7_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 - - -type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_board_init_at_Board - .word function_size_of_board_at_Board - .word function_cell_at_CellularAutomaton - .word function_cell_at_next_evolution_at_CellularAutomaton - .word function_east_at_CellularAutomaton - .word function_evolve_at_CellularAutomaton - .word function_init_at_CellularAutomaton - .word function_neighbors_at_CellularAutomaton - .word function_north_at_CellularAutomaton - .word function_northeast_at_CellularAutomaton - .word function_northwest_at_CellularAutomaton - .word function_num_cells_at_CellularAutomaton - .word function_option_at_CellularAutomaton - .word function_print_at_CellularAutomaton - .word function_prompt_at_CellularAutomaton - .word function_prompt2_at_CellularAutomaton - .word function_south_at_CellularAutomaton - .word function_southeast_at_CellularAutomaton - .word function_southwest_at_CellularAutomaton - .word function_west_at_CellularAutomaton - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_8_prototype: - .word 7 - .word 9 - .word type_8_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_11 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Board: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - lw $t1 -20($fp) - sw $t1 20($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 16($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_size_of_board_at_Board: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_board_init_at_Board: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -368 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -360($fp) - lw $t0 -360($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_6: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -356($fp) - lw $t0 -356($fp) - sw $t0 -364($fp) - li $t0 15 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -308($fp) - lw $t0 -364($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -332($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -328($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -324($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -320($fp) - lw $t0 -332($fp) - lw $t1 -328($fp) - seq $t0 $t0 $t1 - sw $t0 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_7 - lw $t0 -332($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_8 - lw $t0 -332($fp) - lw $t1 -320($fp) - seq $t0 $t0 $t1 - sw $t0 -316($fp) - lw $t0 -316($fp) - bne $t0 $zero label_9 - lw $t0 -364($fp) - lw $t1 -308($fp) - seq $t0 $t0 $t1 - sw $t0 -312($fp) - j label_10 - label_7: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -340($fp) - lw $t0 -308($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -340($fp) - lw $t1 -336($fp) - seq $t0 $t0 $t1 - sw $t0 -312($fp) - j label_10 - label_8: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -340($fp) - lw $t0 -308($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -340($fp) - move $a0 $t0 - lw $t0 -336($fp) - move $a1 $t0 - jal equal_str - sw $v0 -312($fp) - j label_10 - label_9: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -340($fp) - lw $t0 -308($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -340($fp) - lw $t1 -336($fp) - seq $t0 $t0 $t1 - sw $t0 -312($fp) - j label_10 - label_10: - lw $t0 -312($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -344($fp) - lw $t0 -344($fp) - lw $t1 12($t0) - sw $t1 -348($fp) - lw $t0 -348($fp) - bne $t0 $zero label_41 - li $t0 16 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -260($fp) - lw $t0 -364($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -284($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -280($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -276($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -272($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - lw $t0 -268($fp) - bne $t0 $zero label_11 - lw $t0 -284($fp) - lw $t1 -276($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - lw $t0 -268($fp) - bne $t0 $zero label_12 - lw $t0 -284($fp) - lw $t1 -272($fp) - seq $t0 $t0 $t1 - sw $t0 -268($fp) - lw $t0 -268($fp) - bne $t0 $zero label_13 - lw $t0 -364($fp) - lw $t1 -260($fp) - seq $t0 $t0 $t1 - sw $t0 -264($fp) - j label_14 - label_11: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -288($fp) - lw $t0 -292($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -264($fp) - j label_14 - label_12: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -288($fp) - lw $t0 -292($fp) - move $a0 $t0 - lw $t0 -288($fp) - move $a1 $t0 - jal equal_str - sw $v0 -264($fp) - j label_14 - label_13: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -260($fp) - lw $t1 12($t0) - sw $t1 -288($fp) - lw $t0 -292($fp) - lw $t1 -288($fp) - seq $t0 $t0 $t1 - sw $t0 -264($fp) - j label_14 - label_14: - lw $t0 -264($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -296($fp) - lw $t0 -296($fp) - lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -300($fp) - bne $t0 $zero label_39 - li $t0 20 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -212($fp) - lw $t0 -364($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -236($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -232($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -228($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -224($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_15 - lw $t0 -236($fp) - lw $t1 -228($fp) - seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_16 - lw $t0 -236($fp) - lw $t1 -224($fp) - seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_17 - lw $t0 -364($fp) - lw $t1 -212($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - j label_18 - label_15: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - j label_18 - label_16: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - move $a0 $t0 - lw $t0 -240($fp) - move $a1 $t0 - jal equal_str - sw $v0 -216($fp) - j label_18 - label_17: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - j label_18 - label_18: - lw $t0 -216($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -248($fp) - lw $t0 -248($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -252($fp) - bne $t0 $zero label_37 - li $t0 21 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -364($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -188($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -184($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -180($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -176($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - lw $t0 -172($fp) - bne $t0 $zero label_19 - lw $t0 -188($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - lw $t0 -172($fp) - bne $t0 $zero label_20 - lw $t0 -188($fp) - lw $t1 -176($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - lw $t0 -172($fp) - bne $t0 $zero label_21 - lw $t0 -364($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -168($fp) - j label_22 - label_19: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -196($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -168($fp) - j label_22 - label_20: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -196($fp) - move $a0 $t0 - lw $t0 -192($fp) - move $a1 $t0 - jal equal_str - sw $v0 -168($fp) - j label_22 - label_21: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t0 -196($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -168($fp) - j label_22 - label_22: - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -200($fp) - lw $t0 -200($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -204($fp) - bne $t0 $zero label_35 - li $t0 25 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -364($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -140($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -132($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -128($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_23 - lw $t0 -140($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_24 - lw $t0 -140($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - lw $t0 -124($fp) - bne $t0 $zero label_25 - lw $t0 -364($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_26 - label_23: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_26 - label_24: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - move $a0 $t0 - lw $t0 -144($fp) - move $a1 $t0 - jal equal_str - sw $v0 -120($fp) - j label_26 - label_25: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - j label_26 - label_26: - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -156($fp) - bne $t0 $zero label_33 - li $t0 28 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -364($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_27 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_28 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_29 - lw $t0 -364($fp) - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_30 - label_27: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_30 - label_28: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_30 - label_29: - lw $t0 -364($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_30 - label_30: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_31 - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -112($fp) - j label_32 - label_31: - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -112($fp) - label_32: - lw $t0 -112($fp) - sw $t0 -160($fp) - j label_34 - label_33: - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -160($fp) - label_34: - lw $t0 -160($fp) - sw $t0 -208($fp) - j label_36 - label_35: - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -208($fp) - label_36: - lw $t0 -208($fp) - sw $t0 -256($fp) - j label_38 - label_37: - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -256($fp) - label_38: - lw $t0 -256($fp) - sw $t0 -304($fp) - j label_40 - label_39: - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -24($fp) - lw $t0 -24($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -304($fp) - label_40: - lw $t0 -304($fp) - sw $t0 -352($fp) - j label_42 - label_41: - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - lw $t1 4($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 4($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $t0 -364($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -352($fp) - label_42: - lw $v0 4($fp) - addi $sp $sp 368 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Board: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Board - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Board - addi $sp $sp 4 - sw $v0 -16($fp) - la $t0 data_10 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 24($t0) - lw $v0 0($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_init_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 0($fp) - lw $t1 4($fp) - addi $t1 $t1 24 - sw $t0 0($t1) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_44: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 4($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -128 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - sw $t0 -120($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -112($fp) - la $t0 data_16 - sw $t0 -108($fp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_45 - j label_46 - label_45: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_46: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -96($fp) - label_47: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - slt $t1 $t0 $t1 - sw $t1 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_48 - j label_55 - label_48: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_49 - j label_50 - label_49: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_50: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -68($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_51 - j label_52 - label_51: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_52: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - la $t0 data_20 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_53 - j label_54 - label_53: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_54: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 -36($fp) - lw $t1 -32($fp) - add $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - sw $t0 -120($fp) - j label_47 - label_55: - la $t0 data_22 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_56 - j label_57 - label_56: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_57: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 128 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_num_cells_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_58 - j label_59 - label_58: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_59: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cell_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -80 - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -44($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - sub $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - slt $t1 $t0 $t1 - sw $t1 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -68($fp) - bne $t0 $zero label_62 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t4 4($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_60 - j label_61 - label_60: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_61: - lw $t4 4($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -72($fp) - j label_63 - label_62: - la $t0 data_26 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -72($fp) - label_63: - lw $v0 -72($fp) - addi $sp $sp 80 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_north_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -92 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - sub $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - slt $t1 $t0 $t1 - sw $t1 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_66 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 -36($fp) - lw $t1 -32($fp) - sub $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_64 - j label_65 - label_64: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_65: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -84($fp) - j label_67 - label_66: - la $t0 data_28 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -84($fp) - label_67: - lw $v0 -84($fp) - addi $sp $sp 92 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_south_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -88 - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -68($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - add $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - slt $t1 $t0 $t1 - sw $t1 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_70 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 -36($fp) - lw $t1 -32($fp) - add $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_68 - j label_69 - label_68: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_69: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -80($fp) - j label_71 - label_70: - la $t0 data_30 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -80($fp) - label_71: - lw $v0 -80($fp) - addi $sp $sp 88 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_east_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -172 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - add $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -88($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_72 - j label_73 - label_72: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_73: - lw $t0 -100($fp) - lw $t1 -96($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -92($fp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -116($fp) - lw $t1 -112($fp) - mul $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -60($fp) - lw $t1 -56($fp) - add $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -120($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -144($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -136($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -132($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_74 - lw $t0 -144($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_75 - lw $t0 -144($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_76 - lw $t0 -120($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_77 - label_74: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_77 - label_75: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - move $a0 $t0 - lw $t0 -148($fp) - move $a1 $t0 - jal equal_str - sw $v0 -124($fp) - j label_77 - label_76: - lw $t0 -120($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -64($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -124($fp) - j label_77 - label_77: - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -160($fp) - bne $t0 $zero label_80 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - add $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_78 - j label_79 - label_78: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_79: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -164($fp) - j label_81 - label_80: - la $t0 data_33 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -164($fp) - label_81: - lw $v0 -164($fp) - addi $sp $sp 172 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_west_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -188 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -160($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -156($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -152($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -148($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_82 - lw $t0 -160($fp) - lw $t1 -152($fp) - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_83 - lw $t0 -160($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -144($fp) - lw $t0 -144($fp) - bne $t0 $zero label_84 - lw $t0 0($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - j label_85 - label_82: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -168($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - j label_85 - label_83: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -168($fp) - move $a0 $t0 - lw $t0 -164($fp) - move $a1 $t0 - jal equal_str - sw $v0 -140($fp) - j label_85 - label_84: - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -168($fp) - lw $t1 -164($fp) - seq $t0 $t0 $t1 - sw $t0 -140($fp) - j label_85 - label_85: - lw $t0 -140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -172($fp) - lw $t0 -172($fp) - lw $t1 12($t0) - sw $t1 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_96 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -56($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_86 - j label_87 - label_86: - li $v0 4 - la $a0 data_34 - syscall - li $v0 10 - syscall - label_87: - lw $t0 -68($fp) - lw $t1 -64($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - mul $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -112($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -108($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -104($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -100($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_88 - lw $t0 -112($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_89 - lw $t0 -112($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_90 - lw $t0 -88($fp) - lw $t1 0($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_91 - label_88: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_91 - label_89: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - move $a0 $t0 - lw $t0 -116($fp) - move $a1 $t0 - jal equal_str - sw $v0 -92($fp) - j label_91 - label_90: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_91 - label_91: - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_94 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - sub $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_92 - j label_93 - label_92: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_93: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -132($fp) - j label_95 - label_94: - la $t0 data_36 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -132($fp) - label_95: - lw $t0 -132($fp) - sw $t0 -180($fp) - j label_97 - label_96: - la $t0 data_37 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -180($fp) - label_97: - lw $v0 -180($fp) - addi $sp $sp 188 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_northwest_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -184 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -148($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - sub $t0 $t0 $t1 - sw $t0 -140($fp) - lw $t0 -140($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - lw $t1 12($t0) - sw $t1 -164($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -164($fp) - lw $t1 -160($fp) - slt $t1 $t0 $t1 - sw $t1 -156($fp) - lw $t0 -156($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -168($fp) - lw $t0 -168($fp) - lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -172($fp) - bne $t0 $zero label_108 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -56($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_98 - j label_99 - label_98: - li $v0 4 - la $a0 data_38 - syscall - li $v0 10 - syscall - label_99: - lw $t0 -68($fp) - lw $t1 -64($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - mul $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -112($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -108($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -104($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -100($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_100 - lw $t0 -112($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_101 - lw $t0 -112($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_102 - lw $t0 -88($fp) - lw $t1 0($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_103 - label_100: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_103 - label_101: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - move $a0 $t0 - lw $t0 -116($fp) - move $a1 $t0 - jal equal_str - sw $v0 -92($fp) - j label_103 - label_102: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_103 - label_103: - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_106 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - sub $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_104 - j label_105 - label_104: - li $v0 4 - la $a0 data_39 - syscall - li $v0 10 - syscall - label_105: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 60($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -132($fp) - j label_107 - label_106: - la $t0 data_40 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -132($fp) - label_107: - lw $t0 -132($fp) - sw $t0 -176($fp) - j label_109 - label_108: - la $t0 data_41 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -176($fp) - label_109: - lw $v0 -176($fp) - addi $sp $sp 184 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_northeast_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -224 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t0 -188($fp) - lw $t1 -184($fp) - sub $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -192($fp) - lw $t0 -192($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -176($fp) - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - slt $t1 $t0 $t1 - sw $t1 -196($fp) - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -208($fp) - lw $t0 -208($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -212($fp) - bne $t0 $zero label_120 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) - add $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -96($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_110 - j label_111 - label_110: - li $v0 4 - la $a0 data_42 - syscall - li $v0 10 - syscall - label_111: - lw $t0 -108($fp) - lw $t1 -104($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -100($fp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -124($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -124($fp) - lw $t1 -120($fp) - mul $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -128($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - add $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -128($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -152($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -148($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -144($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -140($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_112 - lw $t0 -152($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_113 - lw $t0 -152($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_114 - lw $t0 -128($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_115 - label_112: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_115 - label_113: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - move $a0 $t0 - lw $t0 -156($fp) - move $a1 $t0 - jal equal_str - sw $v0 -132($fp) - j label_115 - label_114: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_115 - label_115: - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_118 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - add $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_116 - j label_117 - label_116: - li $v0 4 - la $a0 data_43 - syscall - li $v0 10 - syscall - label_117: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 60($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -172($fp) - j label_119 - label_118: - la $t0 data_44 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -172($fp) - label_119: - lw $t0 -172($fp) - sw $t0 -216($fp) - j label_121 - label_120: - la $t0 data_45 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -216($fp) - label_121: - lw $v0 -216($fp) - addi $sp $sp 224 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_southeast_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -220 - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -184($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -180($fp) - lw $t0 -184($fp) - lw $t1 -180($fp) - add $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - slt $t1 $t0 $t1 - sw $t1 -192($fp) - lw $t0 -192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_132 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -88($fp) - lw $t1 -84($fp) - add $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -104($fp) - lw $t0 -96($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_122 - j label_123 - label_122: - li $v0 4 - la $a0 data_46 - syscall - li $v0 10 - syscall - label_123: - lw $t0 -108($fp) - lw $t1 -104($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -100($fp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -124($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -124($fp) - lw $t1 -120($fp) - mul $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -128($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - add $t0 $t0 $t1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -128($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -152($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -148($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -144($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -140($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_124 - lw $t0 -152($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_125 - lw $t0 -152($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_126 - lw $t0 -128($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_127 - label_124: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_127 - label_125: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - move $a0 $t0 - lw $t0 -156($fp) - move $a1 $t0 - jal equal_str - sw $v0 -132($fp) - j label_127 - label_126: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_127 - label_127: - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_130 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - add $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_128 - j label_129 - label_128: - li $v0 4 - la $a0 data_47 - syscall - li $v0 10 - syscall - label_129: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 92($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -172($fp) - j label_131 - label_130: - la $t0 data_48 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -172($fp) - label_131: - lw $t0 -172($fp) - sw $t0 -212($fp) - j label_133 - label_132: - la $t0 data_49 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -212($fp) - label_133: - lw $v0 -212($fp) - addi $sp $sp 220 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_southwest_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -180 - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - add $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - slt $t1 $t0 $t1 - sw $t1 -152($fp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_144 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -68($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -56($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_134 - j label_135 - label_134: - li $v0 4 - la $a0 data_50 - syscall - li $v0 10 - syscall - label_135: - lw $t0 -68($fp) - lw $t1 -64($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -84($fp) - lw $t1 -80($fp) - mul $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -112($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -108($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -104($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -100($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_136 - lw $t0 -112($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_137 - lw $t0 -112($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - bne $t0 $zero label_138 - lw $t0 -88($fp) - lw $t1 0($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_139 - label_136: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_139 - label_137: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - move $a0 $t0 - lw $t0 -116($fp) - move $a1 $t0 - jal equal_str - sw $v0 -92($fp) - j label_139 - label_138: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -116($fp) - lw $t0 -120($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -92($fp) - j label_139 - label_139: - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_142 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - sub $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_140 - j label_141 - label_140: - li $v0 4 - la $a0 data_51 - syscall - li $v0 10 - syscall - label_141: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 92($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -132($fp) - j label_143 - label_142: - la $t0 data_52 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -132($fp) - label_143: - lw $t0 -132($fp) - sw $t0 -172($fp) - j label_145 - label_144: - la $t0 data_53 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -172($fp) - label_145: - lw $v0 -172($fp) - addi $sp $sp 180 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_neighbors_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -672 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -508($fp) - lw $t0 -508($fp) - bne $t0 $zero label_146 - j label_147 - label_146: - li $v0 4 - la $a0 data_54 - syscall - li $v0 10 - syscall - label_147: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 60($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -504($fp) - la $t0 data_55 - sw $t0 -500($fp) - lw $t0 -500($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -496($fp) - lw $t0 -504($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -532($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -528($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -524($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -520($fp) - lw $t0 -532($fp) - lw $t1 -528($fp) - seq $t0 $t0 $t1 - sw $t0 -516($fp) - lw $t0 -516($fp) - bne $t0 $zero label_148 - lw $t0 -532($fp) - lw $t1 -524($fp) - seq $t0 $t0 $t1 - sw $t0 -516($fp) - lw $t0 -516($fp) - bne $t0 $zero label_149 - lw $t0 -532($fp) - lw $t1 -520($fp) - seq $t0 $t0 $t1 - sw $t0 -516($fp) - lw $t0 -516($fp) - bne $t0 $zero label_150 - lw $t0 -504($fp) - lw $t1 -496($fp) - seq $t0 $t0 $t1 - sw $t0 -512($fp) - j label_151 - label_148: - lw $t0 -504($fp) - lw $t1 12($t0) - sw $t1 -540($fp) - lw $t0 -496($fp) - lw $t1 12($t0) - sw $t1 -536($fp) - lw $t0 -540($fp) - lw $t1 -536($fp) - seq $t0 $t0 $t1 - sw $t0 -512($fp) - j label_151 - label_149: - lw $t0 -504($fp) - lw $t1 12($t0) - sw $t1 -540($fp) - lw $t0 -496($fp) - lw $t1 12($t0) - sw $t1 -536($fp) - lw $t0 -540($fp) - move $a0 $t0 - lw $t0 -536($fp) - move $a1 $t0 - jal equal_str - sw $v0 -512($fp) - j label_151 - label_150: - lw $t0 -504($fp) - lw $t1 12($t0) - sw $t1 -540($fp) - lw $t0 -496($fp) - lw $t1 12($t0) - sw $t1 -536($fp) - lw $t0 -540($fp) - lw $t1 -536($fp) - seq $t0 $t0 $t1 - sw $t0 -512($fp) - j label_151 - label_151: - lw $t0 -512($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -544($fp) - lw $t0 -544($fp) - lw $t1 12($t0) - sw $t1 -548($fp) - lw $t0 -548($fp) - bne $t0 $zero label_152 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -492($fp) - lw $t0 -492($fp) - sw $t0 -552($fp) - j label_153 - label_152: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -488($fp) - lw $t0 -488($fp) - sw $t0 -552($fp) - label_153: - lw $t0 -552($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -440($fp) - lw $t0 -440($fp) - bne $t0 $zero label_154 - j label_155 - label_154: - li $v0 4 - la $a0 data_56 - syscall - li $v0 10 - syscall - label_155: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 92($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -436($fp) - la $t0 data_57 - sw $t0 -432($fp) - lw $t0 -432($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 -436($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -464($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -460($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -456($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -452($fp) - lw $t0 -464($fp) - lw $t1 -460($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_156 - lw $t0 -464($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_157 - lw $t0 -464($fp) - lw $t1 -452($fp) - seq $t0 $t0 $t1 - sw $t0 -448($fp) - lw $t0 -448($fp) - bne $t0 $zero label_158 - lw $t0 -436($fp) - lw $t1 -428($fp) - seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_159 - label_156: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - lw $t1 -468($fp) - seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_159 - label_157: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - move $a0 $t0 - lw $t0 -468($fp) - move $a1 $t0 - jal equal_str - sw $v0 -444($fp) - j label_159 - label_158: - lw $t0 -436($fp) - lw $t1 12($t0) - sw $t1 -472($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -472($fp) - lw $t1 -468($fp) - seq $t0 $t0 $t1 - sw $t0 -444($fp) - j label_159 - label_159: - lw $t0 -444($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -476($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -480($fp) - lw $t0 -480($fp) - bne $t0 $zero label_160 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -424($fp) - lw $t0 -424($fp) - sw $t0 -484($fp) - j label_161 - label_160: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -420($fp) - lw $t0 -420($fp) - sw $t0 -484($fp) - label_161: - lw $t0 -484($fp) - lw $t1 12($t0) - sw $t1 -560($fp) - lw $t0 -564($fp) - lw $t1 -560($fp) - add $t0 $t0 $t1 - sw $t0 -556($fp) - lw $t0 -556($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -568($fp) - lw $t0 -568($fp) - lw $t1 12($t0) - sw $t1 -580($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -372($fp) - lw $t0 -372($fp) - bne $t0 $zero label_162 - j label_163 - label_162: - li $v0 4 - la $a0 data_58 - syscall - li $v0 10 - syscall - label_163: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -368($fp) - la $t0 data_59 - sw $t0 -364($fp) - lw $t0 -364($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -360($fp) - lw $t0 -368($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -396($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -392($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -388($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -384($fp) - lw $t0 -396($fp) - lw $t1 -392($fp) - seq $t0 $t0 $t1 - sw $t0 -380($fp) - lw $t0 -380($fp) - bne $t0 $zero label_164 - lw $t0 -396($fp) - lw $t1 -388($fp) - seq $t0 $t0 $t1 - sw $t0 -380($fp) - lw $t0 -380($fp) - bne $t0 $zero label_165 - lw $t0 -396($fp) - lw $t1 -384($fp) - seq $t0 $t0 $t1 - sw $t0 -380($fp) - lw $t0 -380($fp) - bne $t0 $zero label_166 - lw $t0 -368($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -376($fp) - j label_167 - label_164: - lw $t0 -368($fp) - lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -360($fp) - lw $t1 12($t0) - sw $t1 -400($fp) - lw $t0 -404($fp) - lw $t1 -400($fp) - seq $t0 $t0 $t1 - sw $t0 -376($fp) - j label_167 - label_165: - lw $t0 -368($fp) - lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -360($fp) - lw $t1 12($t0) - sw $t1 -400($fp) - lw $t0 -404($fp) - move $a0 $t0 - lw $t0 -400($fp) - move $a1 $t0 - jal equal_str - sw $v0 -376($fp) - j label_167 - label_166: - lw $t0 -368($fp) - lw $t1 12($t0) - sw $t1 -404($fp) - lw $t0 -360($fp) - lw $t1 12($t0) - sw $t1 -400($fp) - lw $t0 -404($fp) - lw $t1 -400($fp) - seq $t0 $t0 $t1 - sw $t0 -376($fp) - j label_167 - label_167: - lw $t0 -376($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -408($fp) - lw $t0 -408($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -412($fp) - bne $t0 $zero label_168 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -356($fp) - lw $t0 -356($fp) - sw $t0 -416($fp) - j label_169 - label_168: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -352($fp) - lw $t0 -352($fp) - sw $t0 -416($fp) - label_169: - lw $t0 -416($fp) - lw $t1 12($t0) - sw $t1 -576($fp) - lw $t0 -580($fp) - lw $t1 -576($fp) - add $t0 $t0 $t1 - sw $t0 -572($fp) - lw $t0 -572($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -584($fp) - lw $t0 -584($fp) - lw $t1 12($t0) - sw $t1 -596($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -304($fp) - lw $t0 -304($fp) - bne $t0 $zero label_170 - j label_171 - label_170: - li $v0 4 - la $a0 data_60 - syscall - li $v0 10 - syscall - label_171: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 104($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -300($fp) - la $t0 data_61 - sw $t0 -296($fp) - lw $t0 -296($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -292($fp) - lw $t0 -300($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -328($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -324($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -320($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -316($fp) - lw $t0 -328($fp) - lw $t1 -324($fp) - seq $t0 $t0 $t1 - sw $t0 -312($fp) - lw $t0 -312($fp) - bne $t0 $zero label_172 - lw $t0 -328($fp) - lw $t1 -320($fp) - seq $t0 $t0 $t1 - sw $t0 -312($fp) - lw $t0 -312($fp) - bne $t0 $zero label_173 - lw $t0 -328($fp) - lw $t1 -316($fp) - seq $t0 $t0 $t1 - sw $t0 -312($fp) - lw $t0 -312($fp) - bne $t0 $zero label_174 - lw $t0 -300($fp) - lw $t1 -292($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - j label_175 - label_172: - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -292($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -336($fp) - lw $t1 -332($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - j label_175 - label_173: - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -292($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -336($fp) - move $a0 $t0 - lw $t0 -332($fp) - move $a1 $t0 - jal equal_str - sw $v0 -308($fp) - j label_175 - label_174: - lw $t0 -300($fp) - lw $t1 12($t0) - sw $t1 -336($fp) - lw $t0 -292($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -336($fp) - lw $t1 -332($fp) - seq $t0 $t0 $t1 - sw $t0 -308($fp) - j label_175 - label_175: - lw $t0 -308($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -340($fp) - lw $t0 -340($fp) - lw $t1 12($t0) - sw $t1 -344($fp) - lw $t0 -344($fp) - bne $t0 $zero label_176 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -288($fp) - lw $t0 -288($fp) - sw $t0 -348($fp) - j label_177 - label_176: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -284($fp) - lw $t0 -284($fp) - sw $t0 -348($fp) - label_177: - lw $t0 -348($fp) - lw $t1 12($t0) - sw $t1 -592($fp) - lw $t0 -596($fp) - lw $t1 -592($fp) - add $t0 $t0 $t1 - sw $t0 -588($fp) - lw $t0 -588($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -600($fp) - lw $t0 -600($fp) - lw $t1 12($t0) - sw $t1 -612($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -236($fp) - lw $t0 -236($fp) - bne $t0 $zero label_178 - j label_179 - label_178: - li $v0 4 - la $a0 data_62 - syscall - li $v0 10 - syscall - label_179: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -232($fp) - la $t0 data_63 - sw $t0 -228($fp) - lw $t0 -228($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -224($fp) - lw $t0 -232($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -260($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -256($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -252($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -248($fp) - lw $t0 -260($fp) - lw $t1 -256($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_180 - lw $t0 -260($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_181 - lw $t0 -260($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_182 - lw $t0 -232($fp) - lw $t1 -224($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_183 - label_180: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_183 - label_181: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - move $a0 $t0 - lw $t0 -264($fp) - move $a1 $t0 - jal equal_str - sw $v0 -240($fp) - j label_183 - label_182: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_183 - label_183: - lw $t0 -240($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -276($fp) - bne $t0 $zero label_184 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -220($fp) - lw $t0 -220($fp) - sw $t0 -280($fp) - j label_185 - label_184: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 -216($fp) - sw $t0 -280($fp) - label_185: - lw $t0 -280($fp) - lw $t1 12($t0) - sw $t1 -608($fp) - lw $t0 -612($fp) - lw $t1 -608($fp) - add $t0 $t0 $t1 - sw $t0 -604($fp) - lw $t0 -604($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -616($fp) - lw $t0 -616($fp) - lw $t1 12($t0) - sw $t1 -628($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_186 - j label_187 - label_186: - li $v0 4 - la $a0 data_64 - syscall - li $v0 10 - syscall - label_187: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 68($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -164($fp) - la $t0 data_65 - sw $t0 -160($fp) - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -164($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -192($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -184($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -180($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_188 - lw $t0 -192($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_189 - lw $t0 -192($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_190 - lw $t0 -164($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_191 - label_188: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_191 - label_189: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - move $a0 $t0 - lw $t0 -196($fp) - move $a1 $t0 - jal equal_str - sw $v0 -172($fp) - j label_191 - label_190: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -156($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_191 - label_191: - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_192 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - sw $t0 -212($fp) - j label_193 - label_192: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - sw $t0 -212($fp) - label_193: - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -624($fp) - lw $t0 -628($fp) - lw $t1 -624($fp) - add $t0 $t0 $t1 - sw $t0 -620($fp) - lw $t0 -620($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -632($fp) - lw $t0 -632($fp) - lw $t1 12($t0) - sw $t1 -644($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_194 - j label_195 - label_194: - li $v0 4 - la $a0 data_66 - syscall - li $v0 10 - syscall - label_195: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 96($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -96($fp) - la $t0 data_67 - sw $t0 -92($fp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -96($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -124($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -120($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -116($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -112($fp) - lw $t0 -124($fp) - lw $t1 -120($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_196 - lw $t0 -124($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_197 - lw $t0 -124($fp) - lw $t1 -112($fp) - seq $t0 $t0 $t1 - sw $t0 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_198 - lw $t0 -96($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_199 - label_196: - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_199 - label_197: - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - move $a0 $t0 - lw $t0 -128($fp) - move $a1 $t0 - jal equal_str - sw $v0 -104($fp) - j label_199 - label_198: - lw $t0 -96($fp) - lw $t1 12($t0) - sw $t1 -132($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -128($fp) - lw $t0 -132($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -104($fp) - j label_199 - label_199: - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -136($fp) - lw $t0 -136($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -140($fp) - bne $t0 $zero label_200 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -144($fp) - j label_201 - label_200: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -144($fp) - label_201: - lw $t0 -144($fp) - lw $t1 12($t0) - sw $t1 -640($fp) - lw $t0 -644($fp) - lw $t1 -640($fp) - add $t0 $t0 $t1 - sw $t0 -636($fp) - lw $t0 -636($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -648($fp) - lw $t0 -648($fp) - lw $t1 12($t0) - sw $t1 -660($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_202 - j label_203 - label_202: - li $v0 4 - la $a0 data_68 - syscall - li $v0 10 - syscall - label_203: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 100($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - la $t0 data_69 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -28($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -56($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -52($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -48($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -44($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_204 - lw $t0 -56($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_205 - lw $t0 -56($fp) - lw $t1 -44($fp) - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_206 - lw $t0 -28($fp) - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -36($fp) - j label_207 - label_204: - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -36($fp) - j label_207 - label_205: - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - move $a0 $t0 - lw $t0 -60($fp) - move $a1 $t0 - jal equal_str - sw $v0 -36($fp) - j label_207 - label_206: - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -64($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -36($fp) - j label_207 - label_207: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_208 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -76($fp) - j label_209 - label_208: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -76($fp) - label_209: - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -656($fp) - lw $t0 -660($fp) - lw $t1 -656($fp) - add $t0 $t0 $t1 - sw $t0 -652($fp) - lw $t0 -652($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -664($fp) - lw $v0 -664($fp) - addi $sp $sp 672 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cell_at_next_evolution_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -220 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_210 - j label_211 - label_210: - li $v0 4 - la $a0 data_70 - syscall - li $v0 10 - syscall - label_211: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -164($fp) - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -164($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -192($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -188($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -184($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -180($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_212 - lw $t0 -192($fp) - lw $t1 -184($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_213 - lw $t0 -192($fp) - lw $t1 -180($fp) - seq $t0 $t0 $t1 - sw $t0 -176($fp) - lw $t0 -176($fp) - bne $t0 $zero label_214 - lw $t0 -164($fp) - lw $t1 -160($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_215 - label_212: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_215 - label_213: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - move $a0 $t0 - lw $t0 -196($fp) - move $a1 $t0 - jal equal_str - sw $v0 -172($fp) - j label_215 - label_214: - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -200($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -196($fp) - lw $t0 -200($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -172($fp) - j label_215 - label_215: - lw $t0 -172($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -204($fp) - lw $t0 -204($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -208($fp) - bne $t0 $zero label_232 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -112($fp) - lw $t0 -112($fp) - bne $t0 $zero label_216 - j label_217 - label_216: - li $v0 4 - la $a0 data_71 - syscall - li $v0 10 - syscall - label_217: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -108($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -108($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -136($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -132($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -128($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -124($fp) - lw $t0 -136($fp) - lw $t1 -132($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_218 - lw $t0 -136($fp) - lw $t1 -128($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_219 - lw $t0 -136($fp) - lw $t1 -124($fp) - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_220 - lw $t0 -108($fp) - lw $t1 -104($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_221 - label_218: - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_221 - label_219: - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - move $a0 $t0 - lw $t0 -140($fp) - move $a1 $t0 - jal equal_str - sw $v0 -116($fp) - j label_221 - label_220: - lw $t0 -108($fp) - lw $t1 12($t0) - sw $t1 -144($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -140($fp) - lw $t0 -144($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -116($fp) - j label_221 - label_221: - lw $t0 -116($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -152($fp) - bne $t0 $zero label_222 - la $t0 data_72 - sw $t0 -100($fp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - sw $t0 -156($fp) - j label_231 - label_222: - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_223 - j label_224 - label_223: - li $v0 4 - la $a0 data_73 - syscall - li $v0 10 - syscall - label_224: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 36($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - la $t0 data_74 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -44($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -72($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -68($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -64($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -60($fp) - lw $t0 -72($fp) - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_225 - lw $t0 -72($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_226 - lw $t0 -72($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_227 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_228 - label_225: - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_228 - label_226: - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - move $a0 $t0 - lw $t0 -76($fp) - move $a1 $t0 - jal equal_str - sw $v0 -52($fp) - j label_228 - label_227: - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -80($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -80($fp) - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - j label_228 - label_228: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_229 - la $t0 data_75 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -92($fp) - j label_230 - label_229: - la $t0 data_76 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -92($fp) - label_230: - lw $t0 -92($fp) - sw $t0 -156($fp) - label_231: - lw $t0 -156($fp) - sw $t0 -212($fp) - j label_233 - label_232: - la $t0 data_77 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -212($fp) - label_233: - lw $v0 -212($fp) - addi $sp $sp 220 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_evolve_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -96 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -88($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_234 - j label_235 - label_234: - li $v0 4 - la $a0 data_78 - syscall - li $v0 10 - syscall - label_235: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 72($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -80($fp) - la $t0 data_10 - sw $t0 -68($fp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - label_236: - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -80($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - slt $t1 $t0 $t1 - sw $t1 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_237 - j label_242 - label_237: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_238 - j label_239 - label_238: - li $v0 4 - la $a0 data_79 - syscall - li $v0 10 - syscall - label_239: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -40($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_240 - j label_241 - label_240: - li $v0 4 - la $a0 data_80 - syscall - li $v0 10 - syscall - label_241: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -32($fp) - lw $t0 -32($fp) - sw $t0 -68($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -88($fp) - j label_236 - label_242: - lw $t0 -68($fp) - lw $t1 0($fp) - addi $t1 $t1 24 - sw $t0 0($t1) - lw $v0 0($fp) - addi $sp $sp 96 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_option_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -1596 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -1588($fp) - la $t0 data_81 - sw $t0 -1584($fp) - lw $t0 -1584($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1580($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1576($fp) - lw $t0 -1576($fp) - bne $t0 $zero label_243 - j label_244 - label_243: - li $v0 4 - la $a0 data_82 - syscall - li $v0 10 - syscall - label_244: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1580($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1572($fp) - la $t0 data_83 - sw $t0 -1568($fp) - lw $t0 -1568($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1564($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1560($fp) - lw $t0 -1560($fp) - bne $t0 $zero label_245 - j label_246 - label_245: - li $v0 4 - la $a0 data_84 - syscall - li $v0 10 - syscall - label_246: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1564($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1556($fp) - la $t0 data_85 - sw $t0 -1552($fp) - lw $t0 -1552($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1548($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1544($fp) - lw $t0 -1544($fp) - bne $t0 $zero label_247 - j label_248 - label_247: - li $v0 4 - la $a0 data_86 - syscall - li $v0 10 - syscall - label_248: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1548($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1540($fp) - la $t0 data_87 - sw $t0 -1536($fp) - lw $t0 -1536($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1532($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1528($fp) - lw $t0 -1528($fp) - bne $t0 $zero label_249 - j label_250 - label_249: - li $v0 4 - la $a0 data_88 - syscall - li $v0 10 - syscall - label_250: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1532($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1524($fp) - la $t0 data_89 - sw $t0 -1520($fp) - lw $t0 -1520($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1516($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1512($fp) - lw $t0 -1512($fp) - bne $t0 $zero label_251 - j label_252 - label_251: - li $v0 4 - la $a0 data_90 - syscall - li $v0 10 - syscall - label_252: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1516($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1508($fp) - la $t0 data_91 - sw $t0 -1504($fp) - lw $t0 -1504($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1500($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1496($fp) - lw $t0 -1496($fp) - bne $t0 $zero label_253 - j label_254 - label_253: - li $v0 4 - la $a0 data_92 - syscall - li $v0 10 - syscall - label_254: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1500($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1492($fp) - la $t0 data_93 - sw $t0 -1488($fp) - lw $t0 -1488($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1484($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1480($fp) - lw $t0 -1480($fp) - bne $t0 $zero label_255 - j label_256 - label_255: - li $v0 4 - la $a0 data_94 - syscall - li $v0 10 - syscall - label_256: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1484($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1476($fp) - la $t0 data_95 - sw $t0 -1472($fp) - lw $t0 -1472($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1468($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1464($fp) - lw $t0 -1464($fp) - bne $t0 $zero label_257 - j label_258 - label_257: - li $v0 4 - la $a0 data_96 - syscall - li $v0 10 - syscall - label_258: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1468($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1460($fp) - la $t0 data_97 - sw $t0 -1456($fp) - lw $t0 -1456($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1452($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1448($fp) - lw $t0 -1448($fp) - bne $t0 $zero label_259 - j label_260 - label_259: - li $v0 4 - la $a0 data_98 - syscall - li $v0 10 - syscall - label_260: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1452($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1444($fp) - la $t0 data_99 - sw $t0 -1440($fp) - lw $t0 -1440($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1436($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1432($fp) - lw $t0 -1432($fp) - bne $t0 $zero label_261 - j label_262 - label_261: - li $v0 4 - la $a0 data_100 - syscall - li $v0 10 - syscall - label_262: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1436($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1428($fp) - la $t0 data_101 - sw $t0 -1424($fp) - lw $t0 -1424($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1420($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1416($fp) - lw $t0 -1416($fp) - bne $t0 $zero label_263 - j label_264 - label_263: - li $v0 4 - la $a0 data_102 - syscall - li $v0 10 - syscall - label_264: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1420($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1412($fp) - la $t0 data_103 - sw $t0 -1408($fp) - lw $t0 -1408($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1404($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1400($fp) - lw $t0 -1400($fp) - bne $t0 $zero label_265 - j label_266 - label_265: - li $v0 4 - la $a0 data_104 - syscall - li $v0 10 - syscall - label_266: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1404($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1396($fp) - la $t0 data_105 - sw $t0 -1392($fp) - lw $t0 -1392($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1388($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1384($fp) - lw $t0 -1384($fp) - bne $t0 $zero label_267 - j label_268 - label_267: - li $v0 4 - la $a0 data_106 - syscall - li $v0 10 - syscall - label_268: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1388($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1380($fp) - la $t0 data_107 - sw $t0 -1376($fp) - lw $t0 -1376($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1372($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1368($fp) - lw $t0 -1368($fp) - bne $t0 $zero label_269 - j label_270 - label_269: - li $v0 4 - la $a0 data_108 - syscall - li $v0 10 - syscall - label_270: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1372($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1364($fp) - la $t0 data_109 - sw $t0 -1360($fp) - lw $t0 -1360($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1356($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1352($fp) - lw $t0 -1352($fp) - bne $t0 $zero label_271 - j label_272 - label_271: - li $v0 4 - la $a0 data_110 - syscall - li $v0 10 - syscall - label_272: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1356($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1348($fp) - la $t0 data_111 - sw $t0 -1344($fp) - lw $t0 -1344($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1340($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1336($fp) - lw $t0 -1336($fp) - bne $t0 $zero label_273 - j label_274 - label_273: - li $v0 4 - la $a0 data_112 - syscall - li $v0 10 - syscall - label_274: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1340($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1332($fp) - la $t0 data_113 - sw $t0 -1328($fp) - lw $t0 -1328($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1324($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1320($fp) - lw $t0 -1320($fp) - bne $t0 $zero label_275 - j label_276 - label_275: - li $v0 4 - la $a0 data_114 - syscall - li $v0 10 - syscall - label_276: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1324($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1316($fp) - la $t0 data_115 - sw $t0 -1312($fp) - lw $t0 -1312($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1308($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1304($fp) - lw $t0 -1304($fp) - bne $t0 $zero label_277 - j label_278 - label_277: - li $v0 4 - la $a0 data_116 - syscall - li $v0 10 - syscall - label_278: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1308($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1300($fp) - la $t0 data_117 - sw $t0 -1296($fp) - lw $t0 -1296($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1292($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1288($fp) - lw $t0 -1288($fp) - bne $t0 $zero label_279 - j label_280 - label_279: - li $v0 4 - la $a0 data_118 - syscall - li $v0 10 - syscall - label_280: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1292($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1284($fp) - la $t0 data_119 - sw $t0 -1280($fp) - lw $t0 -1280($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1276($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1272($fp) - lw $t0 -1272($fp) - bne $t0 $zero label_281 - j label_282 - label_281: - li $v0 4 - la $a0 data_120 - syscall - li $v0 10 - syscall - label_282: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1268($fp) - la $t0 data_121 - sw $t0 -1264($fp) - lw $t0 -1264($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1260($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1256($fp) - lw $t0 -1256($fp) - bne $t0 $zero label_283 - j label_284 - label_283: - li $v0 4 - la $a0 data_122 - syscall - li $v0 10 - syscall - label_284: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1260($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1252($fp) - la $t0 data_123 - sw $t0 -1248($fp) - lw $t0 -1248($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1244($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1240($fp) - lw $t0 -1240($fp) - bne $t0 $zero label_285 - j label_286 - label_285: - li $v0 4 - la $a0 data_124 - syscall - li $v0 10 - syscall - label_286: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1244($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1236($fp) - la $t0 data_125 - sw $t0 -1232($fp) - lw $t0 -1232($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1228($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1224($fp) - lw $t0 -1224($fp) - bne $t0 $zero label_287 - j label_288 - label_287: - li $v0 4 - la $a0 data_126 - syscall - li $v0 10 - syscall - label_288: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1228($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1220($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1216($fp) - lw $t0 -1216($fp) - bne $t0 $zero label_289 - j label_290 - label_289: - li $v0 4 - la $a0 data_127 - syscall - li $v0 10 - syscall - label_290: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -1212($fp) - lw $t0 -1212($fp) - sw $t0 -1588($fp) - la $t0 data_128 - sw $t0 -1208($fp) - lw $t0 -1208($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -1204($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -1200($fp) - lw $t0 -1200($fp) - bne $t0 $zero label_291 - j label_292 - label_291: - li $v0 4 - la $a0 data_129 - syscall - li $v0 10 - syscall - label_292: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -1204($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -1196($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -1148($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -1172($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -1168($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -1164($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -1160($fp) - lw $t0 -1172($fp) - lw $t1 -1168($fp) - seq $t0 $t0 $t1 - sw $t0 -1156($fp) - lw $t0 -1156($fp) - bne $t0 $zero label_293 - lw $t0 -1172($fp) - lw $t1 -1164($fp) - seq $t0 $t0 $t1 - sw $t0 -1156($fp) - lw $t0 -1156($fp) - bne $t0 $zero label_294 - lw $t0 -1172($fp) - lw $t1 -1160($fp) - seq $t0 $t0 $t1 - sw $t0 -1156($fp) - lw $t0 -1156($fp) - bne $t0 $zero label_295 - lw $t0 -1588($fp) - lw $t1 -1148($fp) - seq $t0 $t0 $t1 - sw $t0 -1152($fp) - j label_296 - label_293: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1180($fp) - lw $t0 -1148($fp) - lw $t1 12($t0) - sw $t1 -1176($fp) - lw $t0 -1180($fp) - lw $t1 -1176($fp) - seq $t0 $t0 $t1 - sw $t0 -1152($fp) - j label_296 - label_294: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1180($fp) - lw $t0 -1148($fp) - lw $t1 12($t0) - sw $t1 -1176($fp) - lw $t0 -1180($fp) - move $a0 $t0 - lw $t0 -1176($fp) - move $a1 $t0 - jal equal_str - sw $v0 -1152($fp) - j label_296 - label_295: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1180($fp) - lw $t0 -1148($fp) - lw $t1 12($t0) - sw $t1 -1176($fp) - lw $t0 -1180($fp) - lw $t1 -1176($fp) - seq $t0 $t0 $t1 - sw $t0 -1152($fp) - j label_296 - label_296: - lw $t0 -1152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -1184($fp) - lw $t0 -1184($fp) - lw $t1 12($t0) - sw $t1 -1188($fp) - lw $t0 -1188($fp) - bne $t0 $zero label_417 - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -1100($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -1124($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -1120($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -1116($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -1112($fp) - lw $t0 -1124($fp) - lw $t1 -1120($fp) - seq $t0 $t0 $t1 - sw $t0 -1108($fp) - lw $t0 -1108($fp) - bne $t0 $zero label_297 - lw $t0 -1124($fp) - lw $t1 -1116($fp) - seq $t0 $t0 $t1 - sw $t0 -1108($fp) - lw $t0 -1108($fp) - bne $t0 $zero label_298 - lw $t0 -1124($fp) - lw $t1 -1112($fp) - seq $t0 $t0 $t1 - sw $t0 -1108($fp) - lw $t0 -1108($fp) - bne $t0 $zero label_299 - lw $t0 -1588($fp) - lw $t1 -1100($fp) - seq $t0 $t0 $t1 - sw $t0 -1104($fp) - j label_300 - label_297: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1132($fp) - lw $t0 -1100($fp) - lw $t1 12($t0) - sw $t1 -1128($fp) - lw $t0 -1132($fp) - lw $t1 -1128($fp) - seq $t0 $t0 $t1 - sw $t0 -1104($fp) - j label_300 - label_298: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1132($fp) - lw $t0 -1100($fp) - lw $t1 12($t0) - sw $t1 -1128($fp) - lw $t0 -1132($fp) - move $a0 $t0 - lw $t0 -1128($fp) - move $a1 $t0 - jal equal_str - sw $v0 -1104($fp) - j label_300 - label_299: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1132($fp) - lw $t0 -1100($fp) - lw $t1 12($t0) - sw $t1 -1128($fp) - lw $t0 -1132($fp) - lw $t1 -1128($fp) - seq $t0 $t0 $t1 - sw $t0 -1104($fp) - j label_300 - label_300: - lw $t0 -1104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -1136($fp) - lw $t0 -1136($fp) - lw $t1 12($t0) - sw $t1 -1140($fp) - lw $t0 -1140($fp) - bne $t0 $zero label_415 - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -1052($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -1076($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -1072($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -1068($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -1064($fp) - lw $t0 -1076($fp) - lw $t1 -1072($fp) - seq $t0 $t0 $t1 - sw $t0 -1060($fp) - lw $t0 -1060($fp) - bne $t0 $zero label_301 - lw $t0 -1076($fp) - lw $t1 -1068($fp) - seq $t0 $t0 $t1 - sw $t0 -1060($fp) - lw $t0 -1060($fp) - bne $t0 $zero label_302 - lw $t0 -1076($fp) - lw $t1 -1064($fp) - seq $t0 $t0 $t1 - sw $t0 -1060($fp) - lw $t0 -1060($fp) - bne $t0 $zero label_303 - lw $t0 -1588($fp) - lw $t1 -1052($fp) - seq $t0 $t0 $t1 - sw $t0 -1056($fp) - j label_304 - label_301: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1084($fp) - lw $t0 -1052($fp) - lw $t1 12($t0) - sw $t1 -1080($fp) - lw $t0 -1084($fp) - lw $t1 -1080($fp) - seq $t0 $t0 $t1 - sw $t0 -1056($fp) - j label_304 - label_302: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1084($fp) - lw $t0 -1052($fp) - lw $t1 12($t0) - sw $t1 -1080($fp) - lw $t0 -1084($fp) - move $a0 $t0 - lw $t0 -1080($fp) - move $a1 $t0 - jal equal_str - sw $v0 -1056($fp) - j label_304 - label_303: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1084($fp) - lw $t0 -1052($fp) - lw $t1 12($t0) - sw $t1 -1080($fp) - lw $t0 -1084($fp) - lw $t1 -1080($fp) - seq $t0 $t0 $t1 - sw $t0 -1056($fp) - j label_304 - label_304: - lw $t0 -1056($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -1088($fp) - lw $t0 -1088($fp) - lw $t1 12($t0) - sw $t1 -1092($fp) - lw $t0 -1092($fp) - bne $t0 $zero label_413 - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -1004($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -1028($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -1024($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -1020($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -1016($fp) - lw $t0 -1028($fp) - lw $t1 -1024($fp) - seq $t0 $t0 $t1 - sw $t0 -1012($fp) - lw $t0 -1012($fp) - bne $t0 $zero label_305 - lw $t0 -1028($fp) - lw $t1 -1020($fp) - seq $t0 $t0 $t1 - sw $t0 -1012($fp) - lw $t0 -1012($fp) - bne $t0 $zero label_306 - lw $t0 -1028($fp) - lw $t1 -1016($fp) - seq $t0 $t0 $t1 - sw $t0 -1012($fp) - lw $t0 -1012($fp) - bne $t0 $zero label_307 - lw $t0 -1588($fp) - lw $t1 -1004($fp) - seq $t0 $t0 $t1 - sw $t0 -1008($fp) - j label_308 - label_305: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1036($fp) - lw $t0 -1004($fp) - lw $t1 12($t0) - sw $t1 -1032($fp) - lw $t0 -1036($fp) - lw $t1 -1032($fp) - seq $t0 $t0 $t1 - sw $t0 -1008($fp) - j label_308 - label_306: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1036($fp) - lw $t0 -1004($fp) - lw $t1 12($t0) - sw $t1 -1032($fp) - lw $t0 -1036($fp) - move $a0 $t0 - lw $t0 -1032($fp) - move $a1 $t0 - jal equal_str - sw $v0 -1008($fp) - j label_308 - label_307: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -1036($fp) - lw $t0 -1004($fp) - lw $t1 12($t0) - sw $t1 -1032($fp) - lw $t0 -1036($fp) - lw $t1 -1032($fp) - seq $t0 $t0 $t1 - sw $t0 -1008($fp) - j label_308 - label_308: - lw $t0 -1008($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -1040($fp) - lw $t0 -1040($fp) - lw $t1 12($t0) - sw $t1 -1044($fp) - lw $t0 -1044($fp) - bne $t0 $zero label_411 - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -956($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -980($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -976($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -972($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -968($fp) - lw $t0 -980($fp) - lw $t1 -976($fp) - seq $t0 $t0 $t1 - sw $t0 -964($fp) - lw $t0 -964($fp) - bne $t0 $zero label_309 - lw $t0 -980($fp) - lw $t1 -972($fp) - seq $t0 $t0 $t1 - sw $t0 -964($fp) - lw $t0 -964($fp) - bne $t0 $zero label_310 - lw $t0 -980($fp) - lw $t1 -968($fp) - seq $t0 $t0 $t1 - sw $t0 -964($fp) - lw $t0 -964($fp) - bne $t0 $zero label_311 - lw $t0 -1588($fp) - lw $t1 -956($fp) - seq $t0 $t0 $t1 - sw $t0 -960($fp) - j label_312 - label_309: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -988($fp) - lw $t0 -956($fp) - lw $t1 12($t0) - sw $t1 -984($fp) - lw $t0 -988($fp) - lw $t1 -984($fp) - seq $t0 $t0 $t1 - sw $t0 -960($fp) - j label_312 - label_310: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -988($fp) - lw $t0 -956($fp) - lw $t1 12($t0) - sw $t1 -984($fp) - lw $t0 -988($fp) - move $a0 $t0 - lw $t0 -984($fp) - move $a1 $t0 - jal equal_str - sw $v0 -960($fp) - j label_312 - label_311: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -988($fp) - lw $t0 -956($fp) - lw $t1 12($t0) - sw $t1 -984($fp) - lw $t0 -988($fp) - lw $t1 -984($fp) - seq $t0 $t0 $t1 - sw $t0 -960($fp) - j label_312 - label_312: - lw $t0 -960($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -992($fp) - lw $t0 -992($fp) - lw $t1 12($t0) - sw $t1 -996($fp) - lw $t0 -996($fp) - bne $t0 $zero label_409 - li $t0 6 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -908($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -932($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -928($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -924($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -920($fp) - lw $t0 -932($fp) - lw $t1 -928($fp) - seq $t0 $t0 $t1 - sw $t0 -916($fp) - lw $t0 -916($fp) - bne $t0 $zero label_313 - lw $t0 -932($fp) - lw $t1 -924($fp) - seq $t0 $t0 $t1 - sw $t0 -916($fp) - lw $t0 -916($fp) - bne $t0 $zero label_314 - lw $t0 -932($fp) - lw $t1 -920($fp) - seq $t0 $t0 $t1 - sw $t0 -916($fp) - lw $t0 -916($fp) - bne $t0 $zero label_315 - lw $t0 -1588($fp) - lw $t1 -908($fp) - seq $t0 $t0 $t1 - sw $t0 -912($fp) - j label_316 - label_313: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -940($fp) - lw $t0 -908($fp) - lw $t1 12($t0) - sw $t1 -936($fp) - lw $t0 -940($fp) - lw $t1 -936($fp) - seq $t0 $t0 $t1 - sw $t0 -912($fp) - j label_316 - label_314: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -940($fp) - lw $t0 -908($fp) - lw $t1 12($t0) - sw $t1 -936($fp) - lw $t0 -940($fp) - move $a0 $t0 - lw $t0 -936($fp) - move $a1 $t0 - jal equal_str - sw $v0 -912($fp) - j label_316 - label_315: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -940($fp) - lw $t0 -908($fp) - lw $t1 12($t0) - sw $t1 -936($fp) - lw $t0 -940($fp) - lw $t1 -936($fp) - seq $t0 $t0 $t1 - sw $t0 -912($fp) - j label_316 - label_316: - lw $t0 -912($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -944($fp) - lw $t0 -944($fp) - lw $t1 12($t0) - sw $t1 -948($fp) - lw $t0 -948($fp) - bne $t0 $zero label_407 - li $t0 7 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -860($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -884($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -880($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -876($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -872($fp) - lw $t0 -884($fp) - lw $t1 -880($fp) - seq $t0 $t0 $t1 - sw $t0 -868($fp) - lw $t0 -868($fp) - bne $t0 $zero label_317 - lw $t0 -884($fp) - lw $t1 -876($fp) - seq $t0 $t0 $t1 - sw $t0 -868($fp) - lw $t0 -868($fp) - bne $t0 $zero label_318 - lw $t0 -884($fp) - lw $t1 -872($fp) - seq $t0 $t0 $t1 - sw $t0 -868($fp) - lw $t0 -868($fp) - bne $t0 $zero label_319 - lw $t0 -1588($fp) - lw $t1 -860($fp) - seq $t0 $t0 $t1 - sw $t0 -864($fp) - j label_320 - label_317: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -892($fp) - lw $t0 -860($fp) - lw $t1 12($t0) - sw $t1 -888($fp) - lw $t0 -892($fp) - lw $t1 -888($fp) - seq $t0 $t0 $t1 - sw $t0 -864($fp) - j label_320 - label_318: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -892($fp) - lw $t0 -860($fp) - lw $t1 12($t0) - sw $t1 -888($fp) - lw $t0 -892($fp) - move $a0 $t0 - lw $t0 -888($fp) - move $a1 $t0 - jal equal_str - sw $v0 -864($fp) - j label_320 - label_319: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -892($fp) - lw $t0 -860($fp) - lw $t1 12($t0) - sw $t1 -888($fp) - lw $t0 -892($fp) - lw $t1 -888($fp) - seq $t0 $t0 $t1 - sw $t0 -864($fp) - j label_320 - label_320: - lw $t0 -864($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -896($fp) - lw $t0 -896($fp) - lw $t1 12($t0) - sw $t1 -900($fp) - lw $t0 -900($fp) - bne $t0 $zero label_405 - li $t0 8 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -812($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -836($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -832($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -828($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -824($fp) - lw $t0 -836($fp) - lw $t1 -832($fp) - seq $t0 $t0 $t1 - sw $t0 -820($fp) - lw $t0 -820($fp) - bne $t0 $zero label_321 - lw $t0 -836($fp) - lw $t1 -828($fp) - seq $t0 $t0 $t1 - sw $t0 -820($fp) - lw $t0 -820($fp) - bne $t0 $zero label_322 - lw $t0 -836($fp) - lw $t1 -824($fp) - seq $t0 $t0 $t1 - sw $t0 -820($fp) - lw $t0 -820($fp) - bne $t0 $zero label_323 - lw $t0 -1588($fp) - lw $t1 -812($fp) - seq $t0 $t0 $t1 - sw $t0 -816($fp) - j label_324 - label_321: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -844($fp) - lw $t0 -812($fp) - lw $t1 12($t0) - sw $t1 -840($fp) - lw $t0 -844($fp) - lw $t1 -840($fp) - seq $t0 $t0 $t1 - sw $t0 -816($fp) - j label_324 - label_322: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -844($fp) - lw $t0 -812($fp) - lw $t1 12($t0) - sw $t1 -840($fp) - lw $t0 -844($fp) - move $a0 $t0 - lw $t0 -840($fp) - move $a1 $t0 - jal equal_str - sw $v0 -816($fp) - j label_324 - label_323: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -844($fp) - lw $t0 -812($fp) - lw $t1 12($t0) - sw $t1 -840($fp) - lw $t0 -844($fp) - lw $t1 -840($fp) - seq $t0 $t0 $t1 - sw $t0 -816($fp) - j label_324 - label_324: - lw $t0 -816($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -848($fp) - lw $t0 -848($fp) - lw $t1 12($t0) - sw $t1 -852($fp) - lw $t0 -852($fp) - bne $t0 $zero label_403 - li $t0 9 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -764($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -788($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -784($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -780($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -776($fp) - lw $t0 -788($fp) - lw $t1 -784($fp) - seq $t0 $t0 $t1 - sw $t0 -772($fp) - lw $t0 -772($fp) - bne $t0 $zero label_325 - lw $t0 -788($fp) - lw $t1 -780($fp) - seq $t0 $t0 $t1 - sw $t0 -772($fp) - lw $t0 -772($fp) - bne $t0 $zero label_326 - lw $t0 -788($fp) - lw $t1 -776($fp) - seq $t0 $t0 $t1 - sw $t0 -772($fp) - lw $t0 -772($fp) - bne $t0 $zero label_327 - lw $t0 -1588($fp) - lw $t1 -764($fp) - seq $t0 $t0 $t1 - sw $t0 -768($fp) - j label_328 - label_325: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -796($fp) - lw $t0 -764($fp) - lw $t1 12($t0) - sw $t1 -792($fp) - lw $t0 -796($fp) - lw $t1 -792($fp) - seq $t0 $t0 $t1 - sw $t0 -768($fp) - j label_328 - label_326: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -796($fp) - lw $t0 -764($fp) - lw $t1 12($t0) - sw $t1 -792($fp) - lw $t0 -796($fp) - move $a0 $t0 - lw $t0 -792($fp) - move $a1 $t0 - jal equal_str - sw $v0 -768($fp) - j label_328 - label_327: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -796($fp) - lw $t0 -764($fp) - lw $t1 12($t0) - sw $t1 -792($fp) - lw $t0 -796($fp) - lw $t1 -792($fp) - seq $t0 $t0 $t1 - sw $t0 -768($fp) - j label_328 - label_328: - lw $t0 -768($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -800($fp) - lw $t0 -800($fp) - lw $t1 12($t0) - sw $t1 -804($fp) - lw $t0 -804($fp) - bne $t0 $zero label_401 - li $t0 10 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -716($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -740($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -736($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -732($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -728($fp) - lw $t0 -740($fp) - lw $t1 -736($fp) - seq $t0 $t0 $t1 - sw $t0 -724($fp) - lw $t0 -724($fp) - bne $t0 $zero label_329 - lw $t0 -740($fp) - lw $t1 -732($fp) - seq $t0 $t0 $t1 - sw $t0 -724($fp) - lw $t0 -724($fp) - bne $t0 $zero label_330 - lw $t0 -740($fp) - lw $t1 -728($fp) - seq $t0 $t0 $t1 - sw $t0 -724($fp) - lw $t0 -724($fp) - bne $t0 $zero label_331 - lw $t0 -1588($fp) - lw $t1 -716($fp) - seq $t0 $t0 $t1 - sw $t0 -720($fp) - j label_332 - label_329: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -748($fp) - lw $t0 -716($fp) - lw $t1 12($t0) - sw $t1 -744($fp) - lw $t0 -748($fp) - lw $t1 -744($fp) - seq $t0 $t0 $t1 - sw $t0 -720($fp) - j label_332 - label_330: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -748($fp) - lw $t0 -716($fp) - lw $t1 12($t0) - sw $t1 -744($fp) - lw $t0 -748($fp) - move $a0 $t0 - lw $t0 -744($fp) - move $a1 $t0 - jal equal_str - sw $v0 -720($fp) - j label_332 - label_331: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -748($fp) - lw $t0 -716($fp) - lw $t1 12($t0) - sw $t1 -744($fp) - lw $t0 -748($fp) - lw $t1 -744($fp) - seq $t0 $t0 $t1 - sw $t0 -720($fp) - j label_332 - label_332: - lw $t0 -720($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -752($fp) - lw $t0 -752($fp) - lw $t1 12($t0) - sw $t1 -756($fp) - lw $t0 -756($fp) - bne $t0 $zero label_399 - li $t0 11 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -668($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -692($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -688($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -684($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -680($fp) - lw $t0 -692($fp) - lw $t1 -688($fp) - seq $t0 $t0 $t1 - sw $t0 -676($fp) - lw $t0 -676($fp) - bne $t0 $zero label_333 - lw $t0 -692($fp) - lw $t1 -684($fp) - seq $t0 $t0 $t1 - sw $t0 -676($fp) - lw $t0 -676($fp) - bne $t0 $zero label_334 - lw $t0 -692($fp) - lw $t1 -680($fp) - seq $t0 $t0 $t1 - sw $t0 -676($fp) - lw $t0 -676($fp) - bne $t0 $zero label_335 - lw $t0 -1588($fp) - lw $t1 -668($fp) - seq $t0 $t0 $t1 - sw $t0 -672($fp) - j label_336 - label_333: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -700($fp) - lw $t0 -668($fp) - lw $t1 12($t0) - sw $t1 -696($fp) - lw $t0 -700($fp) - lw $t1 -696($fp) - seq $t0 $t0 $t1 - sw $t0 -672($fp) - j label_336 - label_334: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -700($fp) - lw $t0 -668($fp) - lw $t1 12($t0) - sw $t1 -696($fp) - lw $t0 -700($fp) - move $a0 $t0 - lw $t0 -696($fp) - move $a1 $t0 - jal equal_str - sw $v0 -672($fp) - j label_336 - label_335: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -700($fp) - lw $t0 -668($fp) - lw $t1 12($t0) - sw $t1 -696($fp) - lw $t0 -700($fp) - lw $t1 -696($fp) - seq $t0 $t0 $t1 - sw $t0 -672($fp) - j label_336 - label_336: - lw $t0 -672($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -704($fp) - lw $t0 -704($fp) - lw $t1 12($t0) - sw $t1 -708($fp) - lw $t0 -708($fp) - bne $t0 $zero label_397 - li $t0 12 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -620($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -644($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -640($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -636($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -632($fp) - lw $t0 -644($fp) - lw $t1 -640($fp) - seq $t0 $t0 $t1 - sw $t0 -628($fp) - lw $t0 -628($fp) - bne $t0 $zero label_337 - lw $t0 -644($fp) - lw $t1 -636($fp) - seq $t0 $t0 $t1 - sw $t0 -628($fp) - lw $t0 -628($fp) - bne $t0 $zero label_338 - lw $t0 -644($fp) - lw $t1 -632($fp) - seq $t0 $t0 $t1 - sw $t0 -628($fp) - lw $t0 -628($fp) - bne $t0 $zero label_339 - lw $t0 -1588($fp) - lw $t1 -620($fp) - seq $t0 $t0 $t1 - sw $t0 -624($fp) - j label_340 - label_337: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -652($fp) - lw $t0 -620($fp) - lw $t1 12($t0) - sw $t1 -648($fp) - lw $t0 -652($fp) - lw $t1 -648($fp) - seq $t0 $t0 $t1 - sw $t0 -624($fp) - j label_340 - label_338: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -652($fp) - lw $t0 -620($fp) - lw $t1 12($t0) - sw $t1 -648($fp) - lw $t0 -652($fp) - move $a0 $t0 - lw $t0 -648($fp) - move $a1 $t0 - jal equal_str - sw $v0 -624($fp) - j label_340 - label_339: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -652($fp) - lw $t0 -620($fp) - lw $t1 12($t0) - sw $t1 -648($fp) - lw $t0 -652($fp) - lw $t1 -648($fp) - seq $t0 $t0 $t1 - sw $t0 -624($fp) - j label_340 - label_340: - lw $t0 -624($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -656($fp) - lw $t0 -656($fp) - lw $t1 12($t0) - sw $t1 -660($fp) - lw $t0 -660($fp) - bne $t0 $zero label_395 - li $t0 13 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -572($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -596($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -592($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -588($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -584($fp) - lw $t0 -596($fp) - lw $t1 -592($fp) - seq $t0 $t0 $t1 - sw $t0 -580($fp) - lw $t0 -580($fp) - bne $t0 $zero label_341 - lw $t0 -596($fp) - lw $t1 -588($fp) - seq $t0 $t0 $t1 - sw $t0 -580($fp) - lw $t0 -580($fp) - bne $t0 $zero label_342 - lw $t0 -596($fp) - lw $t1 -584($fp) - seq $t0 $t0 $t1 - sw $t0 -580($fp) - lw $t0 -580($fp) - bne $t0 $zero label_343 - lw $t0 -1588($fp) - lw $t1 -572($fp) - seq $t0 $t0 $t1 - sw $t0 -576($fp) - j label_344 - label_341: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -604($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -600($fp) - lw $t0 -604($fp) - lw $t1 -600($fp) - seq $t0 $t0 $t1 - sw $t0 -576($fp) - j label_344 - label_342: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -604($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -600($fp) - lw $t0 -604($fp) - move $a0 $t0 - lw $t0 -600($fp) - move $a1 $t0 - jal equal_str - sw $v0 -576($fp) - j label_344 - label_343: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -604($fp) - lw $t0 -572($fp) - lw $t1 12($t0) - sw $t1 -600($fp) - lw $t0 -604($fp) - lw $t1 -600($fp) - seq $t0 $t0 $t1 - sw $t0 -576($fp) - j label_344 - label_344: - lw $t0 -576($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -608($fp) - lw $t0 -608($fp) - lw $t1 12($t0) - sw $t1 -612($fp) - lw $t0 -612($fp) - bne $t0 $zero label_393 - li $t0 14 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -524($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -548($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -544($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -540($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -536($fp) - lw $t0 -548($fp) - lw $t1 -544($fp) - seq $t0 $t0 $t1 - sw $t0 -532($fp) - lw $t0 -532($fp) - bne $t0 $zero label_345 - lw $t0 -548($fp) - lw $t1 -540($fp) - seq $t0 $t0 $t1 - sw $t0 -532($fp) - lw $t0 -532($fp) - bne $t0 $zero label_346 - lw $t0 -548($fp) - lw $t1 -536($fp) - seq $t0 $t0 $t1 - sw $t0 -532($fp) - lw $t0 -532($fp) - bne $t0 $zero label_347 - lw $t0 -1588($fp) - lw $t1 -524($fp) - seq $t0 $t0 $t1 - sw $t0 -528($fp) - j label_348 - label_345: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -556($fp) - lw $t0 -524($fp) - lw $t1 12($t0) - sw $t1 -552($fp) - lw $t0 -556($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -528($fp) - j label_348 - label_346: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -556($fp) - lw $t0 -524($fp) - lw $t1 12($t0) - sw $t1 -552($fp) - lw $t0 -556($fp) - move $a0 $t0 - lw $t0 -552($fp) - move $a1 $t0 - jal equal_str - sw $v0 -528($fp) - j label_348 - label_347: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -556($fp) - lw $t0 -524($fp) - lw $t1 12($t0) - sw $t1 -552($fp) - lw $t0 -556($fp) - lw $t1 -552($fp) - seq $t0 $t0 $t1 - sw $t0 -528($fp) - j label_348 - label_348: - lw $t0 -528($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -560($fp) - lw $t0 -560($fp) - lw $t1 12($t0) - sw $t1 -564($fp) - lw $t0 -564($fp) - bne $t0 $zero label_391 - li $t0 15 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -476($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -500($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -496($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -492($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -488($fp) - lw $t0 -500($fp) - lw $t1 -496($fp) - seq $t0 $t0 $t1 - sw $t0 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_349 - lw $t0 -500($fp) - lw $t1 -492($fp) - seq $t0 $t0 $t1 - sw $t0 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_350 - lw $t0 -500($fp) - lw $t1 -488($fp) - seq $t0 $t0 $t1 - sw $t0 -484($fp) - lw $t0 -484($fp) - bne $t0 $zero label_351 - lw $t0 -1588($fp) - lw $t1 -476($fp) - seq $t0 $t0 $t1 - sw $t0 -480($fp) - j label_352 - label_349: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -504($fp) - lw $t0 -508($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -480($fp) - j label_352 - label_350: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -504($fp) - lw $t0 -508($fp) - move $a0 $t0 - lw $t0 -504($fp) - move $a1 $t0 - jal equal_str - sw $v0 -480($fp) - j label_352 - label_351: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -508($fp) - lw $t0 -476($fp) - lw $t1 12($t0) - sw $t1 -504($fp) - lw $t0 -508($fp) - lw $t1 -504($fp) - seq $t0 $t0 $t1 - sw $t0 -480($fp) - j label_352 - label_352: - lw $t0 -480($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -512($fp) - lw $t0 -512($fp) - lw $t1 12($t0) - sw $t1 -516($fp) - lw $t0 -516($fp) - bne $t0 $zero label_389 - li $t0 16 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -428($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -452($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -448($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -444($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -440($fp) - lw $t0 -452($fp) - lw $t1 -448($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_353 - lw $t0 -452($fp) - lw $t1 -444($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_354 - lw $t0 -452($fp) - lw $t1 -440($fp) - seq $t0 $t0 $t1 - sw $t0 -436($fp) - lw $t0 -436($fp) - bne $t0 $zero label_355 - lw $t0 -1588($fp) - lw $t1 -428($fp) - seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_356 - label_353: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_356 - label_354: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - move $a0 $t0 - lw $t0 -456($fp) - move $a1 $t0 - jal equal_str - sw $v0 -432($fp) - j label_356 - label_355: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -460($fp) - lw $t0 -428($fp) - lw $t1 12($t0) - sw $t1 -456($fp) - lw $t0 -460($fp) - lw $t1 -456($fp) - seq $t0 $t0 $t1 - sw $t0 -432($fp) - j label_356 - label_356: - lw $t0 -432($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -464($fp) - lw $t0 -464($fp) - lw $t1 12($t0) - sw $t1 -468($fp) - lw $t0 -468($fp) - bne $t0 $zero label_387 - li $t0 17 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -380($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -404($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -400($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -396($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -392($fp) - lw $t0 -404($fp) - lw $t1 -400($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_357 - lw $t0 -404($fp) - lw $t1 -396($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_358 - lw $t0 -404($fp) - lw $t1 -392($fp) - seq $t0 $t0 $t1 - sw $t0 -388($fp) - lw $t0 -388($fp) - bne $t0 $zero label_359 - lw $t0 -1588($fp) - lw $t1 -380($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_360 - label_357: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -380($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_360 - label_358: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -380($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - move $a0 $t0 - lw $t0 -408($fp) - move $a1 $t0 - jal equal_str - sw $v0 -384($fp) - j label_360 - label_359: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -412($fp) - lw $t0 -380($fp) - lw $t1 12($t0) - sw $t1 -408($fp) - lw $t0 -412($fp) - lw $t1 -408($fp) - seq $t0 $t0 $t1 - sw $t0 -384($fp) - j label_360 - label_360: - lw $t0 -384($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -416($fp) - lw $t0 -416($fp) - lw $t1 12($t0) - sw $t1 -420($fp) - lw $t0 -420($fp) - bne $t0 $zero label_385 - li $t0 18 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -332($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -356($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -352($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -348($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -344($fp) - lw $t0 -356($fp) - lw $t1 -352($fp) - seq $t0 $t0 $t1 - sw $t0 -340($fp) - lw $t0 -340($fp) - bne $t0 $zero label_361 - lw $t0 -356($fp) - lw $t1 -348($fp) - seq $t0 $t0 $t1 - sw $t0 -340($fp) - lw $t0 -340($fp) - bne $t0 $zero label_362 - lw $t0 -356($fp) - lw $t1 -344($fp) - seq $t0 $t0 $t1 - sw $t0 -340($fp) - lw $t0 -340($fp) - bne $t0 $zero label_363 - lw $t0 -1588($fp) - lw $t1 -332($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - j label_364 - label_361: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -364($fp) - lw $t0 -332($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -364($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - j label_364 - label_362: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -364($fp) - lw $t0 -332($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -364($fp) - move $a0 $t0 - lw $t0 -360($fp) - move $a1 $t0 - jal equal_str - sw $v0 -336($fp) - j label_364 - label_363: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -364($fp) - lw $t0 -332($fp) - lw $t1 12($t0) - sw $t1 -360($fp) - lw $t0 -364($fp) - lw $t1 -360($fp) - seq $t0 $t0 $t1 - sw $t0 -336($fp) - j label_364 - label_364: - lw $t0 -336($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -368($fp) - lw $t0 -368($fp) - lw $t1 12($t0) - sw $t1 -372($fp) - lw $t0 -372($fp) - bne $t0 $zero label_383 - li $t0 19 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -284($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -308($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -304($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -300($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -296($fp) - lw $t0 -308($fp) - lw $t1 -304($fp) - seq $t0 $t0 $t1 - sw $t0 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_365 - lw $t0 -308($fp) - lw $t1 -300($fp) - seq $t0 $t0 $t1 - sw $t0 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_366 - lw $t0 -308($fp) - lw $t1 -296($fp) - seq $t0 $t0 $t1 - sw $t0 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_367 - lw $t0 -1588($fp) - lw $t1 -284($fp) - seq $t0 $t0 $t1 - sw $t0 -288($fp) - j label_368 - label_365: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -284($fp) - lw $t1 12($t0) - sw $t1 -312($fp) - lw $t0 -316($fp) - lw $t1 -312($fp) - seq $t0 $t0 $t1 - sw $t0 -288($fp) - j label_368 - label_366: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -284($fp) - lw $t1 12($t0) - sw $t1 -312($fp) - lw $t0 -316($fp) - move $a0 $t0 - lw $t0 -312($fp) - move $a1 $t0 - jal equal_str - sw $v0 -288($fp) - j label_368 - label_367: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -284($fp) - lw $t1 12($t0) - sw $t1 -312($fp) - lw $t0 -316($fp) - lw $t1 -312($fp) - seq $t0 $t0 $t1 - sw $t0 -288($fp) - j label_368 - label_368: - lw $t0 -288($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -320($fp) - lw $t0 -320($fp) - lw $t1 12($t0) - sw $t1 -324($fp) - lw $t0 -324($fp) - bne $t0 $zero label_381 - li $t0 20 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -236($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -260($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -256($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -252($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -248($fp) - lw $t0 -260($fp) - lw $t1 -256($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_369 - lw $t0 -260($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_370 - lw $t0 -260($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_371 - lw $t0 -1588($fp) - lw $t1 -236($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_372 - label_369: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -236($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_372 - label_370: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -236($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - move $a0 $t0 - lw $t0 -264($fp) - move $a1 $t0 - jal equal_str - sw $v0 -240($fp) - j label_372 - label_371: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -236($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_372 - label_372: - lw $t0 -240($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -276($fp) - bne $t0 $zero label_379 - li $t0 21 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -188($fp) - lw $t0 -1588($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -212($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -208($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -204($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -200($fp) - lw $t0 -212($fp) - lw $t1 -208($fp) - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_373 - lw $t0 -212($fp) - lw $t1 -204($fp) - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_374 - lw $t0 -212($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -196($fp) - lw $t0 -196($fp) - bne $t0 $zero label_375 - lw $t0 -1588($fp) - lw $t1 -188($fp) - seq $t0 $t0 $t1 - sw $t0 -192($fp) - j label_376 - label_373: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -192($fp) - j label_376 - label_374: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - move $a0 $t0 - lw $t0 -216($fp) - move $a1 $t0 - jal equal_str - sw $v0 -192($fp) - j label_376 - label_375: - lw $t0 -1588($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -188($fp) - lw $t1 12($t0) - sw $t1 -216($fp) - lw $t0 -220($fp) - lw $t1 -216($fp) - seq $t0 $t0 $t1 - sw $t0 -192($fp) - j label_376 - label_376: - lw $t0 -192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -224($fp) - lw $t0 -224($fp) - lw $t1 12($t0) - sw $t1 -228($fp) - lw $t0 -228($fp) - bne $t0 $zero label_377 - la $t0 data_130 - sw $t0 -184($fp) - lw $t0 -184($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -180($fp) - lw $t0 -180($fp) - sw $t0 -232($fp) - j label_378 - label_377: - la $t0 data_131 - sw $t0 -176($fp) - lw $t0 -176($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -172($fp) - lw $t0 -172($fp) - sw $t0 -232($fp) - label_378: - lw $t0 -232($fp) - sw $t0 -280($fp) - j label_380 - label_379: - la $t0 data_132 - sw $t0 -168($fp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - sw $t0 -280($fp) - label_380: - lw $t0 -280($fp) - sw $t0 -328($fp) - j label_382 - label_381: - la $t0 data_133 - sw $t0 -160($fp) - lw $t0 -160($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - sw $t0 -328($fp) - label_382: - lw $t0 -328($fp) - sw $t0 -376($fp) - j label_384 - label_383: - la $t0 data_134 - sw $t0 -152($fp) - lw $t0 -152($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - sw $t0 -376($fp) - label_384: - lw $t0 -376($fp) - sw $t0 -424($fp) - j label_386 - label_385: - la $t0 data_135 - sw $t0 -144($fp) - lw $t0 -144($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -140($fp) - lw $t0 -140($fp) - sw $t0 -424($fp) - label_386: - lw $t0 -424($fp) - sw $t0 -472($fp) - j label_388 - label_387: - la $t0 data_136 - sw $t0 -136($fp) - lw $t0 -136($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -132($fp) - lw $t0 -132($fp) - sw $t0 -472($fp) - label_388: - lw $t0 -472($fp) - sw $t0 -520($fp) - j label_390 - label_389: - la $t0 data_137 - sw $t0 -128($fp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -124($fp) - sw $t0 -520($fp) - label_390: - lw $t0 -520($fp) - sw $t0 -568($fp) - j label_392 - label_391: - la $t0 data_138 - sw $t0 -120($fp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - sw $t0 -568($fp) - label_392: - lw $t0 -568($fp) - sw $t0 -616($fp) - j label_394 - label_393: - la $t0 data_139 - sw $t0 -112($fp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 -108($fp) - sw $t0 -616($fp) - label_394: - lw $t0 -616($fp) - sw $t0 -664($fp) - j label_396 - label_395: - la $t0 data_140 - sw $t0 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -664($fp) - label_396: - lw $t0 -664($fp) - sw $t0 -712($fp) - j label_398 - label_397: - la $t0 data_141 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - sw $t0 -712($fp) - label_398: - lw $t0 -712($fp) - sw $t0 -760($fp) - j label_400 - label_399: - la $t0 data_142 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -760($fp) - label_400: - lw $t0 -760($fp) - sw $t0 -808($fp) - j label_402 - label_401: - la $t0 data_143 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - sw $t0 -808($fp) - label_402: - lw $t0 -808($fp) - sw $t0 -856($fp) - j label_404 - label_403: - la $t0 data_144 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -856($fp) - label_404: - lw $t0 -856($fp) - sw $t0 -904($fp) - j label_406 - label_405: - la $t0 data_145 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -904($fp) - label_406: - lw $t0 -904($fp) - sw $t0 -952($fp) - j label_408 - label_407: - la $t0 data_146 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - sw $t0 -952($fp) - label_408: - lw $t0 -952($fp) - sw $t0 -1000($fp) - j label_410 - label_409: - la $t0 data_147 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - sw $t0 -1000($fp) - label_410: - lw $t0 -1000($fp) - sw $t0 -1048($fp) - j label_412 - label_411: - la $t0 data_148 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - sw $t0 -1048($fp) - label_412: - lw $t0 -1048($fp) - sw $t0 -1096($fp) - j label_414 - label_413: - la $t0 data_149 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -1096($fp) - label_414: - lw $t0 -1096($fp) - sw $t0 -1144($fp) - j label_416 - label_415: - la $t0 data_150 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -1144($fp) - label_416: - lw $t0 -1144($fp) - sw $t0 -1192($fp) - j label_418 - label_417: - la $t0 data_151 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -1192($fp) - label_418: - lw $v0 -1192($fp) - addi $sp $sp 1596 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_prompt_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -136 - la $t0 data_10 - sw $t0 -128($fp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -128($fp) - la $t0 data_152 - sw $t0 -124($fp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_419 - j label_420 - label_419: - li $v0 4 - la $a0 data_153 - syscall - li $v0 10 - syscall - label_420: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -112($fp) - la $t0 data_154 - sw $t0 -108($fp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_421 - j label_422 - label_421: - li $v0 4 - la $a0 data_155 - syscall - li $v0 10 - syscall - label_422: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -96($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_423 - j label_424 - label_423: - li $v0 4 - la $a0 data_156 - syscall - li $v0 10 - syscall - label_424: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - sw $t0 -128($fp) - la $t0 data_157 - sw $t0 -84($fp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_425 - j label_426 - label_425: - li $v0 4 - la $a0 data_158 - syscall - li $v0 10 - syscall - label_426: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -72($fp) - la $t0 data_159 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -128($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -48($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -44($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -36($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_427 - lw $t0 -48($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_428 - lw $t0 -48($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_429 - lw $t0 -128($fp) - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_430 - label_427: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_430 - label_428: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - move $a0 $t0 - lw $t0 -52($fp) - move $a1 $t0 - jal equal_str - sw $v0 -28($fp) - j label_430 - label_429: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_430 - label_430: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_431 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -68($fp) - j label_432 - label_431: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -68($fp) - label_432: - lw $v0 -68($fp) - addi $sp $sp 136 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_prompt2_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -136 - la $t0 data_10 - sw $t0 -128($fp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -128($fp) - la $t0 data_160 - sw $t0 -124($fp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_433 - j label_434 - label_433: - li $v0 4 - la $a0 data_161 - syscall - li $v0 10 - syscall - label_434: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -112($fp) - la $t0 data_162 - sw $t0 -108($fp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_435 - j label_436 - label_435: - li $v0 4 - la $a0 data_163 - syscall - li $v0 10 - syscall - label_436: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -96($fp) - la $t0 data_164 - sw $t0 -92($fp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_437 - j label_438 - label_437: - li $v0 4 - la $a0 data_165 - syscall - li $v0 10 - syscall - label_438: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -80($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_439 - j label_440 - label_439: - li $v0 4 - la $a0 data_166 - syscall - li $v0 10 - syscall - label_440: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -128($fp) - la $t0 data_167 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -128($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -48($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -44($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -36($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_441 - lw $t0 -48($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_442 - lw $t0 -48($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_443 - lw $t0 -128($fp) - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_444 - label_441: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_444 - label_442: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - move $a0 $t0 - lw $t0 -52($fp) - move $a1 $t0 - jal equal_str - sw $v0 -28($fp) - j label_444 - label_443: - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_444 - label_444: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_445 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -68($fp) - j label_446 - label_445: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -68($fp) - label_446: - lw $v0 -68($fp) - addi $sp $sp 136 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_CellularAutomaton: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_CellularAutomaton - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_CellularAutomaton - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 28($t0) - lw $v0 0($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -144 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -132($fp) - la $t0 data_10 - sw $t0 -128($fp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -128($fp) - la $t0 data_168 - sw $t0 -124($fp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_447 - j label_448 - label_447: - li $v0 4 - la $a0 data_169 - syscall - li $v0 10 - syscall - label_448: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -112($fp) - la $t0 data_170 - sw $t0 -108($fp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -100($fp) - lw $t0 -100($fp) - bne $t0 $zero label_449 - j label_450 - label_449: - li $v0 4 - la $a0 data_171 - syscall - li $v0 10 - syscall - label_450: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -96($fp) - label_451: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_452 - j label_453 - label_452: - li $v0 4 - la $a0 data_172 - syscall - li $v0 10 - syscall - label_453: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 88($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_454 - j label_472 - label_454: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - sw $t0 -132($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_455 - j label_456 - label_455: - li $v0 4 - la $a0 data_173 - syscall - li $v0 10 - syscall - label_456: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 76($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -128($fp) - jal __init_at_CellularAutomaton - sw $v0 -68($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_457 - j label_458 - label_457: - li $v0 4 - la $a0 data_174 - syscall - li $v0 10 - syscall - label_458: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 0($fp) - addi $t1 $t1 28 - sw $t0 0($t1) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_459 - j label_460 - label_459: - li $v0 4 - la $a0 data_175 - syscall - li $v0 10 - syscall - label_460: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 80($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - label_461: - lw $t0 -132($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_462 - j label_471 - label_462: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_463 - j label_464 - label_463: - li $v0 4 - la $a0 data_176 - syscall - li $v0 10 - syscall - label_464: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 84($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_465 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -132($fp) - lw $t0 -132($fp) - sw $t0 -44($fp) - j label_470 - label_465: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_466 - j label_467 - label_466: - li $v0 4 - la $a0 data_177 - syscall - li $v0 10 - syscall - label_467: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_468 - j label_469 - label_468: - li $v0 4 - la $a0 data_178 - syscall - li $v0 10 - syscall - label_469: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 80($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -44($fp) - label_470: - j label_461 - label_471: - j label_451 - label_472: - lw $v0 0($fp) - addi $sp $sp 144 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/list.mips b/tests/codegen/list.mips index b88392533..e69de29bb 100644 --- a/tests/codegen/list.mips +++ b/tests/codegen/list.mips @@ -1,2099 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "List" -.word 0 -data_7: .asciiz "Cons" -.word 0 -data_8: .asciiz "Main" -.word 0 -data_9: .asciiz " -" -.word 0 -data_10: .asciiz "" -.word 0 -data_11: .asciiz "Abort called from class " -.word 0 -data_12: .asciiz "Substring out of range" -.word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_19: .asciiz " " -.word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_23: .asciiz "\n" -.word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_28: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_30: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_31: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_cons_at_List - .word function_head_at_List - .word function_isNil_at_List - .word function_tail_at_List - .word __init_attr_at_List - .word __init_at_List - -type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_cons_at_List - .word function_head_at_Cons - .word function_isNil_at_Cons - .word function_tail_at_Cons - .word function_init_at_Cons - .word __init_attr_at_Cons - .word __init_at_Cons - -type_7_prototype: - .word 6 - .word 6 - .word type_7_dispatch - .word 0 - .word 0 - .word -1 - - -type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word function_print_list_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_8_prototype: - .word 7 - .word 5 - .word type_8_dispatch - .word 0 - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_11 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_head_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_tail_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_6: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cons_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -20($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_head_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_tail_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Cons - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_list_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -84 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_10: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_21 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_12: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_14: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - la $t0 data_19 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_16: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_18: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_20: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -88($fp) - j label_24 - label_21: - la $t0 data_23 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_22 - j label_23 - label_22: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_23: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -88($fp) - label_24: - lw $v0 -88($fp) - addi $sp $sp 84 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -108 - li $t0 5 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -112($fp) - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -104($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -96($fp) - jal __init_at_List - sw $v0 -92($fp) - lw $t0 -92($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_25 - j label_26 - label_25: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_26: - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -84($fp) - lw $t0 -84($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_28: - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -76($fp) - lw $t0 -76($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_29 - j label_30 - label_29: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_30: - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -68($fp) - lw $t0 -68($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_31 - j label_32 - label_31: - li $v0 4 - la $a0 data_28 - syscall - li $v0 10 - syscall - label_32: - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_33 - j label_34 - label_33: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_34: - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - lw $t0 -52($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - label_35: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_36 - j label_37 - label_36: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_37: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -40($fp) - xori $t0 $t0 1 - sw $t0 -36($fp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_38 - j label_43 - label_38: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_39 - j label_40 - label_39: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_40: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_41 - j label_42 - label_41: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_42: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - j label_35 - label_43: - li $v0 0 - addi $sp $sp 108 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/new_complex.mips b/tests/codegen/new_complex.mips index 7ff429dcd..e69de29bb 100644 --- a/tests/codegen/new_complex.mips +++ b/tests/codegen/new_complex.mips @@ -1,3200 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "Main" -.word 0 -data_7: .asciiz "Complex" -.word 0 -data_8: .asciiz " -" -.word 0 -data_9: .asciiz "" -.word 0 -data_10: .asciiz "Abort called from class " -.word 0 -data_11: .asciiz "Substring out of range" -.word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_15: .asciiz "=(\n" -.word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_17: .asciiz "=)\n" -.word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_23: .asciiz "=(\n" -.word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_25: .asciiz "=)\n" -.word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_27: .asciiz "I" -.word 0 -data_28: .asciiz "+" -.word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_30: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_31: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_33: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_34: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_equal_at_Complex - .word function_init_at_Complex - .word function_print_at_Complex - .word function_reflect_0_at_Complex - .word function_reflect_X_at_Complex - .word function_reflect_Y_at_Complex - .word function_x_value_at_Complex - .word function_y_value_at_Complex - .word __init_attr_at_Complex - .word __init_at_Complex - -type_7_prototype: - .word 6 - .word 6 - .word type_7_dispatch - .word 0 - .word 0 - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_10 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_8 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_11 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -188 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -192($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -188($fp) - jal __init_at_Complex - sw $v0 -184($fp) - lw $t0 -184($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_4: - lw $t0 -184($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -192($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -188($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -184($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -176($fp) - lw $t0 -176($fp) - sw $t0 -196($fp) - lw $t0 -196($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -128($fp) - lw $t0 -128($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -124($fp) - lw $t0 -196($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -124($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -152($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -148($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -144($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -140($fp) - lw $t0 -152($fp) - lw $t1 -148($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_9 - lw $t0 -152($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_10 - lw $t0 -152($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -136($fp) - lw $t0 -136($fp) - bne $t0 $zero label_11 - lw $t0 -124($fp) - lw $t1 -116($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_12 - label_9: - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_12 - label_10: - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - move $a0 $t0 - lw $t0 -156($fp) - move $a1 $t0 - jal equal_str - sw $v0 -132($fp) - j label_12 - label_11: - lw $t0 -124($fp) - lw $t1 12($t0) - sw $t1 -160($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -160($fp) - lw $t1 -156($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - j label_12 - label_12: - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -168($fp) - lw $t0 -168($fp) - bne $t0 $zero label_15 - la $t0 data_15 - sw $t0 -112($fp) - lw $t0 -112($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -108($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -104($fp) - lw $t0 -104($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_14: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -100($fp) - lw $t0 -100($fp) - sw $t0 -172($fp) - j label_18 - label_15: - la $t0 data_17 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_16 - j label_17 - label_16: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_17: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -172($fp) - label_18: - lw $t0 -196($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_20: - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -196($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_22: - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -196($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 44($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_24: - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_25 - j label_26 - label_25: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_26: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_29 - la $t0 data_23 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_28: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -80($fp) - j label_32 - label_29: - la $t0 data_25 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_30 - j label_31 - label_30: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_31: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -80($fp) - label_32: - lw $v0 -80($fp) - addi $sp $sp 188 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_init_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -80 - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -68($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -64($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -60($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -56($fp) - lw $t0 -68($fp) - lw $t1 -64($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_33 - lw $t0 -68($fp) - lw $t1 -60($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_34 - lw $t0 -68($fp) - lw $t1 -56($fp) - seq $t0 $t0 $t1 - sw $t0 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_35 - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 4($fp) - seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_36 - label_33: - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_36 - label_34: - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - move $a0 $t0 - lw $t0 -72($fp) - move $a1 $t0 - jal equal_str - sw $v0 -48($fp) - j label_36 - label_35: - lw $t4 8($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -76($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -72($fp) - lw $t0 -76($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -48($fp) - j label_36 - label_36: - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -32($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -28($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -24($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -20($fp) - lw $t0 -32($fp) - lw $t1 -28($fp) - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_37 - lw $t0 -32($fp) - lw $t1 -24($fp) - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_38 - lw $t0 -32($fp) - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_39 - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($fp) - seq $t0 $t0 $t1 - sw $t0 -12($fp) - j label_40 - label_37: - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -12($fp) - j label_40 - label_38: - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - move $a0 $t0 - lw $t0 -36($fp) - move $a1 $t0 - jal equal_str - sw $v0 -12($fp) - j label_40 - label_39: - lw $t4 8($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 -40($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -12($fp) - j label_40 - label_40: - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -44($fp) - lw $v0 8($fp) - addi $sp $sp 80 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -112 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_41 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_42 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_43 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_44 - label_41: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_44 - label_42: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_44 - label_43: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_44 - label_44: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t0 -104($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -108($fp) - bne $t0 $zero label_53 - la $t0 data_27 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - la $t0 data_28 - sw $t0 -56($fp) - lw $t0 -56($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_45 - j label_46 - label_45: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_46: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_47 - j label_48 - label_47: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_48: - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_49 - j label_50 - label_49: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_50: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_51 - j label_52 - label_51: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_52: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -112($fp) - j label_56 - label_53: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_54 - j label_55 - label_54: - li $v0 4 - la $a0 data_33 - syscall - li $v0 10 - syscall - label_55: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -112($fp) - label_56: - lw $v0 -112($fp) - addi $sp $sp 112 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_reflect_0_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -104 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -60($fp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -92($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -88($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -84($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -80($fp) - lw $t0 -92($fp) - lw $t1 -88($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_57 - lw $t0 -92($fp) - lw $t1 -84($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_58 - lw $t0 -92($fp) - lw $t1 -80($fp) - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_59 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -68($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_60 - label_57: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_60 - label_58: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - move $a0 $t0 - lw $t0 -96($fp) - move $a1 $t0 - jal equal_str - sw $v0 -72($fp) - j label_60 - label_59: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t0 -100($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -72($fp) - j label_60 - label_60: - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -104($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -44($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -36($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -32($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_61 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_62 - lw $t0 -44($fp) - lw $t1 -32($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_63 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_64 - label_61: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_64 - label_62: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - move $a0 $t0 - lw $t0 -48($fp) - move $a1 $t0 - jal equal_str - sw $v0 -24($fp) - j label_64 - label_63: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_64 - label_64: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $v0 0($fp) - addi $sp $sp 104 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_reflect_X_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -44($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -36($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -32($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_65 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_66 - lw $t0 -44($fp) - lw $t1 -32($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_67 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_68 - label_65: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_68 - label_66: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - move $a0 $t0 - lw $t0 -48($fp) - move $a1 $t0 - jal equal_str - sw $v0 -24($fp) - j label_68 - label_67: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_68 - label_68: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $v0 0($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_reflect_Y_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -56 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -44($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -36($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -32($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_69 - lw $t0 -44($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_70 - lw $t0 -44($fp) - lw $t1 -32($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_71 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_72 - label_69: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_72 - label_70: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - move $a0 $t0 - lw $t0 -48($fp) - move $a1 $t0 - jal equal_str - sw $v0 -24($fp) - j label_72 - label_71: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - seq $t0 $t0 $t1 - sw $t0 -24($fp) - j label_72 - label_72: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $v0 0($fp) - addi $sp $sp 56 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_equal_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -124 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_73 - j label_74 - label_73: - li $v0 4 - la $a0 data_34 - syscall - li $v0 10 - syscall - label_74: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -104($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -100($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -96($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -92($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_75 - lw $t0 -104($fp) - lw $t1 -96($fp) - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_76 - lw $t0 -104($fp) - lw $t1 -92($fp) - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - bne $t0 $zero label_77 - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -76($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - j label_78 - label_75: - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - j label_78 - label_76: - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - move $a0 $t0 - lw $t0 -108($fp) - move $a1 $t0 - jal equal_str - sw $v0 -84($fp) - j label_78 - label_77: - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t0 -76($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - seq $t0 $t0 $t1 - sw $t0 -84($fp) - j label_78 - label_78: - lw $t0 -84($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_79 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -72($fp) - lw $t0 -72($fp) - sw $t0 -124($fp) - j label_88 - label_79: - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_80 - j label_81 - label_80: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_81: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -48($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -44($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -40($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -36($fp) - lw $t0 -48($fp) - lw $t1 -44($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_82 - lw $t0 -48($fp) - lw $t1 -40($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_83 - lw $t0 -48($fp) - lw $t1 -36($fp) - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_84 - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 -20($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_85 - label_82: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_85 - label_83: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - move $a0 $t0 - lw $t0 -52($fp) - move $a1 $t0 - jal equal_str - sw $v0 -28($fp) - j label_85 - label_84: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -56($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - seq $t0 $t0 $t1 - sw $t0 -28($fp) - j label_85 - label_85: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 -60($fp) - lw $t1 12($t0) - sw $t1 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_86 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -68($fp) - j label_87 - label_86: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -68($fp) - label_87: - lw $t0 -68($fp) - sw $t0 -124($fp) - label_88: - lw $v0 -124($fp) - addi $sp $sp 124 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_x_value_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_y_value_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Complex: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Complex - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/palindrome.mips b/tests/codegen/palindrome.mips index 05e09f86d..e69de29bb 100644 --- a/tests/codegen/palindrome.mips +++ b/tests/codegen/palindrome.mips @@ -1,1967 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "Main" -.word 0 -data_7: .asciiz " -" -.word 0 -data_8: .asciiz "" -.word 0 -data_9: .asciiz "Abort called from class " -.word 0 -data_10: .asciiz "Substring out of range" -.word 0 -data_11: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_19: .asciiz "enter a string\n" -.word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_23: .asciiz "that was not a palindrome\n" -.word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_25: .asciiz "that was a palindrome\n" -.word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word function_pal_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_6_prototype: - .word 5 - .word 5 - .word type_6_dispatch - .word 0 - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_7 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_10 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_pal_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -276 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -236($fp) - lw $t0 -236($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_11 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -232($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -228($fp) - lw $t0 -232($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -260($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -256($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -252($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -248($fp) - lw $t0 -260($fp) - lw $t1 -256($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_5 - lw $t0 -260($fp) - lw $t1 -252($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_6 - lw $t0 -260($fp) - lw $t1 -248($fp) - seq $t0 $t0 $t1 - sw $t0 -244($fp) - lw $t0 -244($fp) - bne $t0 $zero label_7 - lw $t0 -232($fp) - lw $t1 -228($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_8 - label_5: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -228($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_8 - label_6: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -228($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - move $a0 $t0 - lw $t0 -264($fp) - move $a1 $t0 - jal equal_str - sw $v0 -240($fp) - j label_8 - label_7: - lw $t0 -232($fp) - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t0 -228($fp) - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - seq $t0 $t0 $t1 - sw $t0 -240($fp) - j label_8 - label_8: - lw $t0 -240($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -276($fp) - lw $t0 -276($fp) - bne $t0 $zero label_35 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -180($fp) - lw $t0 -180($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_10: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -176($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -172($fp) - lw $t0 -176($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -204($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -200($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -196($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -192($fp) - lw $t0 -204($fp) - lw $t1 -200($fp) - seq $t0 $t0 $t1 - sw $t0 -188($fp) - lw $t0 -188($fp) - bne $t0 $zero label_11 - lw $t0 -204($fp) - lw $t1 -196($fp) - seq $t0 $t0 $t1 - sw $t0 -188($fp) - lw $t0 -188($fp) - bne $t0 $zero label_12 - lw $t0 -204($fp) - lw $t1 -192($fp) - seq $t0 $t0 $t1 - sw $t0 -188($fp) - lw $t0 -188($fp) - bne $t0 $zero label_13 - lw $t0 -176($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -184($fp) - j label_14 - label_11: - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -172($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -212($fp) - lw $t1 -208($fp) - seq $t0 $t0 $t1 - sw $t0 -184($fp) - j label_14 - label_12: - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -172($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -212($fp) - move $a0 $t0 - lw $t0 -208($fp) - move $a1 $t0 - jal equal_str - sw $v0 -184($fp) - j label_14 - label_13: - lw $t0 -176($fp) - lw $t1 12($t0) - sw $t1 -212($fp) - lw $t0 -172($fp) - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t0 -212($fp) - lw $t1 -208($fp) - seq $t0 $t0 $t1 - sw $t0 -184($fp) - j label_14 - label_14: - lw $t0 -184($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -216($fp) - lw $t0 -216($fp) - lw $t1 12($t0) - sw $t1 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_33 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -124($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -120($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -116($fp) - lw $t0 -116($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_16: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -124($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -120($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -112($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -92($fp) - lw $t0 -92($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_18: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -88($fp) - lw $t0 -88($fp) - lw $t1 12($t0) - sw $t1 -104($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -100($fp) - lw $t0 -104($fp) - lw $t1 -100($fp) - sub $t0 $t0 $t1 - sw $t0 -96($fp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -108($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_20: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -108($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -72($fp) - lw $t0 -112($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -148($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -144($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -140($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -136($fp) - lw $t0 -148($fp) - lw $t1 -144($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_21 - lw $t0 -148($fp) - lw $t1 -140($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_22 - lw $t0 -148($fp) - lw $t1 -136($fp) - seq $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - bne $t0 $zero label_23 - lw $t0 -112($fp) - lw $t1 -72($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - j label_24 - label_21: - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) - lw $t1 -152($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - j label_24 - label_22: - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) - move $a0 $t0 - lw $t0 -152($fp) - move $a1 $t0 - jal equal_str - sw $v0 -128($fp) - j label_24 - label_23: - lw $t0 -112($fp) - lw $t1 12($t0) - sw $t1 -156($fp) - lw $t0 -72($fp) - lw $t1 12($t0) - sw $t1 -152($fp) - lw $t0 -156($fp) - lw $t1 -152($fp) - seq $t0 $t0 $t1 - sw $t0 -128($fp) - j label_24 - label_24: - lw $t0 -128($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_25 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 -68($fp) - sw $t0 -168($fp) - j label_32 - label_25: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -44($fp) - lw $t0 -44($fp) - bne $t0 $zero label_26 - j label_27 - label_26: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_27: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -40($fp) - lw $t0 -40($fp) - lw $t1 12($t0) - sw $t1 -56($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 -36($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -56($fp) - lw $t1 -52($fp) - sub $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_28 - j label_29 - label_28: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_29: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -28($fp) - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_30 - j label_31 - label_30: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_31: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -168($fp) - label_32: - lw $t0 -168($fp) - sw $t0 -224($fp) - j label_34 - label_33: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 -16($fp) - sw $t0 -224($fp) - label_34: - lw $t0 -224($fp) - sw $t0 -280($fp) - j label_36 - label_35: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -280($fp) - label_36: - lw $v0 -280($fp) - addi $sp $sp 276 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -92 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -92($fp) - not $t0 $t0 - addi $t0 $t0 1 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 -96($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - la $t0 data_19 - sw $t0 -80($fp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -76($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -72($fp) - lw $t0 -72($fp) - bne $t0 $zero label_37 - j label_38 - label_37: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_38: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -76($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -68($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_39 - j label_40 - label_39: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_40: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 16($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_41 - j label_42 - label_41: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_42: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -44($fp) - lw $t0 -44($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_45 - la $t0 data_23 - sw $t0 -40($fp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -36($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_44: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -64($fp) - j label_48 - label_45: - la $t0 data_25 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_46 - j label_47 - label_46: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_47: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -64($fp) - label_48: - lw $v0 -64($fp) - addi $sp $sp 92 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/primes.mips b/tests/codegen/primes.mips index cf0bfb264..e69de29bb 100644 --- a/tests/codegen/primes.mips +++ b/tests/codegen/primes.mips @@ -1,1783 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "Main" -.word 0 -data_7: .asciiz " -" -.word 0 -data_8: .asciiz "" -.word 0 -data_9: .asciiz "Abort called from class " -.word 0 -data_10: .asciiz "Substring out of range" -.word 0 -data_11: .asciiz "2 is trivially prime.\n" -.word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_13: .asciiz "RuntimeError: Division by zero" -.word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_15: .asciiz " is prime.\n" -.word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_17: .asciiz "continue" -.word 0 -data_18: .asciiz "halt" -.word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_6_prototype: - .word 5 - .word 9 - .word type_6_dispatch - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_7 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_10 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -388 - la $t0 data_11 - sw $t0 -372($fp) - lw $t0 -372($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -368($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -364($fp) - lw $t0 -364($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -368($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -360($fp) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -356($fp) - lw $t0 -356($fp) - sw $t0 -376($fp) - lw $t0 0($fp) - lw $t1 -376($fp) - sw $t1 20($t0) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - sw $t0 -352($fp) - lw $t0 0($fp) - lw $t1 -352($fp) - sw $t1 28($t0) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -348($fp) - lw $t0 0($fp) - lw $t1 -348($fp) - sw $t1 12($t0) - li $t0 500 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -340($fp) - lw $t0 -340($fp) - sw $t0 -344($fp) - lw $t0 0($fp) - lw $t1 -344($fp) - sw $t1 24($t0) - label_5: - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -328($fp) - lw $t0 -328($fp) - lw $t1 12($t0) - sw $t1 -332($fp) - lw $t0 -332($fp) - bne $t0 $zero label_6 - j label_30 - label_6: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -320($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -308($fp) - lw $t0 -308($fp) - lw $t1 12($t0) - sw $t1 -316($fp) - lw $t0 -320($fp) - lw $t1 -316($fp) - add $t0 $t0 $t1 - sw $t0 -312($fp) - lw $t0 -312($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -324($fp) - lw $t0 -324($fp) - lw $t1 0($fp) - addi $t1 $t1 28 - sw $t0 0($t1) - li $t0 2 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -304($fp) - lw $t0 -304($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - label_7: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -284($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -268($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -264($fp) - lw $t0 -268($fp) - lw $t1 -264($fp) - mul $t0 $t0 $t1 - sw $t0 -260($fp) - lw $t0 -260($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -272($fp) - lw $t0 -272($fp) - lw $t1 12($t0) - sw $t1 -280($fp) - lw $t0 -284($fp) - lw $t1 -280($fp) - slt $t1 $t0 $t1 - sw $t1 -276($fp) - lw $t0 -276($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -288($fp) - lw $t0 -288($fp) - lw $t1 12($t0) - sw $t1 -292($fp) - lw $t0 -292($fp) - bne $t0 $zero label_16 - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -208($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -192($fp) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -176($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -164($fp) - lw $t0 -164($fp) - lw $t1 12($t0) - sw $t1 -164($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -172($fp) - lw $t0 -164($fp) - lw $t1 -172($fp) - seq $t0 $t0 $t1 - sw $t0 -164($fp) - lw $t0 -164($fp) - bne $t0 $zero label_8 - j label_9 - label_8: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_9: - lw $t0 -176($fp) - lw $t1 -172($fp) - div $t0 $t1 - mflo $t0 - sw $t0 -168($fp) - lw $t0 -168($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -180($fp) - lw $t0 -180($fp) - lw $t1 12($t0) - sw $t1 -188($fp) - lw $t0 -192($fp) - lw $t1 -188($fp) - mul $t0 $t0 $t1 - sw $t0 -184($fp) - lw $t0 -184($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -196($fp) - lw $t0 -196($fp) - lw $t1 12($t0) - sw $t1 -204($fp) - lw $t0 -208($fp) - lw $t1 -204($fp) - sub $t0 $t0 $t1 - sw $t0 -200($fp) - lw $t0 -200($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -212($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -160($fp) - lw $t0 -212($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -236($fp) - la $t0 types_table - addi $t0 $t0 12 - lw $t0 0($t0) - sw $t0 -232($fp) - la $t0 types_table - addi $t0 $t0 8 - lw $t0 0($t0) - sw $t0 -228($fp) - la $t0 types_table - addi $t0 $t0 16 - lw $t0 0($t0) - sw $t0 -224($fp) - lw $t0 -236($fp) - lw $t1 -232($fp) - seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_10 - lw $t0 -236($fp) - lw $t1 -228($fp) - seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_11 - lw $t0 -236($fp) - lw $t1 -224($fp) - seq $t0 $t0 $t1 - sw $t0 -220($fp) - lw $t0 -220($fp) - bne $t0 $zero label_12 - lw $t0 -212($fp) - lw $t1 -160($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - j label_13 - label_10: - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - j label_13 - label_11: - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - move $a0 $t0 - lw $t0 -240($fp) - move $a1 $t0 - jal equal_str - sw $v0 -216($fp) - j label_13 - label_12: - lw $t0 -212($fp) - lw $t1 12($t0) - sw $t1 -244($fp) - lw $t0 -160($fp) - lw $t1 12($t0) - sw $t1 -240($fp) - lw $t0 -244($fp) - lw $t1 -240($fp) - seq $t0 $t0 $t1 - sw $t0 -216($fp) - j label_13 - label_13: - lw $t0 -216($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -248($fp) - lw $t0 -248($fp) - lw $t1 12($t0) - sw $t1 -252($fp) - lw $t0 -252($fp) - bne $t0 $zero label_14 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -156($fp) - lw $t0 -156($fp) - sw $t0 -256($fp) - j label_15 - label_14: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -152($fp) - lw $t0 -152($fp) - sw $t0 -256($fp) - label_15: - lw $t0 -256($fp) - sw $t0 -296($fp) - j label_17 - label_16: - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -148($fp) - lw $t0 -148($fp) - sw $t0 -296($fp) - label_17: - lw $t0 -296($fp) - lw $t1 12($t0) - sw $t1 -300($fp) - lw $t0 -300($fp) - bne $t0 $zero label_18 - j label_19 - label_18: - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -140($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -128($fp) - lw $t0 -128($fp) - lw $t1 12($t0) - sw $t1 -136($fp) - lw $t0 -140($fp) - lw $t1 -136($fp) - add $t0 $t0 $t1 - sw $t0 -132($fp) - lw $t0 -132($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -144($fp) - lw $t0 -144($fp) - lw $t1 0($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - j label_7 - label_19: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -112($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -96($fp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -92($fp) - lw $t0 -96($fp) - lw $t1 -92($fp) - mul $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - lw $t0 -100($fp) - lw $t1 12($t0) - sw $t1 -108($fp) - lw $t0 -112($fp) - lw $t1 -108($fp) - slt $t1 $t0 $t1 - sw $t1 -104($fp) - lw $t0 -104($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -116($fp) - lw $t0 -116($fp) - lw $t1 12($t0) - sw $t1 -120($fp) - lw $t0 -120($fp) - bne $t0 $zero label_20 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -84($fp) - lw $t0 -84($fp) - sw $t0 -124($fp) - j label_25 - label_20: - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 0($fp) - addi $t1 $t1 20 - sw $t0 0($t1) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -80($fp) - lw $t0 -80($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_22: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 20($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -76($fp) - la $t0 data_15 - sw $t0 -72($fp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -68($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -64($fp) - lw $t0 -64($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_24: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -60($fp) - lw $t0 -60($fp) - sw $t0 -124($fp) - label_25: - lw $t4 0($fp) - lw $t4 24($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -44($fp) - lw $t4 0($fp) - lw $t4 28($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 -44($fp) - lw $t1 -40($fp) - sle $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -48($fp) - lw $t0 -48($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 -52($fp) - bne $t0 $zero label_26 - la $t0 data_17 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -56($fp) - j label_29 - label_26: - la $t0 data_18 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_28: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -56($fp) - label_29: - j label_5 - label_30: - sw $zero -336($fp) - lw $t0 0($fp) - lw $t1 -336($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 388 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/print-cool.mips b/tests/codegen/print-cool.mips index 9c53891bb..e69de29bb 100644 --- a/tests/codegen/print-cool.mips +++ b/tests/codegen/print-cool.mips @@ -1,1341 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "Main" -.word 0 -data_7: .asciiz " -" -.word 0 -data_8: .asciiz "" -.word 0 -data_9: .asciiz "Abort called from class " -.word 0 -data_10: .asciiz "Substring out of range" -.word 0 -data_11: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_12: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_13: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_17: .asciiz "\n" -.word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_9 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_7 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_10 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -92 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -100($fp) - li $t0 3 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -96($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -88($fp) - lw $t0 -88($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -92($fp) - lw $t0 -92($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -84($fp) - lw $t0 -84($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_11 - syscall - li $v0 10 - syscall - label_4: - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -92($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 4($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -80($fp) - lw $t0 -80($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -76($fp) - lw $t0 -76($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_12 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -100($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -96($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -80($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -72($fp) - li $t0 4 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -68($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - jal __init_at_Object - sw $v0 -60($fp) - lw $t0 -60($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_8: - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 4($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -52($fp) - lw $t0 -52($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_10: - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -52($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_12: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_14: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -72($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -28($fp) - la $t0 data_17 - sw $t0 -24($fp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_16: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 92 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file diff --git a/tests/codegen/sort-list.mips b/tests/codegen/sort-list.mips index 2685db1ea..e69de29bb 100644 --- a/tests/codegen/sort-list.mips +++ b/tests/codegen/sort-list.mips @@ -1,2946 +0,0 @@ -.data -default_str: .asciiz "" -.word 0 -data_1: .asciiz "Object" -.word 0 -data_2: .asciiz "IO" -.word 0 -data_3: .asciiz "String" -.word 0 -data_4: .asciiz "Int" -.word 0 -data_5: .asciiz "Bool" -.word 0 -data_6: .asciiz "List" -.word 0 -data_7: .asciiz "Cons" -.word 0 -data_8: .asciiz "Nil" -.word 0 -data_9: .asciiz "Main" -.word 0 -data_10: .asciiz " -" -.word 0 -data_11: .asciiz "" -.word 0 -data_12: .asciiz "Abort called from class " -.word 0 -data_13: .asciiz "Substring out of range" -.word 0 -data_14: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_15: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_16: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_17: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_18: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_19: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_20: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_21: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_22: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_23: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_24: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_25: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_26: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_27: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_28: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_29: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_30: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_31: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_32: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_33: .asciiz "\n" -.word 0 -data_34: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_35: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_36: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_37: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_38: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_39: .asciiz "How many numbers to sort? " -.word 0 -data_40: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_41: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_42: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_43: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_44: .asciiz "RuntimeError: Function call in a void instance" -.word 0 -data_45: .asciiz "RuntimeError: Function call in a void instance" - - -types_table: - .word data_1 - .word data_2 - .word data_3 - .word data_4 - .word data_5 - .word data_6 - .word data_7 - .word data_8 - .word data_9 - -prototype_table: - .word type_1_prototype - .word type_2_prototype - .word type_3_prototype - .word type_4_prototype - .word type_5_prototype - .word type_6_prototype - .word type_7_prototype - .word type_8_prototype - .word type_9_prototype - -type_1_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Object - -type_1_prototype: - .word 0 - .word 4 - .word type_1_dispatch - .word -1 - - -type_2_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_out_string_at_IO - .word function_out_int_at_IO - .word function_in_string_at_IO - .word function_in_int_at_IO - .word __init_at_IO - -type_2_prototype: - .word 1 - .word 4 - .word type_2_dispatch - .word -1 - - -type_3_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word function_length_at_String - .word function_concat_at_String - .word function_substr_at_String - .word __init_at_String - -type_3_prototype: - .word 2 - .word 6 - .word type_3_dispatch - .word 0 - .word 0 - .word -1 - - -type_4_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Int - -type_4_prototype: - .word 3 - .word 5 - .word type_4_dispatch - .word 0 - .word -1 - - -type_5_dispatch: - .word function_abort_at_Object - .word function_type_name_at_Object - .word function_copy_at_Object - .word __init_at_Bool - -type_5_prototype: - .word 4 - .word 5 - .word type_5_dispatch - .word 0 - .word -1 - - -type_6_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_List - .word function_cdr_at_List - .word function_cons_at_List - .word function_insert_at_List - .word function_isNil_at_List - .word function_print_list_at_List - .word function_rcons_at_List - .word function_rev_at_List - .word function_sort_at_List - .word __init_attr_at_List - .word __init_at_List - -type_6_prototype: - .word 5 - .word 4 - .word type_6_dispatch - .word -1 - - -type_7_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_Cons - .word function_cdr_at_Cons - .word function_cons_at_List - .word function_insert_at_Cons - .word function_isNil_at_Cons - .word function_print_list_at_Cons - .word function_rcons_at_Cons - .word function_rev_at_Cons - .word function_sort_at_Cons - .word function_init_at_Cons - .word __init_attr_at_Cons - .word __init_at_Cons - -type_7_prototype: - .word 6 - .word 6 - .word type_7_dispatch - .word 0 - .word 0 - .word -1 - - -type_8_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_car_at_List - .word function_cdr_at_List - .word function_cons_at_List - .word function_insert_at_Nil - .word function_isNil_at_Nil - .word function_print_list_at_Nil - .word function_rcons_at_Nil - .word function_rev_at_Nil - .word function_sort_at_Nil - .word __init_attr_at_Nil - .word __init_at_Nil - -type_8_prototype: - .word 7 - .word 4 - .word type_8_dispatch - .word -1 - - -type_9_dispatch: - .word function_abort_at_Object - .word function_copy_at_Object - .word function_type_name_at_Object - .word function_in_int_at_IO - .word function_in_string_at_IO - .word function_out_int_at_IO - .word function_out_string_at_IO - .word function_iota_at_Main - .word function_main_at_Main - .word __init_attr_at_Main - .word __init_at_Main - -type_9_prototype: - .word 8 - .word 5 - .word type_9_dispatch - .word 0 - .word -1 - - -.text -.globl main -main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - jal __init_at_Main - sw $v0 -12($fp) - lw $t0 -12($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal function_main_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - li $v0 0 - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - li $v0 10 - syscall - -__init_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 0 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_abort_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - la $t0 data_12 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - la $t0 data_10 - sw $t0 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - li $v0 10 - syscall - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_type_name_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 0($t0) - sll $t1 $t1 2 - la $t0 types_table - add $t0 $t0 $t1 - lw $t1 0($t0) - sw $t1 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_copy_at_Object: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $a0 4($t0) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t0 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 4 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_out_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -12($fp) - li $v0 1 - lw $a0 -12($fp) - syscall - lw $v0 4($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_string_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - jal read_string - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_in_int_at_IO: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $v0 5 - syscall - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 2 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -20($fp) - lw $t0 -20($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $a0 0($fp) - jal length - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -20($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 -20($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_length_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_concat_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -32($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 4($fp) - lw $t1 16($t0) - sw $t1 -24($fp) - lw $t0 0($fp) - lw $t1 16($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - lw $t0 -20($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $a0 -32($fp) - lw $a1 -28($fp) - lw $a2 -24($fp) - jal concat - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_substr_at_String: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -36 - lw $t0 8($fp) - lw $t1 12($t0) - sw $t1 -16($fp) - lw $t0 4($fp) - lw $t1 12($t0) - sw $t1 -40($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -36($fp) - lw $t0 8($fp) - lw $t1 16($t0) - sw $t1 -32($fp) - lw $t0 -32($fp) - lw $t1 12($t0) - sw $t1 -28($fp) - lw $t0 -36($fp) - lw $t1 -40($fp) - add $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -28($fp) - lw $t1 -24($fp) - slt $t1 $t0 $t1 - sw $t1 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_1 - j label_2 - label_1: - li $v0 4 - la $a0 data_13 - syscall - li $v0 10 - syscall - label_2: - lw $a0 -16($fp) - lw $a1 -40($fp) - lw $a2 -36($fp) - jal substr - sw $v0 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 36 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Int: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 3 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Bool: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 4 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 0($fp) - sw $t1 12($t0) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_3 - j label_4 - label_3: - li $v0 4 - la $a0 data_14 - syscall - li $v0 10 - syscall - label_4: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cons_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - sw $t0 -24($fp) - lw $t0 -24($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_5 - j label_6 - label_5: - li $v0 4 - la $a0 data_15 - syscall - li $v0 10 - syscall - label_6: - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_car_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_7 - j label_8 - label_7: - li $v0 4 - la $a0 data_16 - syscall - li $v0 10 - syscall - label_8: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cdr_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -20($fp) - lw $t0 -20($fp) - bne $t0 $zero label_9 - j label_10 - label_9: - li $v0 4 - la $a0 data_17 - syscall - li $v0 10 - syscall - label_10: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -16($fp) - jal __init_at_List - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_rev_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_11 - j label_12 - label_11: - li $v0 4 - la $a0 data_18 - syscall - li $v0 10 - syscall - label_12: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_sort_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_13 - j label_14 - label_13: - li $v0 4 - la $a0 data_19 - syscall - li $v0 10 - syscall - label_14: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_insert_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_15 - j label_16 - label_15: - li $v0 4 - la $a0 data_20 - syscall - li $v0 10 - syscall - label_16: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_rcons_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_17 - j label_18 - label_17: - li $v0 4 - la $a0 data_21 - syscall - li $v0 10 - syscall - label_18: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 32($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_list_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_19 - j label_20 - label_19: - li $v0 4 - la $a0 data_22 - syscall - li $v0 10 - syscall - label_20: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 0($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_List: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 5 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -20 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -20($fp) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -16($fp) - lw $t0 0($fp) - lw $t1 -16($fp) - sw $t1 12($t0) - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 16($t0) - lw $v0 0($fp) - addi $sp $sp 20 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - lw $t1 8($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 0($fp) - lw $t1 8($fp) - addi $t1 $t1 16 - sw $t0 0($t1) - lw $v0 8($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_car_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_cdr_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_rev_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_21 - j label_22 - label_21: - li $v0 4 - la $a0 data_23 - syscall - li $v0 10 - syscall - label_22: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_23 - j label_24 - label_23: - li $v0 4 - la $a0 data_24 - syscall - li $v0 10 - syscall - label_24: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_sort_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -24 - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_25 - j label_26 - label_25: - li $v0 4 - la $a0 data_25 - syscall - li $v0 10 - syscall - label_26: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 60($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_27 - j label_28 - label_27: - li $v0 4 - la $a0 data_26 - syscall - li $v0 10 - syscall - label_28: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 24 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_insert_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -64 - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - slt $t1 $t0 $t1 - sw $t1 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_33 - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_29 - j label_30 - label_29: - li $v0 4 - la $a0 data_27 - syscall - li $v0 10 - syscall - label_30: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 40($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - jal __init_at_Cons - sw $v0 -32($fp) - lw $t0 -32($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_31 - j label_32 - label_31: - li $v0 4 - la $a0 data_28 - syscall - li $v0 10 - syscall - label_32: - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -24($fp) - lw $t0 -24($fp) - sw $t0 -64($fp) - j label_36 - label_33: - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_34 - j label_35 - label_34: - li $v0 4 - la $a0 data_29 - syscall - li $v0 10 - syscall - label_35: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $t0 -12($fp) - sw $t0 -64($fp) - label_36: - lw $v0 -64($fp) - addi $sp $sp 64 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_rcons_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -28 - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -28($fp) - lw $t0 -28($fp) - bne $t0 $zero label_37 - j label_38 - label_37: - li $v0 4 - la $a0 data_30 - syscall - li $v0 10 - syscall - label_38: - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -24($fp) - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_39 - j label_40 - label_39: - li $v0 4 - la $a0 data_31 - syscall - li $v0 10 - syscall - label_40: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -24($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 28 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_list_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -40 - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_41 - j label_42 - label_41: - li $v0 4 - la $a0 data_32 - syscall - li $v0 10 - syscall - label_42: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 20($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - la $t0 data_33 - sw $t0 -32($fp) - lw $t0 -32($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_43 - j label_44 - label_43: - li $v0 4 - la $a0 data_34 - syscall - li $v0 10 - syscall - label_44: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -20($fp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_45 - j label_46 - label_45: - li $v0 4 - la $a0 data_35 - syscall - li $v0 10 - syscall - label_46: - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 0($fp) - lw $t4 16($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 40 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Cons: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -16 - li $t0 6 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Cons - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 16 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_List - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 0($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_isNil_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_rev_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_sort_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp 0 - lw $v0 0($fp) - addi $sp $sp 0 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_insert_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 4($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_47 - j label_48 - label_47: - li $v0 4 - la $a0 data_36 - syscall - li $v0 10 - syscall - label_48: - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 52($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_rcons_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - jal __init_at_Cons - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_49 - j label_50 - label_49: - li $v0 4 - la $a0 data_37 - syscall - li $v0 10 - syscall - label_50: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 4($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_print_list_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -4 - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 4 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Nil: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - li $t0 7 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Nil - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_attr_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -8 - lw $t0 0($fp) - lw $t1 -12($fp) - sw $t1 12($t0) - lw $v0 0($fp) - addi $sp $sp 8 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_iota_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -68 - jal __init_at_Nil - sw $v0 -72($fp) - lw $t0 -72($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - li $t0 0 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -64($fp) - lw $t0 -64($fp) - sw $t0 -68($fp) - label_51: - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -52($fp) - lw $t0 0($fp) - lw $t1 12($t0) - sw $t1 -48($fp) - lw $t0 -52($fp) - lw $t1 -48($fp) - slt $t1 $t0 $t1 - sw $t1 -44($fp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Bool - addi $sp $sp 4 - sw $v0 -56($fp) - lw $t0 -56($fp) - lw $t1 12($t0) - sw $t1 -60($fp) - lw $t0 -60($fp) - bne $t0 $zero label_52 - j label_55 - label_52: - jal __init_at_Cons - sw $v0 -40($fp) - lw $t0 -40($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -36($fp) - lw $t0 -36($fp) - bne $t0 $zero label_53 - j label_54 - label_53: - li $v0 4 - la $a0 data_38 - syscall - li $v0 10 - syscall - label_54: - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -68($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -40($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 64($t0) - jalr $ra $t0 - addi $sp $sp 12 - sw $v0 -32($fp) - lw $t0 -32($fp) - lw $t1 4($fp) - addi $t1 $t1 12 - sw $t0 0($t1) - lw $t0 -68($fp) - lw $t1 12($t0) - sw $t1 -24($fp) - li $t0 1 - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -12($fp) - lw $t0 -12($fp) - lw $t1 12($t0) - sw $t1 -20($fp) - lw $t0 -24($fp) - lw $t1 -20($fp) - add $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_Int - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - sw $t0 -68($fp) - j label_51 - label_55: - lw $t4 4($fp) - lw $t4 12($t4) - addi $sp $sp -4 - sw $t4 0($sp) - lw $v0 0($sp) - addi $sp $sp 4 - addi $sp $sp 68 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -function_main_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -60 - la $t0 data_39 - sw $t0 -64($fp) - lw $t0 -64($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_at_String - addi $sp $sp 4 - sw $v0 -60($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -56($fp) - lw $t0 -56($fp) - bne $t0 $zero label_56 - j label_57 - label_56: - li $v0 4 - la $a0 data_40 - syscall - li $v0 10 - syscall - label_57: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -60($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 24($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -52($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -48($fp) - lw $t0 -48($fp) - bne $t0 $zero label_58 - j label_59 - label_58: - li $v0 4 - la $a0 data_41 - syscall - li $v0 10 - syscall - label_59: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 12($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -44($fp) - lw $t0 0($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -40($fp) - lw $t0 -40($fp) - bne $t0 $zero label_60 - j label_61 - label_60: - li $v0 4 - la $a0 data_42 - syscall - li $v0 10 - syscall - label_61: - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -44($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 28($t0) - jalr $ra $t0 - addi $sp $sp 8 - sw $v0 -36($fp) - lw $t0 -36($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -32($fp) - lw $t0 -32($fp) - bne $t0 $zero label_62 - j label_63 - label_62: - li $v0 4 - la $a0 data_43 - syscall - li $v0 10 - syscall - label_63: - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -36($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 56($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -28($fp) - lw $t0 -28($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -24($fp) - lw $t0 -24($fp) - bne $t0 $zero label_64 - j label_65 - label_64: - li $v0 4 - la $a0 data_44 - syscall - li $v0 10 - syscall - label_65: - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -28($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 60($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -20($fp) - lw $t0 -20($fp) - li $t1 0 - seq $t0 $t0 $t1 - sw $t0 -16($fp) - lw $t0 -16($fp) - bne $t0 $zero label_66 - j label_67 - label_66: - li $v0 4 - la $a0 data_45 - syscall - li $v0 10 - syscall - label_67: - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 -20($fp) - addi $sp $sp -4 - sw $t0 0($sp) - lw $t0 0($sp) - addi $sp $sp 4 - lw $t0 8($t0) - lw $t0 48($t0) - jalr $ra $t0 - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 60 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - -__init_at_Main: - addi $sp $sp -4 - sw $ra 0($sp) - addi $sp $sp -4 - sw $fp 0($sp) - addi $fp $sp 8 - addi $sp $sp -12 - li $t0 8 - sll $t0 $t0 2 - la $t1 prototype_table - add $t1 $t1 $t0 - lw $t1 0($t1) - lw $a0 4($t1) - sll $a0 $a0 2 - jal malloc - move $a2 $a0 - move $a0 $t1 - move $a1 $v0 - jal copy - sw $v0 -16($fp) - lw $t0 -16($fp) - addi $sp $sp -4 - sw $t0 0($sp) - jal __init_attr_at_Main - addi $sp $sp 4 - sw $v0 -12($fp) - lw $v0 -12($fp) - addi $sp $sp 12 - lw $fp 0($sp) - addi $sp $sp 4 - lw $ra 0($sp) - addi $sp $sp 4 - jr $ra - - - - -# Args: -# $a0 size to alloc -# Return: -# $v0 address of allocated block - -malloc: - addiu $sp $sp -12 # Save content of registers in sp - sw $a0 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - - li $t0 4 - div $a0 $t0 # Size of string / wordsize - mfhi $t1 # t2 holds remainder of division - - sub $t0 $t0 $t1 # Convert t1 to multiple of 4 - add $a0 $a0 $t0 - - li $v0 9 - syscall - - lw $a0 0($sp) # Return original content to registers - lw $t0 4($sp) - lw $t1 8($sp) - addiu $sp $sp 12 - jr $ra - - -# COPY -# $a0 address from -# $a1 address to -# $a2 size - -copy: - addiu $sp $sp -16 # Save content of registers in sp - sw $a0 0($sp) - sw $a1 4($sp) - sw $a2 8($sp) - sw $t0 12($sp) - -copy_loop: - beq $a2 $zero copy_end # Copy finished (copy size is 0) - lw $t0 0($a0) # Load in t0 content of source address a0 - sw $t0 0($a1) # Save in destiny a1 content of t0 - addiu $a0 $a0 4 # Increase source address a0 - addiu $a1 $a1 4 # Increase destiny addres a1 - addi $a2 $a2 -4 # Decrease copy size - j copy_loop - -copy_end: - lw $a0 0($sp) # Return original content to registers - lw $a1 4($sp) - lw $a2 8($sp) - lw $t0 12($sp) - addiu $sp $sp 16 - - jr $ra - - - - -# LEN -# a0 begin address -# return size in v0 -length: - # Save content of registers - addiu $sp $sp -8 - sw $t0 0($sp) - sw $t1 4($sp) - - move $t0 $a0 # Move to t0 the address to begin - move $v0 $zero # Set v0 to zero - -len_loop: - lb $t1 0($t0) # Save in t1 first byte of address - beq $t1 $zero len_end # Finish object if t1 is zero - addi $v0 $v0 1 # Increase count in v0 - addiu $t0 $t0 1 # Increase address pointer - j len_loop # Finish loop - -len_end: - # Return original content to registers - lw $t0 0($sp) - lw $t1 4($sp) - addiu $sp $sp 8 - - jr $ra - - -# SUBSTRING -# a0 Pointer to beginning of string -# a1 Pointer to beginning of substring -# a2 Size of substring - - -substr: - # Save content of registers - addiu $sp $sp -32 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $t3 12($sp) - sw $a0 16($sp) - sw $a1 20($sp) - sw $a2 24($sp) - sw $ra 28($sp) - - move $t0 $a0 # t0 points to beginning o string - add $t0 $t0 $a1 - li $t1 4 # t1 Word size - - div $a2 $t1 # Size of substring / wordsize - mfhi $t2 # t2 holds remainder of division - - bne $t2 $zero substr_allign_size # Branch if division is not exact - move $t1 $a2 # t1 size of substring - j substr_new_block - -substr_allign_size: - sub $t1 $t1 $t2 # Convert t1 to multiple of 4 to... - add $t1 $t1 $a2 # reserve memory via malloc - -substr_new_block: - move $a0 $t1 # Store in a0 size of space to reserve via malloc - jal malloc # Malloc - move $t3 $v0 # Pointer to beginning of reserved space - move $t1 $zero # Count - -substr_copy_loop: - beq $t1 $a2 substr_end # Copy finished - lb $t2 0($t0) # Load byte from string into t2 temporal - sb $t2 0($t3) # Savebyte from t2 into t3 - addiu $t0 $t0 1 # Increase pointer to string - addiu $t3 $t3 1 # Increase pointer to reserved space - addiu $t1 $t1 1 # Increase count - j substr_copy_loop - -substr_end: - sb $zero 0($t3) # Set next byte of substring to zero - - # Return original values to registers - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $t3 12($sp) - lw $a0 16($sp) - lw $a1 20($sp) - lw $a2 24($sp) - lw $ra 28($sp) - addiu $sp $sp 32 - - jr $ra - - - -# CONCAT -# a0 pointer to string 1 -# a1 pointer to string 2 -# a2 size of string 1 + size of string 2 - -concat: - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $t2 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $ra 20($sp) - - move $t0 $a0 # t0 pointer to string 1 - move $t1 $a1 # t1 pointer to string 2 - - - addiu $a0 $a2 1 # Save in a0 size in a2 + 1 - li $t2 4 # t2 = 4 - div $a0 $t2 # a0 / t2 - mfhi $a0 # a0 remainder of division - bne $a0 $zero concat_allign_size # Branch if size is multiple of 4 - addiu $a0 $a2 1 # Add 1 t size - j concat_size_alligned - -concat_allign_size: - sub $t2 $t2 $a0 # Convert t1 to multiple of 4 to... - add $a0 $a2 $t2 # reserve memory via malloc - addiu $a0 $a0 1 # Add 1 t size - -concat_size_alligned: - jal malloc # a0 stores size to reserve - move $t2 $v0 # t2 is pointer to empty space - j concat_copy_first_loop - -concat_copy_first_loop: - lb $a0 0($t0) # move to a0 content of t0 - beq $a0 $zero concat_copy_second_loop # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t0 $t0 1 # Increase t0 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_first_loop - -concat_copy_second_loop: - lb $a0 0($t1) # move to a0 content of t1 - beq $a0 $zero concat_end # a0 == 0 finish - sb $a0 0($t2) # move to t2 content of a0 - addiu $t1 $t1 1 # Increase t1 pointer - addiu $t2 $t2 1 # Increase t2 pointer - j concat_copy_second_loop - -concat_end: - # Return original values to registers - sb $zero 0($t2) - lw $t0 0($sp) - lw $t1 4($sp) - lw $t2 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $ra 20($sp) - addiu $sp $sp 24 - - jr $ra - -read_string: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $a0 12($sp) - sw $a1 16($sp) - sw $a2 20($sp) - sw $t2 24($sp) - - li $t0 8 - - addi $a0 $t0 4 - jal malloc - move $t1 $v0 - move $t2 $zero - - read_string_loop: - - addu $a0 $t1 $t2 - subu $a1 $t0 $t2 - addu $t2 $t2 $a1 - jal read_string_up_to - - beq $v0 $zero read_string_not_finished - move $v0 $t1 - j read_string_finished - - read_string_not_finished: - sll $t0 $t0 1 - - addi $a0 $t0 4 - jal malloc - - move $a0 $t1 - move $t1 $v0 - move $a1 $v0 - move $a2 $t2 - jal copy - - j read_string_loop - - read_string_finished: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $a0 12($sp) - lw $a1 16($sp) - lw $a2 20($sp) - lw $t2 24($sp) - addiu $sp $sp 28 - jr $ra - -# Lee a lo sumo $a1 caracteres y los guarda en la direccion -# a la que apunta $a0, $a1 debe ser divisible por 4 -# retorna en $v0 1 si se leyo un - -read_string_up_to: - addiu $sp $sp -28 - sw $ra 0($sp) - sw $t0 4($sp) - sw $t1 8($sp) - sw $t2 12($sp) - sw $t3 16($sp) - sw $t4 20($sp) - sw $t5 24($sp) - - move $t0 $a0 - move $t1 $zero - li $t2 10 - addu $t3 $t0 $a1 - addiu $a1 $a1 1 - - li $v0 8 - syscall - lw $a0 0($a0) - beq $a0 $zero eol_terminated - - li $v0 0 - - eol_check: - beq $t0 $t3 read_loop_continue - - lb $t1 0($t0) - beq $t1 $t2 eol_terminated - - addiu $t0 $t0 1 - j eol_check - - eol_terminated: - sb $zero 0($t0) # put null character at the end of string - li $v0 1 - read_loop_continue: - - lw $ra 0($sp) - lw $t0 4($sp) - lw $t1 8($sp) - lw $t2 12($sp) - lw $t3 16($sp) - lw $t4 20($sp) - lw $t5 24($sp) - addiu $sp $sp 28 - jr $ra - - -# EQUAL STRING - -equal_str: - # a0 pointer to string 1 - # a1 pointer to string 2 - # v0 answer - - # Save content of registers - addiu $sp $sp -24 - sw $t0 0($sp) - sw $t1 4($sp) - sw $a0 8($sp) - sw $a1 12($sp) - sw $t2 16($sp) - sw $t3 20($sp) - - move $t0 $a0 - move $t1 $a1 - -equal_str_loop: - lb $t2 0($t0) - lb $t3 0($t1) - bne $t2 $t3 equal_str_different_strings - beq $t2 $zero equal_str_finished_first - beq $t3 $zero equal_str_finished_second - addi $t1 $t1 1 - addi $t0 $t0 1 - j equal_str_loop - -equal_str_different_strings: - move $v0 $zero - j equal_str_end - -equal_str_finished_first: - beq $t3 $zero equal_str_finished_second - move $v0 $zero - j equal_str_end - -equal_str_finished_second: - li $v0 1 - -equal_str_end: - lw $t0 0($sp) - lw $t1 4($sp) - lw $a0 8($sp) - lw $a1 12($sp) - lw $t2 16($sp) - lw $t3 20($sp) - addiu $sp $sp 24 - - jr $ra - \ No newline at end of file From 365202f8926f0ef696c41c7e5b21d6bea36edcb9 Mon Sep 17 00:00:00 2001 From: regnod Date: Mon, 28 Feb 2022 17:13:18 -0500 Subject: [PATCH 82/93] report.md and report.pdf added --- doc/Report.md | 66 ++++++ doc/Report.pdf | Bin 0 -> 86921 bytes doc/team.yml | 8 +- src/coolc.sh | 2 - src/docs/codegen.md | 465 ------------------------------------------ src/docs/inference.md | 48 ----- src/docs/lexing.md | 2 - src/docs/parsing.md | 2 - src/docs/semantics.md | 2 - src/test.cl | 13 -- 10 files changed, 70 insertions(+), 538 deletions(-) create mode 100644 doc/Report.md create mode 100644 doc/Report.pdf delete mode 100644 src/docs/codegen.md delete mode 100644 src/docs/inference.md delete mode 100644 src/docs/lexing.md delete mode 100644 src/docs/parsing.md delete mode 100644 src/docs/semantics.md delete mode 100644 src/test.cl diff --git a/doc/Report.md b/doc/Report.md new file mode 100644 index 000000000..d878378dd --- /dev/null +++ b/doc/Report.md @@ -0,0 +1,66 @@ +# Compilación + +### Proyecto Cool Compiler 2021-2022: + +##### Integrantes: + +-Richard García De la Osa C-412. richard.garcia@estudiantes.matcom.uh.cu. + +-Andy A. Castañeda Guerra C-412. andy.castaneda@estudiantes.matcom.uh.cu. + + + +#### Uso del compilador: + +Para usar nuestro compilador deberá ejecutar en la consola el siguiente comando: + +```bash +bash coolc.sh $INPUT_FILE +``` + +El archivo __INPUT_FILE__ debe tener extension .cl, correspondiente a un programa del lenguaje Cool. + +Este comando generará un fichero con igual nombre pero con extensión .mips, el cual estará listo para ser ejecutado. Para ejecutar el __INPUT_FILE__ (el cual debe tener extensión .mips) deberá usar el siguiente comando en la consola: + +```bash +spim -file $INPUT_FILE +``` + +No hay otros parámetros adicionales para ejecutar nuestro compilador. + +#### Arquitectura del compilador: + +El proyecto tiene la siguiente estructura: + +###### Módulos: + +-lexer: Este módulo está compuesto por __lexer.py__. En este archivo se encuentran las reglas lexicográficas para tokenizar un programa (texto) escrito el __COOL__. Se utiliza la biblioteca __PLY__ de python. + +-c_parser: Este módulo está compuesto por __parser.py__ y __parsetab.py__. En el archivo __parser.py__ están escritas las producciones de la gramática utilizada por nosotros para generar un __AST__ de __COOL__ estructurado a nuestra conveniencia. Por otra parte __parsetab.py__ es un archivo generado por la biblioteca __PLY__ al ejecutar el parser en conjunto con el __lexer.py__ antes mencionado. Este contiene especificaciones sobre el método de parsing utilizado así como los tokens asociados a sus producciones. + +-cool_ast: En este módulo se encuentra el archivo __cool_ast.py__ el cual contiene los nodos del __AST__ de __COOL__ que consideramos necesarios para la implementación de nuestro compilador. + +-cil_ast: En este módulo se encuentra el archivo __cil_ast.py__ el cual contiene los nodos del __AST__ del código intermedio generado (__CIL__) que utilizamos para traducir el código de __COOL__ a instrucciones sencillas de forma que sea más fácil transformarlo a código __mips__. + +-utils: Compuesto por __errors.py__, este contiene el formato de los errores lexicográficos, sintácticos y semánticos que empleamos durante los recorridos al __AST__. Luego encontramos __mip_utils__ donde podemos encontrar 3 clases que son utilizadas durante la conversión de __CIL__ a __mips__ para acceder de manera más sencilla a los strings de los operadores, registros y tipos de datos en __mips__. El archivo __semantic.py__ es uno de los módulos obtenidos durante el desarrollo de las clases prácticas, con algunas modificaciones. + +-visitors: + +​ -__collector.py__: contiene el visitor utilzado solo para registrar los tipos del programa en un objeto context el cual es importado de __semantic.py__. Este visitor solo recorre los nodos que representan declaraciones de clases. + +​ -__builder.py__: primeramente definimos los tipos básicos de __COOL__ así como sus funciones built_in. Además visitamos todos los tipos ya recogidos en el colector para registrar sus métodos y atributos (features). Finalmente nos construimos el grafo de herencia de los tipos para asegurarnos de que no existan ciclos en este. + +​ -__checker.py__: revisamos que el programa esté semánticamente correcto. Es decir, una vez nuestro programa es sintácticamente válido corresponde asegurarnos que los tipos de las variables y funciones estén en correspondencia con el contexto en el que se usan. También anotamos a cada nodo su tipo estático para posterior uso durante la generación de código intermedio. Cada nodo existe en un ámbito específico en el cual son visibles variables locales y de ámbitos más externos; cada vez que se visita un nodo se crea un ámbito nuevo en el cual se registren sus variables locales para aquellos casos en los que unas variables solapan a otras con el mismo lexema pero en ámbitos padres. + +​ -__CooltoCill.py__: aca realizamos otro recorrido sobre el __AST__ de __COOL__ con el cual traducimos las instrucciones de alto nivel a instrucciones que simplifiquen el proceso de generar código mips. Nuestro __CIL__ está compuesto por tres secciones: data, donde se registran todas aquellas cadenas de caracteres ya sea especificados por el usuario o por nosotros para lanzar errores en ejecución; type, compuesta por estructuras que agrupan todos los métodos y atributos de cada tipo (features), para luego en la traducción a mips poder organizar de manera más fluida el direccionamiento a estos; por último code, en este se encuentran agrupadas en estructuras el código intermedio generado para cada una de las funciones de los tipos del programa (contructores, built in y definidas por el usuario). Durante el recorrido por los nodos del __AST__ de __COOL__ se genera a la par un nuevo __AST__ esta vez de __CIL__ para luego traducir a __mips__. + +​ -__CiltoMips.py__: se utiliza el __AST__ de __CIL__ generado por el recorrido anterior para traducir cada nodo a una secuencia de instrucciones en __mips__ correspondientes al mismo. Primero se visitan los nodos que se encuentran en la sección de data luego la sección de type y por último la sección de code y de esta forma queda organizado el programa en __mips__ añadiendole al final algunas funciones por defecto como 'alocate' para reservar memoria y otras. + +#### Problemas técnicos: + +El mayor desafío de implementación que encontramos fue la correcta generación a código intermedio para su posterior traducción a código __mips__ de los nodos __switchcase__ del __AST__ de __COOL__. + +Para ello organizamos las ramas del nodo de mayor a menor, donde las mayores son aquellas cuyo tipo se encuentra a mayor profundidad en el árbol de herencia del programa. Por cada una de estas ramas recorremos el subárbol cuya raiz es el tipo actual de la rama, registrando un salto al label asociado a esta rama. Al recorrer cada uno de estos subárboles, si coincide en algún tipo de este, podemos asegurar que este es el menor tipo que lo conforma (dado que recorremos las ramas en orden decreciente en profundida). + + + diff --git a/doc/Report.pdf b/doc/Report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b5b7a777c220e1fa6af07ad3bfef80065d2acc1f GIT binary patch literal 86921 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

      `%Am7 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ໞcf$(9E>UWtqg`Q1b?HJnx@uIBTK zNsw3IN;B(7~J~2zlHzS?&TF4Q+ir~fO9T^W%>`;fnT)gaQalis1A9^@v z6ggKcLsit(1y*7x!0((oU+hTaLj12Hzx9T_xe%;C@{(XLLfjY#Eut_u(NNNr06uj65Mk>fFzbAj~KG9HY9q{XbEY(L?vwA-B0IS-Wr zqtgMJ{y?YBU_BzrZtx9YpD+a&CObjse1~XdP1Ef;HgU_|>L<_;`6`a5!;G&ixo#*9 zDv}ER$#jGdXqf#nq{>ovl{SR#creJjIw*vyrpp+(n)u zCqoAFCzXLEmCZcXzfmP!6tZc*7>~3`EEQiDxUJJ8p=hW3Ft4H;H!ywzfLfbTw70jj z`7nC2y|cFm-*;P^3+~3+?b;Jm3+#|B`zBi{?(LaJn-BRB722jp@K%)C)fIiM0*;m% zPAM`MIR?*1E8s{S#4j zj9@=S^97;-0!|p>fP8so=FZlm8OT0(D^fJ^OA^0OA@#HA*_=%JG0+RHJ+jwiXFAOz zr%_+E9H(;i^XKi=XqLVI3xh}Fa1hD{`MZ3uvspLfA@dAIwXC&%Ip&0$hDY?FI~!V? zixIv0(Ka386o`65p5wZ63Xj3B+I?||!|mbclzp}wJ5N)1y|r~5u=Pyz6iZZi5NM-b z3JiiDG#j+geqL_{3X9s_22RQvSL}N7-34g_eR7^i)dM*0aiUWmndz z$b32068p{DqX!m1OK=3scREpYNTN8!@*1CVBN`S;%V=bOdz+S=7E|N3NNRo%rKKiI z-KSvIZ0HZk<4wL1!{+t%T$iqxI2nKvpRsAoD1i6IXm2r;7JQ9bQDNB?^7v}OJ$?1mTO#^$9X{}MVtQj~ZMTZZQ^IwlG$W#g}|muj4L24cg_0$f#=l9o>abj)E%6w{A7n} z3nJ<}_7}uqBicG(s;j*tsz+9hGwq*YkfB3p?QE=j0n1L=Pbj;7<@v=SG5>t{!vTkmj%L}Jjc7Q{F6jX^#-S-l zfnwpJLq=3!&<9jHC~ZBdal=Mi(FsTdI@YD`nK5kA8x<;yctel|V@749jxZ|FhTc&O zG}S}3qnP=^UtV}A?e?$rklfm16B#%Z%Kcbtd{WkQTa#mJ=#WKP=k0mh-AW`mTD*0$ zQ!X8ss72Gr>xeP9ZQ^FGAxjIg%8nb$7MdH=@vszv2k7y3jPi6y$FKWL_H75(-UPON zDV%!&8f=8-WDai?;i_NTlrt{oQE$0X!Yy1~OpE$uME$yG~(UlK3P}<9;cg z8|Dsx!(?|bE=Ws-YE)cLhuK+?Kwa-#fD#QJ)jaONP*4`&gdYqJcTx4tgF>4F!g6&} z(CIo_TU2fnwMr7WPBh|e$&O_(?*2gHAoN4sOjg)`6ciqKwiVg9+WDv_>znV+g^eua z$CVLIB=SI;2emi2O$fjhH%09&bmMDdE0gggsd-J+>RY83&|Hy{T{1 z#3N^KG?nzuHy@o@AN#GSa*vyjdSh$!Rx3L`Fo?Dd!q?k&d81w$bKjcqVXap z&l)wzxT$J$I7BEGpdEIo)$FuM6dD zP2;kAo~sbgUd%nszMpX5Y7|-e^3sUdvDtO@ueT5Pp6uS*1WtN)$*#=Kf!xB|j7`)i zY8+i)53>{4oA2iOqhH~cz&GjrkuxjU{YG9C41O+pr>)J0gNvf~^UwV4;^&`Ro12@Z zZG<^G0bU^FZ=l4EP(gZqECus+`)ho~4Z+Kn_qN5ap>=q<`LJ}0Kph#c#L&&# zpa|e}i){(%H8OqlW_e4CBcf{o^-GpDMRfURupA;&9)9_ypYevmi}$TsdT;G7SzZ*f zb+`px$7{h9iHSZ+kJ)?8o3m#X1f0X0&*ek^i+@ z$O3f(e`ZB4w808Y0DZLaUHkoCkJ}rKZ?eYeUgP=kdb}9yeAMrrPZMn!+8l7qgK6z( z<9)53w!S1cH{Il`?yTG-wD#3q+iAD9j?=FhHcQhAu0y?>$nUFtqEWeF3e)<;`xDA5 zO-d%xAMZdKF;3y*7=z?AcB6QM@?L-W)z{y|fudRC7h5zt=>q7p^Zw5lgW+gA z`Ny=F&EH+Vzxt)3>VI{x^5Uxh)zKMc{rn|#mcm2{BRU$8Q5^KOFxFUB>QFWMg+A$J znB;)r+AN58E<>%G&Sek|1#2|3h0`(u#@1;QKFO`nVW60X?5mNo$mt0zNH)rhX&UMY zh=E0k&bG0Cebl%`^#go4zO9GAo#*eXLGEAIj^5X9qXg=|-)zBw{_?z!`#4*n)V`<* z(V{L>^X_5!0#IRw7fZ@E7r!BFm$kY9E9y;Tc*gv#^1{tD=UC5T zaEHCw{&v10{dqN6A&x=N%}NoP%DMP<=tuH>E(RZ&65uvHKiGK8Z*h03_~ z;2I9qqXI7^c(!c2XAtl0?rl=PU8KhH!-ZCzR$-KspA*KAwGKA~BeOPGFCXkhFZar# zlcXn%&Utf`Ik!p5&}x+VkxA`0D?Cu}PuFGh;pQVacRY%)efZb-Y{GLqkiZ{kkiPjx z6P*>xIe@g)m>=8ufbRbPi@9+4_e<3Y9C2pEeqo@4>56dvkYKFcm7Wdrz zQ0|fxrL@c_rZ1$?;!XrZQ!x1YXXy6|rQ?dJrj84ZmYH29gEGdiO{4pn2>GzcS=O0r zC#c)!FyR@+(w(UsWT?e5PVnTSAh$uX0c*bCeLd^-^kJ79MNDW?vGP8(H}I!y8gEmJ z@ja1g80}6iG=29`aHJ@EKcG@qX9YV6fP~fYa(!#>?aH*%P(F?DTxWzCPMpnpI2)}> zO(RNujbyRTt{lk|&F=t?zxX0$uc`clGm24bl3k&r-St8q?4;{b{c|I$INe;KpJi~( z>3npU7qcR9vZmu_Vy>b<;Iu|EWmkW*}sPcN#5rmV4BI<~0MYkieQxB<4lf*+fYAHz3% z`VfA6>G0)cbZ^&w_#0kp|Idq;-#>lz1Acw}>J8Zv(KpqsM01@{i2{V zqhh|VPNP>2^NoH$xZi8IZyD~BE7ozp1-MYZ!mywYrJ-vi#5>5h)ZfJ;5?3 zh>R|%JERCO$?(B^f(D$%#mFo#>lLpekJgP9_kaEe&^URTV_HW%E!Kk~6X%m*&TZ1i zuw4bV*o-Uyr1xp|ZcNka;M&~vbXX2=N*r%vbxayxj#kE;(olXJ=A6m$u9&-6-kQ0o ze3I}ISYH6cCX+_*hXWxmywF)v&W*@mv|DtctgnVp&qCMy*_nF_#(Q~2FDT8Ja0ifa zTei2qa9OTCl9|4OM*-7ENRZH_!Ewicu}jFmKCi?>Oc$=D|`{7b)& z%B!CYgM?j>(xb{wN*(TwhHLT1DC9xVR(Ja#PPN}qo36i)%Nkg9ov~D*zq3<&K-PH{ zsogj{j8?&Y0Oj87ouE1dZ7P)Zq-zy1wkYWbbcR0*IxuYixbv8mHSYqkUvETxEL~o( zY&4h5hTqeCAT2KwQpYyx8~`aF2wI}fe>XOwo+Z8dRzi&L1=nL^`A)pTdP#1@X&eFK zBm&};V0W6jxc=I{SL~vWNYyQ4tG|}1GU|O~(+`4e>(0)odG*dkEA&on*s6AF%35`y zYfH31$#vH)gw`&?F7G8xwz${%58yGK{qjD!-0)5hmF>ov%FGX>2O|Rn$^b?<&@-h$ z!CRe?`o7$XOPOHTwr9OvT#lG%dmJfq?`@EPr}^nld_J2^wjMk%yL9uif6?dmfwK(b zUGrx9LAD#=TaXOS^6duzRvZ-89Eux*!%$$R!Wi#Y5L*R~+HB0`&?nnQmS)PD!WrFo zPqNBEe{`YE#4~FZMm6hn!+g;}($GSrr=i0kVu(e_Qb9v>Z4}7p*;C%G$>CIb1SqQRUqA?=rBA&h|r$!WbeKIwv`U zG#Yj>F1PAJ(Cg!E6HTDuxr6mBJH`VVr&r`Hu8go|*_mh|)7L6JVW+QR3!_$wGO(Z0 zOwpk?ID#?WED+Y}!jfU4)zZ^lh359t7yq|w_5BzvyNsm5qR27L3+V$58f-RfT!o5e z^p;(XOf*fkADu?0ef0E~OWCgsDBA1V3zqb)9?+`%KtAuEjdtQG8rjEn=`XIm*I{Z8 z`rZDFGt{Vox_|%HWU){ArUWxgIh`>Vs#)~0k{T z_CA~h$HRPzu7`vsJYzg>Z!L}{SRppqV6!x0%chq}l*FT=wZ(7&m;qc*>DA^IgHJUX z^brE%#`puIM$qhnXwQ7we=lsIIeJU3L&%^qvKiUAuPvy0gZwG1;TY53+jL-C%M|)+If38Ru^*C^~#bUe-Fe~ zp;$F&;SiVUwPa)3dMlv0_wsL@|JytG@!73%DO(=w@O(Bz_oR~AZ@brjx9dK73&Tos zMY&`&yPD)X@!7QBi+5Ymqi7>)MH|}>%0Qgb+2kCGrw^k|_^*|=sw(V~%IqAs#W7V5 z77RSIBZ?oVlTbK?|AHa~Jdf+{#SU#HY`#c6fL-UDo$@lmNQ@&*4_+%w5vS1(J|YLJ zcja@NyH^OJN|i1?&@zqzXha>v?j}+_t7{7*SGFMt=Xus+PjCa!6>)HCgsm+_eR-kp zQhQD8?3qq_OY3`dwTyhdvnFlCe!)5JuBh4wKHo6qu|5R-bcz8@RbIR8s%6{&;u-2f=?iAmN5>x2Z%xn*$S2Knh z)4_ioFi_OajpSFf{jO9(`JE3V&!&vjg6`9#^=y`4BhQHvvy;$$=e-cCU z62hrP*NZ8IYV)eD?BKVDudtC47OU^1ruf~q z(mxGm-@=bSoz1@0+bTi&b@o+Jbm?x$Q>DBK{^7R6Rrf3I@V~bymj}@7L=nfrJp?*Bpf&Av>Us0v z+4Dn()9Dv)UVQ)O!vGKLkKj=AQrQC~WS;Siyqw3A1Ij);fOGzi4GWOe;9N0vpVe#i z%9tCD;hr}B295}9VmQQPE?y1_x~ZN|;IYxl(&3Z+>p4U@$N%i+J@O;yT z=+lk4j^Wl*QPxG6U%-5Ph7RB)N+QEI=Y2GQ8Bv5oy4F;QFLK+C?RF6*MQ*Z$0(NkM ztUFQbVNmle?UXArfaDVkj}uI5|0@J2;`PD)Q_QszOBqS>0Ej8mq>QD$bq>e-e9cin zIU1lcm>A~W^K8^FhU6kVMk@lc$c$iTouYN}6`C$6qOBS{P|sTUD*V`{Ik_N@X4=Vm zI7WFSEBalNFIy{sM{v5<0}D`i@}uLN&cmTJ4d|qZb#hF)9T=8~BIS7b`vgvE+JDOc z2r6##BB6q=l#D055J&UjVLlx~<1||jVD8eARvD6+U)NLi=d+v+JE5b$Q_O%+W&)xA zrk;E&Su0KnGxcq@6Kni+lIy#8Hc-p7>xu&gnW5?e;_@&Rh-Hcd*#FD1dp)jjlc2DS zWeCb5UXSiWvTrQ}0c5i@$Q*?b8>7eE0+L@3WP&2AY!SNHN?{{FX7R8tV7p_XTTsam zP$6@k(^ZS4E|hXqV-)aWtRm0|CX|YN?Pk~-j(hBhGIYG+be!8O4iB|eLDO9@vN+%R26WZX^3MHu%U z$>>EqQD>VKAg7B#@-DU%W}RVH9vjwFJRY;DAO(RNH>|no6lMW1Utpj*K8RLEPy3Wl z(#yGStxQYSHyAuB?`bdG}5j~fl%i+$F1 zenc>Ur1FTJ+m zS>1ow*laXfE%zA!1I9bY5YNL2$1ARsq`h|9?ZZxvPb-l1V zJL9vu`_rwV4by(L>R{&lT|`cE%Apoh@a+dfGH2T0_I`F1{8`>NjZh_ zWcKWsd%^lV)uVz{d>R4x3AA7@x%Hpun!nWoKgN~_Wh7u1t+)w^;l@ZJ>Biy>|4x`W zII5888XQ)|<3!1ogJ%sVkI=82DN;oL{`|0=2vW?=vn$ zO3R(T&G|MW=la^(h_TlI@8XrR*M7|MO5HU>M@n0p@O7dN_P0W6yM%X04TMB{I$!nf5@jrK!HTC?fM$<(^Ohp^*qQKV== zT5M{H1qVsrrI*eaf>}zrTO%q<_hwzXEVErkc<@y>G%p z8Hl8={7@i=Gc@=OU7gsGpo7^bgZ}DEnbi3xoB1sIYtQlNP$jv2)WOn#fZ)2AB0iup zz2Moz9!0*n_+${pSH;@y&@aAh(IFahFx^b=hUq6JVKSg%Y)p*9susoUSx!E!=f%^_ zb{qCvaMkR|?EXPrqh_SXMo;$c*By6zI#V?~9Tr;~H>W@k5aTS*8B z54!TsW5=WtGUSTRW$$-a$C%$u%e2~`VZ>IG_O-Q6Esu(+WxzZ?3pj)Q9&BrwPpDR;Tq(6<$}br~afTt8Wg5R%;m472aj( zsb%}Uvm;0|h+`}+*9YcB@j5w%*bl`x1L)iH?=SoXDk*5N3`Pmcj%dcdU>HPbyKjx3 zl%lgU`|!IeXQ&hvE+QZV3w^7>a8l<+s^f5$TA;x>r^_+ezWua10?6|ILyui$srj7$ zlV|By{bjSOb8rbcWogR0ZejJ3@26hd(qFA2_?(|?;Q`$I`5bEK7Cq58?r&5zv=A^6 zMdf1VG&!a>rR@a`N&CvCe|2D zT5*?}I{UstN*K2WOpo}$&Bfd<1pFi#Bk}27*LR}0-Cf*=B*F#;jb-eVkcZAqa?#_x z=io%064U_FTGN6!C>jvsQ;pTVLNL}w!QhXLfecTz+-6~~10G0ZU5wW$xDNjhs6{G z-9(HMZ{x7(uCASclQcPmn;7DfrKnaVxnCLgb6HD8t0ESke^?!~gqe*W})W@z&3h_c$}?P~!b6#dGMQxRILYSJD9+ z^15ARzxDOh#PVxJ7Jd28vH@>P0#J8=Vei&W6;o?MT}c~f`kHZ_aH&H9nhAZ>A32FA zWD`|-Qkzxtjv7O7KCgRW2sCsayT=|X9!O;!z0dc;Xqtk-BhMA8)Xp#FWcY8I-C7KS zj2drNKprTEBzL{>oZ8u+2!?%&=n8>b*L+Da1G)LuvLq@TJ}L?D79!p4sA*Y_DtCrg zn-U_fS8@ce^xgHrdU?pEI%}{Bz)xl%wNs#JU;wTL_i0vEoEtVrH6GkqG42@ul)a5y zn`cl2rR1tN68katG{rH}J2&3Q5;D8II95ECee&q;ICndgV?-f*aQN(TGP0;lV=n30GhD#<}+;`imIBA5|rmCq@oCCs|;m)unDfQsk9TvZn~A@n7_KYt)iuRX=U{P>G`x>_^Y5GshB zvn2`umC$g&c8;lPrR@IBPXe``bg&QusZ4G2fi2COhw2i`I-knJJ9m~-+YuSCm!YW|!Wqw-RWL<{n9Z|)GC^{` z(|S88DJ?J5X&4*+Z4QzI#-a&G+0xqi<-jCiq~y41hUdwwx6`ReL@gCCW^-YwAiDbS zhh!Q8B*i(Q48&u+fiosO$#}b>EIi7Hhr}UIo5N~}pOVUZg6!>p?~MXgJx_HY6Qa00EVJWE zQ^{%IsQK~5w;vx-GW?qY!padPnh87BwwW>yolIlBNREvS#Mz;7C2NFXmjgnDi)5|~ z0xGx)&-T5Bdb)~hoTi7$WV)WH-QaxwYQ`$8@K+c`g73l_f@~Z&<0{t#+OC@St`j0_8#Vob!|k2S1vze9c()U(kXo%D39&Vx$eZDg@e&vxg%5ihC2G3(}mkg&m*5H zL#1j1w3u2;-vqbHTzf{Kiq`!AoWGYQy-mE8-n|!^gOYt0GFYHCGwx(<>le`~yXu1= z3S=MkvK3aoT?AWE-CM)rOx?yVj(ZP2=A1tn#`uS)BdOb|)^FY=<6Q+OI0!FOZ6Fq- zuaufWOV(E#UVhy8PTJST4BcU9K%la+59qk#J3rV_v&pTfkh5!SzfC{23q#^F-rt!j z`;)yfW^el$X(aKz;R41iS0Nc;zKrjXF^_C^WSCc0>8$_q!sHMs-Jgujf3hU?w&IV! zXUA3s_a;QN=|?-MYH8AGq_ncgU)zy^1rF!2KnjvH^RX)BJI3{rL-xtW zm-<_K3*7%#8{65~?9COyuk7>LNmG6L)F6;L&li(i7`Xh7kmz|o)#DRyvu9!6aObQK zIrG?=ZDnL%)4LB6HY9&PCudDF!teyAg^}WI+^!^eBl!O~pUe9t^jJEE25t#uO6J1? zH~M7e&GdT&%MEoGm!H4{RMY5qRGe?{Q7!R=r=JqN|9XOo!&-R0c^pZDmO!(FFmzWtINY%YL9t9Vwij4R>Pp}d30mi zPF@VC@lO7BPy1BqGE?(Zu4$Y=_tQgYh-peG{s8MV+~D&L*w#H#s{;q~*)YiTzQxv zuum><*D%?Cu-vh(wmz@&&psadX9}QdX8&|0#$~@gSC4ghC2&f!*LqO3I>%Dt(0H9= z=n&@+0h%%mJqkS8VX-c~(2D zY=;ok1zh5$26+?h@T8o-7}N0)9){RL)(CC+QZmR=8=A*4Liw8m2msH)57a zl8kwEMf>4Ok*M0CPW4y6TPXaf=4WV^EDY0|JlnM~SVQdnlF3WYK{ZQoCPMyhfadUD z19E)F#4&b8T(A4Z?(#)dT+&$Lsy{*t$I2^0%tB9iRDRY}dYOi;K37*M zXwx&C2n;|R14hm_h#Zyd?n zAdMm1kOrDajArsW>h3sCbhm7{3g=7OdL zN<-Z+yQ>~14c$~b&!6qL<4oHu)4Y$@2}3>r7}M3arbOfsb4jbGJ~MP@O5&lBetSg5 z-+`-JrnsMt5kO^iZE#3g<3a86oR#lZcexo3XQlYi(L;aTo>Qz_S#)BH#Yw&4;s9sD z0&|j$tF`^0k&lTiJ>xz($ePwdzFHoQv-?ik;&_jrfuK%4OY452iF%4X!sMrp?t7~7 zAL-tC2G#qLLx#;Fu!GoG`+Yls>2PJHs9b(i_YK{7a+ zqOw{JIjhx&*X|D@ay7g>1$y6Y`vWo3K9#Jju%vF5y#EjIY6kc$UA&PKn%Qg~b6KIZ zPd~|B-w5z(+dj+gIg(vZasb39co>etT`NpSEsMrv|b?d@wM`V7~`|{}o zlo^nm5@*7~IVhU1fycP&iXdOo=F|`_{m44p)#>hS(s~=6ul1SH6Tj4NiEwQns2HY7 zH)TV!_%kcw&`=;`2X+=tU$#&^Fe`WZAxPHa+DD60Tp+L*nicUrs+vaNtz9vpg%!1t zVD(74?&oERlY4{K&*Hcr5cuHo>EEbBk?+-)4``rE?95<0FsUX2?^M+vZ=p}ba;OsNyb-^%GH*Hn{W0^wh4Wp zV&{DwoU#6Eu{rG(aAHi6Ju5o(&CC@r-EXt@LonvDBbr3IYe63FPLqEt<-0nTrNhIT zyT_`{VMM^2?^ut*t^*!5$cu*rLu9hN6KwOl_FsmoNA)W52!scsAW{_ZFBKrp%X+yv zqy!?bdgnt=%&j%50TxQdBw>cM&QU5m8KVRGX{C*L6hRM6s{PW;*gW!9+|cGVgvk^> zS!0MpAo@};vm_#9x@nl(=Pe<^(% zT&J9=rmL3Ip1W6kG33uacs~2eKZwXF_|IM(8pOaa!(F()bV)5&c0WsR9QvlTA>O

    5. MD% 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 literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl b/env/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..609a3685305194adfd4d577f690a0e3271ff16d9 GIT binary patch literal 48886 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 Date: Thu, 24 Feb 2022 01:35:49 -0500 Subject: [PATCH 52/93] env --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 9eb0cad1a..cba16ee2f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ pytest pytest-ordering +ply From 188f21dac19aa8abf744cebef744cf9938bdaf70 Mon Sep 17 00:00:00 2001 From: regnod Date: Thu, 24 Feb 2022 01:37:05 -0500 Subject: [PATCH 53/93] env --- env/bin/activate | 76 ------------------ env/bin/activate.csh | 37 --------- env/bin/activate.fish | 75 ----------------- env/bin/easy_install | 11 --- env/bin/pip | 11 --- env/bin/pip3 | 11 --- env/bin/python | 1 - env/bin/python3 | 1 - env/lib64 | 1 - env/pyvenv.cfg | 3 - .../CacheControl-0.11.7-py2.py3-none-any.whl | Bin 18720 -> 0 bytes .../appdirs-1.4.3-py2.py3-none-any.whl | Bin 12139 -> 0 bytes .../certifi-2018.1.18-py2.py3-none-any.whl | Bin 150807 -> 0 bytes .../chardet-3.0.4-py2.py3-none-any.whl | Bin 133328 -> 0 bytes .../colorama-0.3.7-py2.py3-none-any.whl | Bin 19915 -> 0 bytes .../distlib-0.2.6-py2.py3-none-any.whl | Bin 141707 -> 0 bytes .../distro-1.0.1-py2.py3-none-any.whl | Bin 11733 -> 0 bytes .../html5lib-0.999999999-py2.py3-none-any.whl | Bin 112620 -> 0 bytes .../idna-2.6-py2.py3-none-any.whl | Bin 56485 -> 0 bytes .../ipaddress-0.0.0-py2.py3-none-any.whl | Bin 17503 -> 0 bytes .../lockfile-0.12.2-py2.py3-none-any.whl | Bin 13506 -> 0 bytes .../packaging-17.1-py2.py3-none-any.whl | Bin 24058 -> 0 bytes .../pip-9.0.1-py2.py3-none-any.whl | Bin 159149 -> 0 bytes .../pkg_resources-0.0.0-py2.py3-none-any.whl | Bin 115663 -> 0 bytes .../progress-1.2-py2.py3-none-any.whl | Bin 9606 -> 0 bytes .../pyparsing-2.2.0-py2.py3-none-any.whl | Bin 56411 -> 0 bytes .../requests-2.18.4-py2.py3-none-any.whl | Bin 88576 -> 0 bytes .../retrying-1.3.3-py2.py3-none-any.whl | Bin 9480 -> 0 bytes .../setuptools-39.0.1-py2.py3-none-any.whl | Bin 455758 -> 0 bytes .../six-1.11.0-py2.py3-none-any.whl | Bin 10720 -> 0 bytes .../urllib3-1.22-py2.py3-none-any.whl | Bin 124700 -> 0 bytes .../webencodings-0.5-py2.py3-none-any.whl | Bin 11646 -> 0 bytes .../wheel-0.30.0-py2.py3-none-any.whl | Bin 48886 -> 0 bytes src/coolc.sh | 1 - 34 files changed, 228 deletions(-) delete mode 100644 env/bin/activate delete mode 100644 env/bin/activate.csh delete mode 100644 env/bin/activate.fish delete mode 100755 env/bin/easy_install delete mode 100755 env/bin/pip delete mode 100755 env/bin/pip3 delete mode 120000 env/bin/python delete mode 120000 env/bin/python3 delete mode 120000 env/lib64 delete mode 100644 env/pyvenv.cfg delete mode 100644 env/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/chardet-3.0.4-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/distlib-0.2.6-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/distro-1.0.1-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/html5lib-0.999999999-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/idna-2.6-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/packaging-17.1-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/pip-9.0.1-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/progress-1.2-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/pyparsing-2.2.0-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/requests-2.18.4-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/setuptools-39.0.1-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/six-1.11.0-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/urllib3-1.22-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/webencodings-0.5-py2.py3-none-any.whl delete mode 100644 env/share/python-wheels/wheel-0.30.0-py2.py3-none-any.whl diff --git a/env/bin/activate b/env/bin/activate deleted file mode 100644 index 92009c5f2..000000000 --- a/env/bin/activate +++ /dev/null @@ -1,76 +0,0 @@ -# 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/snow/Documents/GitHub/CoolCompiler/env" -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(env) " != x ] ; then - PS1="(env) ${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/env/bin/activate.csh b/env/bin/activate.csh deleted file mode 100644 index 7d45a3bc7..000000000 --- a/env/bin/activate.csh +++ /dev/null @@ -1,37 +0,0 @@ -# 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/snow/Documents/GitHub/CoolCompiler/env" - -set _OLD_VIRTUAL_PATH="$PATH" -setenv PATH "$VIRTUAL_ENV/bin:$PATH" - - -set _OLD_VIRTUAL_PROMPT="$prompt" - -if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then - if ("env" != "") then - set env_name = "env" - 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/env/bin/activate.fish b/env/bin/activate.fish deleted file mode 100644 index 471ac6a2f..000000000 --- a/env/bin/activate.fish +++ /dev/null @@ -1,75 +0,0 @@ -# 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/snow/Documents/GitHub/CoolCompiler/env" - -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 "(env) " - printf "%s%s" "(env) " (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/env/bin/easy_install b/env/bin/easy_install deleted file mode 100755 index 97ad0c7f7..000000000 --- a/env/bin/easy_install +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/snow/Documents/GitHub/CoolCompiler/env/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/env/bin/pip b/env/bin/pip deleted file mode 100755 index 78d6f8629..000000000 --- a/env/bin/pip +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/snow/Documents/GitHub/CoolCompiler/env/bin/python3 - -# -*- coding: utf-8 -*- -import re -import sys - -from pip import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/env/bin/pip3 b/env/bin/pip3 deleted file mode 100755 index 78d6f8629..000000000 --- a/env/bin/pip3 +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/snow/Documents/GitHub/CoolCompiler/env/bin/python3 - -# -*- coding: utf-8 -*- -import re -import sys - -from pip import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/env/bin/python b/env/bin/python deleted file mode 120000 index b8a0adbbb..000000000 --- a/env/bin/python +++ /dev/null @@ -1 +0,0 @@ -python3 \ No newline at end of file diff --git a/env/bin/python3 b/env/bin/python3 deleted file mode 120000 index ae65fdaa1..000000000 --- a/env/bin/python3 +++ /dev/null @@ -1 +0,0 @@ -/usr/bin/python3 \ No newline at end of file diff --git a/env/lib64 b/env/lib64 deleted file mode 120000 index 7951405f8..000000000 --- a/env/lib64 +++ /dev/null @@ -1 +0,0 @@ -lib \ No newline at end of file diff --git a/env/pyvenv.cfg b/env/pyvenv.cfg deleted file mode 100644 index 7f0d9af4c..000000000 --- a/env/pyvenv.cfg +++ /dev/null @@ -1,3 +0,0 @@ -home = /usr/bin -include-system-site-packages = false -version = 3.6.8 diff --git a/env/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl b/env/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl deleted file mode 100644 index 53c26de5c44749740ba721ee437284f2a0840130..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18720 zcmagFb8v0#vn?FkPIheD+_7!jwrx8*wr$(CjUC%gzMS7zb?<%Ob8nrhHEUI^KW43` z=jhShWAv1h1O`C?004jhuu{sGYK@EBKmY;&;0FN!p!xY#P~XtZSkTtS$-&l&hMtyz zftHQd$lTG1#@xolmQF}mQBXl#PDxx=hStH+DOj;DVuK!`>zwMSS$%bM*0A@XR!(hI zQgXvG&RBg}Bt>hAoxpbo(=*F?T)-P@-qSXFJ7e+jN%6+Y>N?voKcS%fnl5=60qkIF z4}fPbEVLXdaAg%7U2~B@^}rcssjWWW039{jw8pOoIBg%t+YYpHgzAywRO>@vTLC>i zeA1oeZ`^JR6^6sxA{444Tx*LynxWFzlasBn)R(2ARJ}J32C?cQS@Ty-!6GXu1O(Wy z7K8)%A{T;{7_QVq8^{@WP@KspMmnA7iGx2Rj@F9|>a*#7$sXct9ygrB{Smc!kq!hc z*j_)@UnJ&fth_1#_)$?WMSv3fY`Xq)JC|gx;xYoc8*E+ZDO4Z=Aw${7rG2T$Vn?T? zo5bh>%uIwbDH((cw&ohQY5at9fTxmf*}m*JVB*J_?A6V7Z)6S*8?#e2`&Io^@9K7k z#boYY)-6=0mWY5PuiWnVM^Bv&(e4b;^#d*=$*r-qf}6+z1~RzX?S7U&J)Ut=ZJs#| zu`(On-1LXWW%nzwstC5E#5SDTwuo$C981}Pf1AAat=i@=(CzgdTG)jX?qKoxs5s36 zNm#ANlYu{my;xv@iFa~kf#hctZvyu-IH=A0_sOPqEo;ysr}rwwafQERLe~E z+bQujF5QodMRe4<)O9nh%&Jv3r8I!Mr8AfQAU(G{7-Oy6q09XPS}D?R5yrp(04?AE z0HpsTw4{ZV_=WhD_>+})Y&TdDe2#VPZDst@B^vUFm|L||OiJbH#?GAFnaNM78xX~l z3ol-KcCw5pR1oxPabeP)y_;-OS1E_%&=-m;oVA)Wrg0_4 z30~io1eK-Y5o)v8A9z8r=^WR}@v?ieXXMMbO8}1Dz57#T(G3Y4n*k5K_`E+pUEQj9 z4Si0(5*7-QTE7sC;F#=pE5tjn%v7FB1m~_`QM{RM8XQ^#vi38UuY!mvx`8Xc1QP$^ zx4lsDG}R>6$7SH+#o~t#XS}fC2(4&;vWW!!?kQIXQEPYJq=@Bl66&d#s~E+r-3$#Y zz6W;H)Qf(&CtUAxEm9q(*Uz(Blfy}M=pkdF>Cqm4CS&5w9DO-d>g?oBv-gN{B^nN_ zC|et)Z$a!Ds*a0|9s3g+>dF7r+}=yy^~&av+^?a!+Fbb}vQ@;R&U=oaSXxT324RY4 zihj3pzXOm4*nlYoHZK&mc7k{y?x~NW5WvdKKSNX~O)(&1s0>o3t#ECbWhJUeJkX5t zTNW#sj)B(^lloi*GCM1V8>=^^m~x+5sc_AI;G!oT%6nTS)Vx~Lv<9}Z()yL+e*7pS zO@6Uir!!&s`yFv#jdT_eWpP^6&N7Ud%#5I*oT18<8PZ7z4L+}Iy z@@WpHvgW)pLUdjJ+?jlLYA0L@^Y&V?UcNG&;kk$*xq0D$;^OjHG7L0JW%;Ki}}d^H5HU2oyV48Nf$(>Z8TRDNN(Vpu>% zM-Zcs65EOn+fd`Js}902{O(C^UtEyy6cGVs7imy=tKb7F7gQ7LP!nUVPXrRdS>sE> zoS2H@%Q)6Y$n;m>!B!8um9!D3vrM$YDE;jI;5mQk##-x2+<*eQh*(D-VLL0>ZeQfD zmP!70J3`kzUata7jo4ksI*epz*xj{uG)it;%d2jaUX)GSM8<1=PaGT&aO%(G8p(cf zbi}_E*OghsWq8sk`kq3k3)zl`R<1$~$VDY~(&P>Pp!ukZJbbtT`zIq)Sbg>vRPVUX zJ}0hUl(rRj1tH!ciAS0|2S7kJdoJwj+-St1<1Ag?Nf}?;c@x2sR>$hV1Krq-6&CO! zf*`6}54IWu%XKN7VWUanP(AczsZ$`qsba<|qi1rdPB?SG`~?KTyMLc;TXINjeE+=c zxvQr+XSb9e!(W$A{c6?A%arxrShypR>{Z^p5FE%`nn*pQfRT)fJU)zw!?=apzS@Hp zX`6`G?k`kzO4_as45wq27{QsD^|wIT+k-x8jJRx7N=!YS~G zl3%%@Wm;B-hoK?Os2x8T>lI+hwH_}6_KcQe*4ysw(a~uw3oH#^hLwwgOC1nd1jU`4 zl1U61K|mq*?gf{j-SVSFK-0U{aIX2h3a+@{PuZdjNnhC}0Sj+S_3_-SM_8CHVVrVN zA{=)+aw7!)Xq2x;yE0- zckMrj88tjybFQl-tG*L;Wy2?w(0R~^)^h9&d>*kj=wbsl&V#4qnF7iaj~GCD%f=l2 zcGQ-C}zP$mZ^yr}*! zlWilSVUeK1x^J_#@ND1s9V<^G#gLl8Xxi*a5CnIUjyWg)m zuBXY&C2#_^G_7ne60Mna9S~$2Z84N)lA26>jk}>Yg>S{lB2hxk$^&WKXWh+axE|K+I>@N@ z)?p5bVSrt~V0o`;pNEXfH*2vy7w?tXvX{^$3DTRLixo!sq|=o2%nwm!eJf$)TTw(V z@3Ez}n%f~fU%W?jV4TxqMnnB_l`f8|5eaOL-|N~V6$`Q2Xtu?2?rGB06bL=pB=5bY zj2GLVbojM@R0~W#q?~_+l&s~*b#2G(Hu>%q#0LxFa9oVuXM0pIcXJD%E~*uu*B0Z^ zP_koeW>=ZuxKLbazJ-BN;05;Q`k!&*WNW8uW$a>XMeF3| zBq<{`EharZLq#z@vj_CA`vRy`a#sJ`llBLb7(d^J|1}92{{NE@ovyCAjk%MqF0Gxr zbu2$z06l{6GtW@rFPG?Qtu(VRXk;GXv_(Ly+y$w~!3|9iBy_89Pv1LHOYMB?GNYUz zPdh<9al7a6LJ>)kGBOtsT0s4e-}};K!Qi!yE7e`rFt(dqW?Cj+aSM~va(1mwzAGIuQ*1Ug&NHm-J+)naFjVWVlbQ`lU^}>5K!0GYE0;=r11;f~t&mLBGM`F2q`4E|JHv#ZTHL3(SFD)UhV+!P5syE& zwA&{B+6sQ?rb3h7ZNIFUEDjrmaNSK{RdE#vW`{)VM!@aCw!G}lXlmSYLnd5HEGFtvI+_ji`n;9-sW#bhbs814rf+B`>JN4yC z0!ouXSP!D9q^^i2q6M*iw_=Y zpQm$C!Kfx&P{eEjL?OHpp)jtOnPgmPjDEfk|4(}MNa!b(1O)(iKm-6l|2I^AsMyZQ z*x?5)$*S^^2S4N5ObtRy61yaQhgJ^S-R#w+HncT|S&S!pg#3j#VZK^5u`TWABaV18 z^@Kw+3-!5L!Q9DvH)ix|8=?ZTxAkwD)b~2ua|P(WC4;&@`%=UoTLJTwC8*ZSV#1sQ zy3HFid~LQ_<~k7?l6@Sb+b3x$qHa$)o?Q1$Y_Gi%)>G|$JO_61jphP$nb&6SZ()ME zTeAjr$8VFu$pAsAur6!Mg?18)y67jI|xec}xGrG+aEb2aPub0N} z^&gf^wThIhiTQdg3&QafyYDP@_O@RLER|JbCv}0KW*%}GRaS|lxMBTZe8&?0Mi^Io z_{Y>Svl7M3RL3w^W!$AKZ9RP2oDh`jLCHT76Fp&52MbwG11bW2->0uGGNtxJl1G)ig%TRbq$b_6Fs5N zY0kfDM0D($M&}lUmXMsNERTIw7}!KJZA`?xh{g0rHK>EN z7okU&RWSISU!>YNSWk!}bMIrx#qG*qf1cs_WDeShbp10mjb6lb`w)ul5%21YLi12G zd?e@crKW$M2O&r9gQlDqfXj7Y#LJD7GjF`EEI^FiNj6SA1O z3KVeyrc5TCDi9LfCaVTFQ7tUE`}xbz9>YV}1#0L_MOCk32Jg z4zSSI)Xp2=U6Dn*JcoD1*cv!30$b2bVfw*|0q6HoE~PIh#)gfGf*;--M9XYYkSRDJ zxK>uOja`v_K>w3}k;;c}sDDZ|+E06o`fvXIPu>1u-z@nqn?QPm?N1akQoV(4bp;x0#vAe^oqr4iz^4ndeV!+g>Rp1Dl-aXUxQk_c>5|ln~&+tkhu{B(!UH}V? zXuq6{Htko#Knty-lP{?K!}0yk{1hU|sXz{Jv8=q<16d=YTp2T=R4m!|(!lMw_|wDeZW`ZjBRF-VTiJ)I z_7vCQz5!Ou;%{`v$KTlT$#PR1x9_{{gax-f@67+!Gf&H@Z!f;bE}lK@ZZQjDp{GO! zS?`c#q((Oqj}>s?zL?OhfG!a__eEn1Yg}kvz*1kmOvv%1V}H-UplMIgP0~r#VUkx* zT9yV@Ip$0=D$1UU)cKyuyeWRJh;*b*`ODMZhi%|a$tR3M)D>Vc)dy~jPa~VI4 z?T$!6%Vhcr72>@F>*;nz_{g0nl)Fqk+PSZp5_YABH?*-MtFM1eiH@*HK}tVmzVWA> zCis8E!NlCkSoeQHPF4Ot`s{Pf?q=wCS{}&OG9VZXwK#I_Z!BQ*=1OuX{}dTC!*FIX z&X~}zm#z3Dp|vsANxJyKgDuw|nbt_CL4LhHBBLB_BL1dkJW8ZU1-3%Dn^qW>ntJo6 z;&#KUE|_RTc$>Y4^Sb={h+&>`*KsCA-|QvvK2b?-)L3FUSstX(b;%JekOw50fcdKl zo3`#Z>7t<~M&9@rR!V)X6o|9|abV}y6M)p1$Bc`Xh6$?U@`E0gKE`D_V*!S{K|dow zVDN@ec4kif5!JwvTAEWl&nAtHZFiIa!1L+d)!9e3_cNWUug-RDR;i_mgFKVG0kvHo zMh(l2!OX5YhNafutXR~}S8uqf@Sv^m4U>6Z%m#n0Bu{u>NRAyWd^~F(d{`B*KW)zX z6rdVAc7_->eYSmRn({oY%;OL5AIY8Tm3-u+$;Kr0`7VWA}Z(r0j zuh{%@flIh+yXsvrZDLtjutZ=sv|i49oWPS1tR4w_fLe`cCjr^#@+D@bofdkUFfUe3 z-tK#ruGX*SftzWbO$0##tsk5)IttdM2)~M>hvBfD+$TOZ7jEGgKZpLO4_OYjcij&hFgehJ zc*D5u9<2h~C%7c#ia&ERLn`I*yK$<)EzWtkaYG?44=mWZ`_=nmy65&_PE?KlqRyq{ z)b^j8lfC2SIE%FN7ndH|>3ZjImkB&IN>I7c3PZ)n0Kv@^ki;B3H8I{~Z;5=bz?>GU ztb*Th;jzzF)vDgS{e2lzGK{;W&owXAdoGCedfPJtz@(zy!O*ahgQu~(w|C`y70{BY(q|$>%V7#mT)%0^~tKGsVa!Q7T)sB`F^+&^f}u7wqi>s z6%X5@{8k!7Cy3Q_67Gnx1f`5^(G=pXL>VwgSl}^lQK?w2`fF^*H6hSIG)`=|OT<-; z+_je2hrN4gq6N9!L%plDqf&vh+#p0c%40mc)b|_KYjB&ad$=QoFC^DC-p>9U2AnC~ zCzXEN8GtRdP#Ra4Jafi}^CYHQ?|ZNC$*QHqQne(|OWTSjyUz6F1W@GB>{s+y^Su|EUx z3xw~bfGl>p>ekKccxX|3`Ew|-xt1i`p?bvp_PHZt(e$8LD6cmMXRC|k;#uQ0&-wbx zKp=Ie&zI$^Cm+Thku}Gz;sVV?H>T%bl)Ml&tW^9{mZp9xKjHs_k{yhHOxgd%$ zwi`bq`@5=L+oFsj-FXN$)I;Nh%n-evDSzFGMin(E(gN$ZPhr7}p{7%<*@=&0cN|lNn zva^8DcMovs6ZrIpZB9utI9P-Yfs#bh2&s+UDS=bc^U?58P!D`Xx~}AK00Pr z?-l7#56PO#aoDMet6)&7`wf}N0eA?@( ztS;$|bxb&Po#I?d^|D&bHJtYyVLmmPbr6ac!~x%r8pwD7-U1|QB*-RM<_mOzD-{%v z>-CtOkKH~GV)>APxK3%8FPIbE&pBK$t~db9p8X%@i7bU{H+L%31 zCS$XSbe!|$UV#_{>h?4q2mxaGFKp$r<}+kwd$&KP3B6|+=76Y9mXN(>~;_CjvgEgTzuJhejIqSW(GUo{7cF@XMFtnf&&0pWCQ@f z`tR}k&jN$heiDTq~71_DB>QUyN>8u;T;tk zu~lNPa|55(Y)r%?3bD~!XyBVb;g9&Cna{Q%Pyu>(?o_KPW!fp#G8i+g#>wT@v}@Is zNn)$*m1;Dg9ib(aNIlB}l$g>$scA>-A;yO$iDy8q$@NaVpx8rcNYjhm;9~2^5pJ!`aL$Ckx4s80?IO z_aY^|^mHWTi?}6yEy29%;mgO20y4uQwAE7bqvfto)mydDxX~vLtr%Z#4^Uysgi!vx z(oPAff%1j!J!h24>j(J)=dy_pYBcmz zRxk(oHrzu7;*Gw5dr@PWwwlrC%Sr*dCa;EpHv>*Xr=VRt+JFbh;H|b)YBj`O)2^NF z^l(O!3W56Ofgt`hn0BjbF5MmBs4Q)E1VgIcHPOD6riEewp8lv>&6?ejR$k_UG}Pmg zpH}WHVu<&_J?l#bP)4O*gs+LUJu=yTH1~Wh@8Y(k>uKkAAH@8V5Wh}4A)suW;tw{y zL`SGnWu`-PE}>+J3tcQh3QF#59UU@et!@fQWGRM$VJ}}kY6v#etyL^so-!d9Va2mj zK-WzNtzZ2|;5NGRMQiD%kRdxFB(-W6-t^Z%$1Jk_(C|x?-bZ|TBTmirhyJAp{dgPT zeAOC|b^0TGf(GsH9`OksZDV2eL;cJ#4ojMeusu(=qAtMbvys?q`51eWUg*BR#JbQf zRJar%y8!E@$=f;lDlfpv{wAr#Mh}bgmMxMgLyBQSws;10istG;eW8S&MqVTnl`5mX zsI3y9o-_4#I>d+$FjPHpfS&xDEx7v29rWmkGNsr&EL?sBQ_f7~9iB$(JCwZsWqtay zaJ+hdj1nO+&JFWkfHnCsB-Qj6d*dk{^s1t%nvw85_9jQdfaMp2{E4^xibVBbfWC&9 z->EsnW#Wd(l4~0pO4F=949bKB-t;@g)NZ5^J{5|E-7d|pOhVFo!Kb|F$>fUDYzm(f zK#xO10Y9vV9_O{q_o-$1^NQ+6ESd!UPT|t32taJ}hubxmn)8&9!<|3quewmV5tARX za@&g4Hn2FE951OG7@=|kPsBH|gT%sbV@!J;1;;(45~^47fx!JLpje#9jF?;55x}wV z*L}ZBP&KgW9`|p&Br-HorKPo@GZo_0Q`IRJwxS1L{WAC|O@em`QyUJ} zrYc2Eq>G{3wxr@l7xq&>4+Um)ON0X!KGWC)H)uxKei7oHT%ou!x8h-MZp{pV^7zdA zVBP;7fbQt`I=yyXc1Gjz+~-oOXO6MR9N3Iz9}$%f-w1+Ivr+{D5Y$l^8Wg0AugibT z;h@@UZx4;z+M40Y7H7BskG@tMw{#!@18(SpsMdsIF^WX0D`(q#@K)c>4_xL#(_3_X zX3AwT|3l8ZI(Vho`V@vUcMo39+5`Z+5D)twJN<}dS>~n)vSZ4%i+H_pW*E+%3 z``TZ1rOC;Q4Jo}Hq4`5yy8t|ZpviNE9~Mz~;80!5^PPS4q2I^m;w=Ge@3qC<&A-6y zan-E%gk%B^V-w@EvJ976BnhcSc+@87jO5}9LxpTXNweF54#N{RhO_{IM%Yc0_rhZ+ zpo9mPD$wp?T9`mEx(dUfnwVZ(nx~97%_3&s&HNRAU;;}mX+oQOh7JBDuX>qk zVF67Kvh@o)4`=oUWUqVrF`+o1i%BfvJEV{tn&M#`ImjfSRrxIYc)P^_JeX<(lXSWc z&ajXI=Y5`B=`39yA!skgEUBELQ6+QgCq6(BYOn6!Nnj)At4&7ABoaMbeg^AlrwM@&L1s_3kSeud8_->9;jK34cb$t6b3+xY!S#96+tnmW`Bc7dL4K7;BwtG z@8c727=yT@a+VUnGzb7Rn<@zmgUa++^(F~d$mN3KdRog#-nh&L**>-P^m2`6Xew~bzI)!HyKzut=GOs@hFBs*oWN=^fw-%S7Xw;S`p96@3!!DxcJ5L(^ z#$wcfNP}sq%{?5}8!5^jwo9iy#W&gya(p5b-keK##2-9{x8==jm_g_Q3BjM`A)eqY z*+-iUq&j%1pGI->Ov&qSLyx-wj~Ja_GPe|NS4ILf&P~4;Wt2~C&mR`k7z848h?SBe zZK@bY4HA(uHBQG*m+zD-ixJc#28edznjS2|O*27fk(!`?*vSXkqZ7VWYGWzeq!leFdM~)hIW2iE*Ik`?sY&fnRR-N87 z0pCQYR_(S{vW{T`F=>?i_t~EVlCmsshW+xC-=c88H>N?LMbEDcn^HdJ#ae$+!i1;Y zUis{?7Lp>PV2^)>ot9BxC?=}oE}>k=FCZ&D7TZHaht`3U1}k83wNxCJF{)fiHM78l z$w5v^;LD3$DJKI#fVe@)pJcNYWj$V*Et0f@!s2Ik8;J1e#oj&>bDaS+qj=^MMTxI^ z)0Li%eub}ISSu$lA-i*)De0Kk<=V@lqe`h;*qw-#5;)#pShqjKbhZG{B8_$mbQ{ z;+#w|1of1nXO;;mb4Z4-G^5fJWy1sK(M|~YxGs!O{u@QjL;e*=O|D=s3#`=Va`(O+ zJ}71?FiSFcd#3tTK%UF@P$Scxqka8bq=6y_g`_&?(9 zGQxMAMcqsdXgLV;Zxdaj^)7xL)$*N!6$|Lv8k&zRe706@(<;Vyt2{tX8L2gw6rBFV zg%NYPJlwWmNWaM@WkWk%K!h0Z#^9?RdbjmQ8%>{&FJRqUhHJ<~O;-t-)bJ1iyEl@8 z)+cbyY^#DlKnQtJR8i?zrFZz>LSnZPi>`11RAeFgwR5lm896yPvl`1}hesK>Dtk2Q7cdlRrUgN(JV-P?$!d-Bh$?aqp z7(NU>KJa22Ovju+1IY2jfHFg;K;`KOsAVYf7cST;KvClR!J*WqzTg<#v2GDu%>9Ug zD>R7yB4QhMcDzW}Wi(;1iI@zSt7nr7gR_HIx#zSbB~ibK^`Kimg-qPOK-dPSDisl2 zq{(A$?T*yRkS`ZM7e2f>MV?1wbbK~R+J$qK&AQR*r8S}y-S7```rJ@qjvSfMdsb|r z(rHHMv}Oe$I(q5LYJsb$luFba3y*vKWiDb+hZsndxV`ci7Gj_>+g_SRa0{0~j;Hfr zq~VLd{DCO$W;ESzn9a=gLdcz=M}80SdRcOXI5nLyNbBCk0 zCXj|)xA9hlEKP>tJWu9? zJK+|U^}B5A09O{bG2>)(8=KE-&IjJAai~anLBs|tL)R6`3rg&$Rds}T!y@f*jujTy z%H-_tw&n7!gE!-WO8~et@$dUv00n0kUOS{YwO-tVx*i^pzwvKGyym`H{bNru8N5oH z58}tE9S(ia;l=wt1rT(cLQ*5Jq6@E~J13`)s?QlvU)VJ|Ph6EV%GzyL4?f@DC?PDm zT?NIC_u`XZ>oasOy!hmNJRZUAg$I~76mCFGB+a_=0<5XC`fxG*wI_?Z9?n~K3t33s zZ;>zN)l`B>Ej)bSHyc&B(Xh!cB!xWegN8Qv&NW0xq^jcD%>nwTSN^NgWl6PGb{z8u zpFFxJFUT5mF;Bla!_*{wsO_V?2Ijt*8yY;={0tPSrPr&~TJ%|#tqNRa$bISX131EYLSr{c92z`Z>^)SXk(o}dfY;<7q?8Nd zWjMTO!}>S~IHy&*b|{=(Q}s$E#7rePAAT%L`%I5DRZl^clMy{xSLKuE6UwSSokX?Y z05>Ex{SmO|`S6P2%?FxDnNlaH$}GvC$pWIonSSWv@V% z^U(}@-??>;Y+PQq5t&+1(TZ1TwrzTF)^X!9b$u%k?sPD8Wa3aJ{ImDF7o?)gy4#c4 zJBk)B@W^L22z^>6CWc&SqgH>_$d$s@nQc55)Jtr*XeU~Es=^!5hq&CAAi=fyuh6Y} zP2vhB*DKvWZ4WC_X0O*DUFiT40N~fZr{@3C`CT3K?d<+DHg~D?+59;BUGG$2V|}b~ zltZ|{FLA}Na=B&^HvT+L(Ej-%Xe%fbaZ1?V-aB&5)E#|5TLW)#tIIc28Em#8HUZb8 zZj9R3g84ac;RiKzkwXHSs6;#zmQ+QqGsAZ!xo_D6TnfKeTQ10(DCL2{ zj0nxoiHLZk)jozj#G;hm#87ui&`j9_&99LUdV-e&%{c6S?q|qLsbnsdk zY*FN0C+()m#48$ES=bA*frnI1+#~o1DSY72lZ4wSv$=t^V z@~QIxtYxxvs%r2GjDO*4`SOf)q~#vJwqyqF3iXx6n3mb*p)ORc!%<>PZ>^TgmC+Ok zE(<6e;5;bO##nPEGT4U@B2jdxhK7YHA&mPy?Bac2YhLiUBumDd_yaqb0Cf6wNuXLuI)Rc_r!i__*hev=3jMV0>-a3^5x- z=95=Dd#kYCNli%IYX~lA&AgHDS~Urqbq|h zR&m)rA?6%rQ^WRNK!v$Y_a&nB05DR-`%STzE0jx{=h^=5)#4aI8du0bf0R1qr>a0d9!LHy0X17KD42Fg|h7a zq`#j7+yA=_rEu=ukEJPr>D<-Jks$5ogIE&4l*}%{LdJt#Ua+YOG$04^Pa)5M6}BKo9ie&KaTSYCAUU3Y;a@)7e94*+ zou@`uD8OLqN2ca#^jc;n%95cJ4iO8XfQFV%6S%UZGzxJJV8P78mK4@#iT^rEno6uY zWcj=w^$>$tXkAe6>T<*BYE#Q&TD;stJR>P>5$W=kzxG<|P!DTIk|{}yLy6zW zlt9{3LdH}BCbE3I=-M@^y}*A-Go?5A4yw!y(YgrmPmU8pPxyn>Lx>*QbRA4YlTXtZ zew&}AU7}3KchedyVw~t-+O;4&Ek=(4(`zmR-gHo9R#mfsTI{>WE&qJrA1sSizkIo}i{4hXj>Pq-2S-~~8r%Riewv4~ zq#5*ztI}{!2cPTxt^eo&36KFX&8OAv3F>xrgWDc4QYi+Z0EBhu$P}-k^mZsa2U~KA zOW50vISg09I0UJ2JrTqNb&5kk>ofrc;b%##K&4932K5Fg)bm~HKj1$7^n9SapYEoY zM-pwe8qlFonU`;_>AI%orwZxaTjVsWfW@4owbdRgzeY$)yyN3c9h%PErHRQ1IZMdo zojE((wTZu)Q*X|DL`kQ$S4l8lU|9ZiMBwZOOjc&m@0>+U| z7B#)^?}i`+mU%@6+HOV=tf#Db3g>CJ0d|u2alLI{!3RVcX^Ks%>R+VBp`M4S^Dkv4 zQy*

      `%Am7 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ໞcf$(9E>UWtqg`Q1b?HJnx@uIBTK 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

    6. ETi{GQY#}hBZB>q*gAU6g_Sx5JAUh4$p**oE31TIdo5<)QQWE6I-8kqHC#Aa`EufTnM#{6@x3uuLG1;!PMY!3~ah zC1PhpC1nKRBt;xy+V6qA$1D8j<`U{j1RvP8WRJJiF0$mN#J;&7w^;Mg@KugAJ$P1P zpk6|N=IH?PqN*V?O)ACep?(&~1p&nc{sdGa$dX<0!7NW!MVf(XR5Ui*z2qj45hzP9&a$PKQ zt5xBwO3GcX<@RgZ6u6}{kILhQ5oGQOYs+gty# z+L_Kp(y9WLW>ODpu3?Wgd%&>HdEoKW><64eP>P^OBt=yO(kWkNN|g|`PEHx? z)6R&R*=$dhG$3lEx<;N-XqhNF`j0G}PFm=GN*!!-d`*ScrYnDW211yzOs;e9tU9=L znb_i*0q2oC%g*bb$-gn#SZ$IdWS3br@Pxg{4%xnrZ#?7)zCWj#S5LC2YVOM~#87OQ zCJY#=&mK*BIAQI?KX2i0N|a!31Mbb=Z5kbgt-+)i-XdZ}w^~%8)OQ^Um4(eUa@VWqFpf_olBVM?pxeD* zJy5KL`2zU*^X zIFcvlC9_q=p&p+mgeMuLttB$$v8%UO1uOK({IaLnn;nhnMu}vbb*UCu)!jlJqIu1- zRwaQ*;BOtHbsC8V3tgry$gk_Cr(@mLaw-&=T(mX8a9@^hZQF;sqsSq`V^FJR-JW&3 zG-Zw*tJw4kvtK*Z0KTvz-bD-C!VFZw*9(~$6@Fz>Vffkp0$oHbAn8|y3gDQH?Ju$j zGXRhH`2cxAO6g-TIUXVG{$wuo5n8i`wRJ342~3&L&0Ubw=#Fx-9EP=toNY@U!2b0K z6rgx+L~0aYyV6S5e790WNqza=cP_dI20Ccse^{L6g1t2lM-DqA;JS=8RtNm%}PyaH39J_DS(f?jX$bhr82 zcE6I5PrA)=4UYJ700Gd*?pe2nN~DOAb8tbp!wbaHU)YY=e?IMCb_RDQDrl0I~oz#sV4LTj>Y)~hD}w4Vbu-pN@K>WTbmEb0WXPME}7{n<$ z?c>H;Q+=&Te!4N6x9h4c=EB)PL+GO8COW+Fc1Lu^chGg!pZf8hD20brE5_=t1qT`K z+wH)+t1O3y1|Rxa$i6*3WkNEm1<*)0NN5>R2j`t@=3<C^QL$cNSAU$$Z5I!1O%HbeksO~sUWpwq@^IqA(xeN-1Eq1+eTTE8%J&8`1D*Cv~#R^=%X>MVQ zHi?^GrUQT4leDtH`T9see0dIAMvLn-e@HJVO@V*`O3`vddkOj&z;|Z&r;=b9Ec+=W z@7enuAzhSZ`4{6+VmV@|(u;zCg`bZu@^R7WRXH}xdjBDMI6FGT`r3Pd z4oTKrx{nNx(W!AlsUAvhZ_``?vXs$SyG)@SzrqL11_+~ zLB4^QhfwOACa${b*j3@6xbQGen!9j(>et~QqGFgH;+}ZdH;mGIbaUJ=!yggmSxgiZ zabTtfd*Jng#xU5tnLiDSPYvcYtEq3R;+oNxH_~l+v!eq8{7d+roag=*HmC zd|wvK)873DANI}cNo=nxM8#66(54vKpu5OJaQ27&%Qv1sW+Z6 zMDU(@1`_0raqNDMZXd3ff-iKAfkn1HYys)`0~|z+;D!dAl7|tSM$fSnr2{D|T7FV> z0(WkwDZ<{}-0JePPDG>tmZ2v0ur=IXV)ZNR`bX30txK1AXtO0TJKW%(u#0GJR6cWt zlLYOv80Cg);aJb#G7Vp2=A>eomf4GS=Qe`cbM=u`*vy?GkpnILQm)N+yP8v1~0E+QIvbaP&-d6iwcCCPqUy`Kvb#Z(&%`vdPkjZ4(LIxs$oVGmtv*s z>s}H};Cs#FljPAb^0iUE`gZMYl!a}SQ6)tAvW{~gPU7FNp$vtF761db6oT>R=jJTY zB}(`4<1DqN=%KBe55JefJPFF;?>tj*tj|_oM@-OOqt{W)hvU>*E7#w%LJ13{$AspFj~4Y{>5rkYGBzOx^rCn%_hAVSKzBVc(6Q;s&lmLD&!;E^bX)~4SVQ5d;%B0UV9;m@-^e` zIGm)o%Phaj7+a+(>=({)vP@+1)aI7beHi%mEycb11RXh}qb}(A*V;>@=a4|>Pd9P* zv-C!PB-Fru82DOozL@? zJ?wh+ak&Z+pu<8eTDYo2i`<(3tV^uA!H)w}Sh>1j21RaI8FDmBip~Cq!H2i+clQN= z>pr-c_y1SP{evVBhG78ztaFjJYe@^N7PlY@#3_`9XsP+83W9^6P#Tnm9Hm?e0tX?; z!Dtb4FbLX;kcPHsh$31V3S9aFLhs!nukUku(m5Qr{J2{@zW1KzEAE_J#Yc~qi$A`n zLhboJIvrEy?Zf)rThiEnnGf!6`y-Gg zZ@7Raw!zuds2}caI^A#-v5Cs!BaI=wMZ1@ZAXY~i%mn&@qDYD`b_*G<4)udY(-2`S z7cv~6;PqOMsv#;^-(%&&r8s3i6tLCB!U)ZG#C>qb3lXd)FjAnVfM12%&;?N6*;?MBGHZ<<}aB$9P7>{MH&-5O!~2xrsjdXy>{*o4NSYSaS?VI z9oaW@aQ@HE=M*^dYXCwx7G!9A1|TscL;z-rbgns(!Pg2iTXA6cC9|~Xr++l1 Obo!mrh;t=jUHt(xC-*Y| literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl b/env/share/python-wheels/appdirs-1.4.3-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..13f637fcc4522dd841566cd30bfac563f7a1641e GIT binary patch literal 12139 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 Zf<}2MaEO22efzUx{z=z)=>EC;{{U;PrJn!* literal 0 HcmV?d00001 diff --git a/env/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl b/env/share/python-wheels/certifi-2018.1.18-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..f2f16553a1991d8bd17ce1cc91042638c2ee9170 GIT binary patch literal 150807 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